본문 바로가기
Spring

[spring] 스프링 빈의 기본 개념

by 개미가되고싶은사람 2024. 3. 24.

스프링 컨테이너

Spring 컨테이너는 Spring 애플리케이션의 핵심 구성 요소인 빈(Bean) 객체들을 생성, 구성, 그리고 소멸에 이르는 전반적인 생명주기를 관리하는 역할을 담당하며, 이를 통해 개발자는 빈의 생성 및 의존성 관리에 대한 부담을 덜고 핵심 비즈니스 로직 개발에 집중할 수 있도록 개발 프로세스를 단순화합니다.

 


Spring 컨테이너는 크게 BeanFactory와 ApplicationContext의 두 가지 유형으로 분류할 수 있습니다.

 


BeanFactory

  • BeanFactory은 스프링 컨테이너의 최상위 인터페이스
  • Spring 애플리케이션에서 Bean을 관리하고 조회하는 역할 .


ApplicationContext

  • ApplicationContext는 BeanFactory 인터페이스의 확장
  • BeanFactory의 모든 기능을 상속받고 추가 기능을 제공한다
  • 일반적으로 많은 기능과  편의성 때문에 ApplicationContext를 주로 사용한다
  • ApplicationContext가 제공하는 추가 기능에는 메시지 소스를 사용한 국제화 기능, 환경 변수 처리, 애플리케이션 이벤트 및 리소스 조회가 포함된다


정리
BeanFactory이 Bean을 관리하고 조회하는 역할을 하지만 ApplicationContext이 더 많은 기능을 제공하기 때문에 일반적으로 사용한다.


스프링 빈

스프링에서 생성하고 관리하는 자바 객체를 의미한다. 스프링 빈을 등록하는 방법은 자동 등록, 수동 등록이 있습니다.

 

1. 자동 등록

Spring 프레임워크에서 제공하는 @Service, @Repository, @Controller와 같은 어노테이션들은 모두 @Component 어노테이션을 포함하는 스테레오타입으로, @ComponentScan에 의해 자동으로 스캔되어 해당 클래스들을 Spring 컨테이너에 빈(Bean)으로 등록합니다.

 

2. 수동 등록

스프링 빈을 수동으로 등록하는 것은 @Configuration과 @Bean 어노테이션으로 가낭합니다.

@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

 

 

자동, 수동의 올바른 실무 운영 기준

편리한 자동 기능을 기본으로 사용한다.

기술 발전과 함께 자동화를 선호하는 추세가 강해지는 가운데, Spring 프레임워크는 @Component 어노테이션뿐만 아니라 @Controller, @Service, @Repository와 같이 계층별 역할을 명확히 하는 어노테이션을 통해 애플리케이션 로직을 자동으로 스캔하고 빈으로 등록할 수 있도록 지원하며, 최근의 Spring Boot는 이러한 컴포넌트 스캔을 기본으로 활용할 뿐만 아니라 다양한 Spring 빈들을 특정 조건에 따라 자동으로 등록하도록 설계되어 개발 편의성을 극대화하고 있습니다.

수동 빈 등록은 언제 사용하면 좋을까?

애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있다.

  • 업무 로직 빈: 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리등이 모두 업무 로직이다. 보통 비즈니스 요구사항을 개발할 때 추가되거나 변경된다.
  • 기술 지원 빈: 기술적인 문제나 공통 관심사(AOP)를 처리할 때 주로 사용된다. 데이터베이스 연결이나, 공통 로그처리 처럼 업무 로직을 지원하기 위한 하부 기술이나 공통 기술들이다.