운영 환경에서 profile 분기 처리가 되지 않는다

jinwook han·2020년 10월 3일
0

회사에서 다음과 같은 코드를 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가 된다.

더 잘하려면

  1. 웬만하면 프로파일 관련 분기 처리를 하지 않는다.
  2. 프로파일 분기 처리를 한다면, 운영에 나가기 전에 디버깅 테스트를 하여, 프로파일 관련 변수에 어떤 값이 들어가는지 미리 확인한다.

0개의 댓글