Backend/Spring Boot

Custom Exception을 이용한 예외 처리
애플리케이션을 사용하는 여러 상황에서 보다 직관적으로 예외 메세지를 확인하기 위해 사용자 정의 예외 클래스를 이용해 예외 처리를 진행했다. CheckedException, UncheckedException 사용자 정의 예외 클래스를 만들어 구현하는 방법 이전에 간단하게 CheckedException과 UnchekcedException에 대해 알아보자. 자바에서는 크게 RuntimeException을 기준으로 CheckedException과 UncheckedException을 구분한다. RuntimeException은 이름에서도 알수 있듯이 실행 시점에 예외를 판단한다. 예를 들어, ArrayIndexOutOfBoundException과 같은 예외는 실행 시점에 배열의 인덱스를 벗어나 참조를 하는 경우 발..

Request 스코프와 Proxy
빈 스코프란 빈이 존재할 수 있는 범위를 말한다. 기본적으로 빈은 싱글톤 스코프로 생성되며 스프링 컨테이너가 시작할 때 부터 종료할 때까지 유지된다. 싱글톤 : 스프링 컨테이너가 시작되고 종료될 때까지 빈을 유지 프로토타입 : 빈 생성 및 의존성 주입까지만 스프링 컨테이너가 관리를 해준다. 웹 관련 스코프 request : 웹 요청을 받는 순간부터 로직을 처리후 응답할때까지 빈을 유지 session : 웹 세션이 생성되고 종료될 때까지 빈을 유지 application : 서블릿 컨텍스트와 같은 범위로 빈을 유지 Request 스코프 request 스코프를 가진 빈은 HTTP 요청이 들어올 때 생성(@PostConstruct 실행) 되며 로직을 처리한 후 HTTP 응답을 줄 때 소멸(@PreDestory)..

Spring Cloud Bus와 RabbitMQ를 이용해 설정 정보 한번에 최신화하기!
기존 Spring Cloud Config Server에서는 설정 정보가 변경될 때 변경된 마이크로 서비스에서 /actuator/refresh 엔드포인트를 호출해 변경했다. 하지만, 매번 설정 정보가 변경될 때마다 엔드포인트를 호출해 변경정보를 반영하는 것은 여간 쉬운 일이 아니다. 이러한 문제를 해결하기 위해 클라이언트에 Spring Cloud Bus와 RabbitMQ를 이용해 설정 정보를 한 번에 변경해보자. RabbitMQ 설치 및 실행 RabbitMQ는 AMQP(Advanced Message Queueing Protocol) 프로토콜을 구현한 메시지 브로커다. 프로젝트를 진행하는 환경에 도커를 이용해 먼저 RabbitMQ를 설치한 후 구동한다. 필자는 오라클 클라우드 인스턴스를 이용해 프로젝트를 진..

싱글톤 스코프, 프로토타입 스코프
빈 스코프란 빈이 존재할 수 있는 범위를 말한다. 기본적으로 빈은 싱글톤 스코프로 생성되며 스프링 컨테이너가 시작할 때 부터 종료할 때까지 유지된다. 싱글톤 : 스프링 컨테이너가 시작되고 종료될 때까지 빈을 유지 프로토타입 : 빈 생성 및 의존성 주입까지만 스프링 컨테이너가 관리를 해준다. 웹 관련 스코프 request : 웹 요청을 받는 순간부터 로직을 처리후 응답할때까지 빈을 유지 session : 웹 세션이 생성되고 종료될 때까지 빈을 유지 application : 서블릿 컨텍스트와 같은 범위로 빈을 유지 싱글톤 스코프와 프로토타입 스코프 싱글톤 스코프의 빈은 스프링 컨테이너가 시작시 생성되고 종료까지 유지되기 때문에 항상 같은 인스턴스 스프링 빈을 반환한다. 하지만, 프로토타입 스코프를 스프링 컨..

Spring Data JPA의 Page와 Slice
Sping Data JPA는 간단한 페이징 처리를 지원한다. 페이징을 처리를 하기 위해선 한 페이지 당 보여줄 데이터의 개수와 몇 번째 페이지인지에 대한 정보가 필요하다. @GetMapping public ResponseEntity searchPointDetail(@RequestParam(name = "page") int page, @RequestParam(name = "size") int size) { // 로직 } Spring Data JPA는 이러한 정보를 Pageable 객체를 이용하고, Pageable 객체를 JpaRepository에 전달하여 페이징 처리를 지원한다. @Repository public interface PointRepository extends JpaRepository { Pa..