[Spring Boot] 스프링부트 (IntelliJ)/Spring boot

[Spring boot] 스프링 컨테이너 - request 과정

류도토리 2024. 2. 14. 17:16

<request 과정>

request -> web.xml -> ContextLoaderListener ->DispatchServlet(컴포넌트 스캔 > 주소 분배)

 

ContextLoaderListener

- 모든 자원들이 공통적으로 사용할 것들을 만들어둠 ex)DBConnector

- 어노테이션(ex -@Controller, @Restcontroller, @Configration 등)을 가지고 있는 것들을 모두 메모리에 띄움

- 어노테이션을 커스텀 할 수도 있음

 

servlet-applicationContext

- controllers, viewResolver, HandlerMapping를 메모리에 띄우고 관리함

- 웹만 바라보는 어노테이션을 스캔하고 ContextLoaderListener에 의해 실행됨

 

root-applicationContext

- service, repositories를 메모리에 띄우고 관리함

- 최상단에서 어노테이션을 스캔하고 DispatchServlet에 의해 실행됨

- DB관련 객체를 생성

 

Bean Factory

 - 객체를 Bean Factory에 등록하게 되면 초기에 메모리에 로드되지 않고 필요할 대 getBean()이라는 메소드를 통하여 메모리에 로드할 수 있다. 이것 또한 IoC이다. (lazy-loading)

 

 

ApplicationContext

 - ContextloaderListener가 ApplicationContext를 읽고 공통적으로 사용하는 것들을 메모리에 띄워주고 IoC에서 관리함

 - root-applicationContext와 servlet-applicationContext 두 가지가 있다.

 - 개발자가 직접 new를 통해 객체를 생성하게 되면 해당 객체를 가르키는 레퍼런스 변수를 관리하기 어렵다.

그래서 스프링이 직접 해당 객체를 관리한다. 이 대 우리는 주소를 몰라도 된다. 왜냐하면 필요할 때 DI하면 되기 때문이다. 필요할 때 ApplicationContext에 접근하여 필요한 객체를 가져올 수 있다. 

ApplicationContext는 싱글톤으로 관리되기 때문에 어디에서 접근하든 동일한 객체라는 것을 보장해준다.

 

 

컴포넌트 스캔

- 스프링부트에서는 모든 src 내부에 있는 모든 파일을 스캔함

 

static

- main메서드 실행되기 전부터 메모리에 떠있음

 

일반 자바 파일

- 특정 시간에 메모리에 떴다가 사라짐 (new로 메모리에 띄움)

 

IoC - 제어의 역전

DI - 의존성 주입