일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 패스트캠퍼스AI부트캠프
- 티스토리챌린지
- 오블완
- 국비지원
- UpstageAILab#국비지원
- 패스트캠퍼스업스테이지에이아이랩
- 패스트캠퍼스업스테이지부트캠프
- UpstageAILab
- 업스테이지패스트캠퍼스
- 패스트캠퍼스
- Today
- Total
김민주
[Spring Master] 심화 이론 - API 예외 처리 본문
API 예외 처리
웹 애플리케이션에서의 에러를 Client와 Server 모두가 잘 알지 못하면, 서비스하는 환경에서 발생하는 에러에 대해서 제대로 대응할 수가 없습니다. 따라서 에러를 효율적으로 처리할 줄 알아야 합니다.
서버가 응답을 보낼 때 응답 헤더에는 API 요청에 대한 상태 코드를 함께 보냅니다.
상태 코드는 3자리로 되어있습니다.
- 2xx Success → 200번대의 상태코드는 성공을 의미합니다.
- 4xx Client Error → 400번대의 상태코드는 클라이언트 에러, 즉 잘못된 요청을 의미합니다.
- 5xx Server Error → 500번대의 상태코드는 서버 에러, 즉 정확한 요청에 서버쪽 사유로 에러가 난 상황을 의미합니다.
Spring에서는 org.springframework.http > HttpStatus 파일의 아주 편리한 enum도 제공하고 있습니다.
참고: HTTP 메시지 설명 (MDN Web Docs)
HTTP 메시지 - HTTP | MDN
HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식입니다. 메시지 타입은 두 가지가 있습니다. 요청('request')은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시
developer.mozilla.org
Spring 예외 처리
- Controller 코드 수정
Client 측에 응답을 신경써서 return 해주기 위해 Spring에서 제공하는 ResponseEntity 클래스를 사용할 수 있습니다.
ResponseEntity는 HTTP response object를 위한 Wrapper입니다. 따라서 HTTP status code, HTTP headers, HTTP body와 같은 것들을 담아 response로 보내주면 간편하게 처리가 가능합니다.
- @ExceptionHander 사용
@ExceptionHander는 예외 처리를 위한 Spring 어노테이션입니다. 이는 특정 Controller에서 발생한 예외를 처리하기 위해 사용되며, 해당 어노테이션이 붙어있는 메서드는 Controller에서 예외가 발생했을 때 호출되고, 해당 예외를 처리하는 로직을 담고 있습니다. 이는 AOP를 이용한 예외 처리 방식으로, 메서드마다 try catch를 할 필요가 없어 깔끔합니다.
Spring Global 예외 처리
예외 처리 로직 자체가 매우 공통적이므로, 각각의 Controller마다 예외 처리를 하지 않고 Global하게 처리할 수 있습니다.
@ControllerAdvice는 예외 처리를 위한 Spring의 클래스 레벨 어노테이션입니다. 이는 모든 Controller에서 발생한 예외를 처리하기 위해 사용되며, 해당 어노테이션이 붙은 클래스에서는 @ExceptionHandler 메서드를 정의하여 예외 처리 로직을 담을 수 있습니다. @ControllerAdvice는 예외 처리를 중앙 집중화하기 좋아 코드의 중복성을 방지하고 유지보수성을 높입니다. 또한, 예외 처리 로직을 모듈화하여 관리하기 쉽기 때문에 개발 생산성을 향산시킬 수 있습니다.
* @RestControllerAdvice = @ControllerAdvice + @ResponseBody
Error 메시지 관리
Spring에서는 properties 파일을 이용해서도 에러 메시지를 관리할 수 있습니다. 에러 메시지는 properties 파일에서 key-value 형태로 작성되며, 작성된 값은 messageSource를 Bean으로 등록하여 사용할 수 있습니다. Spring Boot에서는 messageSource가 자동으로 Bean으로 등록됩니다.
- messageSource.getMessage()메서드
- 첫번째 파라미터는 messages.properties 파일에서 가져올 메시지의 키 값을 전달합니다.
- 두번째 파라미터는 메시지 내에서 매개변수를 사용할 경우 전달하는 값입니다.
- 세번째 파라미터는 언어 설정을 전달합니다.
- Locale.getDefault()메서드는 기본 언어 설정을 가져오는 메서드입니다. (해외 배포 시 번역에 사용할 수 있습니다.)
'STUDY > 이론' 카테고리의 다른 글
[MSA] Client Side Load Balancing(ReignClient, Ribbon) (2) | 2024.12.04 |
---|---|
[MSA] Service Discovery(Eureka) (1) | 2024.11.29 |
[Spring Master] 숙련 이론 - 데이터 검증하기 (0) | 2024.11.28 |
[Spring Master] 입문 이론 - Spring Data JPA (1) | 2024.11.28 |
[Spring Master] 입문 이론 - JPA CORE (1) | 2024.11.25 |