회사에서 다음과 같은 코드를 prod 환경에서 배포했다.
@Value("$spring.profile.active")
private String activeProfile;
...
private boolean isProductionProfile() {
return "prod".equals(activeProfile);
}
예상:
운영 환경에 배포했기 때문에, isProductionProfile은 true를 리턴한다.
실제 결과:
isProductionProfile이 false를 리턴했다.
결과적으로, 운영에서 나타나야 할 기능(제한)들이 제대로 나타나지 않았다.
운영에 나간 코드를 롤백하고, 원인을 찾는 작업을 동시에 했다.
첫번째, @Value("$spring.profile.active") 부분이 잘못되었다.
활성화된 프로파일을 가져오고자 했다. 하지만 잘못된 부분이 있어 가져오지 못했다.
@Value("$spring.profile.active")
1. profile은 profiles로 바꾸어야 한다.
2. $ 다음 spring.profiles.active은 괄호로 묶어야 한다.
1,2 내용을 반영하여 코드 고침.
->
@Value("${spring.profiles.active}")
두번째, "prod".equals(activeProfile) 부분이 잘못되었다.
"prod".equals(activeProfile) 코드는, activeProfile이 하나일 것이라고 가정하고 있다.
하지만 실제로는 그렇지 않다.
prod, prod2와 같은 프로파일 여러 개가 동시에 활성화될 수도 있다.
prod, product2 프로파일 여러 개가 활성화돼어 있다면,
activeProfile은 "prod,prod2"로 저장될 것이다.
그러면 실제로 운영(prod) 프로파일에도 불구하고, "prod".equals(activeProfile)은 false가 된다.