티스토리 뷰
ApplicationContext
- DispatchServlet이 컴포넌트(src 폴더)를 스캔할 때 수 많은 객체들이 ApplicationContext에 등록된다.
- 이것을 IoC 라고 한다.
- 개발자가 직접 new 를 통해 객체를 생성하게 되면 해당 객체를 가르키는 레퍼런스 변수를 관리하기 어렵다.
- 따라서 (특정 어노테이션을 붙여서) 스프링이 직접 해당 객체를 관리한다.
- 이때 우리는 주소를 몰라도 된다. 왜냐하면 필요할 때 DI하면 되기 때문이다.
- 이제 필요한 곳에서 ApplicationContext에 접근하여 필요한 객체를 가져올 수 있다.
- ApplicationContext는 싱글톤으로 관리되므로 어디에서 접근하든 동일한 객체임을 보장한다.
- ApplicationContext의 종류는 2가지이다.
- servlet-applicationContext : DispatcherServlet에 의해 실행되는 파일이다. 웹과 관련된 어노테이션(@Controller, @RestController)을 스캔하여 메모리에 띄운다.
- root-applicationContext : ContextLoaderListener에 의해 실행되는 파일이다. @Service, @Repository 등을 스캔하여 메모리에 띄우고 DB관련 객체를 생성한다.
- ContextLoaderListener 는 web.xml에서 실행하기 때문에 root-applicationContext는 servlet-applicationContext보다 먼저 로드된다.
- 당연히 servlet-applicationContext에서는 root-applicationContext가 로드한 객체를 참조할 수 있지만 그 반대는 불가능하다. 생성시점이 다르기 때문.
Bean Factory
- 필요한 객체를 Bean Factory에 등록할 수도 있다.
- 등록하면 초기에 메모리에 로드되지 않고 필요한 때에 getBean() 이라는 메소드를 통해 호출하여 메모리에 로드할 수 있었다. 이것또한 IoC이다.
- 현재는 getBean()을 쓸필요도 없고 그냥 메소드위에 어노테이션을 붙이기만 하면 된다.
- 그리고 필요할 때 DI하여 사용할 수 있다.
- ApplicationContext와 다른 점 : Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드하기 때문에 lazy-loading이 된다.
진행과정을 통해 ApplicationContext가 하는 일을 확인해 보자.
- 외부에서 request 요청이 온다.
- Spring은 모든 요청이 Java 파일(servlet)이므로 Apachi 웹서버는 머리속에서 지우자. 톰켓으로 요청이 온다.
- 첫 번째로 문지기 역할을 수행하는 web.xml 이 로딩 된다.
- ContextLoaderListener가 로딩 된다.
- ContextLoaderListener는 root-ApplicationContext 파일을 읽는다.
- root-context.xml, applicationContext.xml 로 불린다.
- 이때 모든 스레드들이 공유해서 사용하는 것들(예를들면 DB커넥션)을 미리 메모리에 띄운다.
- 다시 web.xml에서 Spring 내부로 들어가기 위해서 2가지 일을 한다.
- DispatchServlet이 동작한다. DispatchServlet은 컴포넌트를 스캔하여 필요한 것들을 메모리에 올린다.
- src 폴더 내부에 있는 모든 파일을 스캔한다.
- Spring 에서는 스캔의 범위를 지정했었지만 Spring Boot 에서는 all 스캔 한다.
- @Controller, @RestController, @Configration, @Repository, @Service, @Bean, @Component 등등 스캔하다가 특정 어노테이션이 붙어있으면 IoC로 관리하여 메모리를 띄워 놓는다.
- 따라서 어떤 어노테이션이 어떤 역할을 하는지 알아야 한다. 잘 알면 커스텀 어노테이션을 직접 만들수도 있지만 아직 그러기엔 멀었다.
- DispatchServlet이 동작한다. DispatchServlet은 컴포넌트를 스캔하여 필요한 것들을 메모리에 올린다.
출처 : https://www.youtube.com/watch?v=YRdS7qcZ8AY&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=13
후기
ApplicationContext에 대하여 공부했다. 강의가 좀 두서가 없어서 뭔가 알다가도 모르겠다. 좀더 따로 공부를 해야겠다.
'Web 개발' 카테고리의 다른 글
[Web] Spring Boot with JPA - QnA (0) | 2021.09.21 |
---|---|
[Web] Spring Boot with JPA (0-6) response하는 법 (0) | 2021.08.29 |
[Web] Spring Boot with JPA (0-5) FrontController와 RequestDispatcher 그리고 DispatcherServlet. (0) | 2021.08.28 |
[Web] Spring Boot with JPA (0-4) web.xml 이 하는일 (0) | 2021.08.27 |
[Web] Spring Boot with JPA (0-3) 소켓 통신과 Apachi Tomcat (0) | 2021.08.26 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- g4
- 리액트 네이티브
- Spring Boot
- 리액트
- 객체지향
- 백준
- BFS
- G5
- DFS
- laugh4mile
- SWEA
- 알고리즘
- 다익스트라
- 시뮬레이션
- S2
- react native
- Spring
- 현꾸라지
- 구현
- 우선순위큐
- 백트래킹
- S3
- 문자열
- 자바
- react
- java
- map
- 그리디
- 코딩새내기
- PriorityQueue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함