Web/Spring

스프링에서 싱글톤으로 관리하는 빈의 생성주기

mayleaf 2023. 1. 26. 22:35

스프링 빈 생성주기에 대해서 배웠다.

정확히는 스프링에서 싱글톤으로 관리하는 빈에 대한 생성주기였다.

  1. 스프링 컨테이너 생성
    스프링 컨테이너의 생성은 말 그대로 Application Context(이하 스프링 컨테이너)의 생성이다.
  2. 빈 객체 등록
    스프링 컨테이너가 생성되면 빈 객체 등록이 이뤄진다. 이때, 빈이 생성자 주입을 사용하도록 되어있다면, 필요한 의존관계가 빈 객체등록 시점에서 이뤄진다.
  3. 의존관계 주입
    만약 모든 의존관계가 다 생성자 등록이라면 빈 객체등록이 끝나는 시점에 의존관계 주입도 이미 끝나있을 것이다.
    이 의존관계 주입단계에서는 수정자 주입이나, 필드주입을 받는 빈이 주입을 받는다.
  4. 초기화 콜백
    위 단계에서 의존관계가 주입된 빈들은 초기화 콜백이 수행된다. 초기화 콜백은  InitializingBean 인터페이스나, 빈 어노테이션에 초기화 정의를 내리거나, @PostConstruct 어노테이션을 통해서 붙힐 수 있다. 이때 주의해야하는 점은 초기화 콜백은 해당 빈의 주입만 끝난거지 다른 빈들의 의존관계들까지 모두 주입이 완료되거나, 스프링이 이제 사용가능하다는 뜻이 아니다(스프링이 준비되었다는 어노테이션은 따로 존재함)
  5. 사용
    스프링 어플리케이션이 동작하는 단계이다. 말 그대로 서버가 떠있거나 프로그램이 동작하는 중
  6. 소멸전 콜백
    스프링 어플리케이션이 종료될때 종료되기 전에 빈이 삭제되기전에 동작하는 콜백이다. 클라이언트 역할을 하는 빈이었다면 커넥션을 종료한다고 알리고 끊는 등의 일을 수행할 수 있을 것 같다. 아니면 현재 들고 있는 어플리케이션의 상태를 저장하는 일도 시간이 충분하다면 할 수 있을 것 같다. 가령 세션을 서버에서 직접 들고 있다면 세션을 들고 있는 빈이 모두 데이터베이스나 세션정보를 파일로 떨군다던가
  7. 스프링 종료
    스프링 어플리케이션 종료됨

이정도로 배웠다.

생성주기는 어플리케이션 개발에서 계속 마주치는 내용이고, 큰 다른 점은 없었던 것 같다.

앞의 1,2,3 단계는 사실 스프링 컨테이너에 등록되는 과정임을 생각하면 4,5,6은 모바일 어플리케이션 개발에서도 마주치는 내용이기 때문에 거의 동일하다.

 

'Web > Spring' 카테고리의 다른 글

Unable to load class 'javax.persistence.Entity'.  (0) 2023.02.05
Spring security filter vs Nest.js Guard  (0) 2023.01.30
Spring bean scope  (0) 2023.01.28
스프링 컨테이너  (0) 2023.01.24