ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @Profile
    스프링/스프링부트 2023. 9. 30. 22:10

    프로필과 외부 설정을 사용해서 각 환경마다 설정값을 다르게 적용하는데, 설정값이 다른 정도가 아니라 각 환경마다 서로 다른 빈을 적용해야하는 상황이 있을 때도 있다.

     

     

    로컬 개발에서는 로직이 수행되지만 결제가 되지 않고, 운영 환경에서는 실제 결제까지 되는 기능을 예제로 작성할 것이다.

     

     

    PayClient 인터페이스

    public interface PayClient {
        void pay(int money);
    }

     

     

    LocalPayClient.class - 로컬 환경

    @Slf4j
    public class LocalPayClient implements PayClient{
        @Override
        public void pay(int money) {
            log.info("로컬 결제 money={}", money); // 실제 결제 x
        }
    }

     

    ProdPayClient.class - 운영 환경

    @Slf4j
    public class ProdPayClient implements PayClient {
        @Override
        public void pay(int money) {
            log.info("운영 결제 money={}", money);
        }
    }

    로컬에서는 실제 결제되지 않고, 운영에서만 실제로 결제된다는 가정 하에 log를 찍어본다.

     

     

     

    OrderService.class

    @Service
    @RequiredArgsConstructor
    public class OrderService {
    
        private final PayClient payClient;
    
        public void order(int money) {
            // 주문 로직 생략
            payClient.pay(money);
        }
    }

    주문을 하는 로직은 생략하고 payClient.pay를 호출하는 로직이다.

     

     

     

    PayConfig.class

    @Slf4j
    @Configuration
    public class PayConfig {
    
        @Bean
        @Profile("default")
        public LocalPayClient localPayClient() {
            log.info("LocalPayClient 빈 등록");
            return new LocalPayClient();
        }
    
        @Bean
        @Profile("prod")
        public ProdPayClient prodPayClient() {
            log.info("ProdPayClient 빈 등록");
            return new ProdPayClient();
        }
    }

    Configuration에 빈을 등록하는데, 두 개 다 등록하면 원하는 대로 설정이 되지 않는다.

    @Profile 어노테이션을 사용해서 설정을 할 수 있는데 괄호 안에 default를 입력하면 프로필이 설정되지 않으면 default 값으로 LocalPayClient가 빈으로 등록된다.

    @Profile("prod")라고 설정하면 prod라는 프로필을 설정하면 ProdPayClient가 빈으로 등록된다.

     

     

     

     

    실행을 해보면 profile에 따라서 운영 결제, 로컬 결제가 설정된다.

    '스프링 > 스프링부트' 카테고리의 다른 글

    헬스 정보 - health  (0) 2023.10.01
    액츄에이터와 액츄에이터 엔드포인트  (0) 2023.10.01
    YAML  (0) 2023.09.30
    @ConfigurationProperties - 외부 설정 사용  (0) 2023.09.30
    @Value - 외부 설정 사용  (0) 2023.09.30
Designed by Tistory.