오늘은 예외처리에 대해 배우는 시간을 가졌다.
앞에 대한 복습과 이해가 필요한 강의였고 처음에는 시간이 넉넉하다고 생각했지만 결코 넉넉한 시간은 아니었다.
흐름을 이해하고 파악하는 데 시간을 엄청 보냈던 하루다.
예외처리(Exception Handling)
예외처리는 프로그램 실행 중 발생할 수 있는 예외(오류)에 대응하는 방법을 말한다. 예외가 발생하면 정상적인 실행의 흐름은 중단되고 처리하지 않으면 중단되게 되고, 처리하지 않으면 프로그램은 비정상적으로 종료될 수 있다. 예외처리는 이러한 예외 상황을 감지하고, 조치를 취하여 프로그램의 안정성과 신뢰성을 높인다.
예외가 발생하면 예외를 처리하는 과정과 함께 클라이언트에게 오류를 알리는 작업도 수행할 수 있다.
✅ 스프링에서도 마찬가지로 postman에서 요청을 보낼 때 클라이언트 측에서 에러가 어디서 어떤 문제가 발생했는지 알게 된다면 더욱 편할 것이다. 이러한 이유로 예외처리를 이용하게 된다.
@ExceptionHandler의 사용
@ExceptionHandler는 비즈니스 로직 수행 중 발생하는 특정 예외에 대한 처리를 하고자 할 때 유용하다. 각각의 컨트롤러에 별도로 정의되는 메서드이며 적절한 오류 메세지 및 처리를 하고자 할 때 유용하게 사용할 수 있다.
🔻사용 방법
@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를 사용하면 예외 처리 후 반환되는 응답을 통일된 형태로 처리할 수 있으며 여러 컨트롤러에서 발생하는 예외를 한 곳에서 중앙 집중화하여 처리할 수 있다. 이는 코드의 중복을 피하고 유지보수성을 향상시킨다.
코스에 있는 예제는 노션에 정리해놨는데 따로 쓰지를 못하니 예제를 찾아봤다.
오늘은 라이브 세션이 없어서 심적인 부담감이 덜한 탓에 지금도 기분이 좋다. 아직도 시간이 얼마 안된 기분이랄까...ㅎㅎ
🔗[GitHub-@RestControllerAdvice@ExceptionHandler예제]
예제를 찾다보니 일반적으로 예제들은 @ControllerAdvice로 되어있었다.
그래서 @ControllerAdvice와 @RestController의 차이점에 대해서도 찾아보았는데 매우 잘 정리된 글을 봐서 링크를 올린다.
(라이브 세션 때 얘기해주셨던 것 같은데...👀)
오늘 그룹 회고 시간이 있었는데 좋았다. 다 같이 이야기를 나누는 시간이 잘 없다보니 다 같이 이야기를 나누다 보면 모두의 고민이 다 똑같구나 느끼기도 하고, 서로의 고민에 대한 해결은 아니더라도 해소정도는 되는 듯 하다. 🙂
그리고 나는 진짜 걱정 없이 사는 구나 라고 느끼기도 했던 것 같다. 요즘엔 진짜 힘들다고 느끼지도 못하는 것 같다. 매일 새벽 네시 넘어 자는데도 딱히 피곤한지도 모르겠고 이게 힘든지도 모르겠다고 생각했는데 아마.. 놀기도 많이 놀아서 그런 것 같다..ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
얘기하면서 느낀 점은 진짜 열심히 더 열심히 해야겠구나. 내가 지금 하는 건 공부도 아니구나..라고 생각이 들었다..
사실 내가 스스로 "열심히 했다" 라고 말 할 정도로 열심히 하기에는 턱없이 아주 턱없이 부족한 듯 하다.
그러기엔 휴대폰도 만지고, 강아지랑 놀기도 하고 밥도 먹고 산책도 가고 이런 시간들이 사실 짧지만은 않은 걸 알기도 하고 최선을 다 했나? 에 대한 답은 아닌 것 같다.
그런데 오늘 그룹 회고를 하면서 위로도 많이 얻고 자극도 많이 되었던 것 같다. 발판삼아 더욱 집중해서 내일은 오늘보다 더 열심히 할 수 있지 않을까 한다.
화이팅 해야지! 아... 그리고! 아까 그룹회고 시간에 혹시 몰라 갑자기 나한테 질문이 오면 질문에 대한 답을 못 할 것 같아서 시작하기 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 |