우테코 - [10분 테코톡] 주디의 Spring Bean

Kkd·2024년 12월 9일

코딩 영상 후기

목록 보기
25/34

movie

1. Spring Bean이란?

Spring Bean은 스프링 IoC(Inversion of Control) 컨테이너가 관리하는 객체입니다.

  • 특징:
    • 스프링 애플리케이션의 핵심 구성 요소.
    • 보통 애플리케이션 설정 파일(예: XML, Java Config)이나 컴포넌트 스캔을 통해 생성 및 관리됨.
    • 컨테이너가 객체의 생명주기의존성을 관리.

2. Spring IoC 컨테이너란?

IoC(Inversion of Control)는 객체 생성 및 관리의 제어권을 개발자가 아닌 프레임워크가 담당하도록 역전시키는 설계 패턴입니다.

  • 스프링 IoC 컨테이너:
    • Bean의 생성, 초기화, 파괴를 관리.
    • 의존성 주입(DI)을 통해 객체 간의 관계를 설정.

스프링 빈이 왜 필요할까?

  1. 의존성 관리:

    • 객체 간 결합도를 낮추고 유연한 설계를 가능하게 함.
    • 객체의 생성을 개발자가 아닌 IoC 컨테이너가 담당함으로써 재사용성 및 유지보수성을 높임.
  2. 싱글톤 관리:

    • 대부분의 빈을 싱글톤으로 관리하여 리소스를 효율적으로 사용.
  3. 라이프사이클 관리:

    • 애플리케이션 시작 시 초기화, 종료 시 정리 등의 작업을 중앙에서 통제 가능.
  4. 객체의 명확한 정의:

    • 설정 파일이나 애노테이션을 통해 객체를 명시적으로 정의할 수 있음.

스프링 IoC 컨테이너가 Bean을 관리하는 이유

  1. 객체 간 결합도 감소:

    • DI를 통해 객체 간의 의존성을 낮추고, 쉽게 변경 가능한 설계를 지원.
  2. 효율적 메모리 관리:

    • 싱글톤 스코프로 동일한 빈을 공유함으로써 메모리 낭비를 방지.
  3. 애플리케이션 설정 중앙화:

    • 빈의 생성, 의존성 주입 등을 한 곳에서 설정하여 관리.

1. 빈과 의존성 주입 (Dependency Injection)

  • 스프링 빈은 의존성 주입을 통해 객체 간 관계를 설정합니다.
  • 의존성 주입 방식:
    1. 생성자 주입
    2. Setter 주입
    3. 필드 주입 (권장되지 않음)

장점:

  • 객체 간 강한 결합도를 줄이고 유연한 확장 가능.
  • 테스트하기 쉬운 코드 작성 가능.

2. 빈과 싱글턴 (Singleton)

  • 스프링 빈의 기본 스코프는 Singleton:

    • 컨테이너당 하나의 빈 인스턴스만 생성.
    • 동일한 빈을 여러 번 요청해도 동일한 인스턴스를 반환.
  • 싱글턴 관리의 이점:

    • 메모리 효율성.
    • 전역 상태 관리 간편.
  • 문제점 및 해결:
    싱글턴 빈이 상태를 가지는 경우 동시성 문제가 발생할 수 있음 → 무상태 설계 권장.


3. 스프링 IoC 컨테이너는 Bean을 어떻게 관리할까?

  • 생명주기:
    1. 스프링 컨테이너 초기화
      • 설정 파일(XML, Java Config) 또는 컴포넌트 스캔을 통해 Bean 등록.
    2. Bean 생성
      • @Component, @Bean 애노테이션을 사용하여 빈 생성.
    3. 의존성 주입
      • 생성자, Setter 등을 통해 필요한 의존성을 주입.
    4. 초기화 메서드 호출
      • @PostConstruct 또는 사용자 정의 메서드 호출.
    5. 빈 사용
      • 컨테이너에서 빈을 가져와 사용.
    6. 소멸 메서드 호출
      • 애플리케이션 종료 시 @PreDestroy 또는 사용자 정의 메서드 호출.

4. 빈 설정 시 주의점

  1. 빈 간의 의존성 관리:

    • 순환 참조 문제가 발생하지 않도록 설계.
    • 생성자 주입 사용 시 순환 참조 주의.
  2. 스코프:

    • 기본 스코프는 싱글톤이나, 요청별 빈(@RequestScope), 세션별 빈(@SessionScope)이 필요한 경우 명시적으로 설정.
  3. 무상태 설계 권장:

    • 싱글톤 빈이 상태를 가지면 동시성 문제가 발생하므로 무상태로 설계.
  4. 테스트:

    • Bean 설정 변경이 애플리케이션 전체에 영향을 미치므로 변경 후 충분히 테스트 필요.

스프링의 빈과 IoC 컨테이너는 객체 생성을 프레임워크가 관리하여 결합도를 낮추고, 객체의 재사용성을 높이며 애플리케이션을 보다 유연하고 유지보수하기 쉽게 만듭니다.

profile
🌱

0개의 댓글