HyunJun 기술 블로그

스프링 프레임워크 Local, Dev, Prod 환경 구성하기 본문

Spring Framework

스프링 프레임워크 Local, Dev, Prod 환경 구성하기

공부 좋아 2023. 5. 13. 21:32
728x90

1. Local, Dev, Prod 환경 구성하기


실제로 개발 및 서비스 중인 많은 서비스의 경우 아래와 같은 이유들로 인해, Local(내부 로컬 환경), Dev(개발 환경), Prod(운영 환경) 환경을 나누어서 개발을 하게 됩니다.

 

  • 로컬에서 테스트를 하다가 실제 운영 중인 Database의 Table을 삭제하거나 Data의 Update가 일어난다면?
  • Prod 환경 하나만을 사용하는 환경이라고 가정하고 CI/CD가 적용되어 있는데 Local 환경에서 실수로 푸쉬한 경우?
  • 하나의 설정 파일만 가지고 사용한다면 Local, Dev, Prod 전환 시에 설정 파일을 계속 변경해 주어야 한다.

2. 분리 계획하기

  • Local, Dev, Prod 간의 다르게 구성해야 할 점은 무엇일까?
  • -> Database 정보(datasource), Port 번호 정도로 간단하게 있다고 가정해 보자.
  • 그렇다면 스프링 프레임워크에서 위의 정보를 다르게 구성하려면 어떻게 해야 할까?
  • -> properties 혹은 yml 파일로 컨트롤해 주면 된다.

3. 파일 구성하기

  • 협업을 하는 과정이라고 가정하고 DB 정보는 개인만이 보관하고, application.yml, dev.yml, local.yml, prod.yml만을 공유하는 상황이라고 가정하겠습니다. 
  • 이렇게 가정할 경우 DB 정보를 개인이 관리할 수 있어 보안에 좋고, 실 서버가 아닌 단순 프로젝트인 경우 개개인의 데이터베이스 서버를 따로 운영할 수 있다는 장점이 있습니다.
  • 또한 중요 정보를 dev, local, prod에서 숨길 수 있기 때문에 해당 3개 파일을 공유 가능합니다.

4. 구현하기

application.yml

# Local(로컬 환경, default), Dev(개발 환경), Prod(운영 환경)
# ex))))) java -jar test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

# 기본값은 local 프로필으로 설정
spring:
  profiles:
    default: local
---
spring:
  config:
    activate:
      on-profile: local, dev, prod
  • default: local 빌드, 프로젝트 실행 시 프로필을 설정하지 않는다면 기본 local 프로필로 동작시킨다.
  • on-profile: local, dev, prod로 application-local.yml.... 들을 프로필로 등록한다
  • java -jar test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod와 같이 프로젝트 실행 시에 환경설정을 해줄 수 있다.

 

application-local.yml

server:
  port: 8080

spring:
  config:
    import: classpath:application-db.yml

  banner:
    location: banner-local.txt

  datasource:
    url: ${local-db.url}
    username: ${local-db.username}
    password: ${local-db.password}
  jpa:
    hibernate:
      ddl-auto: update
  • port: 8080 local 환경의 port는 8080으로 설정한다.
  • import: ${local-db.url}과 같은 db 정보를 참조하기 위해 import: classpath:application-db.yml을 입력한다.
  • location: 프로젝트 실행 시 어느 환경인지 확인하기 위해 터미널에 텍스트 배너 파일을 띄워준다.
  • datasource: import: classpath:application-db.yml의 datasource 정보를 참조하여 값을 가지고 온다.

 

application-dev.yml

server:
  port: 8080

spring:
  config:
    import: classpath:application-db.yml

  banner:
    location: banner-dev.txt

  datasource:
    url: ${dev-db.url}
    username: ${dev-db.username}
    password: ${dev-db.password}
  jpa:
    hibernate:
      ddl-auto: validate

 

application-prod.yml

server:
  port: 8080

spring:
  config:
    import: classpath:application-db.yml

  banner:
    location: banner-prod.txt


  datasource:
    url: ${prod-db.url}
    username: ${prod-db.username}
    password: ${prod-db.password}
  jpa:
    hibernate:
      ddl-auto: validate

 

 

.txt 파일들

 

 

 

마지막으로 개인이 보관할 db 정보가 담긴 application-db.yml 파일을 작성한다.

# 각 환경마다 사용할 Datasource 값 설정
local-db:
  url: jdbc:mysql://비밀url:3306/test-local
  username: admin
  password: 비밀번호

dev-db:
  url: jdbc:mysql://비밀url:3306/test-dev
  username: admin
  password: 비밀번호

prod-db:
  url: jdbc:mysql://비밀url:3306/test-prod
  username: admin
  password: 비밀번호

 

5. 실행하기

인텔리제이에서 Run으로 실행한 경우
java -jar 명령어에 --spring.profiles.active=dev를 적용시켜 실행한 모습 -> 해당 옵션을 주지 않을 시 이미지상 default인 prod로 동작합니다.

 

728x90
Comments