
개발을 하다보면 배포를 진행하게 된다.
그러면 데이터베이스 연결이라던지 분명 로컬 개발환경과 운영환경에서
다른 설정사항들이 생기곤 한다.
이러한 것들을 하드코딩하여 환경이 변할때마다 계속해서 수정해야 하는 것은 옳지 않다.
그러면 이러한 것을 어떻게 해결할까?
공통적인 사항들은 applcation.yml 에 두되
환경에 따라서 변경이 생길 사항들은 별도의 yml 파일로 분리하면 된다.
환경에 상관없이 공통으로 사용되는 설정 사항들은 application.yml 에서 관리한다.
spring:
servlet:
multipart:
enabled: true
max-file-size: 200MB
max-request-size: 200MB
jpa:
database: mysql
database-platform : org.hibernate.dialect.MySQL5InnoDBDialect
show-sql : true
properties :
hibernate :
format_sql : true
show_sql : true
Spring Boot가 실행될때 기본적으로 application.yml의 설정 정보를 사용하고
Active Profiles 에 따라 추가적인 설정 파일을 찾는다.
기본적으로 application-{Active Profiles} 라는 이름의 설정 파일을 찾는다.
이것을 통해서 원하는 환경에 따라 다른 설정 파일을 추가로 사용하게 할 수 있다.
아래와 같이 DB connection을 위한 정보는 local DB를 사용하느냐
Cloud 환경의 DB를 사용하느냐에 따라 바뀌는 정보일 것이다.
이러한 것을 아래처럼 application-local.yml 파일로 따로 관리하면
편리하게 관리할 수 있다.
spring :
config:
activate:
on-profile: local
datasource:
url: jdbc:mysql://localhost:3306/switchhouse?autoReconnect=true
username: root
password: root
운영환경에서는 Cloud 환경의 DB를 사용한다면
application-prod.yml 을 생성하여 해당 정보를 관리하면 된다.
Intellij에서 간단한 설정을 해주면 Activate profiles 를 설정할 수 있다.


위와 같이 Edit Configurations 에서 Active profiles 에 본인이 활성화 하고 싶은 profile의 정보를 기입해 준다면 코드의 변경 없이 손 쉽게 다른 설정 파일을 적용 가능하다.
서비스의 운영 환경에 따라 코드를 변경하지 않아도 된다는 것이 큰 이점이다.
각자 다른 환경마다 일일이 설정 파일을 변경해야 한다면 이것은 매우 번거로운 일이 될 것이다.
이 서비스를 실행할때 마다 환경이 바뀐다고 계속 코드의 변경을 하다가
오타가 생기는 등 예상치 못한 오류가 발생할 수 있다.
이런것을 방지하기 위해서는 최대한 수동적인 작업을 지양해야 한다.
환경별로 설정 파일을 분리하고, 서비스를 실행할때 해당 환경에 맞는 profile을 활성화 하도록 스크립트만 작성해 두면 이러한 점을 방지할 수 있다.