개발/Spring

Spring @PostConstruct와 @PreDestroy 어노테이션

피터JK 2025. 2. 11. 18:55
728x90

Java에서 객체의 초기화 및 소멸 시점에 자동으로 실행되는 메서드를 정의할 수 있는 어노테이션인 @PostConstruct와 @PreDestroy는 주로 Spring Framework에서 사용됩니다. 이 어노테이션들은 객체의 생애 주기 동안 특정 작업을 처리할 수 있게 해주어, 코드의 효율성을 높이고, 리소스를 관리하는 데 도움을 줍니다.

@PostConstruct

@PostConstruct 어노테이션은 객체가 생성되고 의존성 주입이 완료된 직후에 호출되는 메서드에 붙입니다. 이 메서드는 객체의 초기화 작업을 수행하는 데 유용합니다. 예를 들어, 객체가 생성된 후 추가적인 설정이나 초기화 작업을 해야 할 때 사용할 수 있습니다.

사용 예시

 
import javax.annotation.PostConstruct;

public class MyService {

    @PostConstruct
    public void init() {
        // 객체 초기화 작업 수행
        System.out.println("객체가 초기화되었습니다.");
    }
}

위 코드에서 init() 메서드는 @PostConstruct 어노테이션 덕분에 MyService 객체가 생성되고 의존성 주입이 완료된 후 자동으로 호출됩니다.

@PreDestroy

@PreDestroy 어노테이션은 객체가 소멸되기 직전에 호출되는 메서드에 붙입니다. 이 메서드는 리소스를 해제하거나 종료 작업을 수행하는 데 유용합니다. 객체가 더 이상 사용되지 않거나 컨테이너가 종료될 때, 필요한 정리 작업을 자동으로 처리할 수 있습니다.

사용 예시

import javax.annotation.PreDestroy;

public class MyService {

    @PreDestroy
    public void cleanup() {
        // 객체 소멸 전 작업 수행
        System.out.println("객체가 소멸되기 전에 정리 작업을 합니다.");
    }
}

위 코드에서 cleanup() 메서드는 @PreDestroy 어노테이션 덕분에 MyService 객체가 소멸되기 직전에 호출됩니다. 이는 객체의 자원을 정리하거나 종료 전후에 필요한 작업을 처리하는 데 유용합니다.

Spring에서의 사용

Spring Framework에서는 @PostConstruct와 @PreDestroy 어노테이션을 사용하여 Bean의 초기화 및 종료 작업을 관리할 수 있습니다. 예를 들어, Spring에서 관리하는 Bean에서 @PostConstruct를 사용하여 초기화 작업을 처리하고, @PreDestroy를 사용하여 종료 작업을 처리할 수 있습니다.

예시 코드

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Component;

@Component
public class MyBean {

    @PostConstruct
    public void init() {
        System.out.println("MyBean 초기화");
    }

    @PreDestroy
    public void cleanup() {
        System.out.println("MyBean 소멸 전 작업");
    }
}

위 코드에서 MyBean 클래스는 Spring Bean으로 관리되며, @PostConstruct와 @PreDestroy를 통해 객체의 초기화 및 종료 작업을 자동으로 처리합니다. Spring 컨테이너가 이 객체를 관리하면서, 해당 메서드들을 적절한 시점에 호출하게 됩니다.

의존성 추가

@PostConstruct와 @PreDestroy를 사용하려면 javax.annotation-api 라이브러리를 프로젝트에 의존성으로 추가해야 합니다. Spring에서는 @PostConstruct와 @PreDestroy를 지원하지만, 일부 Java SE 환경에서는 이 라이브러리가 포함되지 않기 때문에, 명시적으로 추가해야 할 수 있습니다.

Maven 의존성 예시

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>

Maven 의존성 예시 (Jakarta EE)

<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>2.1.1</version> <!-- 최신 버전으로 수정 가능합니다 -->
</dependency>

 

결론

@PostConstruct와 @PreDestroy는 객체의 생애 주기 동안 필요한 초기화 및 종료 작업을 자동으로 처리할 수 있도록 돕는 매우 유용한 어노테이션입니다.
Spring Framework에서 의존성 주입과 객체 관리 기능을 활용하면서 이들을 사용하면 코드가 깔끔해지고, 리소스 관리가 용이해집니다.


이 포스트를 참고하여 @PostConstruct와 @PreDestroy 어노테이션을 Java 애플리케이션에서 효율적으로 활용할 수 있을 것입니다.

728x90