원리에 대한 글은 아니고 기억 차원에서 스프링 MVC로 웹 개발을 하며 경험한 컨벤션을 간략히 기록하고자 한다.
---
컨트롤러의 응답[1] 형식은 두 가지로 나뉜다. ResponseBody 혹은 ResponseEntity<T>를 사용하는 방법이다. 단 후자의 경우가 HTTP 상태코드, 헤더를 세팅하기 수월해서 정상 응답 외 예외 발생의 경우에도 장점을 가진다고 생각한다. 단 예외 처리의 경우에는 정상 응답처럼[2] 컨트롤러에서 응답을 생성해주지 않고, 예외 처리 핸들링 클래스(@RestControllerAdvice)를 따로 작성해 스프링부트 애플리케이션에서 전역적으로 발생하는 예외를 처리해준다. 다만, 신규 구축의 경우가 아니어서인진 몰라도 컨트롤러에서 정상 응답 및 예외 발생 시 응답에 대해서도 모두 작성해주는 경우가 있긴 했다. 즉 모든 컨트롤러에서 try-catch문을 사용해 BizException과 Exception 발생의 경우를 캐치해주고 있었다.
---
1. 글의 핀트와는 조금 다르지만, 응답 DTO에 관해 적어보고자 한다. 보통 내 경험상 DTO의 경우는 String으로 선언하고, VO의 경우는 DB와 맞추기 위해 Int보단 Long으로, Float나 Double보단 BigDecimal로 사용하는 경우가 많았다.
2. 정상 응답 및 예외 발생 시 응답의 경우의 예를 차례로 적었다. 정상 응답은 컨트롤러에, 예외 응답의 경우 전역적 핸들러 클래스에 작성해준다. 예외 처리에 대한 상세한 가이드는 다음[3]을 참고한다.
// 정상 응답(정적 팩토리 메소드 방식)
return ResponseEntity
.ok()
.body(user); // UserResponseDto user ...
// 정상 응답(생성자 방식)
return new ResponseEntity<>(user, HttpStatus.OK);
// 예외 발생 시 응답
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
3. 다음 글에 스프링의 예외 처리가 잘 정리되어 있다.
- Spring Guide - Exception 전략
- Checked Exception 제외 try-catch를 최대한 지양해야 한다
- 서비스 레이어가 아닌 도메인 내(ex. Coupon)에 예외 발생 로직이 위치한다
- 스프링의 다양한 예외 처리 방법
'공부 > Spring' 카테고리의 다른 글
분기문 제거 (0) | 2025.04.10 |
---|---|
템플릿 콜백 패턴 (0) | 2021.06.21 |
스프링 핵심 원리 - 기본편 (0) | 2021.01.18 |
댓글