Skip to content

#441 [Fix] 필수 쿼리 파라미터 누락 시 500 대신 400 응답 - #450

Merged
Roy-wonji merged 1 commit into
devfrom
fix/missing-param-400
Sep 8, 2026
Merged

#441 [Fix] 필수 쿼리 파라미터 누락 시 500 대신 400 응답#450
Roy-wonji merged 1 commit into
devfrom
fix/missing-param-400

Conversation

@Roy-wonji

Copy link
Copy Markdown
Contributor

문제

필수 쿼리 파라미터를 빠뜨리면 400 이 아니라 500 이 나갑니다.

GET https://dev.picke.store/api/v1/ads
→ 500 {"statusCode":500,"error":{"code":"COMMON_500","message":"서버 오류가 발생했습니다. 관리자에게 문의해 주세요."}}

GlobalExceptionHandler 의 400 목록에 MissingServletRequestParameterException 이 없어, 마지막 Exception 핸들러로 떨어집니다.

@ExceptionHandler({
        HttpMessageNotReadableException.class,
        MethodArgumentTypeMismatchException.class,
        ConstraintViolationException.class,
        IllegalArgumentException.class      // ← 여기에 없음
})

광고 전용 문제가 아닙니다. 필수 쿼리 파라미터를 쓰는 모든 API 가 같은 증상을 갖습니다. 클라이언트 잘못인데 서버 오류로 보고되어, 원인 파악이 그만큼 늦어집니다. 스웨거에서 파라미터를 채우지 않고 Execute 하면 바로 재현됩니다.

변경

  • MissingServletRequestParameterException 을 400 핸들러 목록에 추가한다.
  • GET /api/v1/ads 로 회귀 테스트를 건다. 광고 API 는 인증이 없어 이 경로를 검증하기에 가장 단순하다.

검증

  • ./gradlew test --tests "com.swyp.picke.domain.ad.*" --tests "com.swyp.picke.global.*" --tests "...AdminAdServiceTest" --rerun-tasks → BUILD SUCCESSFUL
  • AdApiIntegrationTest 10건 통과 (failures 0, errors 0)
  • 역검증: 핸들러 목록에서 다시 빼면 해당 테스트 FAILED

- MissingServletRequestParameterException 이 전역 핸들러의 400 목록에 없어
  마지막 Exception 핸들러로 떨어졌다. 필수 파라미터를 빠뜨리면 클라이언트
  잘못인데도 COMMON_500 이 나갔다.
- 광고 전용 문제가 아니다. 필수 쿼리 파라미터를 쓰는 모든 API 가 함께 영향을 받는다.
- 스웨거에서 파라미터를 채우지 않고 Execute 하면 바로 재현된다.
@Roy-wonji
Roy-wonji merged commit e5a0422 into dev Sep 8, 2026
1 check passed
@Roy-wonji
Roy-wonji deleted the fix/missing-param-400 branch September 8, 2026 11:27
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