당니의 개발자 스토리

애노테이션 @PostConstruct, @PreDestroy 본문

스프링/스프링 핵심 원리 - 기본편

애노테이션 @PostConstruct, @PreDestroy

clainy 2024. 1. 26. 19:14

애노테이션 @PostConstruct, @PreDestroy

이번 시간에는 애노테이션으로 적용하는 방법인데요. 결론부터 말씀드리면 이 방법을 쓰시면 됩니다.

스프링에서도 그냥 이걸 권고하고 있습니다.

@PostConstruct, @PreDestroy가 있는데요. 이름만 봐도 딱 느낌이 오죠?

@PostConstruct객체 생성이 된 이후에, @PreDestroy소멸되기 전에 아주 이름 잘 지었죠?


바로 코드로 설명드리겠습니다.

이제 이 부분은 지워주고,

우리가 아까 만든 메서드에다가 애노테이션을 각각 달면 끝입니다. 이렇게 하고 돌려보겠습니다.

돌려보면 깔끔하게 되죠. 이건 이제 패키지가 중요해요.

스프링 3.0 이전에는 javax였는데,

jakarta로 바꼈습니다. jakarta로 시작하면 java 진영에서 공식적으로 지원하는 거예요. 그래서 꼭 스프링이 아니라, 만약에 혹시라도 스프링이 아닌, 다른 컨테이너를 쓴다고 하더라도, 이게 그대로 적용이 됩니다.


이제 설명을 드릴게요.

우선 편하기 때문에 최신 스프링에서 가장 권장합니다. 아예 document 매뉴얼에 나와있어요.

패키지를 잘 보면 javax.annotation.PostConstruct인데, 스프링에 종속적인 기술이 아니라 JSR-250 라는 자바 표준이에요. 표준이라는 건 인터페이스의 모음이라고 보면 돼요.

따라서 스프링이 아닌 다른 컨테이너에서도 잘 동작합니다. 그리고 컴포넌트 스캔과 잘 어울리겠죠?

우리가 한 것처럼 직접 수동으로 @Bean 등록하는 게 아니라,

컴포넌트 스캔 대상이 된다고 하더라도 어차피 똑같이

메서드 위에다가 애노테이션을 넣어주면 되니까 마찬가지로 잘 되겠죠.

유일한 단점은 외부 라이브러리에는 적용하지 못한다는 거예요. 왜냐면 코드를 고쳐야 되잖아요.

그래서 외부 라이브러리를 초기화하거나 종료하는 이벤트가 필요하면, 이전 시간에 배웠던 @Bean 해서 설정 정보에다가 메서드를 지정해주는 기능을 사용하면 됩니다.


그래서 정리를 하면,

@PostConstruct, @PreDestroy를 사용하면 됩니다.

그리고 코드를 고칠 수 없는 외부 라이브러리를 초기화하거나 종료해야 되면, @Bean의 initMethod , destroyMethod 를 사용하면 됩니다. 그리고 destroyMethod같은 경우에는 추론 기능이 있어서 closeshutdown 같은 이름의 메서드가 있으면 자동으로 호출이 됩니다.

이렇게 해서 빈 생명주기와 콜백이 끝났네요.