[Feat] 스모크 테스트가 토큰 갱신과 오답노트 등록을 보고, prod 배포가 nginx 전환 전에 새 컨테이너를 확인한다 - #337
Merged
Merged
Conversation
- read 부터 서버에 저장된 적 없는 refresh token 으로 토큰 갱신 경로가 1002 로 답하는지 본다. 서버는 저장 전에 끝나서 쓰기가 없다 - full 에서 이미지 업로드 URL 발급과 오답노트 등록, 조회, 삭제, 404 를 확인한다. X-App-Version 헤더로 XP 적립을 막는다 - 흔적이 남는 GET(presigned URL)은 full 에서만 재시도 없이 보내고, refresh 는 확인용 토큰만 허용한다 - nginx 전환 직전에 새 컨테이너를 확인하는 pre_switch_check.sh 를 추가한다 (actuator health 후 새 포트로 read) - 자체 테스트 42개에서 64개, README 와 smoke-test.yml 의 서명 키 설명을 실제 설정에 맞게 고친다
- healthy 확인과 nginx 전환 사이에서 pre_switch_check.sh 를 부르고, 실패하면 새 컨테이너를 이름으로 지우고 배포를 끝낸다 - 새 컨테이너가 남으면 다음 배포가 현재 색을 잘못 읽을 수 있어서, 지우지 못하면 에러로 남긴다 - 배포를 끝내지 못하면 prod-latest 를 이전 색이 돌리던 이미지로 되돌린다 - 돌고 있던 앱이 없던 복구 배포는 확인이 실패해도 경고만 하고 전환한다 - refresh 서명 키는 서버와 같은지 아직 확인되지 않아 전환 전 확인에는 넘기지 않는다
8 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✔️ 연관 이슈
📝 작업 내용
read부터: 서버에 저장된 적 없는 refresh token 으로POST /api/auth/refresh가401 / 1002로 답하는지 봅니다. 저장 전에 끝나서 서버 쓰기가 없습니다.full: 이미지 업로드 URL 발급, 오답노트 등록(이미지 없음), 조회, 삭제, 404 를 봅니다.X-App-Version: 99.0.0으로 XP 적립을 막습니다.pre_switch_check.sh가 컨테이너 안 actuator health 와 새 포트로 스모크read를 돌리고, 실패하면 새 컨테이너만 내리고 배포를 끝냅니다. nginx 를 건드리지 않았으니 이전 버전이 계속 사용자를 받습니다.prod-latest는 이전 이미지로 되돌립니다. 돌고 있던 앱이 없던 복구 배포는 경고만 하고 전환합니다.서버 서명 키 설명을 고쳤습니다
APPLICATION_PROD안의 리터럴(jwt.accessToken.secret,jwt.refreshToken.secret)입니다. 컨테이너에 넘기는JWT_*_TOKEN_SECRET환경변수는 Spring 설정 키와 이어지지 않습니다.full통과로 GitHub 시크릿과 같은 것이 확인됐지만, refresh 키는 확인된 적이 없어서 전환 전 확인에는 refresh 키를 넘기지 않았습니다. 배포 뒤 스모크에서만 봅니다.👤 사용자 영향
🔌 API 호환성
🗄️ DB migration
🔐 인증/권한
서버 코드는 바뀌지 않습니다.
✅ 검증 결과
pre_switch_check.sh는 shellcheck 를 통과했습니다.read18요청,full35요청이 통과했고 refresh 는 실제로1002였습니다.full뒤 스모크 계정에 남은 것은mission_log1행(point 0), CANCELED 리마인더 5행, soft delete 된 문제 1행이고user테이블은 그대로였습니다.🚀 배포 리스크
deploy-prod.yml(수동 배포)이 우회로입니다.↩️ 롤백/대응 방법
JWT_REFRESH_TOKEN_SECRET과APPLICATION_PROD안의jwt.refreshToken.secret이 같은 값인지 확인해 주세요. 다르면 배포 뒤 스모크가1001로 실패하고 매시 알림이 울립니다(배포는 막히지 않습니다).