I.K.Picture & IT Info.

[Spring boot] 환경별 Profile 적용기 본문

Development/Java/Android

[Spring boot] 환경별 Profile 적용기

helpful-intruder 2021. 1. 4. 23:49
반응형

개발을 하다보면 (특히 웹 서비스) 운영 환경과 개발 환경이.. 다르기 때문에 

하다보면 설정이 귀찮을 때가 있죠...

 

이를 Spring boot 기반에서 조금 편리(?)하게 하는 방법이 Profile 이라는 것.. 

뭐 검색 하셔서 들어오신 분들은 어느정도 아실꺼예요..

 

그런데 설정이 참.. 쉽지 않죠...

 

제가 이 포스팅에서 아주 간단(?) 명료하게 한번 정리를 해보려고 합니다. 

물론, 제 방법이 완벽한 답은 아닙니다.

설정을 어떻게 하냐에 따라서...  달라지기 때문에 무궁무진하게 바뀌게 되죠... 

 

일단! 알고 있어야할 파일/위치 부터 정리해보죠

 

  1. pom.xml 파일

  2. resources 폴더

  3. application.properties 파일

 

딱 요 세가지면 됩니다.

 

자.. 일단, 첫번째  pom.xml 파일부터 보겠습니다. 

   프로젝트를 만들고 보면 중간 부분에 build 부분이 있습니다.

   그 안에 먼저 진한 글씨 부분을 추가합니다. 

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/main/resources/release/${activatedProperties}</directory>
        </resource>
    </resources>
</build>

resource 폴더를 알려주는 것인데요.

빌드 할 때 포함시키는 resource 폴더 위치를 알려주는 것입니다.

첫번째 "src/main/resources"는 빌드 시 포함을 시킬 전체 resources 전체 폴더를 작성한 것이구요 

(이거 없으면 안됩니다)

두번째는 application.properties 에 대한 위치를 나타내는 폴더를 나타낸 것입니다. 

(여기서 ${activatedProperties}는 밑에 나옵니다. ) 

 

이렇게 추가한 다음 빌드(build) 태그 바로 아래 profile 태그를 추가합니다. 

</build>

<
profiles>
    <
profile>
        <
id>dev</id>
        <
properties>
            <
activatedProperties>dev</activatedProperties>
        </
properties>
        <
activation>
            <
activeByDefault>true</activeByDefault>
        </
activation>
    </
profile>
    <
profile>
        <
id>oper</id>
        <
properties>
            <
activatedProperties>oper</activatedProperties>
        </
properties>
    </
profile>
</
profiles>

환경에 따라 <profile>을 계속 추가해주면됩니다. 

여기서 activatedProperties 태그는 위에 작성된 부분과 동일하게 해줘야되구요.

 

여기서 기본으로 수행할 profile도 activation을 통해 설정을 해줄 수 있습니다. 

 

여기서 제가 dev 와 oper 은 제가 원하는데로 한 것이니 나중에 직접 프로젝트에 적용하고 싶은 이름을 작성하면됩니다.

이 이름에 동일해야되는 것이 있는데 그건 밑에 나올 꺼예요~ 

 

자... 이렇게 설정 되었으면 

이제 resources 폴더안에 다음과 같이 폴더를 각 각 만들고 application.properties 파일을 만듭니다. 

 

 

그림으로 보시면 아시겠지만 pom.xml 에서 작성한 resources 폴더를 그대로 가져다 붙여넣었고

activatedProperties 이름과 동일하게 폴더 이름을 만들었죠? 

그 안에 application.properties를 넣었구요.

 

빠르신 분들은 캐치하셨겠지만, 지정해주는 프로파일에 따라 해당 application.properties가 적용되는 방식입니다. 

dev 안에 있는 application.properties는 테스트를 위해 app.test=devTEST 라고 하나의 값을 넣어놨구요

oper 안에 있는 application.properties는 테스트를 위해 app.test=operTEST라고 하나의 값을 넣어놨습니다. 

 

이를 maven으로 빌드할 때,

$mvn clean install -Pdev   

또는

$mvn clean install -Poper 

을 하면 각 프로파일에 맞춰 application.properties가 적용되는 것을 확인하실 수 있습니다. 

 

이부분의 단점은 겹치는 값 까지 모두 같이 써야 된다는거죠 

(추가 되는 부분만 하는 경우도 있긴한데.. 그부분은 나중에 한번 더 포스팅 하겠습니다)

 

아, 여기서 clean을 반드시 추가해주시기 바랍니다. 

안할 경우 겹치는 파일들이 아닌 경우 문제가 생기기 때문입니다.

 

혹시.. 간단하게 확인해보고 싶으신 분들은 제가 github에 소스코드를 모두 올려놓았으니

확인해보세요 ^^ 

(아무 기능 없이 프로파일만 적용한 프로젝트입니다)

 

그런데, 여기서 추가로 하나 더 간단하게 얘기하자면

개발할 때!!! 는 어떤식으로 해야되나~ 

 

이클립스도 그렇고 Intellij 도 그렇고 모두 비슷합니다.

전 Intellij를 사용하기 때문에 이를 기반으로 얘기를 하도록 하겠습니다. 

 

프로젝트 설정 부분이 있습니다.  (Edit Configurations)

설정 창으로 들어가 보면 Active profiles 이라고 작성 하는 부분이 있는데 여기에 dev 또는 oper을 작성하고 

개발을 하시면됩니다~ ㅎㅎ 

아래 그림으로 간단히 첨부할께요.

 

 

 

github.com/engintruder/profileExample

 

engintruder/profileExample

spring boot profile example. Contribute to engintruder/profileExample development by creating an account on GitHub.

github.com

 

반응형
Comments