Dev Memo

배포를 했는데 세팅한 Profile을 바라보지 않는 것 같다면?

미스터머글 2022. 1. 11. 18:44
728x90
반응형

⚠️ 경고 ⚠️

 

본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿)

 


API를 개발하는 업무였고 Local에서는 문제없이 잘 동작했다. 그러고는 개발 서버에 배포하면서 CI/CD에도 이슈없어서 "아~ 다했다."하고 안심했는데 프론트엔드 개발자가 "개발서버 동작안하는데요?"라고 하셨다. 엄훠나.

지금 진행하는 프로젝트는 스프링부트 Application을 Docker로 빌드를 한다. Docker로 빌드하기위해 스프링 내부에 Dockerfile 파일을 가진다. 이 Dockerfile 내부에는 여러개의 profile을 가진다. 개발자가 개인적으로 개발할 때 사용하는 local, dev 서버에 세팅하는 dev 등. 해당 profile은 yml 파일을 바라보게 된다. 해당 파일은 application-dev.yml, application-local.yml 등의 형태로 만들면 스프링부트에서 파일의 접미어(suffix)를 확인하여 해당 파일을 바탕으로 profile을 세팅한다. 만약 profile 파일에 없는 내용은 default profile인 application.yml에서 찾는다.

AWS에서 로그를 보았다. profile을 못찾고 있었다.(해당 로그는 보안이슈로 공개하지 못하는 점 양해바람) 나름 dev 환경을 바라보도록 세팅한 상태. 그럼에도 dev를 바라보지 못하고 있다는 것은 yml 파일 혹은 Dockerfile에 작성을 잘못한 것. 아래를 보면 Dspring.profiles.active의 위치가 다르다.

############ 기존 ###############

# spring profile
ENV SPRING_PROFILE "dev"

EXPOSE $PORT
COPY build/libs/app.jar app.jar
ENTRYPOINT [ \
"java", \
"-jar", \
"/app.jar", \
"-Dspring.profiles.active=${SPRING_PROFILE}", \
### 이하 생략


############ 변경 ###############

# spring profile
ENV SPRING_PROFILE "dev"

EXPOSE $PORT
COPY build/libs/app.jar app.jar
ENTRYPOINT [ \
"java", \
"-Dspring.profiles.active=${SPRING_PROFILE}", \
"-jar", \
"/app.jar", \
### 이하 생략

우선 ENTRYPOINT를 이해할 필요가 있다. 아래는 ENTRYPOINT를 설명한 글이다.

ENTRYPOINT는 컨테이너가 시작되었을 때 스크립트 혹은 명령을 실행합니다. 즉 docker run 명령으로 컨테이너를 생성하거나, docker start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다. ENTRYPOINT는 Dockerfile에서 단 한번만 사용할 수 있습니다.

선택된 이미지가 컨테이너로 생성할 때 실행하고자하는 명령어를 ENTRYPOINT에 작성한다. 여기서는 컨테이너가 생성될 때 jar 파일을 실행하는 명령어가 담긴다. 그렇게 보면 무엇이 문제인지 확인할 수 있다. 명령어 작성 방법을 떠올리면 옵션(Dspring.profiles.active)은 실행할 파일(app.jar)보다 앞에 작성되어야 한다. 기존에는 파일 뒤에 작성되어 있어서 제대로 동작하지 않았던 것.

위치를 바꾸고 다시 빌드를 했는데 이번에는 다음과 같은 메세지가 출력된다.

Application run failed

자세히 살펴보니 환경변수 값을 찾을 수 없다는 메세지가 Log에 보인다. (이 역시 해당 로그는 보안이슈로 공개하지 못하는 점 양해바람) 확인해보니 기본(Default) profile로 세팅할 때 환경변수도 기본 yml 파일인 application.yml을 보게 된다. dev와 local yml 파일에는 있지만 application.yml에는 없는 환경 변수값으로 인해 이와 같은 에러가 나타난 것. 해당값을 넣고 다양한 방식으로 테스트를 했을 때 문제없이 동작하였다.

 

 

🍔

 

 

728x90
반응형