티스토리 뷰

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로 관리하여 메모리를 띄워 놓는다.
        • 따라서 어떤 어노테이션이 어떤 역할을 하는지 알아야 한다. 잘 알면 커스텀 어노테이션을 직접 만들수도 있지만 아직 그러기엔 멀었다.

출처 : https://www.youtube.com/watch?v=YRdS7qcZ8AY&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg&index=13 

 

후기

 

 ApplicationContext에 대하여 공부했다. 강의가 좀 두서가 없어서 뭔가 알다가도 모르겠다. 좀더 따로 공부를 해야겠다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함