일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jvm
- Stream
- 자바
- 백준
- 쿠버네티스
- Real MySQL
- mysql
- 이스티오
- list
- 토비의 스프링 정리
- 스트림
- SpringBoot
- Collection
- MSA
- OS
- Stack
- 스프링
- Kotlin
- GC
- JPA
- gradle
- redis
- IntellJ
- Java
- K8s
- thread
- 자바 ORM 표준 JPA 프로그래밍
- spring
- 토비의 스프링
- 보조스트림
- Today
- Total
목록ExceptionHandler (2)
인생을 코딩하다.
@ExceptionHandler를 이용해서 메소드마다 예외처리를 해주다보니 같은 에러를 처리할때 마다 중복된 코드를 쓰게되었다. 중복된 코드를 쓰다보니 코드도 길어지고 유지보수 할 때 불편한 점이 많았다. 스프링 프레임워크의 큰 장점중에 하나가 AOP인데 중복된 코드를 쓴다는 것은 AOP에 어긋난다는 생각이 들었다. 그래서 나는 재사용성을 높여 중복된 코드를 없애 객체 지향적인 코드를 구현하고 싶었고, (메서드는 한 가지 일만 해야하기 때문에) 에러를 한 곳에서 처리해서 controller 전역에 적용되는 예외처리 구문을 만들어야겠다는 생각을 하였다. 그래서 공부하던 중 ControllerAdvice annotation의 @ControllerAdvice와@RestControllerAdvice을 알게되었고..
예외처리 할 떄, Controller에서 이런식으로 try { } ~ catch { } 문으로 처리를 해주면 Status가 200으로 떠서 클라이언트에서는 이 정보가 처리가 된 것인지, 안 된 것인지 알기가 어렵기 떄문에 곤란하다. 위를 보면 Headers, Content type, Body에 아무 것도 들어오지 않아서 어떻게 처리가 되었는지 알 수가 없다. 그래서 조금더 나은 방법으로, @ExceptionHandler를 지정해준다. @ExceptionHandler같은 경우는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 인자로 캐치하고 싶은 예외 클래스를 등록해준다. @ExceptionHandler를 이용해서..