spring으로 crud 하기 전에, 필요한 지식들을 먼저 보고 가겠습니다. spring boot 프로젝트를 보면, 왠 properties 파일들을 보게 됩니다. 이들은, 셋팅 파일인데요. 환경에 따라서, 이 값을 다르게 하고 싶다면 어떻게 하면 될까요?

 

 


 문제 상황을 가정해 보겠습니다. 저는, A 환경에서는 7773번 포트로 http 요청을 받고, B 환경에서는 7776번 포트로 http 요청을 받으려고 합니다.  문제 상황을 단순화 시키면 먼저, 프로필 A를 만들고, B를 만들면 되는데요. 간단하게 프로필 파일로 관리하겠습니다. 공식 문서에 보시면, application-${profile}.properties가 그러한 역할을 한다고 되어 있으니, 그 파일들을 만들어 보도록 하겠습니다.

 

 그 다음에 각각의 파일들에 대해서 server.port의 값만 따로 설정해 줄 겁니다. 공식 문서를 보면, 이것이 HTTP request에 대해서 Listening하는 port를 설정하는 것이라 되어 있습니다.

 

 

 그림으로 그리면 이렇겠군요.

 

 

 A에는 7773을 설정해 줍니다.

 

 

 B에는 7776을 설정해 줍니다. 여기까지 2개의 프로필이 만들어 졌습니다.

 

 

 

 이제 이 프로필을 어떻게 쓸지가 문제입니다.

 

 


 application.properties 파일에 spring.profiles.active = A로 주시면 됩니다. 이는, active인 스프링의 프로파일이 A라는 의미입니다. 저대로 잘 동작하나 시험해 보겠습니다.

 

 

 로그를 봤더니 7773이 잘 올라왔습니다. A 프로필에서 설정한 내용이 잘 올라온 셈입니다.

 

 

 이제 B를 쓰겠다고 바꿔 보겠습니다. 어떻게 될까요?

 

 

 7776으로 잘 되네요. 여기서 핵심인 것은 프로필 파일들을 따로 만들었고, application.properties에서 어떤 프로필을 켤 것인지에 대해서 명시했다는 점입니다.

 

 

 프로젝트의 대략적인 구조는 위와 같습니다.

 


 문제는 설정 적용의 우선 순위인데요.

 

 

 SpringEx1을 jar로 떨군 다음에, --spring.profiles.active를 A로 설정해서 jar를 실행시켜 보겠습니다. 중요한 것은 프로퍼티 파일 안에 active는 A가 아닌 B로 설정되어 있다는 것입니다.

 

 

 그랬더니, B가 아닌 A로 실행되었음을 알 수 있습니다. 이는 설정 우선 순위가 cmd가 프로퍼티 파일보다 높기 때문입니다. 설정의 우선순위는 조심해야 할 것 중 하나입니다만, 여기에서는 다루지 않겠습니다. 공식 문서에 비슷한 이야기가 있는 듯 합니다.