[Spring] 스프링 빈이란? / Spring Bean / 등록 방법 / 빈 스코프 / LifeCycle

2025. 9. 30. 15:28·Development & Projects/Java

1. 빈(Bean)이라는 이름의 유래

  • 자바의 유래가 커피의 공급원인 자바 섬에서 나온 것과 같이 재사용이 가능한 자바 객체를 커피콩에 비유해서 자바빈이라고 지었는데, “Bean”은 원래 자바빈(JavaBean) 개념에서 차용된 이름입니다.
  • 스프링이 등장하면서 이 개념을 확장하여, “스프링 컨테이너가 관리하는 재사용 가능한 객체”를 스프링 빈(Spring Bean) 이라고 부르게 되었습니다. 

2. 스프링 빈이란?

스프링 빈이란 스프링 컨테이너(IoC 컨테이너)가 생성하고 관리하는 객체를 말합니다.

  • 일반 자바 객체는 개발자가 직접 new로 생성하고 관리합니다.
  • 반면 스프링 빈은 스프링 컨테이너가 객체의 생성, 의존성 주입, 소멸 등 전체 생명주기를 관리해 줍니다.
  • 객체 간의 의존도와 결합도를 낮추고 높은 캡슐화를 제공합니다.
  • 즉, 개발자는 빈이 어떤 역할을 할지만 정의하면, 스프링이 나머지를 책임지는 구조입니다.

3. 스프링 빈의 역할

 

역할 설명
객체 생성 및 관리 사용자가 빈을 등록해 놓으면 스프링이 객체를 만들고 보관해 두었다가 필요할 때 꺼내 사용할 수 있게 함
의존성 관리 (DI) 빈 간의 의존 관계를 자동으로 연결해 줌
생명주기 제어 빈이 생성될 때, 소멸될 때 실행할 로직을 제어할 수 있음

예를 들어, UserService 클래스가 있고,  UserRepository가 필요하다면, 스프링은 두 객체를 자동으로 연결해 줍니다.

즉 UserService가 UserRepository에 의존하는 경우 스프링이 알아서 그 의존성을 해결해 줍니다.


4. 스프링 빈 등록 방법

① 어노테이션 기반 등록

클래스 위에 어노테이션을 붙여 빈으로 등록하는 방식입니다.

  • @Component — 일반적인 빈 등록
  • @Service, @Repository, @Controller — 역할이 분명한 빈을 위한 어노테이션 (내부적으로 @Component 포함)
@Service
public class UserService { 
	// ... 
}

 

② 자바 설정 클래스 (Java Config)

 

@Configuration과 @Bean 어노테이션으로 빈을 등록합니다.

이는 명시적으로 빈을 설정하고 싶을 때 사용됩니다.

@Configuration
public class AppConfig { 
	@Bean 
    	public UserService userService() { 
    	    return new UserService(); 
        } 
    }

5. 스프링 빈의 LifeCycle

스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다.

객체 생성 -> 의존관계 주입

 

스프링 빈의 이벤트 라이프사이클은 다음과 같다.

스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 사용 → 소멸 전 콜백 → 스프링 종료

  • 초기화 콜백: 빈이 생성되고, 빈의 의존관계 주입이 완료된 후 호출
  • 소멸전 콜백: 빈이 소멸되기 직전에 호출

6. 빈의 스코프(scope) 종류

빈은 생성 방식이 고정된 것이 아니라, 스코프(scope) 에 따라 여러 전략으로 관리될 수 있습니다. 

  • Singleton (기본값)
    애플리케이션 컨텍스 내에서 한 인스턴스만 생성되어 재사용
  • Prototype
    빈이 요청될 때마다 새로운 객체를 생성
  • Request
    HTTP 요청 하나당 하나의 빈 생성 (웹 애플리케이션에서 사용)
  • Session
    HTTP 세션 단위로 빈 생성
  • Application, WebSocket 등도 존재

예를 들어, 상태를 유지하는 객체나 사용자별 객체가 필요할 경우 Prototype이나 Request 스코프를 사용할 수 있습니다.


7. 스프링 빈의 장점 & 활용 이유

  • 결합도 낮춤
    객체 간 직접 new 결합을 줄이고, 인터페이스 중심 설계가 쉬워집니다.
  • 유지보수성 향상
    변경이 생겨도 영향 범위가 작아지고, 관리가 쉬워집니다.
  • 테스트 용이
    스프링 컨테이너를 이용해 테스트 환경에서도 빈을 주입받아 사용할 수 있어 단위 테스트가 쉬워집니다. 
  • 비즈니스 로직에 집중
    객체 생성, 의존성 연결, 생명주기 관리 등 잡무로부터 해방되어 핵심 로직에 집중 가능

'Development & Projects > Java' 카테고리의 다른 글

[Java] 비동기 처리와 스레드 관리  (0) 2025.09.27
[Java] JVM(Java Virtual Machine)  (0) 2025.09.24
[Java] 상속 정리 / 다중 상속 / 다이아몬드 문제  (0) 2025.09.21
[Java] 추상 클래스와 인터페이스 정리  (0) 2025.09.20
[Java] 자바 컴파일 과정  (0) 2025.06.28
'Development & Projects/Java' 카테고리의 다른 글
  • [Java] 비동기 처리와 스레드 관리
  • [Java] JVM(Java Virtual Machine)
  • [Java] 상속 정리 / 다중 상속 / 다이아몬드 문제
  • [Java] 추상 클래스와 인터페이스 정리
seulll
seulll
개인 공부 블로그입니다.
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
  • Seuli's Github
    • 분류 전체보기 (398)
      • Coding Test (260)
        • Programmers (164)
        • Baekjoon (94)
      • Data Structures & Algorithm.. (15)
      • Development & Projects (59)
        • Python (5)
        • Java (15)
        • Android (5)
        • AI (6)
        • Unity (3)
        • API (5)
      • OS (5)
      • DB | SQL (7)
      • Network (8)
      • Data Analysis (14)
      • Study | etc (21)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 공지사항

  • 인기 글

  • 태그

    2 x n 타일링
    백엔드 개발자 역량
    solving environment
    Greedy
    카카오맵 api
    Python
    프로그래머스
    파이썬
    카카오맵
    바다코끼리
    confusion matrix
    백엔드 개발자
    API
    그리디 알고리즘
    프렌즈4블록
    코딩테스트
    train_test_split
    대입 표현식
    모델 성능 평가
    백엔드
    데이터분석
    티스토리챌린지
    Boxplot
    kakao map api
    박스플롯
    웹크롤링
    오차행렬
    asterisk
    야근 지수
    오블완
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
seulll
[Spring] 스프링 빈이란? / Spring Bean / 등록 방법 / 빈 스코프 / LifeCycle
상단으로

티스토리툴바