인프런 커뮤니티 질문&답변

이상민님의 프로필 이미지
이상민

작성한 질문수

스프링 부트 - 핵심 원리와 활용

@Profile

@Profile을 이용해 환경에 맞는 bean을 등록하는 과정에 대해 궁금한 것이 있습니다.

해결된 질문

작성

·

171

0

안녕하세요. 항상 좋은 강의 올려주셔 감사합니다.

 

강의를 보며 @Profile으로 빈을 환경(로컬, 개발, 운영)에 따라 달리 등록하는 과정에 대해 궁금한 점이 생겨 질문 올립니다.

 

영한님은(약 1분36초 쯤) "로컬에서는 로직을 테스트하기 위해 빈을 등록한다." 라는 뉘앙스로 빈을 환경에 따라 달리 등록한다 말씀하셨는데 저는 "테스트 환경을 위해 빈을 등록한다"는 느낌을 받았습니다.

 

저는 과거 클린코드에 대해 공부하며 테스트를 위한 코드와 실제 비즈니스 로직이 담긴 코드는 서로 분리하는 것이 좋다고 배웠습니다.

 

이러한 관점에서 보았을때 LocalPayClientpayConfig에서 localPayClient() 메서드는

@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();
    }
}

테스트를 위한 코드라 생각이 들며 결과적으로 pay디렉토리 내부에 테스트를 위한 객체와 실제 비즈니스를 위한 객체가 섞여 어색하다는 느낌을 받았습니다.

 

혹시 이에 대해서 어떻게 생각하시는지 궁금합니다! 안정적인 테스트를 위해 어쩔수 없이 희생해야 하는 부분일까요?

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이상민님

생각하신 내용이 맞습니다 🙂

이 코드는 예제 코드이기 때문에 많이 간략화 한 것으로 이해하면 됩니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

제공드린 자료에서는 @Profile을 이용한 빈 등록 과정에 대한 내용이 포함되어 있지 않아, 직접적으로 해당 질문에 대한 답변을 드리기 어렵습니다.

하지만, 일반적으로 @Profile 어노테이션은 애플리케이션의 실행 환경에 맞춰서 다른 설정을 적용할 수 있도록 돕는 Spring Framework의 기능입니다. 이를 통해 개발환경, 테스트 환경, 운영 환경 등에서 각각 다른 빈을 등록하거나 설정을 적용할 수 있습니다.

테스트를 위한 코드와 실제 비즈니스 로직의 분리에 대한 질문에는, 소프트웨어 개발 원칙 중 하나인 ‘분리 관심사(Separation of Concerns, SoC)‘에 기반하여 설계하는 것이 중요합니다. @Profile을 사용하여 환경에 맞는 빈을 등록하는 방식도, 이 원칙에 따라 실제 운영 환경과는 다른 설정이나 객체를 테스트 환경에서 사용함으로써, 코드의 유연성과 테스트 용이성을 높이려는 것입니다.

테스트 환경과 비즈니스 로직을 분리하는 것이 좋다는 관점은 매우 중요합니다. 그러나 실제로 어플리케이션을 개발하면서 완벽한 분리가 항상 가능한 것은 아닙니다. 때로는 실제 로직과 테스트를 위한 로직이 일부 섞이거나 테스트의 용이성을 위해 어느 정도 통합을 선택하는 경우도 발생할 수 있습니다. 이러한 상황에서는 코드의 가독성, 유지 보수성, 변경 용이성 등을 고려하여 최선의 방법을 선택하는 것이 중요합니다.

애플리케이션의 구조와 테스트 전략에 따라 다를 수 있으므로, 여러 관점을 고려하여 적절한 방법을 찾아가야 합니다.

이상민님의 프로필 이미지
이상민

작성한 질문수

질문하기