Thymeleaf 템플릿 렌더링 오류

Kim jisu·2025년 7월 23일
0

 Debugging Note

목록 보기
33/37

🛠️ 디버깅 노트: (500 Error) 해결

📌 이슈 요약

  • 문제 현상: /point/charge 페이지 접근 시 HTTP 500 에러 발생

  • 에러 메시지:

    No converter for [class me.singingsandhill.holmesai.infrastructure.response.ApiResponseData] 
    with preset Content-Type 'text/html'
  • 원인 분석:

    • 모든 컨트롤러에 공통적으로 적용된 @RestControllerAdvice가 HTML 뷰를 반환하는 컨트롤러(@Controller)까지 예외를 가로채면서, 응답 타입을 JSON으로 고정 처리함
    • 이로 인해 Thymeleaf가 HTML 템플릿을 렌더링하지 못하고 HttpMessageConverter 예외 발생

🔍 원인 상세

  • @RestControllerAdvice@RestController뿐 아니라 @Controller에도 적용 가능
  • HTML 페이지를 반환하는 컨트롤러에서 예외 발생 시 JSON 형태(ApiResponseData)로 반환 시도 → Thymeleaf와 충돌

✅ 적용된 해결책

// ❌ 기존 (모든 컨트롤러 대상 - HTML 컨트롤러도 포함됨)
@RestControllerAdvice(basePackages = "me.singingsandhill.holmesai.presentation.controller")

// ✅ 변경 (오직 @RestController만 대상)
@RestControllerAdvice(annotations = {RestController.class})
  • annotations 속성을 사용해 @RestController만 지정 → HTML 뷰용 컨트롤러는 예외 핸들링 대상에서 제외됨

🧪 검증 결과

항목결과
/point/charge HTML 페이지 로딩✅ 정상 200 응답 및 템플릿 렌더링
Thymeleaf 템플릿 해석✅ 정상 처리
REST API 예외 응답✅ JSON 포맷 통일 유지 (ApiResponseData)
REST API 정상 응답✅ 정상 동작 유지

🎯 주요 영향 컨트롤러

  • 예외 핸들링 제외 (HTML 템플릿)

    • PageController, TossPayController
  • 예외 핸들링 적용 (REST API)

    • AuthController, OrderController, PointController, ProductController, OrderLogController

🧩 결론

  • Web UI(@Controller)와 REST API(@RestController)의 관심사를 분리
  • REST API는 통일된 JSON 에러 포맷을 유지
  • HTML 템플릿은 Thymeleaf로 정상 렌더링
profile
Dreamer

0개의 댓글