본문 바로가기
공부/Spring

예외와 응답

by 무심한고라니 2025. 4. 12.

원리에 대한 글은 아니고 기억 차원에서 스프링 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' 카테고리의 다른 글

분기문 제거  (0) 2025.04.10
템플릿 콜백 패턴  (0) 2021.06.21
스프링 핵심 원리 - 기본편  (0) 2021.01.18

댓글