🌏 인트로서비스를 실제로 개발하다 보면 단위 테스트(Unit Test)보다 훨씬 현실적인 End-to-End(E2E) 테스트를 작성할 일이 많습니다.E2E 테스트는 실제 API를 호출하고, 데이터베이스와의 연동, 인증 절차, 외부 요청 등까지 통합적으로 검증하는 테스트입니다.✅ E2E 테스트 예시(인수테스트입니다)@Testvoid 고객이_자신의_리워드를_조회한다() { String ownerAccessToken = 카페_사장_회원_가입_요청하고_액세스_토큰_반환(OWNER_CREATE_REQUEST); Long savedCafeId = 카페_생성_요청하고_아이디_반환(ownerAccessToken, CAFE_CREATE_REQUEST); String customerToken = 가입_고..
PROJECT/Stamp Crush
🌏 운영 중단 없는 대규모 스키마 전환과 데이터 마이그레이션 전략서비스 규모가 커질수록 데이터베이스 스키마 변경과 데이터 마이그레이션은 단순한 기능 추가가 아니라 서비스 안정성과 직결되는 핵심 운영 과제가 됩니다. 특히 다중 서버 환경에서는 코드와 스키마의 버전 불일치로 인해 예상치 못한 장애가 발생할 수 있어, 사전에 철저한 설계와 단계별 검토가 필요합니다.여기서는 실제 운영 환경에서 진행했던 대규모 스키마 전환과 데이터 마이그레이션 과정을 바탕으로, 발생 가능한 문제와 이를 최소화하기 위한 전략을 정리했습니다.🌏 스키마 전환 시 발생할 수 있는 주요 문제✅ 코드-스키마 불일치DB에만 있는 컬럼: 코드가 해당 컬럼을 전혀 참조하지 않으면 문제 없음.코드에서만 존재하는 컬럼: DB에 없을 경우 애플리..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 스탬프크러쉬 2기를 시작했지만, 서비스를 종료하게 되었습니다. 큰 애정과 주인의식을 갖고 시작한 제 개발자로 첫 프로젝트였기 때문에 많이 허탈하고, 서운한 마음이 들지만! 오히려 마무리하게 되니깐, 스탬프크러쉬의 비즈니스를 조금 더 냉정한 시선에서 바라볼 수 있게 된 것 같습니다. 이 프로젝트를 발판으로 제가 한 단계 더 성장했기를 바라면서 글을 작성해 보려고 합니다. 💋 갑자기 왜 서비스 종료되었나?!! ✔️ 비즈니스 자체의 장기적 비전을 제시할 수 없어서 가장 큰 이유는 비즈니스 자체가 장기적 비전을 제시할 ..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 인트로 안녕하세요. 우아한테크코스 5기 깃짱입니다. 이번 포스팅에서는 이전에 JWT 방식에서 로그아웃, Refresh Token 만들기(1)에 이어서, Refresh Token과 로그아웃의 구현에 대해서 포스팅하려고 합니다. 💋 현재 상황 현재 상황은 아래와 같습니다. ✔️ 서버의 Token 발급 응답 인증을 완료하면, 서버에서 아래와 같은 응답을 보내줍니다. Header HTTP/1.1 200 Content-Type: application/json Transfer-Encoding: chunked Date: ..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site [우테코] 무중단 배포 자동화(1): Github Actions workflow 생성, Secrets 설정 앞선 포스팅에 계속 이어서, 무중단 배포 자동화 파이프라인을 만들어 보려고 한다. 💋 무중단 배포 계획 ✔️ 인프라 구조 무중단 배포를 위해서, 서버를 2대 둘 수도 있겠지만, 우리 팀은 돈을 못 벌고 있기 때문에 아래와 같은 구조를 사용하기로 했다. Nginx가 리버스 프록시 서버 역할로, 서버로 들어오는 모든 요청을 받는다. 매 배포마다 8080, 8081 포트에 톰캣 서버를 번갈아가면서 하나씩 띄우고,..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 스탬프크러쉬의 무중단 배포 자동화 방식 ✔️ 기존: Jenkins 사용한 CI/CD 스탬프크러쉬는 사실 이전의 포스팅에서 확인할 수 있듯, Jenkins를 사용해 무중단 배포 파이프라인을 구축했습니다. 다만, 이번에 Github Actions를 사용한 방식으로 변경하기로 다짐한 데는 아래와 같은 이유가 있었습니다. ✔️ Github Actions 도입 배경 현재 젠킨스가 실행되고 있는 서버는 우아한테크코스의 AWS 계정을 이용하고 있는 서버입니다. 그런데, 한 달 정도 이후에 우테코를 수료하게 되는데 그때부터..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 목표 수치를 설정하고 정한 이유를 발표한다. hikariCP configuration 보고 필요한 값 설정한다. 💋 예상 무조건 HikariCP 커넥션 풀의 크기를 크게 잡았다고 해서 성능이 개선되는 것은 아니다. PostgreSQL이 추천하는 Connection Pool Size 공식에 따르면, Connection Pool Size = (core_count * 2) + effective_spindle_count 로 설정했을 때 최적이다. 풀 사이즈를 무한정 늘린다고 하더라도 CPU 코어 수가 한정되어 있어 ..
스탬프크러쉬에서 기획/영업/마케팅을 담당할 신규 팀원을 모집합니다! 마감되었습니다. 안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬에서 기획/영업/마케팅 팀원을 모집합니다. 개발자들과 협업할 수 있는 좋은 기회이니, 많은 관심 부탁드려요 🌟 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 팀 소개 안녕하세요. 저희는 우아한형제들의 웹 개발 프로그램인 우아한테크코스에서 서비스 개발하고, 운영하고 있는 [스탬프크러쉬]팀이라고 합니다. 스탬프크러쉬는 개인 카페의 ’종이쿠폰'의 적립과 관리를 온라인으로 관리하는 서비스입니다. 2023년 7월부터 시작해, 현재는 웹 개발자 4명(백엔드 개발자 2명, ..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 이번 포스팅 제목은 약간 모리와 함께한 화요일 느낌으로다가 해봤는데... 눈치 챈 사람 있나..? 풉킼 💋 드디어 실제 사용자(카페 사장)가 스탬프크러쉬를 사용하기 시작했다! ✔️ [23.10.06] 성수동 개인카페 ‘파일론 성수’에서 스탬프크러쉬 첫 사용 바로 전날, 라잇과 나는 파일론 성수에 가서, 마지막으로 동작 확인 등등을 하고 돌아왔다. 그리고 하루 뒤인 10월 6일, 드디어 파일론 카페에서 우리 서비스를 쓰기 시작했다!!! 진짜로 이렇게 슬랙으로 적립 알림이 막 오기 시작하니 와쿠와쿠 일주일 동안 계속..
안녕! 우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 스탬프크러쉬 서비스의 소스 코드 바로가기 사장모드: stampcrush.site/admin 고객모드: stampcrush.site 💋 무중단 배포 도입 전 ✔️ 스탬프크러쉬의 인프라 상황 한 대의 클라우드 서버에서 운영 서버를 가지고 있으며, 외부의 한 대의 또다른 클라우드 서버를 배포 관련 서버로 사용중이다. 해당 서버에서는 젠킨스를 통해서 배포를 자동화하고 있다. ✔️ 배포 방식 현재 스탬프크러쉬는 jenkins 서버에서 아래의 4가지 단계로 배포를 자동화하고 있다. 우리가 트래킹하는 브랜치(main, develop)에 push가 되면, 젠킨스는 깃허브로부터 최신 코드를 가져온다. 최신 코드를 빌드해 .jar 파일을 만든다. .jar 파..