Tech/Spring & Jpa

스프링 컨테이너와 빈

mozzi329 2023. 1. 10. 21:48
728x90

 

📌 알림


해당 글은 공부 목적으로 작성한 글입니다.

 

📌 스프링 컨테이너(Spring Container)


스프링 프레임워크에서 지원하는 스프링 컨테이너(Spring Container)는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다.

 

📌 빈(Bean)


스프링 컨테이너가 관리하는 자바 객체를 말하며, 스프링 컨테이너를 통해 빈을 등록 및 사용할 수 있다. Bean 애너테이션을 사용해 등록하거나 xml을 사용해 빈을 등록한다.

빈의 생명주기
스프링 컨테이너의 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료
순으로 스프링 컨테이너에 의해 빈의 생명주기가 관리된다. 스프링 컨테이너 초기화 시 빈 객체를 생성하고 의존 객체를 주입 및 초기화한다. 의존관계 주입은 필수 정보를 받고 메모리 할당을 통해 객체를 생성한다.

초기화는 생성된 값들을 활용해 외부 커넥션을 연결하는 등 무거운 작업이 수행되므로 객체의 생성과 초기화는 분리되는 것이 좋다.
초기화 콜백과 소멸 전 콜백은 PostConstruct, PreDestroy 애너태이션으로 콜백을 사용할 수 있다. (스프링 권장)

 

📌 빈 스코프(Bean Scope)


빈이 사용되어지는 범위를 말하며 스프링은 다음과 같은 다양한 스코프를 지원한다.

싱글톤 스코프(Singleton Scope)
스프링 프레임워크의 기본이 되는 스코프로, 스프링 컨테이너 시작과 종료까지 1개의 객체로 유지된다. (ApplicationContext)

프로토타입 스코프(ProtoType Scope)
스프링 컨테이너에서 빈의 생성, 의존관계 주입, 초기화까지만 관여하고 이후에는 컨테이너에서 관리하지 않는 스코프로 매 요청마다 새로 만들어진다. 싱글톤은 스프링이 뜰 때 생성되는데 반해, 프로토타입은 요청될 때 생성된다.

웹 스코프(Web Scope)
웹 애플리케이션에서 동작하는 스코프로, 싱글톤 스코프처럼 스프링 컨테이너가 생성 시점부터 종료 시점까지 관리해준다. 웹 스코프의 종류로 request, session, application, websocket 등의 스코프가 존재한다.

 

📌 모의 면접


스프링 컨테이너와 빈에 대해 설명해주세요.
스프링 프레임워크에서 지원하는 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다. 여기서 빈은 스프링 컨테이너가 관리하는 자바 객체를 말하며, 스프링 컨테이너를 통해 빈을 등록 및 사용할 수 있습니다. Bean 애너테이션을 사용해 등록하거나 xml을 사용해 빈을 등록한다.

스프링 컨테이너의 종류에 대해 설명해주세요.(+⍺)
스프링 컨테이너는 크게 BeanFactory와 ApplicationContext가 있습니다.
BeanFactory는 빈의 등록, 생성, 조회 등 빈을 관리하는 역할을 합니다. 스프링 컨테이너 안에 존재하며 Bean 애너테이션 혹은 XML에 등록된 Bean 정보를 가지고 getBean() 메서드를 사용하여 빈을 등록합니다. 스프링 컨테이너 역시 빈을 관리하는 역할을 하지만 싱글톤 형태로 등록된 빈을 모두 로드하여 애플리케이션 가동 시 빈을 지연 없이 받을 수 있다는 특징이 있습니다. BeanFactory보다 부가 기능이 더 많고 빈을 지연 없이 얻을 수 있다는 장점으로 ApplicationContext를 실제 개발에서 주로 사용합니다.

빈의 스코프에 대해 설명해주세요.(+⍺)
빈이 사용되어지는 범위를 말하며 스코프의 종류로는 싱글톤, 프로토타입, 웹 스코프가 있습니다.
싱글톤 스코프는 스프링 프레임워크의 기본이 되는 스코프로, 스프링 컨테이너 시작과 종료까지 1개의 객체로 유지됩니다. 프로토타입 스코프는 스프링 컨테이너에서 빈의 생성, 의존관계 주입, 초기화까지만 관여하고 이후에는 컨테이너에서 관리하지 않는 스코프로 매 요청마다 생성됩니다. 싱글톤은 스프링이 뜰 때 생성되는데 반해, 프로토타입의 빈은 요청이 될 때 생성됩니다. 웹 스코프는 웹 애플리케이션에서 동작하는 스코프로, 싱글톤 스코프처럼 스프링 컨테이너가 생성 시점부터 종료 시점까지 관리해줍니다. 웹 스코프의 종류로는 request, session, application, websocket 등의 스코프가 존재합니다.

빈의 생명주기에 대해 설명해주세요.
빈의 생명주기는 스프링 컨테이너의 생성, 스프링 빈 생성, 의존 관계 주입, 초기화 콜백, 사용, 소멸 전 콜백, 스프링 종료 순으로, 전체 과정은 스프링 컨테이너에 의해 관리됩니다. 스프링 컨테이너 초기화 시 빈 객체를 생성하고 의존 객체를 주입 및 초기화합ㅂ니다. 의존 관계 주입은 필수 정보를 받고 메모리 할당을 통해 객체를 생성합니다. 

객체의 생성과 초기화를 분리하는 것이 좋은 이유(+⍺)
초기화는 생성된 값들을 활용해 외부 커넥션을 연결하는 등 무거운 작업이 수행되므로 객체의 생성과 초기화를 분리하는 것이 좋습니다.