스프링 컨테이너는 크게 초기화종료라는 **생명 주기(life-cycle)**를 가지고 있습니다.

여기서 생명 주기라는 단어가 조금 생소할 수 있는데, 이름 그대로 스프링 컨테이너의 탄생과 죽음에 대한 것입니다. 마치 아기가 태어나 노화의 과정을 거쳐 죽음에 이르는 것과 같습니다.

빈은 애플리케이션이 실행될 때 생성&의존 관계 연결이 이루어집니다.(스프링 컨테이너가 수행).

소멸은 애플리케이션이 종료되는 시점입니다. 즉 항상 살아있습니다.

빈 객체 생명주기

스프링 컨테이너가 관리하는 빈 객체의 생명주기는 다음과 같습니다.

SDvdrgMNcwdZQyjdcemTQ-1681354940775 (1).png

얼핏 보아도, 앞에서 본 스프링 컨테이너의 생명 주기와 거의 비슷하다는 당연한 사실을 다시 확인할 수 있습니다.

간략하게 설명해 보면, 스프링 컨테이너가 초기화 될 때 스프링 컨테이너는 (1) 가장 먼저 빈 객체들을 생성하고, 이 (2) 객체들 간 의존 관계를 설정합니다. 이렇게 모든 의존 관계 설정이 모두 완료되면 내부적으로 지정한 메서드를 호출하여 (3) 빈 객체의 초기화를 진행합니다.

마지막으로, 빈 객체들의 사용이 마무리되고 스프링 컨테이너가 종료되면, 스프링 컨테이너는 지정한 메서드를 호출하여 (4) 빈 객체들의 소멸을 처리합니다.

Why?(빈 객체의 생명주기를 알아야 하나)

그 이유는 이러한 과정을 바르게 이해해야 우리의 어떤 필요에 따라 필요한 기능 구현이 가능하기 때문입니다. 예를 들면, 데이터베이스의 커넥션 풀이나 채팅 클라이언트의 기능을 구현할 때가 그런 경우에 해당합니다.

초기화의 단계에서, 커넥션 풀을 위한 빈 객체는 데이터베이스를 연결하며, 채팅 클라이언트는 서버와의 연결을 진행합니다. 반대로, 컨테이너가 종료되어 빈 객체가 소멸되는 시점에서는 데이터베이스 또는 서버와의 연결을 적절하게 끊어낼 수 있어야 합니다.