개발/Spring, Spring Data JPA, Querydsl

Spring - bean, root-context, servlet-context,

잇(IT) 2023. 5. 29. 11:28
728x90

- Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다.

- 일반적으로 자바 프로그램에서는 1. 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했다. 즉, 모든 작업을 사용자가 제어하는 구조였다.

ex) A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출했다.

- 하지만 IoC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤러하는 주체는 다른 주체가 된다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IoC(제어의 역전)라고 한다.

 

- 우리가 알던 기존의 자바 프로그래밍에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했다. 하지만 Spring에서는 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 한다.


- Spring에서 말하는 컨텍스트(context)는 스프링이 관리하는 빈들이 담겨 있는 컨테이너 라고 생각하면 된다.

 

- root-context는 ContextLoaderListener를 이용하여, servlet-context는 DispatcherServlet을 이용하여 생성한다.

 

1. root-context

- root-context에 등록되는 bean들은 모든 context에서 사용할 수 있다.(공유)

- service나 dao를 포함한, 웹 환경에 독립적인 bean들을 담아둔다.

- 서로 다른 servlet-context에서 공유해야 하는 bean들을 등록해놓고 사용할 수 있다.

- servlet-context 내 bean들은 이용이 불가능하다.

 

2. servlet-context

- servlet-context에 등록되는 bean들은 해당 context에서만 사용할 수 있다.

- DispatcherServlet이 직접 사용하는 컨트롤러를 포함한 웹 관련 bean을 등록하는 데 사용한다.

- 독자적인 context를 가지며, root-context 내 bean 사용이 가능하다.

 

- root-context 같은 경우 Service와 Repository(Dao), servlet-context 같은 경우 Controller를 담당한다.

 

* 겹치는 bean이 생길 경우 servlet-context의 빈을 우선시 한다.

 

728x90