-
IoC 컨테이너(Application Context)와 빈Spring 2023. 8. 22. 13:07
해당 글은 공부한 내용을 정리한 것이며 잘못된 오류가 있다면 지적 부탁드립니다.
IoC 컨테이너란 ? 스프링에서 객체를 빈으로 관리하며, 빈 관리가 IoC (Inversion of Control) 컨테이너의 역할입니다. 기본적으로 스프링에서 모든 빈은 싱글톤(Singleton) 스코프로 등록되며, 하나의 객체 인스턴스가 생성되어 여러 곳에서 공유됩니다. 이로 인해 초기 생성 비용을 단 한 번만 지불하면 되는 장점이 있습니다. 또한, 빈으로 등록한 객체들의 의존성 주입(DI)을 IoC 컨테이너가 수행하고, 빈의 생명주기 관리도 해줌으로써 개발자가 객체의 생성과 의존성 주입 등을 관리하는 수고를 덜게 됩니다. 이로써 제어의 역할이 코드를 작성하는 사용자에서 스프링 프레임워크로 역전되므로 "Inversion of Control"이라 불립니다. 이러한 IoC 컨테이너의 구현체 중 하나가 스프링의 Application Context입니다.
이미지 출처 : https://tutorialsinhand.com/Articles/explain-spring-ioc-container-internal-working.aspx 빈 등록
객체를 빈으로 등록하는 방법에는 여러가지가 있다.
1. 설정파일을 이용한 빈 등록
2. @Component 어노테이션을 포함하고 있는 어노테이션을 선언하여 빈 등록
3. Java 설정 파일을 이용한 빈 등록
보편적으로 많이 쓰이는 방법은 2번 방법이다.
빈의 스코프란 ? 스프링에서 모든 빈은 기본적으로 싱글톤으로 등록되며, 객체 당 하나의 인스턴스가 생성되어 여러 곳에서 공유됩니다. 하지만 때로는 프로토타입(Prototype) 스코프의 빈이 필요할 수 있습니다. 프로토타입 스코프의 빈은 매번 새로운 인스턴스가 생성되어 사용되므로 객체 간에 독립성을 유지할 수 있습니다. 프로토타입 스코프의 빈을 등록하려면 해당 빈 클래스에 `@Scope("prototype")` 어노테이션을 추가하면 됩니다.
@Component @Scope("prototype") public class Prototype { }
*주의점* 만약 싱글톤으로 등록된 빈에서 프로토타입의 빈을 참조하고 있는 경우가 있고 이를 의도했다면 문제가 되지 않지만 의도하지 않은 경우라면 문제가 될 수도 있다. 싱글톤빈은 한번만 생성되기 때문에 프로토타입의 빈도 싱글톤빈을 생성할 때와 같은 인스턴스를 사용하기 때문에 의도한 경우가 아니라면 문제가 될 수 있다.
이는 프로토타입의 빈을 프록시를 적용하여 싱글톤 빈의 참조부분이 프록시에 접근하게끔하면 해결이 가능하며 이는 프록시에 관한 AOP를 정리할 때 자세히 정리할 계획이다.
'Spring' 카테고리의 다른 글
@ModelAttribute를 사용하여 직렬화 (0) 2023.11.29 HttpMessageConverter (0) 2023.10.05 Converter, Formatter (0) 2023.08.29 로그 (Log) (0) 2023.04.03 Spring Framework의 시작 (0) 2023.03.24