오늘은 예외처리에 대해 배우는 시간을 가졌다.
앞에 대한 복습과 이해가 필요한 강의였고 처음에는 시간이 넉넉하다고 생각했지만 결코 넉넉한 시간은 아니었다.
흐름을 이해하고 파악하는 데 시간을 엄청 보냈던 하루다.
예외처리(Exception Handling)
예외처리는 프로그램 실행 중 발생할 수 있는 예외(오류)에 대응하는 방법을 말한다. 예외가 발생하면 정상적인 실행의 흐름은 중단되고 처리하지 않으면 중단되게 되고, 처리하지 않으면 프로그램은 비정상적으로 종료될 수 있다. 예외처리는 이러한 예외 상황을 감지하고, 조치를 취하여 프로그램의 안정성과 신뢰성을 높인다.
예외가 발생하면 예외를 처리하는 과정과 함께 클라이언트에게 오류를 알리는 작업도 수행할 수 있다.
✅ 스프링에서도 마찬가지로 postman에서 요청을 보낼 때 클라이언트 측에서 에러가 어디서 어떤 문제가 발생했는지 알게 된다면 더욱 편할 것이다. 이러한 이유로 예외처리를 이용하게 된다.
@ExceptionHandler의 사용
@ExceptionHandler는 비즈니스 로직 수행 중 발생하는 특정 예외에 대한 처리를 하고자 할 때 유용하다. 각각의 컨트롤러에 별도로 정의되는 메서드이며 적절한 오류 메세지 및 처리를 하고자 할 때 유용하게 사용할 수 있다.
Exceptions :: Spring Framework
@Controller and @ControllerAdvice classes can have @ExceptionHandler methods to handle exceptions from controller methods, as the following example shows: @Controller public class SimpleController { // ... @ExceptionHandler public ResponseEntity handle(IOE
docs.spring.io
🔻사용 방법
@Controller
public class SimpleController {
// ...
@ExceptionHandler
public ResponseEntity<String> handle(IOException ex) {
// ...
}
}
@ExceptionHandler의 단점
@ExceptionHandler 애너테이션과 ErrorResponse 클래스를 이용해서 유효성 검증 실패 시 필요한 정보만 담아 응답할 수 있게 되었지만 문제가 발생할 수 있다.
✅ 코드의 중복성
@ExceptionHandler 는 각각의 컨트롤러 메서드에 별도로 정의되어야 한다. 따라서 여러 컨트롤러에서 동일한 메서드를 처리하는 경우 예외 처리 코드가 중복되는 경우가 발생한다.
✅ 긴밀한 결합
@ExceptionHandler 는 컨트롤러 클래스 내에 정의되기 때문에 예외 처리와 관련된 코드가 컨트롤러와 밀접하게 결합된다. 이는 객체지향 설계원칙(SOLID 원칙) 중 ‘단일책임원칙(Single Responsibility Principle) - 한 클래스는 하나의 책임만을 가져야 한다.’를 위반할 수 있으며 코드의 가독성과 유지보수성을 저하시킬 수 있다.
✅ 제한된 예외 처리 기능
@ExceptionHandler 는 주로 해당 컨트롤러 내에서 발생하는 예외를 처리하는 데 사용된다. 따라서 다른 컴포넌트에서 발생한 예외에 대한 처리는 별도의 예외 처리 로직이 필요하다.
✅ 단일 컨트롤러에 대한 제한
@ExceptionHandler 는 해당 컨트롤러에 정의된 메서드에만 동작한다. 예를 들어, 위에서는 MethodArgumentNotValidException 예외만 처리하며 이외의 예외를 처리하기 위해서는 다른 예외처리를 추가한 에러 처리 핸들러 메서드가 늘어난다.
@ExceptionHandler를 사용했을 때 예외 처리를 위한 코드에 중복이 발생하는 문제를 개선하기 위해 @RestControllerAdvice 애너테이션을 사용한다.
@RestControllerAdvice를 사용한 예외 처리 공통화
@RestControllerAdvice를 사용하면 예외 처리 후 반환되는 응답을 통일된 형태로 처리할 수 있으며 여러 컨트롤러에서 발생하는 예외를 한 곳에서 중앙 집중화하여 처리할 수 있다. 이는 코드의 중복을 피하고 유지보수성을 향상시킨다.
RestControllerAdvice (Spring Framework 6.0.9 API)
Array of base packages. Controllers that belong to those base packages or sub-packages thereof will be included — for example, @RestControllerAdvice(basePackages = "org.my.pkg") or @RestControllerAdvice(basePackages = {"org.my.pkg", "org.my.other.pkg"}).
docs.spring.io
코스에 있는 예제는 노션에 정리해놨는데 따로 쓰지를 못하니 예제를 찾아봤다.
오늘은 라이브 세션이 없어서 심적인 부담감이 덜한 탓에 지금도 기분이 좋다. 아직도 시간이 얼마 안된 기분이랄까...ㅎㅎ
🔗[GitHub-@RestControllerAdvice@ExceptionHandler예제]
GitHub - bezkoder/spring-boot-restcontrolleradvice: @RestControllerAdvice example in Spring Boot for handling Rest APIs exceptio
@RestControllerAdvice example in Spring Boot for handling Rest APIs exception - GitHub - bezkoder/spring-boot-restcontrolleradvice: @RestControllerAdvice example in Spring Boot for handling Rest AP...
github.com
예제를 찾다보니 일반적으로 예제들은 @ControllerAdvice로 되어있었다.
그래서 @ControllerAdvice와 @RestController의 차이점에 대해서도 찾아보았는데 매우 잘 정리된 글을 봐서 링크를 올린다.
(라이브 세션 때 얘기해주셨던 것 같은데...👀)
[Spring] @RestControllerAdvice를 이용한 Spring 예외 처리 방법 - (2/2)
예외 처리는 robust한 애플리케이션을 만드는데 매우 중요한 부분을 차지한다. Spring 프레임워크는 매우 다양한 에러 처리 방법을 제공하는데, 앞선 포스팅에서 @RestControllerAdvice를 사용해야 하는
mangkyu.tistory.com
오늘 그룹 회고 시간이 있었는데 좋았다. 다 같이 이야기를 나누는 시간이 잘 없다보니 다 같이 이야기를 나누다 보면 모두의 고민이 다 똑같구나 느끼기도 하고, 서로의 고민에 대한 해결은 아니더라도 해소정도는 되는 듯 하다. 🙂
그리고 나는 진짜 걱정 없이 사는 구나 라고 느끼기도 했던 것 같다. 요즘엔 진짜 힘들다고 느끼지도 못하는 것 같다. 매일 새벽 네시 넘어 자는데도 딱히 피곤한지도 모르겠고 이게 힘든지도 모르겠다고 생각했는데 아마.. 놀기도 많이 놀아서 그런 것 같다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
얘기하면서 느낀 점은 진짜 열심히 더 열심히 해야겠구나. 내가 지금 하는 건 공부도 아니구나..라고 생각이 들었다..
사실 내가 스스로 "열심히 했다" 라고 말 할 정도로 열심히 하기에는 턱없이 아주 턱없이 부족한 듯 하다.
그러기엔 휴대폰도 만지고, 강아지랑 놀기도 하고 밥도 먹고 산책도 가고 이런 시간들이 사실 짧지만은 않은 걸 알기도 하고 최선을 다 했나? 에 대한 답은 아닌 것 같다.
그런데 오늘 그룹 회고를 하면서 위로도 많이 얻고 자극도 많이 되었던 것 같다. 발판삼아 더욱 집중해서 내일은 오늘보다 더 열심히 할 수 있지 않을까 한다.
화이팅 해야지! 아... 그리고! 아까 그룹회고 시간에 혹시 몰라 갑자기 나한테 질문이 오면 질문에 대한 답을 못 할 것 같아서 시작하기 10분 전 쯤? 답을 미리 다 적어놨었는데 답이 어려운 것들이 몇 개 있었다.
자기소개 한 문장으로 하기! 예전에는 소나무처럼 밝고 푸른 솔이라고 하면 다들 진짜 그렇다고 했는데 요즘엔 내가 너무 변해서 잘 모르겠다.. 🥹 그래서 소개를 저도 저를 잘 모르겠습니다. 이유는 MBTI 조차도 정반대로 바꼈기 때문입니다. 라고 할까 했다ㅋㅋㅋ 일 년 만에 ENFP에서.. ISTJ로 바꼈다.. ㅋㅋㅋ
분명 일년전엔 10번을 넘게 해도 엔프피였는데... 작년 언젠가부터... 인프제가 되더니...이제는 잇티제란다...ㅠ이럴 수 있나? 원래도 계획짜는 건 좋아했었는데 이제는 공부하는 시간이 길어지면서 밖에도 안 나가고 공부만 하니까 할 거 다 하고 자야지! 하면서 진짜 다 하고 자다보니 그렇게 되었나보다..
크크.. 아무튼... 이제는 자야지... ㅠ
'DIARY' 카테고리의 다른 글
[DIARY] 뭐 한 건지 모르겠다.. 너무 빠른 하루 (0) | 2023.06.20 |
---|---|
[DIARY] 과제 중 오류 / @RequestMapping 중 404에러... (0) | 2023.06.18 |
[DIARY 📖] 코드스테이츠 한 달 회고 / SECTION 2 끝 (0) | 2023.06.08 |
[DIARY 📖] 재귀함수 돌아보기 (0) | 2023.05.10 |
[DIARY 📖] 코드스테이츠 한 달 회고 (0) | 2023.05.10 |