Spring Test 내용을 정리하면서 아직 Spring에 관련된 개념이 정리가 되지 않았다는 것을 꺠달았다. 이를 한번 정리하기 위해 Spring Core(2)를 작성하게 되었다.

Spring IoC 컨테이너 및 Bean 소개

스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 Bean이라고 부른다. 그리고 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 BeanFactory또는 ApplicationContext라고 부른다. ApplicationcontextBeanFactory에 엔터프라이즈 애플리케이션을 개발하는데 필요한 여러 가지 컨테이너 기능이 추가되어있다. ApplicatoinContextBeanFactory의 서브 인터페이스다. ApplicationContext는 다음이 추가 되어있다.

  • Spring의 AOP 기능과 쉽게 통합
  • 메시지 리소스 핸들링
  • 이벤트 발행
  • 웹 애플리케이션 사용을 위한 WebApplicationContext 같은 애플리케이션 레이어의 컨텍스트

WebApplicationContext는 Spring 애플리케이션에서 가장 많이 사용되는 ApplicationContext다. WebApplicationContextApplicationContext의 서브 인터페이스다. 미리 DispatcherServletWebApplicationContext를 만들어두고, 요청이 서블릿으로 들어올 떄마다 getBean()으로 필요한 빈을 가져와 정해진 메서드를 호출한다.

Configuration

ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 메타정보를 말한다. 컨테이너에 어떤 기능을 세팅하거나 조정하는 경우에도 사용하지만, IoC 컨테이너의 의해 관리되는 빈을 생성하고 구성할 떄 사용된다.

Spring Bean Scope

Spring은 기본적으로 모든 Bean을 singletone으로 생성하여 관리한다. 따라서, 일반적으로 우리가 주입받은 Bean은 같은 객체라고 믿을 수 있었다. 하지만 singleton 뿐만 아니라 다른 Scope도 존재한다.

Scope 설명
singletone 하나의 Bean 정의에 대해서 Spring IoC 컨테이너 내에 하나의 객체만 존재한다.
prototype 하나의 Bean 정의에 다수의 객체가 존재할 수 있다.
request 하나의 HTTP 요청에 하나의 Bean 객체가 존재할 수 있다.
session 하나의 HTTP session에 하나의 Bean 객체가 존재할 수 있다.
application 하나의 ServletContext에 하나의 Bean 객체가 존재할 수 있다.
websocket 하나의 WebSocket에 하나의 Bean 객체가 존재할 수 있다.

참고 자료

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core

토비 스프링 3.1 (이일민)

댓글남기기