Skip to content

🐛 공개 전 문제 노출 차단, Clock KST 고정, 본문 파싱 오류 400 통일 - #54

Merged
s26059-maker merged 1 commit into
developfrom
feature/problem-visibility-kst
Oct 28, 2026
Merged

s26059-maker merged 1 commit into
developfrom
feature/problem-visibility-kst

Conversation

@s26059-maker

Copy link
Copy Markdown
Contributor

변경 사항

1. 공개 전 문제 노출 차단

  • ProblemRepository.findOpenById(id, now) 추가 — 목록 쿼리(searchOpen...)와 같은 기준(p.round.openAt <= :now)
  • ProblemService.getProblemDetail이 findById 대신 findOpenById(problemId, LocalDateTime.now(clock)) 사용
  • 공개 전 문제는 존재하지 않는 문제와 같은 메시지의 ProblemNotFoundException(404 PROBLEM_NOT_FOUND)으로 응답 → 존재 여부 비노출
  • SubmissionService.validate도 같은 findOpenById로 변경. 기존엔 findById라 공개 전(23시에 미리 생성된 다음 날) 문제에도 제출이 가능했음 → 이제 같은 404

2. Clock KST 고정

  • ClockConfig: Clock.systemDefaultZone() → Clock.system(ZoneId.of("Asia/Seoul"))
  • 컨테이너 JVM 기본 시간대가 UTC라 회차 열림/마감 비교가 9시간 밀리던 문제를 코드에서 고정 (서버 compose의 -Duser.timezone 임시 처리는 이후 제거 가능)

3. HttpMessageNotReadableException 핸들러

  • GlobalExceptionHandler에 추가: 400 + ErrorResponse("INVALID_REQUEST", "요청 본문 형식이 올바르지 않습니다.")
  • 머지되면 노션 메인 페이지의 ⚠️ 줄을 지워야 함

테스트

  • ProblemServiceTest: 공개 전 문제 상세 조회 시 404
  • SubmissionServiceTest: 공개 전 문제 제출 시 404, 채점 엔진 미호출
  • ProblemRepositoryTest: findOpenById가 공개 전 회차 문제를 반환하지 않음 (실제 쿼리 검증)
  • SubmissionControllerTest: 깨진 JSON → 400 INVALID_REQUEST
  • ./gradlew test 통과

노션 명세

노션 명세는 이미 반영됨(문제 상세 404에 공개 전 문제 포함).

이번에 건드리지 않은 now() 직접 호출 (clock 미사용)

JVM 기본 시간대를 따르므로 UTC 환경에서는 KST와 어긋남. 후속 PR 대상.

  • domain/notification/entity/Notification.java:43 — createdAt
  • domain/feedback/entity/Feedback.java:64 — createdAt
  • domain/admin/entity/AiGenerationLog.java:69 — createdAt
  • domain/problem/entity/Problem.java:62 — createdAt (최신순 정렬 기준)
  • domain/submission/entity/Submission.java:90 — submittedAt
  • domain/user/entity/User.java:65 — @CreatedDate (JPA Auditing, 시스템 시간대 기준)

🤖 Generated with Claude Code

- 문제 상세 조회와 제출 경로를 openAt <= now 기준 findOpenById로 변경
  (공개 전 문제는 존재하지 않는 문제와 같은 404 PROBLEM_NOT_FOUND)
- ClockConfig를 Asia/Seoul로 고정해 UTC 컨테이너에서 회차 비교가 9시간 밀리는 문제 방지
- HttpMessageNotReadableException을 400 INVALID_REQUEST로 통일

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@s26059-maker
s26059-maker merged commit 7cb2005 into develop Oct 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant