@Profile을 이용해 환경에 맞는 bean을 등록하는 과정에 대해 궁금한 것이 있습니다.
안녕하세요. 항상 좋은 강의 올려주셔 감사합니다.
강의를 보며 @Profile으로 빈을 환경(로컬, 개발, 운영)에 따라 달리 등록하는 과정에 대해 궁금한 점이 생겨 질문 올립니다.
영한님은(약 1분36초 쯤) "로컬에서는 로직을 테스트하기 위해 빈을 등록한다." 라는 뉘앙스로 빈을 환경에 따라 달리 등록한다 말씀하셨는데 저는 "테스트 환경을 위해 빈을 등록한다"는 느낌을 받았습니다.
저는 과거 클린코드에 대해 공부하며 테스트를 위한 코드와 실제 비즈니스 로직이 담긴 코드는 서로 분리하는 것이 좋다고 배웠습니다.
이러한 관점에서 보았을때 LocalPayClient와 payConfig에서 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
0
안녕하세요, 인프런 AI 인턴입니다.
제공드린 자료에서는 @Profile을 이용한 빈 등록 과정에 대한 내용이 포함되어 있지 않아, 직접적으로 해당 질문에 대한 답변을 드리기 어렵습니다.
하지만, 일반적으로 @Profile 어노테이션은 애플리케이션의 실행 환경에 맞춰서 다른 설정을 적용할 수 있도록 돕는 Spring Framework의 기능입니다. 이를 통해 개발환경, 테스트 환경, 운영 환경 등에서 각각 다른 빈을 등록하거나 설정을 적용할 수 있습니다.
테스트를 위한 코드와 실제 비즈니스 로직의 분리에 대한 질문에는, 소프트웨어 개발 원칙 중 하나인 ‘분리 관심사(Separation of Concerns, SoC)‘에 기반하여 설계하는 것이 중요합니다. @Profile을 사용하여 환경에 맞는 빈을 등록하는 방식도, 이 원칙에 따라 실제 운영 환경과는 다른 설정이나 객체를 테스트 환경에서 사용함으로써, 코드의 유연성과 테스트 용이성을 높이려는 것입니다.
테스트 환경과 비즈니스 로직을 분리하는 것이 좋다는 관점은 매우 중요합니다. 그러나 실제로 어플리케이션을 개발하면서 완벽한 분리가 항상 가능한 것은 아닙니다. 때로는 실제 로직과 테스트를 위한 로직이 일부 섞이거나 테스트의 용이성을 위해 어느 정도 통합을 선택하는 경우도 발생할 수 있습니다. 이러한 상황에서는 코드의 가독성, 유지 보수성, 변경 용이성 등을 고려하여 최선의 방법을 선택하는 것이 중요합니다.
애플리케이션의 구조와 테스트 전략에 따라 다를 수 있으므로, 여러 관점을 고려하여 적절한 방법을 찾아가야 합니다.
보안이 엄격한 데이터
0
73
1
MyProperties 자체를 클라이언트 코드에서 사용
1
43
1
http://localhost:8080/actuator/prometheus
0
85
3
jar 추가에대한 질문드려도될까요?
0
64
1
build.gradle bom link 변경
0
65
2
@Counted 초기화
0
47
1
@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..
0
101
2
springboot에서 actuator없이 micrometer를 사용할수 있나요?
0
67
1
@Configuration 질문드립니다.
0
84
2
[공유] 터미널 말고 IDE 에서 jar 실행하기
0
101
1
localhost:8080/hello-servlet 404오류
0
123
2
내장톰캣2 서블릿 톰켓 실행이 안됩니다
1
154
2
최대 Tomcat 스레드 수를 확인하는 지표
0
160
1
mac m2에서 startup.sh 실행후 아무 반응이 없습니다.
0
94
2
내장 톰캣 실행 오류 관련 질문드립니다.
0
158
1
스프링 발전 과정들도 자세히 알아둬야하나요??
1
127
1
스프링부트 ioc 컨테이너 갯수
0
89
1
404 페이지
0
133
3
actuator 호출시 타임스탬프 질문
0
90
1
순수 라이브러리 사용하기 2 - memory-v1
0
125
1
외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.
0
105
1
서블릿 컨테이너 초기화1 강의 관련 질문입니다~
0
93
1
Thread Config Max 패널 설정 변경 질문
0
128
1
스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.
0
107
1





