더북(TheBook)

4.3 빈 생성 시점에 통지 받기

빈 초기화 시점을 알면 빈은 필요한 모든 의존성이 제대로 주입됐는지 확인할 수 있습니다. 물론 스프링이 의존성 검사를 할 수는 있지만 이는 모 아니면 도(All-or-nothing)와 같은 접근 방식으로 진행돼 하나라도 공급되지 않으면 전체를 실패로 간주하며 의존성 해석 절차에 특정 로직을 추가할 수 없습니다. 의존성 네 개를 수정자(setter)로 주입받는 빈이 있는데, 두 의존성은 필수이며 한 의존성은 의존성이 제공되지 않을 때 사용할 기본값을 가지고 있다고 해 봅시다. 초기화 콜백을 사용하면 빈이 필요로 하는 의존성을 점검할 수 있게 돼 예외를 던지거나 필요에 따라 기본값을 제공할 수 있습니다.

빈은 생성자에서 앞서 설명한 것과 같은 의존성 검사를 할 수 없는데, 빈 생성 시점에는 스프링이 빈에 필요한 의존성을 공급할 수 없기 때문입니다. 스프링의 초기화 콜백은 스프링이 제공할 수 있는 의존성 제공이 완료된 이후에 호출되며 사용자가 원하는 의존성 검사를 수행합니다.

초기화 콜백으로 의존성 검사만 하는 것은 아니며 사용자가 원하는 모든 작업을 콜백 내부에서 할 수 있습니다. 하지만 초기화 콜백은 앞서 설명한 바와 같이 의존성을 검사하고 적절한 초깃값을 제공하려는 목적으로 사용할 때 가장 유용합니다. 초기화 콜백은 빈 구성에 따라 빈이 자동으로 수행해야 할 작업을 시작하는 일반적인 지점이기도 합니다. 예를 들어 스케줄에 맞춰 태스크를 실행하는 빈을 만들었다면 초기화 콜백은 스케줄러를 시작하기 가장 좋은 장소입니다. 언젠가는 구성 데이터가 빈에 설정된 뒤 초기화 콜백이 호출되기 때문입니다.

Note 스케줄 태스크(Task)를 직접 실행하는 빈을 작성해서는 안 됩니다. 이와 같은 태스크는 스프링이 내장 스케줄링 기능을 사용하거나 쿼츠(Quartz) 스케줄러와 연계해 자동으로 제공할 수 있기 때문입니다. 스케줄러에 대한 자세한 내용은 11장에서 살펴보겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.