본문 바로가기

Spring29

상속을 활용한 Global Exception Handler 리팩토링 NOW 프로젝트를 진행하면서 기록한 글입니다. Global Exception Handler SpringBoot 환경에서의 사용자 정의 예외 처리 이전 포스팅에서는 기존 Controller에서 Exception을 처리하던 로직을 Global Exception Handler로 위임 후 ErrorResponse 객체를 생성해 응답했습니다. 하지만, 예외 클래스가 많아질수록 GlobalExceptionHandler에서 다음과 같은 문제가 발생했습니다. 코드 중복 발생 각 예외 클래스에서 코드를 중복하여 구현하면서 예외 처리 로직이 반복되어 작성 가독성 저하 예외를 처리하는 핸들러 메소드들이 여러 곳에 흩어져 있으면 가독성이 떨어지며 로직 파악이 어려움 확장성 제한 새로운 종류의 예외가 필요할 때마다 관련 핸들러.. 2023. 7. 20.
SpringBoot에서 존재하지 않는 API 요청의 응답 해당 글은 SpringBoot 개발 환경에 해결했던 내용입니다. 존재하지 않는 API 요청의 응답 배경 SPA(Single Page Application) 기반 게시판 프로젝트에서 프론트, 백엔드 작업을 진행하다보니, 프런트에서 무언가를 요청을 하면, 항상 적절한 메시지를 응답해줘야 한다는 생각을 가지게 되었습니다. 예를 들면, 프론트에서 요청 url을 실수로 잘못 입력했을 경우, 서버에서는 해당 요청에 대해서 맵핑하지 않았으므로 다음과 같은 응답을 받게 됩니다. 위와 같은 상황에서 아래와 같은 응답으로 개선하고자 합니다. DispatcherServlet 들여다보기 DispatcherServlet의 doDispatch 메서드에서는 mappedHandler가 존재하지 않을 때 noHandlerFound 메.. 2023. 7. 4.
SpringBoot 환경에서의 사용자 정의 예외 처리 해당 글은 SpringBoot 개발 환경에 해결했던 내용입니다. 예외를 발생시킬만한 상황 게시판 프로젝트를 진행하다보면 예외를 발생시킬만한 상황이 있습니다. 예를들어, BoardNotFound e 사용자로부터 전달받은 게시물 번호에 해당하는 게시물이 DB에 없을때 InvalidPassword e 사용자가 글을 수정 및 삭제에 사용하는 비밀번호가 DB에 저장된 비밀번호와 다를때 … 위와 같이 다양한 상황이 있을 수 있습니다. 실제 구현코드 위에서 언급한 BoardNotFound e가 발생하는 실제 구현코드는 어떻게 될까요? 우선, 아래 코드는 BoarController의 HTTP GET 요청을 처리하는 핸들러 메서드이며, 요청한 게시물 번호에 해당하는 게시글을 찾고, JSON 형식으로 응답을 반환합니다. .. 2023. 6. 26.
[Spring] JPA를 활용한 API 생성 해당 글은 2) 스프링부트로 웹 서비스 출시하기 - 2. SpringBoot & JPA로 간단 API 만들기을 참고해서 작성했습니다. 도메인 코드 Posts 클래스 : 실제 DB 테이블과 매칭될 클래스이며, Entity 클래스라고 함. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity public class Posts extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 500, nullable = false) private String title; @Column(columnDefini.. 2023. 5. 3.
[Spring] JSON 형식의 데이터로 변환하기 JSON으로 변환하기 시스템이 복잡해지면서 다른 시스템과 정보를 주고받을 일이 발생하는데, 이때 데이터 교환 포맷으로 JSON을 사용할 수 있다. 검색한 글 목록을 JSON 형식의 데이터로 변환하여 브라우저에 출력하려면 어떻게 해야할까? [{ "seq": 2, "title": "zzzxcxzcz", "writer": "xx", "content": "\t\tccczxczxcxzcc", "regDate": 1682607600000, "cnt": 0 }, { "seq": 1, "title": "1112332131", "writer": "22", "content": "\t\t\t5141332144\t33134123", "regDate": 1682607600000, "cnt": 0 }] Jackson2 라이브러리.. 2023. 4. 30.
[Spring] 어노테이션 기반의 예외처리 / @ControllerAdvice와 @ExceptionHandler 어노테이션을 이용한 예외처리 스프링에서의 예외처리 스프링에서는 @ControllerAdvice와 @ExceptionHandler 어노테이션을 이용해서 컨트롤러의 메서드 수행 중 발생하는 예외를 일괄적으로 처리할 수 있다. 먼저, presentation-layer.xml 파일에 예외 처리 관련 어노테이션 사용을 위한 설정(Namespace)을 추가한다. 스프링 설정 파일에 mvc 네임스페이스를 추가하고, 아래와 같이 앨리먼트를 설정해야 한다. 이는 예외 처리 클래스에서 예외 처리 메서드 위에 @ExceptionHandler 어노테이션을 사용했을 때 인식시키기 위한 작업이다. 예외 처리 클래스 작성 예외의 종류에 따라서 적절한 예외 화면이 서비스되도록 예외 처리 클래스를 작성해보자. 먼저 클래스 위에 선언된 @ControllerAdvi.. 2023. 4. 29.