IOC컨테이너 역할은?

jaeyong Lee·2024년 7월 10일
0

개념

ioc(inversion of control container) 는 full name에서 나타나듯이 객체들을 미리 빈 상태로 만들어서 관계설정하고 spring의 흐름을 만들어줄 수 있다.
이 컨테이너 안에 객체들이 미리 bean으로 설정된다.

코드로 보기(프로젝트 attiwell 코드)

spring에서 처음 실행되는 파일은 web.xml파일이다. 여기서 두가지를 ioc로 인식하게 되는데 하나는 spring context(스프링 범위) 고 다른 하나는 servlet context(웹 범위) 이다.
-일반적으로 spring에서는 두개의 ioc가 있음

추가로 왜 spring container, servlet container로 명칭하지 않고 context로 명했을까?
: container라는 담는다는 의미를 넘어서 app의 환경과 설정을 관리하고 객체관의 관계를 정의한다는 점을 강조하기위해 context라 부른다. 실제로 lib에 보면 context라는건 없다.

아래는 web.xml 파일이다.

2. spring context 설정 -> spring 전역설정을 mybatis-context.xml로 하겠다. 
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/mybatis-context.xml</param-value>
  </context-param>
  <listener>
    
    
   context-param에서 지정한 설정 파일 로드
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>



4. dispatcherServlet 설정 
spring mvc 핵심 서블릿 -> dispatcher 설정파일 servlet-context.xml설정
경로 : / -> 모든 경로에 dispatcher servlet 적용
load on start : 서블릿들 사이에서 첫번째로 초기화
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

왜 servlet context를 dispatcher servlet으로 지정했는가? (반대이다. 이유는 아래 링크)

https://velog.io/@lee41180612/%ED%94%84%EB%A1%A0%ED%8A%B8-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EB%9F%AC%EB%9E%80

정리)

spring에서는 기본적으로 2개의 ioc가 있음
spring context : spring 범위
servlet context : 웹 범위
ioc의 역할)
객체들을 미리 빈 상태로 만들어서 관계설정하여 의존성을 해결하고 spring의 전체적인 흐름을 만들어줄 수 있다. -> 비즈니스 로직과 환경,관계설정을 분리하여 유지보수하기 쉽게 만든다.

0개의 댓글

관련 채용 정보