저희 프로젝트에서는 네 가지 Profile로 나눕니다.
아래 코드 블럭으로 기재되어있는 .yml 파일들은 어느정도 축약된 내용들 입니다.
공통으로 사용할 설정은 application.yml에 작성합니다. 각 환경에 맞는 Profile 설정으로 해당 설정들을 오버라이딩 하거나 추가할 수 있습니다.
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
배포 환경의 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}
개발 환경의 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}
로컬 환경의 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}
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
테스트 모듈의 resources 폴더에 application.yml을 설정합니다. 기본적인 설정은 메인 모듈의 application.yml에서 가져오고 test 환경에 맞는 설정을 따로 추가하거나 오버라이딩 하면 됩니다.
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
MYSQL_USERNAME=root
MYSQL_PASSWORD=password
#SHOW_SQL=true
ENCRYPTOR_KEY=DEV_INSTAKYURAM
JWT_SECRET= ...
env 파일이 보이게 해야하므로 cmd + shift + . 을 누루시면 보입니다.