[전 강의]
이전 강의에서는 스프링 컨테이너의 생성과 스프링 빈 추가 및 조회,
그리고 그 빈끼리의 상속관계에 대해 배웠다.
이어서 배울 내용
#섹션 5 - 6. BeanFactory와 ApplicationContext
BeanFactory와 ApplicationContext에 대해 알아보자
먼저 BeanFactory에 대해 알아보자
1. BeanFactory는 스프링 컨테이너의 최상위 인터페이스이다.
- 스프링 컨테이너 구조에서 가장 기본이 되는 인터페이스라는 뜻 ( 다른 컨테이너의 기반 )
2. 다양한 역할을 담당한다.
- BeanFactory는 스프링 빈을 관리하는 역할, 조회하는 역할을 한다.
(+) getBean( )을 제공한다
-> getBean( )은 스프링 컨테이너에 등록된 빈을 꺼내오는 메서드이다.
다음으로 ApplicationContext에 대해서도 알아보자
1. BeanFactory를 확장한 인터페이스이다.
- 즉 BeanFactory의 기능을 모두 상속 받아 제공한다.
2.BeanFactory와 비슷한 기능을 가진다
-* 그럼 둘의 차이는 뭘까 *-
--> ApplicationContext의 수많은 부가기능이 존재
1. 메시지소스를 활용한 국제화 기능 | 2. 환경변수 |
3. 애플리케이션 이벤트 | 4. 편리한 리소스 조회 |
#섹션 5 - 7. 다양한 설정 형식 지원 - 자바 코드 ,XML
지금까지 한 코드가 자바 코드이다.
XML은 요즘 들어 잘 사용하지 않지만 어느정도 알아두면 좋다
<라이브 코딩>
자바 코드와 XML와 비슷하다
-- 간단하게 넘어감 --
#섹션 5 - 8 스프링 빈 메타정보 - BeanDefinition
BeanDefintion는 스프링이 빈을 관리하는 원리를 이해하는데 핵심적인 역할
즉) 빈이 어떤 클래스인지, 어떤 설정인지, 어떻게 생성 및 초기화되는지 설명하는 메타 정보
위 사진으로 설명하면
1. Annotated BeanDefintionReader를 통해 AppConfig.class의 설정 정보를 읽고
2. BeanDefinition을 생성한다(빈 메타정보 생성)
추가적인 BeanDefinition 정보가 있지만 자세히 알아보진 않는다.
사용할 일이 거의 없기에
- 이해해야할 내용은 "스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용하는 것" 이다.
#섹션 6 - 1. 웹 애플리케이션과 싱글톤
웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.
<순수한 DI 컨테이너>
1. 사용자가 appConfig 호출 |
2. 요청이 될때마다 객체를 생성함 |
3. 객체가 계속해서 생성됨 |
그래서 여러 요청이 들어오면 호출이 될때마다 새로운 객체를 생성해야한다.
따라서 고객 트래픽이 초당 100이면 초당 100개 객체가 생성되고 소멸된다
-> 메모리 낭비가 심하다
*해결방안*
해당 객체가 딱 1개만 생성되고, 공유되도록 설계한다.
#섹션 6 - 2. 싱글톤 패턴
<중요>
싱글톤 패턴 = "클래스의 인스턴스가 딱 1개만 생성되도록 하는 디자인 패턴"
1. static 에서 객체 인스턴스를 미리 하나만 생성해서 올려둠
2. 생성한 객체의 인스턴스가 필요하면 오직 getInstance( ) 메서드를 통해서만 조회할수 있음
3. 딱 1개의 객체 인스턴스만 존재해야하므로, 생성자를 private으로 막아서 외부에서 새롭게 생성되는 객체 인스턴스를 막음
<장점> 이미 만들어진 객체를 공유해서 효율적으로 사용이 가능하다.
<단점> 하지만 문제점이 많다
(1) 싱글톤 패턴 구현 코드 자체가 많이 들어간다.
(2) DIP를 위반한다.
(3) 테스트하기 어렵다
등등등...
위 문제를 해결하기 위해 싱글톤 컨테이너가 존재한다
싱글톤 컨테이너는 다음 스터디부터 시작해보겠습니다~
'WINK-(Web & App) > Spring Boot 스터디' 카테고리의 다른 글
[2025 1학기 스프링 부트 스터디] 석준환 #7주차 (0) | 2025.05.27 |
---|---|
[2025 1학기 스프링 부트 스터디] 남윤찬 #7주차 (0) | 2025.05.27 |
[2025 1학기 스프링 부트 스터디] 이상래 #7주차 (0) | 2025.05.25 |
[2025 1학기 스프링부트 스터디] 고윤정 #7주차 (0) | 2025.05.24 |
[2025 1학기 스프링부트 스터디] 김민서 #7주차 (0) | 2025.05.24 |