BE/Spring & Spring Boot

[Spring Boot] 빈이란

baek-dev 2024. 12. 15. 13:22

빈(Bean)이란

Spring IoC컨테이너에 의해 관리되는 객체를 의미한다

Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다

 

특징

1. 생성 및 관리

  • Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다
  • 개발자가 직접 객체를 생성하고 관리할 필요가 없다

2. 의존성 주입(DI)

  • 빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다

3. 싱글톤 기본 설정

  • Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)

4. 구성 파일 또는 어노테이션으로 정의

  • XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다

Spring Bean의 생성 방법

1. XML 기반 설정

  • XML 파일에서 `<bean>` 태그를 사용하여 빈 정의
<bean id="myBean" class="com.example.MyClass"/>

 

2. Java Config 기반 설정

  • `@Configuration`과 `@Bean`어노테이션 사용
@Configuration
public class AppConfig {
    @Bean
    public MyClass myBean() {
        return new MyClass();
    }
}

 

3. 어노테이션 기반 설정

  • `@Component`, `@Service`, `@Repository`, `@Controller` 등의 어노테이션으로 빈 자동 등록
  • `@ComponentScan`으로 패키지를 스캔하여 등록
@Component
public class MyBean {
    // 빈으로 관리되는 클래스
}

Spring Bean의 주요 어노테이션

1. @Component

  • 일반적인 빈 등록에 사용

2. @Service

  • 서비스 계층 클래스에서 사용

3. @Repository

  • 데이터 액세스 계층에서 사용하며, 예외를 스프링 예외로 변환하는 역할

4. @Controller / @RestController

  • 웹 컨트롤러 계층에서 사용

5. @Bean

  • 메서드 레벨에서 Bean을 등록할 때 사용

Spring Bean의 스코프

빈의 스코프는 빈의 생명주기를 정의한다

 

1. 싱글톤(기본값)

  • 애플리케이션 내에서 Bean의 단일 인스턴스를 공유
@Scope("singleton")

 

2.  프로토타입

  • 요청마다 새로운 Bean 인스턴스를 생성
@Scope("prototype")

 

3. 웹 관련 스코프

  • request : HTTP 요청마다 새로운 인스턴스 생성
  • session : HTTP 세션마다 새로운 인스턴스 생성
  • application : 애플리케이션 범위의 빈 생성

Spring Bean의 생명 주기

  1. 객체 생성:
    • 컨테이너가 빈의 인스턴스를 생성
  2. 의존성 주입:
    • 빈에 필요한 의존 객체를 주입
  3. 초기화 메서드 호출:
    • 초기화 로직을 포함한 메서드를 실행
  4. 사용:
    • 빈이 애플리케이션 내에서 사용됨
  5. 소멸 메서드 호출:
    • 컨테이너 종료 시 빈의 소멸 메서드를 호출

예제

Bean 정의 및 사용

@Component
public class MyService {
    public void doSomething() {
        System.out.println("Service is working!");
    }
}

@RestController
public class MyController {
    private final MyService myService;

    @Autowired
    public MyController(MyService myService) {
        this.myService = myService;
    }

    @GetMapping("/test")
    public String test() {
        myService.doSomething();
        return "Test successful!";
    }
}

Spring Bean이 중요한 이유

  • 모듈화와 재사용성: 객체를 분리하여 설계하면 각 컴포넌트를 독립적으로 테스트하고 재사용 가능
  • IoC와 DI 지원: 객체 생성을 컨테이너가 관리함으로써 애플리케이션의 의존성을 유연하게 관리
  • 유지보수성 향상: 코드 변경 시 영향을 최소화하며, 구조를 이해하기 쉽도록 설계 가능

Spring에서 빈은 애플리케이션의 핵심 구성 요소로, IoC와 DI를 통해 효율적이고 확장 가능한 애플리케이션을 개발하는 데 필수적

 

 

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] Eager, Lazy  (0) 2024.12.21
[Spring Boot] IoC 컨테이너  (2) 2024.12.21
[Spring Boot] ApplicationRunner  (0) 2024.12.14
[Spring Boot] ORM, @Query  (1) 2024.12.14
[Spring] Spring 과 Spring Boot  (0) 2024.12.13