싱글톤 컨테이너

jungnoeun·2022년 8월 22일
0

spring

목록 보기
5/24

싱글톤

: 객체가 JVM안에 하나만 있어야 하는 것

  • 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다.



싱글톤 컨테이너

스프링 컨테이너도 싱글톤 컨테이너이다.
스프링 컨테이너는 인스턴스를 싱글톤(1개만 생성)으로 관리한다



싱글톤이 아닌 경우

웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 그리고 요청에 따라 각각 새로운 객체가 생성된다.
-> 이러한 요청들이 많고 계속되는데, 요청이 올때마다 객체를 만들어야 하는 문제가 발생한다.



싱글톤 컨테이너를 적용한 경우

스프링 컨테이너 덕분에 고객의 요청이 올 때 마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효율적으로 재사용할 수 있다.





싱글톤 방식의 주의점

객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다.
-> 무상태로 설계해야 하고 가급적 값을 수정하면 안된다.





컴포넌트 스캔

AppConfig 와 같은 설정정보가 없어도 스프링 컨테이너에 스프링 빈을 등록하는 방법
스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 <bean> 등을 통해서 설정 정보에 직접 등록할 수 있다.
하지만 등록할 빈이 많은 경우, 등록할때 누락이나 오류가 발생할 수 있다. 이때 컴포넌트 스캔을 이용해서 자동으로 스프링 빈을 등록하게 할 수 있다.



@ComponentScan

@ComponentScan은 @Component가 붙은 클래스를 찾아서 자동으로 스프링 빈으로 등록을 해준다.

필터

  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다
@ComponentScan(
	excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)




컴포넌트 스캔 과정


컴포넌트 스캔

@ComponentScan이 되어 있으면 스프링 컨테이너가 클래스를 다 뒤져서 @Component 가 붙은 것들을 스프링 컨테이너에 자동으로 등록한다. 이때 모두 싱글톤으로 등록이 된다.


@Autowired 의존관계 자동 주입

생성자에 @Autowired가 붙어있으면 생성자를 실행하면서 스프링 컨테이너에 있는 빈 이름을 탐색한다. 그래서 요청된 빈과 같은 타입이 있는지 조회하고 있으면 찾아서 요청된 의존관계에 주입한다.








컴포넌트 스캔 기본 대상

컴포넌트 스캔은 @Component 뿐만 아니라 다음과 내용도 추가로 대상에 포함한다.

@Component

: 컴포넌트 스캔에서 사용

@Controlller

  • 스프링 MVC 컨트롤러에서 사용
  • 스프링 MVC 컨트롤러로 인식

@Service

  • 스프링 비즈니스 로직에서 사용
  • @Service계층에서 @Transaction도 시작한다. 왜냐면 비즈니스 로직이 시작할때 트랜잭션이 걸리는게 맞기 때문이다.

@Repository

  • 스프링 데이터 접근 계층에서 사용
  • 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.

@Configuration :

  • 스프링 설정 정보에서 사용
  • 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
profile
개발자

0개의 댓글