환경에 따라 다른 설정
개발을 하다보면 테스트를 위한 '개발' 환경과 실제 서비스 배포를 위한 '운영' 환경에 따라 설정해줘야하는 값이 다를 수 있다.
예를 들어, DB 정보나 포트 정보 등이 환경에 따라 다른 경우가 많다.
각 환경에 따라 매번 설정 값을 변경하는 것이 번거롭기 때문에, profile 설정을 통해 간단하게 환경에 맞는 정보를 가져올 수 있다.
현재 스프링 설정 파일 (application.yml)이 다음과 같다고 하자.
spring:
datasource:
url: jdbc:mysql://localohost:3306/test # 테스트 DB
# url: jdbc:mysql://localohost:3306/prod # 운영 DB
username: admin
password: 1234
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org.hibernate.SQL: debug
spring.datasource.url을 보면 환경(테스트, 운영)에 따라 DB가 다른 것을 볼 수 있다.
매번 주석을 껐다 켰다 하기에는 매우 번거롭고 위험한 작업이다.
Profile 설정
이제 각 환경 별로 profile을 설정해보자.
spring:
profiles:
group:
development:
- test_database
- common
production:
- production_database
- common
---
spring:
config:
activate:
on-profile: common
jpa:
hibernate:
ddl-auto: update
properties:
hibernate:
format_sql: true
logging:
level:
org.hibernate.SQL: debug
---
spring:
config:
activate:
on-profile: test_database
datasource:
url: jdbc:mysql://localhost:3306/test
username: admin
password: ENC(vSpxksB2NjXRraSwGrLNi1DjiDO5fQ/I)
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 8080
---
spring:
config:
activate:
on-profile: production_database
datasource:
url: jdbc:mysql://localhost:3306/prod
username: admin
password: ENC(vSpxksB2NjXRraSwGrLNi1DjiDO5fQ/I)
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 9000
spring.config.activate.on-profile을 통해 각 profile 별로 설정할 수 있다.
profile 별로 '---' 을 통해 구분해야 에러가 발생하지 않는다.
common profile은 모든 환경에 속하는 공통 속성을 지정했다.
test_database profile은 개발 환경 DB를 설정하고, 포트를 8080으로 설정했다.
production_database profile은 운영 환경 DB를 설정하고, 포트를 9000으로 설정했다.
이제 spring.profiles.group으로 환경 별 profile 그룹을 지정한다.
개발 development 그룹은 common(공통), test_database(테스트DB) profile을 포함하고,
운영 production 그룹은 common(공통), production_database(운영DB) profile을 포함한다.
프로젝트 실행
이제 각 환경에 맞게 프로젝트를 실행하면 된다.
인텔리제이를 사용한다면 아래와 같이 간편하게 profile 값을 넣고 실행할 수 있다.
콘솔을 사용한다면 다음과 같이 옵션을 부여한다.
java -jar -Dspring.profiles.active=development easy-yum-0.0.1-SNAPSHOT.jar
'java > spring' 카테고리의 다른 글
[Spring] Controller에서 pathvariable로 path(/aaa/bbb) 값 받는 법 (0) | 2022.07.15 |
---|---|
[Spring] AWS Parameter Store를 사용해 변수 불러오기 (0) | 2022.01.09 |
[Spring] FCM 서버 구축하기 (특정 시간대에 알림 보내기) (4) | 2021.12.10 |
[Spring] Spring Jdbc - batchUpdate()를 사용한 bulk Insert 최적화 (0) | 2021.08.06 |
[Spring] SpringBatch를 사용해 csv 파일 읽어 DB에 저장 (4) | 2021.08.06 |