Home [football] 환경에 따른 application.yml 파일 구분
Post
Cancel

[football] 환경에 따른 application.yml 파일 구분

# 문제점


AWS가 제공하는 원격 서버에 파일을 배포하다보니 로컬환경과 배포환경에서 필요한 환경 변수가 동일하지 않는 경우가 발생했습니다. 특히 DB를 연동하는 과정에서 사용되는 변수의 차이가 있었습니다. 그래서 프로젝트가 동작하는 환경에 따라 이를 구분된 파일로 관리하고 지정해줄 필요를 느꼈습니다.

# 해결방안


Spring Profiles

Spring에서는 Profile을 지정해 Application.yml 파일을 환경별로 구분해 생성 및 관리할 수 있습니다. Profile을 로컬(local)과 배포환경(prod)로 구분해 각기 다른 YAML 파일로 환경변수를 구성해보길 했습니다.

local, dev, prod로 총 세개의 profile을 구성하고 싶었지만 AWS의 프리티어를 활용하기에 dev 환경에 대한 설정은 포기하고 prod로만 구성했습니다.

Application-local.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server:
  port: 9090
  host:
    api: localhost:9090
    chatting:
      public: localhost:9000
      private: localhost:9000
spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/football_db?characterEncoding=UTF-8
    username: football
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

Application-prod.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
  port: 8080
  host:
    api: football-lb-app-1899246839.ap-northeast-2.elb.amazonaws.com
    chatting:
      public: 43.201.5.143:8000
      private: 10.0.11.55:8000

spring:
  profiles: prod

  datasource:
    url: jdbc:mysql://football-db-mysql.ckt0scabogid.ap-northeast-2.rds.amazonaws.com:3306/football_db_mysql
    username: admin
    password: 1q2w3e4r!
    driver-class-name: com.mysql.cj.jdbc.Driver

위 두 파일에 선언된 변수의 값들이 다른 것을 확인할 수 있습니다.

application-{환경 이름}.yml 형식으로 파일을 구분해 생성하고, 어플리케이션을 실행할 때 다음 명령어와 같이 jvm property로 환경 이름을 전달하면 그에 맞는 변수 값이 설정됩니다.

  • 어플리케이션 실행 시 명령어
1
2
3
4
5
# 로컬환경에서 실행 시
java -jar -Dspring.profiles.active=local {Jar 파일명}

# 배포환경에서 실행 시
java -jar -Dspring.profiles.active=prod {Jar 파일명}

# 마치며


Spring Profile을 설정해 환경에 따라 변수를 각기 다른 YAML 파일로 구성함으로써 배포 환경에 따른 독립적인 운용과 관리가 가능해졌습니다. 또한 실제 서비스를 운용하는 과정에서 필요한 환경변수 설정 방법을 학습하고 경함할 수 있었습니다.

# 참고자료


  • https://www.lesstif.com/spring/spring-profile-deploy-18220309.html
  • https://gaemi606.tistory.com/entry/Spring-Boot-profile%EC%84%A4%EC%A0%95
This post is licensed under CC BY 4.0 by the author.

[football] Redis의 특징을 고려해 접속 가능한 최우선 웹소켓 선정 방식 구현

TDD(테스트 주도 설계)