[socceranalyst] local, production 환경 분리
로컬 환경과 배포 환경 분리
socceranalyst 에 한해서, 스프링을 실행할 때 저는 주로 로컬 환경은 H2 DB 를 사용하고, 배포할 때는 mysql 입니다.
일단 Dependency 에서는 둘 다 넣어줬는데요. 환경에 따라 DB 를 자동으로 변경하기 위해서는 yml 에서 로컬과 배포를 구분해줘야 합니다.
application.yml
spring:
profiles:
active: local
---
spring:
config:
activate:
on-profile: local
datasource:
url: jdbc:h2:tcp://localhost/~/test
username: sa
password:
jpa:
hibernate:
ddl-auto: none
---
spring:
config:
activate:
on-profile: production
datasource:
url: [RDS url]
username: [mysql username]
password: [mysql passwor]
---
# 공통 구성
logging:
level:
org:
hibernate:
SQL: DEBUG
type:
descriptor:
sql:
BasicBinder: TRACE
jwt:
secret-key: "[secret-key]"
중요한 건 ---
구분 줄과 위에서 세번째 줄 active: local
입니다.
spring:profiles:active: local 을 통해 spring:config:activate:on-profile: local 을 실행하겠다는 겁니다. (yml 파일에서는 들여쓰기가 중요하니 한줄로 쓰면 안됩니다.)
이때 조건문처럼 — 통해서 구분해줘야 단락 단락이 구분되어 실행됩니다.
여기서 #공통구성
위에 ---
를 생략한다면 on-profile: production
과 같은 위치로 묶이게 되어 local 환경에서는 공통구성도 실행되지 않게 됩니다.
배포환경에서 production 으로 실행
하지만 이렇게 해도 배포할 때는 active: production 으로 변경해야 한다는 불편함이 있습니다.
이때는 .jar 파일을 실행할 때 yml 의 spring.profiles.active 을 production 으로 변경하여 실행하면 됩니다.
다음은 제가 EC2 서버에서 .jar 파일을 실행할 때 쓰는 명령어입니다.
nohup java -jar -Dspring.profiles.active=production backend-0.0.1-SNAPSHOT.jar > output.log 2>&1 &
아래는 해당 명령어에 대한 설명입니다.
nohup
: 백그라운드에서 실행한다는 의미입니다. 리눅스 서버를 종료해도 java 는 계속 실행됩니다.java -jar
: 자바 jar 파일을 실행한다는 의미입니다.-Dspring.profiles.active=production
: application.yml 의 spring.profiles.active 을 production 으로 변경한다는 의미입니다. 이를 통해서 mysql 을 사용하게 됩니다.> output.log
: 표준 출력(stdout)을 리다이렉션하여 output.log 파일로 저장하는 기호입니다.2>&1
: 표준 에러(stderr)를 표준 출력(stdout)과 같은 곳으로 리다이렉션합니다. 이 경우 표준 출력이output.log
파일로 리다이렉션되므로 표준 에러도 동일한 파일에 저장됩니다.
로컬 테스트 환경과 배포 환경을 구분하는 건 중요한 것 같습니다 ㅎㅎ
댓글남기기