geeone 스터디 블로그

[Spring] GDG 2주차 WIL 본문

Spring

[Spring] GDG 2주차 WIL

alisongeeone 2024. 9. 27. 19:13

스프링 세션 2주차 내용 복습~ 

 

1. IoC(Inversion of Control) 컨테이너 

 

IoC(Inversion of Control) 컨테이너 & 빈

- IoC 컨테이너는 스프링에서 객체 생성을 책임지고 의존성 관리하는 컨테이너로, POJO의 생성, 초기화 ,서비스, 소멸에 대한 권한을 가짐

- IoC 컨테이너 안에 있는 객체들을 빈(Bean)들이라고 하고, IoC 기능을 제공하는 빈들을 담고 있기 때문에 컨테이너라고 부름

- 컨테이너로부터 빈들을 가져와서 사용 할 수 있음

- 빈(Bean)은 스프링 컨테이너가 관리하는, 즉 스프링이 직접 생성하고 의존관계를 부여하는 객체 

 

IoC 컨테이너의 종류

빈팩토리(BeanFactory)는 가장 기본적인 IoC 컨테이너이자 클래스임. 따라서, 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춤.

- 애플리케이션컨텍스트(ApplicationContext)는 빈 팩토리를 상속받아 확장한 것.

   -> 따라서, 빈 팩토리의 모든 기능을 포함하면서 추가 기능(Environment, MessageSource 등)을 제공한다. 빈을 생성하고 관계를 설정하는 등의 제어를 총괄하는 것에 초점을 맞춤. 

 

클라이언트 요청에 따른 빈 처리 과정 

1. 애플리케이션컨텍스트(ApplicationContext)는 @Configuration 이 붙은 클래스들을 설정 정보로 등록하고, 해당 클래스 안에 존재하는 @Bean 이 붙은 메소드의 이름으로 빈 목록을 생성한다. 

2. 클라이언트가 해당 빈을 요청

3. 애플리케이션컨텍스트(ApplicationContext)는 자신의 빈 목록에서 요청한 이름이 있는지 탐색한다.

4. 설정 클래스(Configuration Class)로 빈 생성을 요청하고 생성된 빈을 반환한다. 

 

 

-> 빈 관리는 BeanFactory를 상속한 ApplicationContext가 관련된 모든 작업을 총괄한다. 

 

 

등록하는 방법

#1 수동 등록 @Bean

1. 설정 클래스 파일에 @Configuration 적용

2. 내부에서 스프링 빈으로 등록할 메서드에 대해 @Bean 어노테이션 적용

-> 스프링 컨테이너는 @Configuration 이 붙어 있는 클래스를 찾아 파싱한 후, @Bean 이 붙은 오브젝트를 빈 객체로 등록

(메서드에 적용, 개발자가 직접 변경하기 어려운 대상에 사용)

 

#2 자동 등록 @Component

1. 컴포넌트 스캔을 통해 @Component 가 붙은 모든 오브젝트를 빈으로 자동 등록 

(클래스에만 사용, 개발자가 직접 변경 가능한 대상에 사용)

 

 

 생성하는 방법

싱글톤 레지스트리(Singleton Registry)

- 스프링에서 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공한다. 

- 기본 싱글톤 패턴의 단점 보완 : 싱글톤 패턴과 달리 스프링이 지지하는 객체지향적 설계 방식과 원칙, 디자인 패턴 등을 적용하는 데 제약이 없음. 

 

 

빈 생성 후 로딩하는 방법

1. Lazy-loading  : BeanFactory 방식

-> 메서드나 클래스가 빈 로딩 요청 받는 시점에 인스턴스 만들고 로딩

-> 모든 싱글톤 빈들이 인스턴스화 되므로 빈이 여러 개라면 시간 소요

(자주 사용되지 않는 빈이라면 소모 되는 지원 아낄 수 있음.)

 

2. Pre-loading  : ApplicationContext 방식

-> 모든 빈들과 설정 파일들이 ApplicationContext에 의해 로드 요청될 때 인스턴스로 만들어지고 로딩 

-> 미리 만들어진 빈들이 클라이언트로 리턴 

(자주 사용되는 빈이라면 한 번에 로드할 수 있음)

 

 

 

조건부 빈 처리

@Profile

: 애플리케이션의 실행 환경에 따라 빈을 다르게 구성할 때 사용.

ex) 개발 환경과 운영 환경에서 서로 다른 빈 사용하고 싶을 때

 

@Conditional

: 특정 조건 만족할 때만 빈 등록

 

@ConditionalOnProperty

: 프로퍼티의 조건에 따라 작동

: 환경 속성 있고 특정 값 있는 경우에만 빈 등록

 

@ConditionalOnMissingBean

: 특정 빈이 ApplicationContext에 없는 경우 빈 등록

 

@ConditionalOnClass

: 특정 클래스가 경로에 있을때만 빈 등록 

 

@ConditionalOnMissingClass

: 특정 클래스가 경로에 없을 때만 빈 등록

 

 

 

2. 자동 설정(Auto Configuration)

자동 설정이란?

-> 자주 사용하는 수많은 빈들을 자동으로 등록해주는 기능

-> 반복적으로 빈 등록 및 설정하는 부분을 줄임으로써 편리한 개발이 가능하기 때문에, 스프링 부트의 핵심 장점임.

 

@SpringBootConfiguration

- 스프링 부트의 설정을 나타내는 어노테이션

- 스프링의 @Configuration을 대체하는 스프링 부트 전용 필수 어노테이션

 

@ComponentScan

- 자기 자신부터 시작해서 하위 패키지까지 싹 훑어 @Component 어노테이션 붙인 클래스들을 찾아 빈으로 등록

 

@EnableAutoConfiguration

- 자동 설정의 핵심 어노테이션, 즉 Auto Configuration 활성화 하는 기능

 

자동 설정 동작 방식 정리

 

 

 

2주차 과제

자동 설정 모듈을 만들고 이를 스프링 부트 애플리케이션에 통합 (선택) 프로파일과 조건을 사용하여 스프링 부트의 자동 설정 충돌 해결 방식을 분석 과제 부가 설명 Spring boot 자동 설정에서 가장 중요한 것은 AutoConfiguration 클래스 입니다. 1. @Configuration 어노테이션이로 이 클래스가 스프링 설정 클래스임을 명시할 수 있는데요, 이때 특정 조건에서만 빈을 생성하도록 하기 위해 조건부 어노테이션을 사용합니다. (ex : @ConnditionalOnMissingBean, @ConditionalOnClass, @ConditionalOnProperty 등) 2. 스프링 부트는 자동 설정을 spring.factories 파일을 통해 인식합니다. 이 파일을 src/main/resources/META-INF 경로에 생성하고, 그 안에 자동 설정 클래스의 경로를 작성합니다. 3. 자동 설정 모듈은 별도의 라이브러리이므로, 이를 다른 스프링 부트 애플리케이션에서 사용하려면 의존성으로 추가해야 합니다. Maven 일 경우 pom.xml 에 추가해주세요.

 

1. 자동 설정 모듈 만들기 

 

 

 

2. autoconfigure 안에 build.gradle 파일 만들기

 

 

 

3. 간단한 비즈니스 로직 작성

 

 

 

 

4. 

 

 

 

 

5.