본문 바로가기
BE/Spring

스프링 부트 실행 환경 분리

by cjsrhd94 2022. 2. 2.

스프링에서 실행 환경을 분리하는 법에 대해 알아보자.

// 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파일을 직접 실행시켜 서버를 구동할 때 는 실행 커맨드 뒤에 옵션으로 사용할 프로필 이름을 작성해주면 된다.

댓글