Spring Profiles 설정 삽질을 배워서 남주자 - gae-jang-mo/app GitHub Wiki
배포환경에서 테스트가 깨져서 (설정파일 로딩문제) 해결책을 제시하려고 합니다. 사실은 제대로 한 것인지 잘 모르겠는 상태이지만... 삽질을 오지게 한 결과 공유합니다.
문제의 발단은...
[로컬환경] - github key를 로컬의 개발/테스트 환경, 실서버의 테스트 환경에서는 에헴꺼를 쓰고 실서버의 배포 환경에서는 규동꺼를 써야 되는 상황..
우리의 해결책으로써 나온것이 github key를 application-oauth.yml로 만들어서 resources에 넣고 gitignore에 추가한 것입니다. 그래서 로컬에서 ./gradlew clean build를 했을 때, 아주 잘 돌아갑니다. 참고로 테스트 코드에 @ActiveProfiles를 모두 지웠습니다. 대신에 gradle 파일에서 test 스코프에 system properties를
systemProperty 'spring.profiles.active', 'test'
로 설정했습니다. 즉 모든 테스트는 이제 test profiles로 돌게 됩니다. 내용은 반영 되지 않은 상태이지만 temp 브랜치에 넣어서 remote에 푸시만 한 상태입니다.
그리고 우리 application.yml을 수정을 했습니다.
spring.profiles: local, test // 나중에 test 에만 넣어야 할게 생기면 분리하려고요.
spring.profiles.include: oauth
이게 진짜 요상한게, yml 자동완성 때문에 그냥 치면 저렇게 칠 수가 없어요... 엔터를 누르는 순간 자동 줄바꿈이 되며 계단식으로 써지게 됩니다. 그래서 적용이 안되는거 같아요. https://kwonnam.pe.kr/wiki/springframework/springboot/properties 권남님 위키를 참고하니 저 코드가 쓰여있어서 억지로 저렇게 타이핑을 하니까 먹더라고요. yml파일에서.
그리고 Property Logger를 추가해서 어떤 profile이 로딩되나 확인하는 클래스를 하나 넣었습니다.
[배포환경]
처음에 문제가 여기서 발생했습니다. 서버 환경에서는 application-oauth.yml이 없기 때문에, 테스트는 돌지 못했습니다. 빌드 파일을 만들어서 (jar) profiles를 dev로 주면 config server에서 app-dev.yml을 물고 오기 때문에 프로덕션 코드를 배포하는데는 문제가 없었지만 gradle build시 test수행문제가 있는 것입니다.
그래서 우리 private repo에 app-test.yml 을 넣어서 에헴의 키를 등록합니다. 그래야 서버 환경에서 테스트를 할 때 테스트용 키를 물고 오게 됩니다.