본문 바로가기
Spring

DI, IoC, root-context.xml

by 매트(Mat) 2021. 5. 31.

의존성 주입(DI)

  • 의존성(Dependency)이란, 하나의 객체가 다른 객체 없이는 제대로 된 역할을 수행할 수 없다는 것을 의미합니다. 예를 들면, 레스토랑에 서빙은 없어도 되지만 쉐프는 없으면 안됩니다. 바로 이런 개념입니다.
  • 주입(Injection)이란, 외부에서 밀어넣는 것(주입)을 의미합니다. 예를 들면, 레스토랑의 식재료를 구하기 위해서는 본인이 직접 수산시장에 가서 구할 수도 있고, 프렌차이즈라면 본사에서 대신 준비를 해줄 수도 있습니다. 즉, 능동적인지 수동적인지입니다.
  • 다시 말해 의존성 주입(DI)이란 외부에서 필요한 객체를 밀어 넣는다를 의미합니다. 이것의 장점은 내가 직접 준비하지 않아도 외부에서 준비해주니까 편리하다는 장점이 있습니다.


IoC(Inversion of Control)

  • 말 그대로 제어의 역전
  • 즉, 코드를 제어하는 흐름(객체 생성, 관리 등등)을 개발자가 직접하는 것이 아니라 외부에서 대신 해주는 것입니다. -> 스프링 프레임워크가 대신 해줍니다.
  • 이렇게 객체를 생성해주고 생명주기를 관리해주는 것이 IoC 컨테이너라고 합니다.
  • IoC 컨테이너는 POJO(Plain Old Java Object) 객체를 생성해주고 의존성을 관리해줍니다.
  • 이처럼 개발자가 직접 클래스내에 인스턴스 객체를 만들 수도 있지만 개발자는 로직에만 집중하고 IoC 컨테이너가 객체를 대신 만들어줍니다.


root-context.xml

  • 스프링(IoC 컨테이너)에서 관리되는 객체를 빈(Bean)이라고 합니다.
  • root-context.xml 파일은 스프링 프레임워크에서 관리해야 하는 객체(빈)들을 설정하는 설정 파일입니다.

캡처

  • 스프링 프레임워크가 시작되면 스프링이 사용하는 메모리 영역을 만들게 되는데 이를 컨텍스트(Context)라고 합니다. 스프링에서는 ApplicationContext라는 이름의 객체가 만들어집니다.
  • 스프링은 자신이 객체를 생성하고 관리해야 하는 객체들에 대한 설정이 필요하는데, 이에 대한 설정이 root-context.xml입니다.
  • root-context.xml에 설정되어 있는 <context:component-scan> 태그의 내용을 통해서 패키지를 쭉 스캔(Scan)합니다.
  • 스캔을 해서 @Component 애노테이션이 있는 클래스의 인스턴스를 생성합니다.
  • 그리고 이 생성된 인스턴스를 사용하기 위해서 @Autowired를 이용하여 주입하면 됩니다.
  • 단, 스프링 부트에서 root-context.xml, servlet-context, web.xml 파일은 필요하지 않습니다. 스프링에 대한 설정 파일(root-context.xml, servlet-context)은 모두 application.properties에서 처리할 수 있으며, web.xml 파일은 외부에서 읽어들일 필요가 없으므로 스프링 부트에서는 필요가 없습니다.




References

댓글