본문 바로가기

FrameWork/Spring Boot

SpringBoot - Profile에 따른 properties(yml) 파일 설정하기

1. properties 파일 관리의 불편함

이번 포스팅에서는 Spring에서 설정시 사용되는 application.properties를 활성화된 Profile에 따라 변경하여 적용하는 방법에대해 알아보도록 하겠습니다.

 

Spring IOC 컨테이너의 기능(Environment , Profile) - https://galid1.tistory.com/514

profile에 대한 개념은 위의 글을 참조해주세요.

 

 

 

1. properties 파일 관리의 불편함

기존 제가 운영하던 서버의 application.yml 파일입니다. 주석으로 처리됀 부분이 보이시나요?? 현재는 local에서 개발을 하고 있기 때문에, ssl설정을 잠시 주석으로 처리하고, port 역시 8080을 이용했습니다. 이렇게 이용을 하다가 배포를 하기전에는 다시 8080port를 주석처리하고, 이전 주석처리를 했던 부분을 다시 주석을 해제하는 식으로 운영을 해왔습니다. (물론, local 환경에서도 ssl을 구축하고 같은 설정으로 테스트를 했어도 되었지만 귀찮았습니다..)

 

또한 이뿐만이 아니라 서버가 커짐에 따라 설정해야할 것들이 늘어났으며, 이 또한 환경에 따라 다르게 설정해야할 부분들이 있었고, 이 때문에 배포전 항상 기억하고 변경해주어야 할 것들이 많아졌습니다.

 

  

 

2. profile에 따른 별도 application.properties(yml) 파일 사용

하지만 spring의 profile을 이용해  profile별로 별도의 properties들이 적용되게 하는 방법을 이용한다면 앞서 제시되었던 불편함을 해결하고, 배포전 실수를 줄여 시간적 이득을 챙길 수 있습니다.



2.1 .properties 설정

첫번째 방법은 application.properties 파일의 네이밍을 통해 별도의 properties를 적용하는 방법입니다. application-{profile 이름}.properties의 형식으로 파일을 만들고, profile을 적용하면 profile 이름에 맞는 properties 파일이 적용됩니다. 예제를 보며 조금 더 설명을 드리겠습니다.

 

properties 파일 생성

dev profile이 활성화 되었을 때 적용될 properties 파일(application-dev.properties)입니다.

 

test profile이 활성화 되었을 때 적용될 properties 파일(application-dev.properties)입니다.

 

profile이 변경됨에 따라 properties file이 다르게 적용되었음을 알아볼 수 있도록 port를 각각 8080, 8181로 설정했습니다.

 

 

profile 활성화 및 확인

profile을 활성화하는 방법은 여러가지가 있지만 그중에도 application.properties에서 활성화를 하는 방법을 이용하도록 하겠습니다. default properties 파일인 application.properties에서 spring.profiles.active={profile 이름}을 입력해주면 됩니다. 우선 dev profile을 활성화 해보도록 하겠습니다.

 

dev profile이 활성화 되었음을 알 수 있습니다.

 

이어서 test profile을 활성화 해보면, 그에 따라 port가 바뀜을 또 볼 수 있습니다. 성공입니다.

 

 

 

2.2 .yml 설정

.yml파일은 더더욱 간단하게 설정이 가능합니다. 특히 application.yml 파일 하나로 마치 여러개의 .yml파일을 생성한것과 같이 할 수 있습니다.

 

--- 구분자

---을 이용하면 .yml 파일을 구분할 수가 있게됩니다. 위 그림에서 제일 위에 작성된 부분은 default application.properties의 역할을 하게 되고, 바로 아래는 application-dev.properties의 역할을 그리고 제일 하단에 위치한 설정은 application-test.properties의 역할을 하게 됩니다.