의존성 주입(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
- 코드로 배우는 스프링 웹 프로젝트
- https://dog-developers.tistory.com/12
- https://data-make.tistory.com/551
'Spring' 카테고리의 다른 글
download of template 'org.springframework.templates.mvc' failed (12) | 2021.12.20 |
---|---|
Spring Boot + gradle + Oracle 11g + MyBatis 연동 (4) | 2021.05.31 |
웹 프로젝트 폴더 구조 (0) | 2021.05.21 |
MVC 아키텍처 (0) | 2021.05.21 |
intellij에서 Spring Boot + jsp 사용하기 (0) | 2021.05.12 |
댓글