Skip to content

[병합] 챌린지 오류 수정 후 메인서버로 배포 - #239

Closed
cho-ja-young wants to merge 31 commits into
devfrom
main
Closed

cho-ja-young wants to merge 31 commits into
devfrom
main

Conversation

@cho-ja-young

@cho-ja-young cho-ja-young commented Aug 14, 2025 •

Copy link
Copy Markdown
Collaborator

📌 Pull Request

👀 작업 요약

  • 공통 챌린지 참여 시 SQLSyntaxErrorException near 'rank' 발생 이슈 긴급 패치
  • MySQL 예약어 충돌(rank) 이스케이프 처리 및 스키마 정합성( challenge_rank.actual_value ) 맞춤
  • 배포 전 DB 마이그레이션 포함 / 배포 후 기능 스모크 테스트 및 로그 검증

📖 작업 내용

1) SQL 예약어 충돌 해결

  • 모든 랭킹 관련 쿼리에서 컬럼명 rank → `rank`(백틱) 처리

    • src/main/resources/org/scoula/challenge/rank/mapper/ChallengeRankMapper.xml
    • src/main/resources/org/scoula/challenge/rank/mapper/ChallengeCoinRankMapper.xml
  • ORDER BY, SELECT, INSERT, ON DUPLICATE KEY UPDATE 구문 전부 반영

2) 스키마 정합성(코드 ↔ DB) 맞춤

  • 코드가 참조하는 challenge_rank.actual_value 컬럼 추가 및 백필
ALTER TABLE challenge_rank
  ADD COLUMN actual_value INT NOT NULL DEFAULT 0 AFTER `rank`;

UPDATE challenge_rank cr
JOIN user_challenge uc ON uc.id = cr.user_challenge_id
SET cr.actual_value = uc.actual_value;
  • (선택) 더 이상 사용하지 않을 경우 progress_rate 제거 – 이번 핫픽스 범위 밖(추후 정리)
-- 선택
ALTER TABLE challenge_rank DROP COLUMN progress_rate;

3) 보조 점검

  • 업서트 전제 키 확인: challenge_rank.user_challenge_id에 UNIQUE 인덱스 존재( uk_user_challenge )
  • VALUES(col) 문법 유지(8.0.20+에서 비권장 경고 가능). 추후 AS new ... UPDATE col = new.col로 이행 예정

4) 배포(재배포) 순서 / 운영 절차

  • Zero-downtime 권장 순서

    1. DB 마이그레이션 적용(위 SQL 실행)
    2. 애플리케이션 배포(main 병합 후 이미지/아티팩트 빌드 → 운영 반영)
    3. 스모크 테스트 및 로그 확인
  • 롤백 전략

    • 코드 롤백 시 actual_value 컬럼은 남겨도 무방(호환성 영향 없음)
    • 문제가 있으면 애플리케이션만 직전 버전으로 롤백 → SQL은 유지

5) 스모크 테스트 시나리오

  • 공통 챌린지 참여: POST /api/challenge/{id}/join → 200 응답 확인
  • 랭크 업서트 확인: challenge_rank의 해당 user_challenge_id 행에 rank, actual_value 갱신되는지 확인
  • 랭킹 조회: GET /api/challenge/{id}/rank(있다면) 또는 현재 매퍼 기반 조회 API로 정렬(rank ASC) 및 값 노출 확인
  • 코인 랭킹(해당 시): Top5/내 랭킹 조회 시 오류 없이 반환되는지 확인
  • 서버 로그: SQLSyntaxErrorException near 'rank' 미발생 확인

✅ 체크리스트

  • 커밋 컨벤션 준수
  • 로컬 환경에서 동작 확인 완료
  • 리뷰어 n명 이상 승인 완료
  • 문서화가 필요한 경우 추가했습니다.
  • 관련 이슈가 있다면 연결했습니다. (ex: #12)

배포 전 체크

  • 운영 DB 백업/스냅샷 확보

  • 아래 마이그레이션 SQL 적용(성공 여부 기록)

    ALTER TABLE challenge_rank
      ADD COLUMN actual_value INT NOT NULL DEFAULT 0 AFTER `rank`;
    UPDATE challenge_rank cr
    JOIN user_challenge uc ON uc.id = cr.user_challenge_id
    SET cr.actual_value = uc.actual_value;
  • (선택) progress_rate 컬럼 제거는 추후 태스크로 분리

배포 후 체크

  • 공통 챌린지 참여 API 정상(200)
  • challenge_rank 업서트 정상(중복 호출 시 갱신 확인)
  • 랭킹 조회 정렬/데이터 정상
  • 애플리케이션 로그 에러 없음(near 'rank' 미발생)

✋ 질문 사항

  • VALUES(col) → AS new ... UPDATE col=new.col로 변경을 이번 PR에 포함할까요? (경고 제거 목적)
  • progress_rate 컬럼은 즉시 제거할지, 추후 스키마 정리 이슈로 분리할지 결정 필요

🔗 관련 이슈

  • closes

    • 핫픽스 이슈: rank 예약어 충돌 및 스키마 불일치로 공통 챌린지 참여 실패 오류
    • (참고 스택트레이스 포함 시 링크 첨부)

feat: github actions CI/CD deploy 자동화 구축
fix: deploy.yml 이름 형식 수정
fix: deploy file 코드 수정
fix: deploy 파일 수정
fix: deploy ubuntu version fix
[자영] dev 브랜치 main 에 머지 : 배포 테스트 진행
[자영] Dockerfile 수정 후 배포 테스트
[자영] deploy.yml 코드 수정 후 배포 테스트
스프링 시큐리티 수정 사항 및 open ai 누수 해결 코드 병합
fix: redis 접속 관련 정보 수정
deploy: 토큰 관련 에러 로그 사항 세부적으로 남기도록 수정 후 재배포
[병합] 월별 누적 포인트 조회 API & 토큰 쿠키로 전송
main deploy: dev -> main merge
fix: dockerfile venv 사용방식으로 수정
dev 수정 사항을 main 으로 배포
[병합] 메인서버에 배포
docs: 리드미 수정 후 재배포
[재배포] dev 수정사항 main 에 반영
[병합] dev 수정사항 main 에 배포
fix: 공통 챌린지 쿼리 관련 파일 전부 삭제
[병합] 투자성향기능 메인 서버에 배포
[병합] 챌린지 응답 수정, 재테크 수정 메인에 배포
[병합] dev 수정사항을 main 에 배포
[병합] dev 브랜치 작업 사항 main 브랜치에 병합 - 재배포
@cho-ja-young cho-ja-young added the bug Something isn't working label Aug 14, 2025
fix: 챌린지 rank 예약어 오류, 스키마 오류
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant