backend
  • README
  • DOCS
    • Java Docs
    • Servlet Docs
    • JSP Docs
    • DB & SQL Docs
    • Spring Boot Docs
    • Spring Security Docs
    • AWS Docs
  • 설치하기
    • Intellij 설정
  • 자바
    • 01 Java란?
    • 02 자바 시작하기
    • 03 자료형과 연산자
    • 04 제어문
    • 05 메소드
    • 06 클래스 기초
      • Static 보충자료
      • 패키지 보충자료
    • 07 객체지향 프로그래밍
    • 08 클래스 더 알아보기
      • 열거형 ENUM 보충자료
    • 09 클래스와 자료형
      • 다형성 보충자료
      • 제네릭 보충자료
    • 10 컬렉션 프레임워크
      • 컬렉션 프레임워크 보충자료
    • 11 람다식과 함수형 프로그래밍
      • 람다식 보충자료
    • 12 오류 대비하기
      • 오류 보충자료
    • 13 멀티태스킹
      • 멀티태스킹 보충자료
    • 교재보충
      • java.lang
  • 스프링
    • 서블릿, JSP
      • 05 Servlet(서블릿)
        • 서블릿 보충자료
        • 서블릿 추가코드
        • XML, YAML, JSON
      • 06 JSP(자바 서버 페이지)
        • JSP 보충자료
      • 07 JSTL(JSP 스탠다드 태그 라이브러리)
        • JSTL 보충자료
      • 08 Cookie(쿠키), Session(세션)
      • 09 서블릿,필터,리스너
        • 서블릿,필터,리스너 보충자료
      • 11 도서관리 프로젝트 실습
    • Spring Boot
      • 01 스프링 등장 배경, 객체지향
        • 스프링 등장 배경, 객체지향 보충자료
      • 02 IOC(제어의 역전), DI(의존성 주입)
        • IOC 보충자료
        • DI 보충자료
      • 03 스프링 구조
        • 스프링 구조 보충설명
      • 04 테스트코드 실습
      • 05 스프링 빈 설정
        • 스프링 빈 설정 보충자료
      • 06 싱글톤
        • 싱글톤 보충 자료
      • 07 스프링 빈 자동설정
        • 스프링 빈 자동설정 보충자료
      • 08 빈 생명주기
        • 빈 생명주기 보충자료
      • 09 빈 스코프
        • 빈 스코프 보충자료
      • 10 스프링 MVC
        • 스프링 MVC 보충자료
        • 데이터베이스 연동에 필요한 부분
      • 11 Validation(검증)
        • Validation(검증) 보충자료
      • 12 Bean Validation(빈검증)
        • Bean Validation(빈검증) 보충자료
      • 13 예외처리
        • 예외처리 보충자료
      • 14 타입변환
      • 15 JDBC(Java Database Connectivity)
      • 16 커넥션풀
      • 17 트랜잭션
        • 트랜잭션 보충자료
      • 18 JDBC 템플릿 활용
      • 19 MyBatis
      • 20 JPA(Java Persistence API)
      • 22 게시판 프로젝트 실습
    • Spring Security
      • 보안(Security)
      • Spring Security
      • 2. Spring Security 알아보기
        • 보안 위협 실제 사례와 방어 전략
      • 3. Spring Security 기본 동작 흐름
      • 4. Spring Security로 인증 권한 추가하기
        • Spring Security의 인증 및 인가
      • 5. Spring Security에서 세션 관리하기
        • 세션(Session)과 쿠키(Cookie) 비교, 토큰(Token)과의 관계
        • 해싱 및 해싱알고리즘
        • base64
      • 6. Spring Security 악용 보호
        • SameSite
      • 7. Spring Security로 인가 권한 추가하기
      • 8. Bcrypt(비크립트) 암호화
      • OAuth2 적용하기
  • 네트워크
    • HTTP
    • OSI 7계층
  • DB&SQL
    • 01 Database(데이터베이스)와 SQL 개요
    • 02 관계형 모델
    • 03 집합
    • 04 JOIN 연산
    • 05 MySQL
      • 세이브포인트
      • DBeaver, Mysql 오토커밋 설정 관련
    • 06 SQL 기초
      • 예시데이터 쿼리문
    • 07 SQL 실습
      • 실습 스키마
    • 08 Join 활용
      • 실습스키마
    • 09 SQL 활용
      • 실습스키마
    • 10 정규화
      • 실습 스키마
    • 데이터타입
    • 예시 프로젝트 스키마 구성
  • AWS
    • SSL 연결하기
    • 보충설명
Powered by GitBook
On this page
  • 스프링 빈 생명주기
  • 빈의 생명주기 단계
  • 초기화 및 소멸 처리 방법
  • 초기화와 소멸 관리 시 주의사항
  • 요약
  1. 스프링
  2. Spring Boot
  3. 08 빈 생명주기

빈 생명주기 보충자료

스프링 빈 생명주기

스프링에서 빈 생명주기는 객체 생성부터 소멸까지의 과정을 관리하며, 애플리케이션 실행 시 필요한 자원을 초기화하거나 종료하는 작업을 처리할 수 있습니다. 특히, 데이터베이스 커넥션 풀이나 네트워크 소켓과 같은 리소스를 애플리케이션 시작 시 준비하고 종료 시 정리하는 데 활용됩니다.


