| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- 기본 생성자
- 가을야구
- entity
- 의존관계 자동 주입
- 스프링 데이터 JPA
- 테스트 코드
- Controller
- 의존성 주입
- restTemplate
- 406 NOT_ACCEPTABLE
- 정적 컨텐츠
- 좋은 객체지향 설계 원칙
- jdbc template
- Java Reflection API
- 스프링
- 키움
- ResponseEntity
- RunWith
- JPA
- Not Acceptable
- 통합 테스트
- testresttemplate
- 스프링 IoC 컨테이너
- jdbc
- 405 METHOD_NOT_ALLOWED
- 빈 스코프
- 스프링 컨테이너
- 랜덤 포트
- 컴포넌트 스캔
- SpringBootTest
- Today
- Total
코드네임 JY
[스프링 핵심] 빈 스코프 본문

미리보기
✅ 빈 생명주기에 대해 알아보자!
✅ 빈 스코프에 대해 알아보자!
✅ 프로토타입 스코프를 공부해보자!
✅ 웹 스코프를 공부해보자!
🥫 빈 생명주기
스프링에서 스프링 빈이 생성되고, 사용되고, 소멸되는 과정은 다음과 같이 정리할 수 있다.
1️⃣ 스프링 컨테이너 생성
- 스프링이 실행되고, 스프링 컨테이너가 생성
2️⃣ 스프링 빈 생성 → 의존관계 주입→ 초기화 콜백
- 컨테이너에 빈이 등록(생성)되고, 필요한 의존관계들이 주입
- 의존관계 주입까지 끝나면, 이제 빈을 사용해도 된다는 초기화에 대한 콜백
3️⃣ 빈 사용
- 스프링 빈을 코드에서 사용
4️⃣ 소멸 전 콜백 → 스프링 종료
- 안전한 종료 작업을 위해, 소멸 전에도 콜백을 주고 스프링이 종료
'초기화 콜백'과 '소멸 전 콜백' 메서드를 지정할 수 있는데, 2가지 방식이 있다.
첫 번째로, Bean 어노테이션에 initMethod, destroyMethod 의 이름을 지정해주면 된다!
이 방법은 특정 함수의 이름만 지정하면 되므로, 외부 라이브러리를 사용해야 할 때 활용하면 좋다!
@Bean(initMethod = "init", destroyMethod = "close")
두 번째는, 초기화 콜백을 위한 @PostConstruct와 소멸 전 콜백을 위한 @Predestroy 어노테이션을 사용하면 된다!
이 방법은 외부 라이브러리 코드에서 사용할 수 없다. 직접 어노테이션 선언이 필요하기 때문이다.
하지만 스프링에 종속되지 않는 자바 표준이고, 컴포넌트 스캔과 잘 어울린다는 장점이 있다!
@PostConstruct
public void init() {
System.out.println("init");
}
@PreDestroy
public void close() {
System.out.println("close");
}
어떤 때에 사용하는 기능인지 잘 와닿지 않아서, 구글링을 해보았는데!
빈이 생성되면서 딱 한 번만 실행되는 메소드이기 때문에, 기본적인 데이터 등록을 위해 쓰기도 한다고 한다.
데이터베이스를 활용해서 사용하는 경우에는 가장 기본적인 정보 값이 등록되도록 구현하고 싶을 때 사용하면 될 것 같다!
🍱 빈 스코프
스프링은 기본적으로 싱글톤 컨테이너이기 때문에, 스프링 빈은 '싱글톤 스코프'를 가진다고 할 수 있다.
이처럼 스코프는 '빈이 존재할 수 있는 범위'를 뜻하는데, 스프링에서 활용되는 스코프 3가지가 있다.
1️⃣ 싱글톤 스코프
- 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
2️⃣ 프로토타입 스코프
- 스프링 컨테이너가 '빈의 생성 + 의존관계 주입 + 초기화' 까지만 관여하고 그 이후는 관리하지 않는 짧은 범위의 스코프
3️⃣ 웹 스코프
- 웹 환경에서만 동작하는 스코프, 스프링 컨테이너가 해당 스코프의 종료시점까지 관리
🧇 프로토타입 스코프
프로토타입 스코프의 가장 큰 특징은, 스프링 컨테이너가 항상 새로운 인스턴스를 생성해서 반환한다는 것이다!
싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스를 반환했던 것과 비교되는 점이다.


또 다른 특징이 하나 더 있다. 스프링 컨테이너는 '빈의 생성 + 의존관계 주입 + 초기화' 까지만 담당한다!
싱글톤 스코프의 빈은 스프링 컨테이너에서 소멸 전 콜백을 부를 수 있었다는 것과 비교되는 점이다.
이는 초기화까지 해준다면 더 이상 스프링 컨테이너에게 책임이 없고, 클라이언트에게 관리 책임이 전가된다.
따라서 프로토타입 빈은 스프링 컨테이너에서 소멸 전 콜백 메소드를 호출할 수 없다!
@Scope("prototype") 어노테이션을 사용해서 구현할 수 있다.
🥯 웹 스코프
웹 스코프는 웹 환경에서만 동작하는 스코프이다.
또한 이는 프로토타입 스코프와 다르게, 스코프의 종료 시점까지 관리하여 소멸 전 콜백 메소드를 호출할 수 있다!
대표적으로 request 스코프의 경우, HTTP 요청 하나 당 하나씩 생성되고, HTTP 요청이 끝나는 시점에 소멸된다.
이는 @Scope("request")로 구현할 수 있고, 이외의 웹 스코프 종류에는 session, application 등이 있다.
'백엔드 공부' 카테고리의 다른 글
| [CRUD 연습] Entity, Repository (0) | 2023.01.09 |
|---|---|
| [CRUD 연습] 프로젝트 구상 (0) | 2023.01.08 |
| [스프링 핵심] 의존관계 자동 주입 (0) | 2023.01.05 |
| [스프링 핵심] 컴포넌트 스캔 (0) | 2023.01.05 |
| [스프링 핵심] 싱글톤 패턴 (0) | 2023.01.04 |