스프링에서 실행 환경을 분리하는 법에 대해 알아보자.
// application.yml
# H2를 이용한 local 개발 단계에서 사용
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/~/process;
username: sa
password:
# MySQL을 이용한 배포 단계에서 사용
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://{url}
# username: {username}
# password: {password}
jpa:
hibernate:
# H2를 이용한 local 개발 단계에서 사용
ddl-auto: create
# # MySQL을 이용한 배포 단계에서 사용
# ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org:
hibernate:
SQL: debug
type: trace
위 yml 파일은 처음 기업 협업 프로젝트를 시작하면서 만든 application.yml 파일이다. 개발 단계와 배포 단계에서 다른 DB를 사용하기 때문에 개발이 전부 끝나면 배포 단계의 주석을 풀어 사용하려 만들었다.
하지만 위 방법은 협업에 적합하지 않았다. yaml파일이 수정되는 일이 종종 있었으며, 팀원들이 수정한 채로 깃허브에 올려 pull request 과정에서 충돌이 일어나기도 했다. 이에 프로필을 활용하여 실행 환경을 분리하는 방법을 찾아 문제점을 개선했다.
// application.yml
---
# 개발 환경에서 사용(Mysql)
spring:
profiles:
active: dev
---
# local 환경에서 사용(H2 DB)
spring:
profiles:
active: local
---
// application-local.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:tcp://localhost/~/process
username: sa
password:
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org:
hibernate:
SQL: debug
type: trace
// application-dev.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://{url}
username: {username}
password: {password}
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org:
hibernate:
SQL: debug
type: trace
spring.profiles.active를 활용하여 사용할 프로필들을 정의해 주었다. 진행하는 프로젝트의 경우 local과 dev 두 가지 프로필을 사용하였다.
프로필 이름에 맞게 application-'profile_name'.yml 파일을 만들고, 해당 프로필에 어떤 설정 옵션이 들어가야하는지 작성한다. 그리고 서버 실행시 어떤 프로필을 사용하여 실행할지 정해주면 작업이 완료된다.
인텔리제이의 경우 상단 Run - Edit Configurations에 들어가 Active profiles에 사용할 프로필 이름을 넣어주면 된다.
$ java -jar 'jar_file_name'.jar --Dspring.profiles.active=dev
jar파일을 직접 실행시켜 서버를 구동할 때 는 실행 커맨드 뒤에 옵션으로 사용할 프로필 이름을 작성해주면 된다.
'BE > Spring' 카테고리의 다른 글
본인 확인은 어떤 layer에서 이루어져야 할까? (0) | 2022.07.22 |
---|---|
yaml 파일을 그룹으로 관리하기 (0) | 2022.07.09 |
Springboot에서 Redis Cache 적용하기 (0) | 2022.06.27 |
스프링 스케줄러(@Scheduled) 사용하는 법 (0) | 2022.06.23 |
@PathVariable, @RequestParam는 각각 언제 사용해야 할까? (0) | 2022.01.20 |
댓글