spring boot

spring boot app을 로컬, 개발 서버, 실행(배포) 서버로 구분해서 실행하기 - II

hoazzinews 2024. 11. 22. 14:56
반응형

[인프런 - 특별 30% 쿠폰할인!!] 스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!

 

블스님이 선물하는 할인쿠폰

스프링부트를 이용한 웹 프로그래밍: 웹사이트 이렇게 만드는 거예요!

www.inflearn.com

 

 

지난 글에서는 application.properties 파일에서 spring.profiles.active 값을 변경해서 로컬, 개발 서버, 실행(배포) 서버를 구분하는 방법에 대해서 살펴봤습니다.
https://hoazzinews.tistory.com/4

 

spring boot app를 로컬, 개발 서버, 실행(배포) 서버로 구분해서 실행하기 - I

이번 글에서는 spring boot app을 로컬, 개발서버, 실행(배포) 서버로 구분해서 실행하는 방법에 대해서 살펴보겠습니다. 일반적으로 spring boot 프로젝트를 진행하게 되면 나만 사용하는 로컬(내 PC)

hoazzinews.tistory.com

 
이런 방법이 일반적이긴 하지만 다소 불편한 부분이 있습니다. 개발자가 매번 spring.profiles.active의 값을 local, dev 또는 prod로 변경해야합니다. 실수로 실행(배포)서버에 배포할 때 spring.profiles.active의 값을 local 또는 dev로 한다면 아주 큰 재앙이 발생하게 됩니다.
 
이번 시간에는 애플리케이션 실행 시점에 spring.profiles.active를 지정하는 방법과 서버의 환경변수를 이용해서 spring.profiles.active를 지정하는 방법에 대해서 살펴보겠습니다.
 
1. 애플리케이션 실행 시 커멘드를 이용한 프로파일 구분
  1-1. application.properties 파일에서 spring.profiles.active 값을 'local' 설정합니다. 그리고 로컬에서 애플리케이션을 실행하면 application-local.properties이 설정됩니다.
 
application.properties

# profiles active
spring.profiles.active=local

로컬에서 애플리케이션을 실행합니다.
application-local.properties의 server.name 값이 콘솔에 출력됐습니다.

 
  1-2. 이제 프로젝트 소스를 개발 서버에 올리고 빌드 후 실행을 합니다. 이때 다음 명령으로 애플리케이션을 실행합니다.
  $ java -jar samplepjt-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev 
 
커멘드가 기존과 다른 점은 --spring.profiles.active=dev가 추가됐는데요, 이렇게 하면 application.properties 파일의 spring.profiles.active 값(local)보다 커맨드 명령어가 우선시 되어  application-dev.properties가 설정됩니다.
다음은 브라우저 실행 결과와 콘솔 로그입니다.

개발 서버에서 애플리케이션을 실행합니다.
application-dev.properties의 server.name 값이 출력됐습니다.

 
이렇게 하면 application.properties의 spring.profiles.active 값과는 상관 없이, 실행 커멘드를 이용해서 active 값을 설정할 수 있습니다. 만약 커멘드를 다음과 같이 입력하면, 
  $ java -jar samplepjt-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod 
application-prod.properties 가 설정 되겠죠~.
 
2. 환경변수를 이용한 프로파일 구분
1번에서는 애플리케이션을 실행할 때 커멘드에 --spring.profiles.active 옵션을 이용해서 프로파일을 구분했습니다. 이런 방법은 매번 개발자가 application.properties 파일의 spring.profiles.active을 변경하지 않아서 좋기는 하지만, 아직도 약간의 불편함 여전히 존재합니다. 
 
개발자는 매번 애플리케이션을 실행하는 시점에 커멘드에 --spring.profiles.active의 값을 'dev' 또는 'prod'로 구분해서 입력해야 합니다. 이런 점은 불편하기도 하고 실수할 수도 있습니다. 이런 불편한 부분을 해결하기 위해서 '환경변수'를 이용하는 방법이 있습니다.
 
  2-1. 계정 홈으로 이동해서 .profile 파일을 open 합니다.
    $ cd 
    $ sudo nano .profile 
  2-2. 하단에 SPRING_PROFILES_ACTIVE=dev를 추가 합니다.

SPRING_PROFILES_ACTIVE=dev를 추가 합니다.

 
  2-3. .profile 파일을 저장하고 닫습니다.
    - 나가기 : Ctrl+x 
    - 저장하기 :
    - 키보드의 'Enter' 키 누름. 
 
  2-4. .profile 파일 실행 합니다.
     $ source .profile 
 
  2-5. 실행파일 위치로 이동 후 애플리케이션을 실행합니다.
     $ cd samplepjt/build/libs/ 
     $ java -jar samplepjt-0.0.1-SNAPSHOT.jar 

이렇게 .profile에 SPRING_PROFILES_ACTIVE를 dev로 설정하고 애플리케이션을 실행하면 application-dev.properties이 설정됩니다. 만약 SPRING_PROFILES_ACTIVE를 prod로 설정하면 application-prod.properties이 설정되겠죠~.
 
결과적으로, 각각의 서버(개발, 실행)에 .profile 환경변수를 설정하면 개발자는 spring.profiles.active 값을 수정하지 않고 실행만 하면 됩니다. 편리하기도 하고 실수할 일도 없겠죠~.
 
※ 참고 우선순위는 '커멘드를 이용한 프로파일 구분' 방법이 가장 높으며, 다음으로 '환경변수를 이용한 프로파일 구분'이고 'application.properties'의 spring.profiles.active를 이용하는 방법이 가장 낮습니다.