Programming Language(100)
-
[Spring] 빈(Bean)의 생성과 소멸에 대한 관리(@PostConstruct, @PreDestroy)
빈(Bean)의 라이프사이클 제어 개발을 진행하면서 애플리케이션을 구동할 때 Service 계층에서 Arcus 캐시로 접근해야 하는 상황이 발생하였다. Arcus 문서에는 서버 종료 시에 shutdown() 함수를 반드시 호출하라고 명시되어 있었다. 이러한 상황에서 어떻게 Bean의 소멸을 처리할 것인지 문제가 발생하였는데, 이를 위해 다음과 같은 가상의 CacheClient를 통해 Bean의 라이프사이클을 제어하는 방법에 대해 알아보고자 한다. @RequiredArgsConstructor public class CacheClient { private final String url; // 생성자 이후 호출되어야 함 public void connect() { System.out.println("connec..
2022.10.13 -
[Spring] 의존성 주입(Dependency Injection, DI)
1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Injection, DI) 이다. DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다. 예를 들어 다음과 같이 Store 객체가 Pencil 객체를 사용하고 있는 경우에 우리는 Store 객체가 Pencil 객체에 의존성이 있다고 표현한다. publi..
2022.10.13 -
[Spring] 빈 스코프의 종류
빈 스코프(Bean Scope)의 종류 Spring의 Bean은 별다른 설정이 없으면 Singleton Scope로 생성된다. 특정 타입의 Bean을 하나만 만들어 두고 공유해서 사용하기 위해서인데, 이러한 까닭에 Bean에 상태를 저장하는 코드를 작성하는 것은 동시성 문제를 유발하여 위험한 상황을 초래할 수 있다. 요구사항과 구현 기능 등의 필요에 따라서 비싱글톤이 필요한 경우도 많다. 그리고 이를 명시적으로 구분하기 위해서 scope라는 키워드를 제공한다. Spring에는 다음과 같은 Scope들이 존재한다. [ Scope의 종류 ] 싱글톤 Spring 프레임워크에서 기본이 되는 스코프 스프링 컨테이너의 시작과 종료까지 1개의 객체로 유지됨 프로토타입 프로토타입 빈의 생성과 의존관계 주입까지만 관여하..
2022.10.13 -
[Spring] @Configuration 안에 @Bean을 사용해야 하는 이유
Spring에서 수동으로 빈을 등록할 때에는 @Configuration 클래스 안에서 @Bean을 사용해야 한다. 왜 @Configuraiton 클래스 안에서 @Bean을 사용해야 하는지 살펴보도록 하자. @Configuration 안에 @Bean을 사용해야 하는 이유, proxyBeanMethods @Configuration 안에 @Bean을 사용해야 하는 이유 @Bean 어노테이션을 이용한 수동 빈 등록 스프링에서는 일반적으로 컴포넌트 스캔을 사용해 자동 빈 등록 방법 사용, 그러나 @Bean 어노테이션을 이용해 수동으로 빈을 등록해야 하는 경우도 존재한다. 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때 다형성을 활용하여 여러 구현체를 등록..
2022.10.13 -
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component
기존 스프링 MVC에서는 xml을 활용하여 Bean을 등록하였다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 번거로운 일이 되었다. 따라서, 어노테이션을 활용한 Bean 등록 방법이 탄생하게 되었다. Spring에서 Bean을 등록하기 위해 활용 가능한 @Bean, @Component, @Configuration 어노테이션에 대해 알아보자. 1. Spring Bean이란? Spring에서는 Spring의 DI Container에 의해 관리되는 POJO(Plain Old Java Object)를 Bean이라고 부르며, 이러한 Bean들은 Spring을 구성하는 핵심 요소이다. Spring의 Bean을 정리하면 아래와 같다. POJO(Plain Old Java Object..
2022.10.12 -
[Spring] @RequestParam, @RequestBody, @ModelAttribute
Spring에서 Client로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법들에 대해 알아보자. 1. 어노테이션들이 갖는 의미 1) @RequestParam @RequestParam은 1개의 HTTP 요청 파라미터를 받기 위해 사용한다. @RequestParam은 기본으로 설정된 필수 여부가 true이기 때문에 아무런 설정 없이 사용할 경우 반드시 해당 파라미터가 전송되어야 하며, 만일 파라미터가 전송되지 않을 경우 400 에러가 발생한다. 반드시 필요한 값이 아니라면 required를 false로 설정해주면 되고, defaultValue 옵션을 통해 기본값을 지정하는 방법도 가능하다. 2) @RequestBody @RequestBody는 클라이언트가 전송하는 json(application/json)..
2022.10.12