-
스프링 빈 스코프에 대하여스터디 노트 2023. 10. 18. 16:19
빈 스코프에 대하여 정리를 해보겠습니다.
일반적으로 Java에서 객체는 개발자가 new 키워드로 생성한 하나의 객체를 말하며, 이 객체에 유효한 레퍼런스가 없어지면 그 객체는 가비지 컬렉터에 의해 소멸되게 됩니다.
즉, 하나의 객체가 new를 통해 인스턴스가 생성되고 사용되고 레퍼런스가 없어저 GC에 의해 제거되기까지를 객체의 생명주기라고 말합니다.
그럼 스프링을 활용하면 객체 생명 주기는 어떻게 변할까요?
우선 스프링의 경우 ApplicationContext를 활용해 빈 객체를 생성하고 소멸시키게 됩니다.
이때 스프링에 의해 빈 객체를 생성하는 시점부터 객체 소멸의 시간까지를 그 객체의 생명주기, 즉 스프링의 빈 스코프라고 합니다.
스코프 설정에 따라 스프링 빈이 생성되는 시점과 소멸되는 시점이 결정되고 스코프에 따라 스프링 빈 객체도 다르게 생성될 수 있습니다.
스프링 프레임워크에서는 다음 여섯 가지의 스코프 설정을 제공합니다.
각각의 스코프는 그에 따른 생명주기가 조금씩 다릅니다.
- Singleton : 기본적으로 사용되는 값입니다. 대상을 스프링 빈 컨테이너 내에 오직 하나만 생성해서 보유하고 있고, 그 하나의 객체를 여러 곳의 의존성 주입에 공유되어 활용합니다. 이는 ApplicationContext가 생성되는 시점에 생성되고 종료되는 시점에 소멸됩니다.
- Prototype: 대상을 의존성 주입 시마다 새로운 객체를 생성하여 주입하는 것을 말합니다. 의존성 주입시마다 신규 객체가 빈으로 등록되기 떄문에 여러 객체가 빈 컨테이너에 존재할 수 있습니다.
- Request : 웹 기능 한정 스코프로, 웹 기능이 포함된 ApplicationContext에서만 사용할 수 있습니다. HTTP 요청을 처리할 때마다 컨테이너는 새로운 빈을 생성해 사용합니다.
- Session : 웹 기능 한정 스코프로, Http Session에 대응하는 새로운 객체를 만들어 사용합니다.
- Application: 웹 기능 한정 스코프로, Servlet컨텍스트와 대응하는 새로운 객체를 만들어 사용합니다.
- Websocket : 웹 기능 한정 스코프로, Web Socket Session과 대응하는 새로운 객체를 만들어 사용합니다.
잘 알고 있듯, 스프링 컨테이너의 기본 스코프 전략은 Singleton으로 별도로 지정하지 않는다면 모두 단일 빈을 갖게됩니다.
'스터디 노트' 카테고리의 다른 글
Transaction이 뭐길래? (1) 2023.10.19 @RequiredArgsConstructor 가 하는 일 (1) 2023.10.18 @RestControllerAdvice에 대하여 (0) 2023.10.18 [Java] 불변 단 건 리스트는 Collections.singletonList() 를 활용해보세요. (0) 2023.10.17 Java Optional의 메소드 사용 설명서(Optional 잘 활용하기) (1) 2023.10.16