빈의 생명주기 단계

  1. 컨테이너 생성

    • 스프링 컨테이너가 생성됩니다.

  2. 빈 생성

    • 스프링 컨테이너가 빈 객체를 생성합니다.

  3. 의존관계 주입

    • 빈에 필요한 의존관계가 모두 주입됩니다.

  4. 초기화 콜백

    • 의존관계 주입이 완료된 후 초기화 작업을 수행할 수 있는 시점입니다.

    • 데이터베이스 연결, 네트워크 소켓 연결 등을 초기화할 수 있습니다.

  5. 빈 사용

    • 애플리케이션에서 빈을 사용합니다.

  6. 소멸 전 콜백

    • 스프링 컨테이너가 종료되기 직전에 빈을 정리합니다.

    • 데이터베이스 연결 해제, 네트워크 소켓 종료 등을 수행합니다.

  7. 스프링 종료

    • 스프링 컨테이너가 종료됩니다.


초기화 및 소멸 처리 방법

1. 인터페이스 구현

InitializingBean과 DisposableBean 인터페이스를 구현하여 초기화와 소멸 작업을 처리합니다.

예시 코드

@Component
public class NetworkClient implements InitializingBean, DisposableBean {

    private String url;

    public NetworkClient() {
        System.out.println("NetworkClient 생성자 호출, url = null");
    }

    public void setUrl(String url) {
        this.url = url;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("NetworkClient 초기화");
        connect();
        call("초기화 연결 메시지");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("NetworkClient 종료");
        disconnect();
    }

    public void connect() {
        System.out.println("Connecting to " + url);
    }

    public void call(String message) {
        System.out.println("Call: " + message);
    }

    public void disconnect() {
        System.out.println("Disconnecting from " + url);
    }
}

특징

  • afterPropertiesSet(): 초기화 시 호출됩니다.

  • destroy(): 소멸 시 호출됩니다.


2. 애노테이션 사용 (@PostConstruct, @PreDestroy)

스프링에서는 @PostConstruct와 @PreDestroy 애노테이션을 통해 초기화 및 소멸 콜백을 처리할 수 있습니다.

예시 코드

@Component
public class DatabaseClient {

    private String url;

    public DatabaseClient() {
        System.out.println("DatabaseClient 생성자 호출, url = null");
    }

    public void setUrl(String url) {
        this.url = url;
    }

    @PostConstruct
    public void init() {
        System.out.println("DatabaseClient 초기화");
        connect();
        call("초기화 연결 메시지");
    }

    @PreDestroy
    public void close() {
        System.out.println("DatabaseClient 종료");
        disconnect();
    }

    public void connect() {
        System.out.println("Connecting to " + url);
    }

    public void call(String message) {
        System.out.println("Call: " + message);
    }

    public void disconnect() {
        System.out.println("Disconnecting from " + url);
    }
}

특징

  • @PostConstruct: 의존관계 주입이 완료된 후 호출됩니다.

  • @PreDestroy: 컨테이너가 종료되기 직전에 호출됩니다.

  • 권장 방식: 스프링이 아닌 다른 컨테이너에서도 동작하며, 간결하고 사용하기 쉽습니다.


3. 빈 등록 메서드에 초기화 및 소멸 메서드 지정

XML 또는 Java Config 방식으로 초기화와 소멸 메서드를 직접 지정할 수 있습니다.

예시 코드

@Configuration
public class AppConfig {

    @Bean(initMethod = "init", destroyMethod = "close")
    public NetworkClient networkClient() {
        NetworkClient networkClient = new NetworkClient();
        networkClient.setUrl("http://example.com");
        return networkClient;
    }
}

특징

  • initMethod와 destroyMethod 속성을 사용하여 초기화와 소멸 메서드를 지정합니다.

  • 외부 라이브러리의 초기화 및 소멸 작업에 주로 사용됩니다.


초기화와 소멸 관리 시 주의사항

  1. 외부 라이브러리 관리

    • 외부 라이브러리에서 초기화와 종료가 필요한 경우, 인터페이스나 애노테이션 대신 빈 등록 시 초기화 및 소멸 메서드를 지정하는 방식을 사용합니다.

  2. @PostConstruct와 @PreDestroy 사용 권장

    • 간단한 초기화와 종료 작업에는 @PostConstruct와 @PreDestroy를 사용하는 것이 가장 간편하고 권장됩니다.

  3. 무거운 작업 처리

    • 초기화와 종료 작업은 가능한 빠르게 처리해야 하며, 너무 많은 작업이 포함되지 않도록 주의해야 합니다.

  4. 빈의 상태 관리

    • 초기화 작업은 의존관계 주입이 완료된 상태에서만 동작해야 합니다.


요약

스프링 빈의 생명주기를 활용하여 데이터베이스 커넥션 풀, 네트워크 소켓 등의 리소스를 효율적으로 관리할 수 있습니다.

  • 일반적으로 @PostConstruct와 @PreDestroy를 사용하여 초기화와 종료 작업을 처리합니다.

  • 외부 라이브러리 관리가 필요한 경우, initMethod와 destroyMethod를 지정하는 방식을 사용할 수 있습니다.

  • 빈 생명주기를 올바르게 활용하면 애플리케이션의 안정성과 자원 관리를 효과적으로 개선할 수 있습니다.

Previous08 빈 생명주기Next09 빈 스코프

Last updated 4 months ago