-
스프링 빈의 스코프와 생명주기 복습!엘리스트랙 2024. 2. 9. 13:01728x90
빈의 스코프
스프링에서 빈의 스코프는 빈이 생성되고 관리되는 방식을 결정합니다. 스프링은 기본적으로 싱글톤 스코프를 사용하지만, 요청, 세션, 글로벌 세션, 프로토타입 등의 다른 스코프도 제공합니다.
- 싱글톤(Singleton): 한 개의 빈 인스턴스만 생성되며, 모든 요청에 대해 동일한 인스턴스를 공유합니다. 장점으로는 하나의 빈 인스턴스만 생성하므로 메모리 사용량을 최소화할 수 있고 빈의 인스턴스가 이미 생성되어 있어 빈에 접근하는 시간이 빠릅니다.
- 프로토타입(Prototype): 빈을 요청할 때마다 새로운 인스턴스를 생성합니다. 이 스코프는 각 요청에 대해 독립적인 상태를 유지해야 하는 빈에 적합합니다. 장점으로는 요청마다 독립적인 생명 주기를 가질 수 있어 빈 간의 상태 간섭이 없다는 점이 있습니다.
- 요청(Request): HTTP 요청당 하나의 빈 인스턴스를 생성합니다. 이 스코프는 웹 애플리케이션에서 각 요청에 대해 독립적인 상태를 유지해야 하는 빈에 적합합니다. 장점으로는 각 사용자 요청에 대해 독립적인 빈 인스턴스를 관리할 수 있어 사용자별 세션 관리에 유용하다는 점이 있습니다.
- 세션(Session): HTTP 세션당 하나의 빈 인스턴스를 생성합니다. 이 스코프는 웹 애플리케이션에서 사용자 세션간에 독립성을 유지해야 하는 빈에 적합합니다. 세션 스코프의 장점으로는 사용자별로 데이터를 분리하여 관리할 수 있어 사용자별 커스터마이징이 필요한 경우에 유용하다는 점이 있습니다.
- 글로벌 세션(Global Session): 글로벌 HTTP 세션당 하나의 빈 인스턴스를 생성합니다. 이 스코프는 포털 애플리케이션과 같이 여러 웹 애플리케이션 간에 공유되는 세션에 적합합니다. 장점으로는 여러 웹 애플리케이션 간에 데이터를 공유할 수 있다는 점이 있습니다.
빈의 생명주기
- 빈의 인스턴스화: 스프링 컨테이너는 빈의 정의를 읽고, 빈의 인스턴스를 생성합니다. 이는 빈의 클래스에 정의된 생성자를 사용하여 수행됩니다.
- 의존성 주입: 생성된 빈 인스턴스에 필요한 의존성들이 주입됩니다. 이는 빈의 생성자, 세터 메서드 또는 필드에 @Autowired 어노테이션을 사용하여 수행됩니다.
- 초기화 콜백 실행: 빈의 모든 의존성이 주입된 후, 초기화 로직을 수행합니다. 이는 @PostConstruct 어노테이션을 사용하여 수행될 수 있습니다. 또는 빈의 정의에서 init-method 속성을 설정하여 특정 메서드를 초기화 메서드로 지정할 수 있습니다.
- 빈 사용: 애플리케이션이 실행되는 동안, 스프링 컨테이너는 빈을 관리하고, 애플리케이션의 다른 부분에서는 필요할 때 빈을 사용합니다.
- 소멸 콜백 실행: 스프링 컨테이너가 종료될 때, 빈의 소멸 로직이 실행됩니다. 이는 @PreDestroy 어노테이션을 사용하여 수행될 수 있습니다. 또는 빈의 정의에서 destroy-method 속성을 설정하여 특정 메서드를 소멸 메서드로 지정할 수 있습니다.
- 빈 소멸: 빈의 생명주기가 끝나고, 더 이상 필요하지 않게 되면 스프링 컨테이너는 빈을 소멸시킵니다.
728x90'엘리스트랙' 카테고리의 다른 글
2차 프로젝트 기획! (0) 2024.02.25 쿠키와 세션 복습! (0) 2024.02.09 스프링 의존관계 복습! (0) 2024.02.06 스프링,빈 Validation 복습! (0) 2024.02.01 2주간의 프로젝트! (0) 2024.01.20