Conversation
There was a problem hiding this comment.
Code Review
This pull request implements containerization with Jib, adds deployment scripts for development and rolling updates, and introduces anti-cheating logic for the Fever Time mechanic. It also refactors session management to include event timestamps and adds a global exception handler for multipart requests. Key feedback includes correcting a logic error in the percentile calculation query, optimizing property types for null-safety in the domain model, removing redundant transaction propagation, and improving the reliability of deployment health checks.
I am having trouble creating individual review comments. Click here to see my feedback.
src/main/java/com/snackgame/server/game/snackgame/core/domain/SnackgameRepository.kt (15-28)
현재 쿼리는 WHERE 절에서 session_id를 필터링한 후 percent_rank()를 계산하므로, 항상 단일 행에 대한 순위인 0.0을 반환하게 됩니다. 올바른 백분위를 계산하려면 모든 대상 세션에 대해 먼저 순위를 매긴 후 특정 session_id를 선택해야 합니다.
value = """
SELECT percentile FROM (
SELECT session_id, percent_rank() over (order by score desc) as percentile
FROM snackgame
WHERE expires_at <= now() + INTERVAL 1 SECOND
) t WHERE session_id = :sessionId
UNION ALL
SELECT 0.0 as percentile
FROM snackgame
WHERE session_id = :sessionId
AND expires_at > now() + INTERVAL 1 SECOND
LIMIT 1
""",
src/main/java/com/snackgame/server/game/snackgame/core/domain/item/FeverTime.kt (13)
feverStreakCount는 항상 0으로 초기화되며 도메인 로직에서 널이 될 가능성이 없으므로, 비널(non-nullable) 타입인 Int로 선언하여 불필요한 엘비스 연산자(?: 0) 사용을 줄이는 것이 좋습니다.
var feverStreakCount: Int = 0
src/main/java/com/snackgame/server/game/snackgame/core/domain/item/FeverTime.kt (34-38)
feverStreakCount를 비널 타입으로 변경함에 따라 관련 로직의 널 안전성 연산자를 제거할 수 있습니다.
fun canApplyFeverMultiplier(): Boolean = feverStreakCount < MAX_FEVER_STREAKS
fun incrementFeverStreak() {
feverStreakCount += 1
}
src/main/java/com/snackgame/server/game/snackgame/core/service/SnackgameService.kt (115)
getEndResponse는 단순히 결과를 조회하는 메서드이며, 호출부인 컨트롤러에서 이미 end() 트랜잭션이 완료된 후 호출하므로 Propagation.REQUIRES_NEW는 불필요합니다. 이는 불필요한 데이터베이스 커넥션 점유를 유발할 수 있습니다.
@Transactional(readOnly = true)
scripts/deploy-rolling.sh (15)
헬스 체크 URL에 특정 리소스 ID(rankings/1)가 포함되어 있습니다. 해당 데이터의 존재 여부에 따라 배포 성공 여부가 결정되는 것은 위험할 수 있으므로, 애플리케이션의 상태를 직접 나타내는 /actuator/health와 같은 엔드포인트를 사용하는 것이 안전합니다.
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정 * fix: drain 경합으로 인한 409 해결
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정 * fix: drain 경합으로 인한 409 해결 * 모니터링 추가 (#241) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정 * fix: drain 경합으로 인한 409 해결 * 모니터링 추가 (#241) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * Grafana Env 추가 및 배포 스크립트 수정 (#243) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * feat: grafana 환경변수 추가 * refactor: 앱 컨테이너만 교체하도록 수정
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정 * fix: drain 경합으로 인한 409 해결 * 모니터링 추가 (#241) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * Grafana Env 추가 및 배포 스크립트 수정 (#243) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * feat: grafana 환경변수 추가 * refactor: 앱 컨테이너만 교체하도록 수정 * chore: mysql-exporter 추가
* 피버타임 검증 시 점수가 두배가 되지 않는 현상 해결 (#226) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * 세션 일시정지시 피버타임을 멈추지 못하던 문제 해결 (#227) * fix: 피버타임 검증 시 점수가 두배가 되지 않는 문제 해결 * refactor: 바뀐 dto에 맞게 BIZ 및 test 수정 * fix: 피버타임중 일시정지 시 피버타임도 멈추게 한다 * refactor: 인터페이스로 묶는다 * 피버타임 관련 문제 해결 (#228) * fix: 점수 증가 로직 오류 해결 * fix: 스트릭 발생 시각을 받는다 * refactor: 네이밍 수정 * fix(test): 스트릭 발생 시각 추가 * fix: 피버타임 검증 시 일반 스트릭이 검증안되던 문제해결 (#229) * fix: 피버타임 네트워크 지연 문제 해결 (#231) * 피버타임 일시정지 동기화 및 지연시간 문제 해결 (#232) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * OCI용 CD 파이프라인 마이그레이션 (#234) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * OCI 경로 수정 (#236) * fix: 치팅 및 네트워크 지연 해결 * comment: 디버깅을 위한 로그 추가 * fix: session과 fevertime 일시정지 동기화 * fix: 세션 예외 오류 해결 * feat: multipart 예외 핸들링 * refactor: CD 파이프라인 OCI로 마이그레이션 * fix: end response 분리 * fix: oci 경로 수정 * fix: oci 옵션 수정 * fix: shebang 추가 * fix: oci 옵션 수정 * fix: drain 경합으로 인한 409 해결 * 모니터링 추가 (#241) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * Grafana Env 추가 및 배포 스크립트 수정 (#243) * feat: drain 연결 종료 대기 추가 * feat: actuator 추가 * feat: grafana 환경변수 추가 * refactor: 앱 컨테이너만 교체하도록 수정 * chore: mysql-exporter 추가 * chore: p95,p99 메트릭 수집
No description provided.