반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

개키우는개발자 : )

커스톰 @Conditional 본문

토비의 스프링 부트 - 이해와 원리/섹션8 - 조건부 자동 구성

커스톰 @Conditional

DOGvelopers 2024. 10. 9. 21:01
반응형

요약 및 핵심 개념

@Conditional 애노테이션을 사용하여 조건에 따라 Tomcat과 Jetty 웹 서버 중 하나를 선택하는 방법을 다루었습니다. 기존의 학습 테스트에서 구현한 조건부 로직을 실제 자동 구성 시나리오에 적용하여, 특정 라이브러리가 프로젝트에 포함되어 있는지 여부에 따라 자동으로 웹 서버를 선택하는 방법을 배웠습니다.

핵심 내용

  1. Tomcat과 Jetty 선택 기준:

    • 프로젝트에 특정 라이브러리(Tomcat 또는 Jetty)가 포함되어 있는지를 기준으로 웹 서버를 선택합니다.
    • 스프링의 ClassUtils.isPresent 유틸리티 메소드를 사용해 해당 클래스가 존재하는지 확인하여 true 또는 false를 반환하는 방식으로 구현했습니다.
  2. 조건부 애노테이션의 활용:

    • @Conditional 애노테이션을 사용하여 특정 클래스가 존재할 때만 빈을 등록하도록 설정했습니다.
    • 중복되는 코드를 줄이기 위해 메타 애노테이션을 활용한 커스텀 애노테이션(ConditionalOnMyClass)을 정의했습니다.
  3. 커스텀 애노테이션 구현:

    • ConditionalOnMyClass 애노테이션을 만들어, 클래스 이름을 속성 값으로 받아들여 해당 클래스가 존재할 때만 조건을 만족하도록 구현했습니다.
    • MyClassCondition 클래스에서 메타데이터에서 클래스 이름을 읽어와 클래스가 존재하는지 확인하는 로직을 구현했습니다.
  4. 자동 구성 로직의 테스트:

    • 라이브러리를 포함하거나 제외하는 설정을 통해 Tomcat과 Jetty가 각각 정상적으로 선택되는지 확인했습니다.
    • Gradle에서 특정 라이브러리를 제외하는 설정을 통해 자동 구성 동작을 검증했습니다.
  5. 자동 구성의 확장 가능성:

    • 다양한 기술이나 라이브러리를 사용하는 경우 해당 라이브러리의 존재 여부에 따라 자동 구성할 수 있는 구조를 만들 수 있습니다.
    • 예를 들어, Redis나 JPA와 같은 추가적인 라이브러리도 조건부 자동 구성을 통해 손쉽게 적용할 수 있습니다.

결론

@Conditional 애노테이션을 통해 조건부 자동 구성을 적용하고, 이를 기반으로 특정 라이브러리의 존재 여부에 따라 웹 서버를 선택하는 방법을 학습했습니다. 자동 구성의 기본적인 동작 원리와 확장 가능성을 이해하는 것이 핵심이었으며, 다음 시간에는 자동 구성과 커스텀 구성 간의 우선순위 조정 방법에 대해 다룰 예정입니다.

반응형
Comments