Profile 설정appplication.ymlapplication-real.ymlapplication-dev.ymlapplication-local.ymlapplication-mem.yml💡Test 모듈에서도 기본적인 공통 설정을 사용하고 싶다면..?환경 변수 파일 설정
애플리케이션 실행 환경은 각각 다를 수 있고 특정 환경의 설정은 안전하게 별도로 관리되어야하는 경우가 있습니다.
저희 프로젝트에서는 네 가지 Profile로 나눕니다.
- real - 실제 배포 환경의 Profile 입니다.
- dev - 개발 환경의 Profile 입니다.
- local - 로컬 환경의 Profile 입니다.
- mem - In-memory 환경의 Profile 입니다.
Profile 설정
아래 코드 블럭으로 기재되어있는 .yml 파일들은 어느정도 축약된 내용들 입니다.
appplication.yml
공통으로 사용할 설정은 application.yml에 작성합니다. 각 환경에 맞는 Profile 설정으로 해당 설정들을 오버라이딩 하거나 추가할 수 있습니다.
- application.yml
spring: application: name: instakyuram thymeleaf: suffix: .html jpa: hibernate: ddl-auto: validate flyway: enabled: true baseline-on-migrate: true locations: classpath:db/migration, classpath:db/seed servlet: multipart: maxFileSize: 5MB maxRequestSize: 30MB cors: allowed: api: /api/** method: GET, POST, PATCH, DELETE security: patterns: ignoring: ["/css/**", "/js/**", "/webjars/**", "/images/**"] permit-all: GET : ["/members/signin", "/members/**", "/api/posts/**"] POST : ["/api/members/signin", "/api/members/signup"] PATCH : [] PUT : [] DELETE : [] jwt: issuer: kyuram client-secret: accessToken: header: atoken expiry-seconds: 60 refreshToken: header: rtoken expiry-seconds: 120
application-real.yml
배포 환경의 profile입니다. Jasypt로 암호화된 설정값들이 있고 환경변수로 암호화 키 값을 받습니다.
이 profile은 git submodule에 의해 관리 됩니다. 메인 모듈(메인 Repository)에 업로드 되어서는 안되므로 .gitignore 설정이 되어있습니다.
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: ENC(CulrmCVWVQRxx0aAo+EfkA==) password: ENC(Q9n+s8uddrPvDioO8kKH91VYX3PWgy85) url: ENC(u622aD2ytMd8mijoejvxI0EgNJvEuAvbPMpQ5mC+Fa9AV9sOnf7n3uLJsRqkgSKL) cors: allowed: url: "http://localhost:3000" secy: jwt: client-secret: ENC(3e5wRh0E5WQH/EIcYjEKr+Hc8Q9uamJ9) encryptor: key: ${ENCRYPTOR_KEY}
application-dev.yml
개발 환경의 Profile 입니다. Jasypt로 암호화된 설정값들이 있고 prod환경과 다른 dev 환경에 맞는 암호화 키가 존재합니다.(ENCRYPTOR_KEY)
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: ENC(AzlDbF5wkOwjc6PApuV6Pg==) password: ENC(kcjv5IqrezLATOvvUYWAZVKvqFe1yPTM) url: ENC(P3fJYSZqwQ3YjSRY5ewwfDGyWfZ9Cm+OOtLJN3oi02XHKlWvTOf/j6G1+gDXtHhY) security: jwt: client-secret: ENC(GwEnP+x6pZNS/q8oxLDhqV1cvzG3lvmH) encryptor: key: ${ENCRYPTOR_KEY}
application-local.yml
로컬 환경의 profile입니다. DB url, username, password, client-secret을 환경변수로 받고, 각각 변수 설정을 하지 않았을 때 기본값으로 kyuram, root, password로 설정 됩니다.
(’:’ 를 사용해 기본값을 설정할 수 있습니다.)
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: ${MYSQL_USERNAME:root} password: ${MYSQL_PASSWORD:password} url: jdbc:mysql://localhost:3306/${MYSQL_SCHEMA:kyuram} jpa: show-sql: ${SHOW_SQL:false} properties: hibernate: format_sql: ${SHOW_SQL:false} security: jwt: client-secret: ${JWT_SECRET:DEFAULT_JWT_SECRET}
application-mem.yml
In-memory DB를 사용하는 로컬 환경의 profile입니다.
flyway를 사용하지 않습니다.
spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: jpa: hibernate: ddl-auto: create-drop flyway: enabled: false baseline-on-migrate: false security: jwt: client-secret: INSTAKYURAM
💡Test 모듈에서도 기본적인 공통 설정을 사용하고 싶다면..?

테스트 모듈의 resources 폴더에 application.yml을 설정합니다. 기본적인 설정은 메인 모듈의 application.yml에서 가져오고 test 환경에 맞는 설정을 따로 추가하거나 오버라이딩 하면 됩니다.
- test/resources/application.yml
spring: jpa: hibernate: ddl-auto: create-drop datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb flyway: enabled:false baseline-on-migrate:false cors: allowed: url: "http://localhost" security: jwt: client-secret: TEST_SECRET
환경 변수 파일 설정
- .env 파일을 프로젝트 루트 경로에 만들어 줍니다.
- 로그에서 SQL을 보고싶지 않다면 SHOW_SQL을 false로 설정하면 됩니다.
- profile에서 필요한 환경변수들을 세팅하시면 됩니다.
MYSQL_USERNAME=root MYSQL_PASSWORD=password #SHOW_SQL=true ENCRYPTOR_KEY=DEV_INSTAKYURAM JWT_SECRET= ...
- env 설정을위한 플러그인을 설치해줍니다.
- EnvFile
- .env files support

- intellij Edit Configuration
- Enable EnvFile 체크
- + 버튼 클릭해서 .env파일 추가
env 파일이 보이게 해야하므로 cmd + shift + . 을 누루시면 보입니다.
