Skip to content

[Bug] 없는 리소스·잘못된 요청의 500 응답을 404/400으로 정리 (#29) - #35

Merged
seoyeoki merged 1 commit into
mainfrom
bug/29-error-responses
Oct 9, 2026
Merged

seoyeoki merged 1 commit into
mainfrom
bug/29-error-responses

Conversation

@seoyeoki

@seoyeoki seoyeoki commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

개요

존재하지 않는 리소스 조회와 잘못된 요청 값이 404/400이 아닌 500(COMMON500)으로 응답되고, 500 응답의 result에 내부 예외 메시지가 노출되던 문제를 수정합니다.

Closes #29

변경 사항

  • 에러 코드 추가 (GeneralErrorCode): HUMMING4000, MELODY4000, GENERATION4000, TASK4000(404), UPLOAD4000(400), COMMON405(405)
  • MEMBER_NOT_FOUND 400 → 404 (코드 문자열 MEMBER4000 유지)
  • 서비스의 IllegalArgumentException을 GeneralException으로 교체 (허밍, 멜로디 악보, 생성곡, 태스크 조회)
  • 모든 @RequestBody에 @Valid 추가, 필수 필드에 제약 부여 (device_id, humming_id, prompt, notes, file_key, audio_name, content_type, generated_audio_url)
  • AiTaskCompletionRequest의 compact constructor 검증을 @NotBlank로 교체
  • 핸들러 추가: 검증 실패·읽기 불가 JSON·타입 불일치·필수 파라미터 누락 → 400, 허용되지 않는 메서드 → 405
  • Exception 핸들러: result를 null로 반환, 메시지·스택은 로그에만 기록
  • 에러 응답의 Content-Type을 JSON으로 명시: Accept: text/event-stream인 SSE 엔드포인트에서 에러 본문을 쓰지 못하던 문제 해결
  • Swagger 에러 응답 예시 갱신 (잘못 적혀 있던 HUMMING404, AUTH401 포함)

프론트 영향

상황 이전 이후
필수 필드 누락, 깨진 JSON, 경로변수 타입 오류 500 400 COMMON400 (검증 실패 시 result에 {필드명: 메시지})
없는 허밍·악보·생성곡·태스크 500 404 (HUMMING4000, MELODY4000, GENERATION4000, TASK4000)
silent-refresh에서 사용자 없음 400 404 (MEMBER4000)
허용되지 않는 메서드 500 405 COMMON405
500 응답의 result 내부 예외 메시지 null (표시용 문구는 message 사용)

SSE(EventSource)는 404 응답 시 onerror만 호출되고 본문은 읽을 수 없습니다.

범위 외

  • 소유자 검증(타인의 곡·태스크 접근)은 이 PR에서 다루지 않습니다.
  • AI 서버 호출 실패 등 내부 오류는 500 유지 (메시지만 비노출)

테스트

  • ./gradlew test 통과 (MockMvc + H2, 신규 16개 포함 17개)
  • 로컬 bootRun에서 이슈 재현 절차 확인 (device_id 누락 400, 없는 humming_id 404, 내부 메시지 미노출)
  • Accept: text/event-stream으로 없는 task_id 구독 시 404 JSON 응답 확인
  • AI 서버·S3를 거치는 곡 생성·수정 성공 경로는 로컬에서 확인하지 못했습니다 (정상 요청이 새 검증에 걸리지 않는지는 guest-login 정상 케이스로만 확인)

🤖 Generated with Claude Code

- GeneralErrorCode에 HUMMING/MELODY/GENERATION/TASK 404, UPLOAD 400, COMMON405 추가
- MEMBER_NOT_FOUND를 404로 변경 (코드 문자열 MEMBER4000 유지)
- 서비스의 IllegalArgumentException을 GeneralException으로 교체
- 모든 @RequestBody에 @Valid 추가, 필수 필드에 검증 제약 부여
- MethodArgumentNotValid/읽기 실패/타입 불일치(400), 메서드 불일치(405) 핸들러 추가
- 500 응답에서 내부 예외 메시지 제거 (로그에만 기록)
- 에러 응답 Content-Type을 JSON으로 명시해 SSE 엔드포인트에서도 본문 출력
- Swagger 에러 응답 예시 갱신, MockMvc 통합 테스트 추가

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@seoyeoki seoyeoki added the bug Something isn't working label Oct 9, 2026
@seoyeoki
seoyeoki merged commit 5df8dee into main Oct 9, 2026
1 check passed
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.

[Bug] 존재하지 않는 리소스·잘못된 요청에 500 응답 및 내부 예외 메시지 노출

1 participant