[Spring Boot] 환경 분리하기

차해솔·2021년 7월 25일
10

스프링부트

목록 보기
1/5

환경분리의 필요성

실제 배포할 서비스라면,
개발 서버와 운영 서버를 나눠서 관리할 필요가 있습니다.
추가적으로 테스트 환경도 분리해주면 좋고,
JPA를 사용한다면 ddl-auto: create 를 사용하는
초기 환경세팅도 분리해두면 운영 서버에서 create가 실행되는
대참사를 예방할 수 있습니다.

환경분리하는 방법

환경분리 방법을 찾아보니 크게 두 가지가 있었습니다.

1. yml 파일 나누기
2. 하나의 yml 파일 안에서 나누기

두 가지 방법을 모두 알아보겠습니다.

기본 환경 세팅

JPA와 스프링부트2.5.3로 기본 환경을 구성했습니다.

Entity는 간단하게 User 하나 만들어 두었습니다.

실행해보니 포트 8080으로 잘 실행되고,
ddl-auto: create 설정에 맞게 테이블이 생성됩니다.

db에도 잘 생성이 되었네요

이제 환경을 분리해봅시다.

yml 파일 나누기

application.yml

server:
  port: 8080

spring:
  profiles:
    default: dev # 기본 환경을 dev로

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/profiledemo?serverTimezone=Asia/Seoul
    username: root
    password: abcd

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
    show-sql: true

application-create.yml

server:
  port: 8081

spring:
  config:
    activate:
      on-profile: create # 환경이름설정

  jpa:
    hibernate:
      ddl-auto: create

application-dev.yml

server:
  port: 8082

spring:
  config:
    activate:
      on-profile: dev

  jpa:
    hibernate:
      ddl-auto: update

application-prod.yml

server:
  port: 8083

spring:
  config:
    activate:
      on-profile: prod

  jpa:
    hibernate:
      ddl-auto: none

세가지 파일을 만들었습니다.
기본 yml 설정에 작성한 내용들에게
추가로 profile에 작성한 내용들이 덮어쓰기 되는 방식입니다.

여기서는 port 번호와 ddl-auto 설정만 바꿨는데,
datasource 세팅이나 다른 설정들도 작성하여 바꿀 수 있습니다.

인텔리제이에서 Edit Configurations로 들어가서
Active profiles 부분에 원하는 profile명을 입력하면
해당 세팅으로 실행됩니다.


아무 설정 없이 실행하면 default로 설정해둔 dev 세팅으로 실행됩니다.
포트8082로 잘 실행되었네요


이번엔 create 세팅으로 실행해 봤습니다.
포트 8081로 실행되며 ddl-auto: create가 적용되었네요


prod 세팅도 잘 실행되네요 (포트 8083)

yml 하나로 나누기

application.yml

server:
  port: 8080

spring:
  profiles:
    default: dev # 기본 환경을 dev로

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/profiledemo?serverTimezone=Asia/Seoul
    username: root
    password: abcd

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
    show-sql: true

---
server:
  port: 8081

spring:
  config:
    activate:
      on-profile: create # 환경이름설정

  jpa:
    hibernate:
      ddl-auto: create

---
server:
  port: 8082

spring:
  config:
    activate:
      on-profile: dev

  jpa:
    hibernate:
      ddl-auto: update

---
server:
  port: 8083

spring:
  config:
    activate:
      on-profile: prod

  jpa:
    hibernate:
      ddl-auto: none

하나의 yml 파일로 나눌때에는
--- 로 나눠서 작성하면 됩니다.

yml 파일 작성법만 다를뿐 실행하는 방법이나 실행 결과는 여러 yml일때와 똑같습니다.
실행해보면 문제없이 잘 되네요.

테스트 환경 나누기

테스트 환경 나누기는 test 폴더에 resources 폴더를 생성해 주시고
application.yml 파일을 만들어 주시면 됩니다.

파일을 만들어만 두면 테스트 실행시 테스트용 환경세팅으로 실행됩니다.

그리고 JPA의 경우 테스트 application.yml에서 datasource를 아에 입력하지 않으면,
자동으로 H2 db로 세팅됩니다.(H2 의존성 추가는 해줘야 합니다)

마무리

스프링 부트 예전버전2.4이전에서는

spring:
  profiles: dev

방식으로 profile 이름설정을 했었다고합니다.

모든 소스코드는 github에 있습니다
https://github.com/stbpiza/profileDemo

잘못된 내용 지적은 언제나 환영입니다.😁
감사합니다.

1개의 댓글

comment-user-thumbnail
2023년 2월 11일

많은 도움 됐습니다 !

답글 달기