
🧐Spring Bean 이란?
이전에 다룬 Spring Container가 관리하는 객체를 Bean이라고 한다.
일반적으로 우리가 new 키워드를 사용해서 생성하는 객체와 달리, 스프링 컨테이너에 의해 생성되고 관리되는 특별한 개체이다.
🟢일반 객체 VS Bean
일반객체의 경우
// 일반 객체
StudentService service = new StudentService();
StudentDAO dao = new StudentDAO();
// 개발자가 직접 관리한다.
service.setDao(dao);
- 개발자가 직접 new 키워드를 통해 생성한다.
- 개발자가 직접 관리한다.
- 개발자가 직접 정리한다.
반면에 Bean은
@Service
public class StudentService {
@Autowired
private StudentDAO dao; // Container가 자동 주입
}
- Container가 자동으로 생성한다.
- Container가 자동으로 주입한다.
- Container가 알아서 정리한다.
🟢Bean의 핵심 특징
동작 방식
서버 시작 -> Container가 @Controller 발견 -> new StudentController() 자동 실행 -> Container에 저장
▪️싱글톤 패턴

기본적으로 Bean은 애플리케이션에서 딱 하나만 생성된다.
장점으로는
하나만 만들어서 재사용하기 때문에 메모리 효율적이다.
▪️의존성 자동 주입
Bean끼리는 Container가 자동으로 주입해준다.
@Controller
public class StudentController {
@Autowired
private StudentService service; // 자동 주입
}
@Service
public class StudentService {
@Autowired
private StudentDAO dao; // 자동 주입
}

사진과 같은 흐름으로 자동으로 Bean을 생성하고 주입해준다.
▪️Bean 등록 방법
그렇다면 Bean 어떻게 등록할까?
@Controller // Controller Bean으로 등록
public class StudentController { }
@Service // Service Bean으로 등록
public class StudentService { }
@Repository // DAO Bean으로 등록
public class StudentDAO { }
@Component // 일반 Bean으로 등록
public class MyComponent { }
위의 코드처럼 등록하면 된다.
각 어노테이션들의 의미는 이렇다.


@Controller, @Service, @Repository 는 모두 @Component를 상속받은 것이다.
▪️Bean의 생명주기
Bean은 생성되서 사라질 때 까지 Container가 관리한다.

▪️Bean Scope 범위
@Scope를 통해 Bean이 생성되는 범위를 지정할 수 있다.
왜 쓰는거죠? -> 객체 생명주기와 범위를 제어하기 위해서, 성능을 최적화하기 위해
1. Singleton (기본값)
애플리케이션에서 단 하나만 생성된다.
@Controller
@Scope("singleton") // 생략 가능 (기본값)
public class StudentController { }
가장 많이 사용된다는 특징이 있다.
2. prototype
요청할 때 마다 새로운 객체를 생성한다
@Controller
@Scope("prototype")
public class StudentController { }
매번 새 객체를 생성하기 때문에 메모리를 많이 사용한다.
특별한 경우에만 사용한다.
3. Request(웹 전용)
HTTP 요청마다 새로운 Bean 생성
@Controller
@Scope("request")
public class StudentController { }
4. Session(웹 전용)
HTTP 세션마다 새로운 Bean 생성
@Controller
@Scope("session")
public class StudentController { }
전체 구조는 대략 이러하다

Bean을 왜 사용하는지 다시 정리하고 마무리 하겠다
1. 객체 관리 자동화
2. 싱글톤으로 메모리 절약
3. 테스트 용이
4. 설정 변경 용이
'Archive > Java 풀스택 아카데미' 카테고리의 다른 글
| [TIL] 17. 11월 Spring Security (0) | 2025.11.11 |
|---|---|
| [TIL] 16. 11월 Spring Framework(Controller) (0) | 2025.11.04 |
| [TIL] 14. 10월 Spring Framework(Container) (0) | 2025.10.19 |
| [TIL] 13. 10월 Spring Framework (0) | 2025.10.12 |
| [TIL] 12. 9월 Spring Framework (0) | 2025.09.30 |