본문 바로가기

개발 이야기/Spring Boot

[10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (2) Profile 설정하기

 

Kotiln Spring Boot을 모르더라도 10분 동안 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목적입니다.

각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다.

 

시작하기

이 블로그를 참고하고 Kotlin으로 Spring Boot 웹 어플리케이션을 시작하는 분들은 아래 글을 먼저 읽고 오는 것을 추천한다.

 

1. [10분 Boot-up] 스프링부트 웹 어플리케이션 만들기 - (1) 개발 환경 설정하기

 

[10분 Boot-up] 스프링부트 Web Application 만들기 - (1) 개발 환경 설정하기(Gradle)

시작하며 요즘 Kotlin으로 Spring Boot 웹 어플리케이션 서버를 개발하고 있다. 작년까지 평범하게 Java 8 버전으로 Spring Boot 2.3 기반으로 서버를 개발했었는데 벌써 Spring Boot는 2.4버전이 나오고, 나는

jungseob86.tistory.com

2. [Spring Boot] Relaxed Binding 이란?

 

[Spring Boot] Relaxed Binding 이란?

Spring Boot는 Environment프로퍼티를 @ConfigurationProperties 빈에 바인딩하기 위해 Relaxed Binding 규칙을 사용하기 때문에 Environment 프로퍼티 이름과 Bean 프로퍼티 이름을 정확히 일치할 필요가 없다. R..

jungseob86.tistory.com

3. [기타] 개발 환경(Phase)이란 무엇일까?

 

[기타] 개발 환경(Phase)이란 무엇일까?

개발 환경(Phase)란? 개발 환경( Phase )은 Application이 동작하는 환경을 의미한다. 따라서 대부분의 Framework는 각각의 개발 환경마다 설정 값을 다르게 셋팅할 수 있는 기능이 있다. 대표적으로 Spring B

jungseob86.tistory.com

 

Spring Boot의 Profile 설정은 운영 환경에 따른 속성 값들과 관련된 것이라 항상 꼼꼼하게 작업해야한다. 실제로 나를 포함하여 Spring Boot로 개발하는 주변 분들이 Profile 설정의 실수로 운영 장애를 경험하는 것이 생각보다 흔한 일이다. Profile에 설정되는 프로퍼티 값들은 실제 개발자의 꼼꼼함과 동료의 코드 리뷰가 아니면 사전에 실수를 막을 방법이 딱히 없는 자동 테스트가 힘든 영역이기 때문이다.

Profile 이란?

Profile은 Spring Boot Application의 런타임 환경을 개발 환경(Phase)에 따라서 다르게 설정하고 싶을 때 사용하는 기능이다. 또 개발 환경 이외에 특별한 조건에 따른 설정 값을 셋팅하고 싶을 때도 유용하게 사용할 수 있다. 예를들면 개발 환경은 local로, logging 설정은 console-logging 등으로 여러 개의 profile을 조합해서 사용한다.

 

보통 Spring에서는 Profile을 위한 설정 파일을 application-{profile}.properties(or yml) 형태의 파일을 통해 관리한다. Spring Boot 2.3 버전 이하에서는 .properties 파일에서 multi docs 기능을 지원하지 않았기 때문에 .yml 파일 형태로 사용하는 것이 대세였지만 2.4 버전 이상에서는 모두 multi docs를 지원하기 때문에 개인 취향대로 선택하면 된다.

 

일단 프로젝트의 운영 환경(Phase)은 local과 dev로 가정한다면 프로퍼티 파일은 application.yml 하나의 multi-doc 형태로 구성하거나 application-local.yml, application-dev.yml 처럼 구성하면 된다. 보통 프로퍼티 설정의 양이 크지 않는 경우에는 전자로, 많은 경우에는 파일을 분리하는 방법을 선택한다. (대부분은 프로퍼티 파일로 분리하는 설정 값들이 많아지기 때문에 파일로 분리하는 것이 보통이다.)

 

Spring Boot 프로젝트에서 Profile을 위한 프로퍼티 파일은 resource 디렉토리 아래에 위치하게 된다. 나는 .properties보다 .yml 형식을 선호하기 때문에 기존 파일을 삭제하고 아래처럼 application.yml 파일을 생성한 뒤 my-app.welcome-message 프로퍼티를 설정해본다.

 

spring:
  config:
    activate:
      on-profile: local

my-app:
  welcome-message: "Hello, local"

---

spring:
  config:
    activate:
      on-profile: dev

my-app:
  welcome-message: "Hello, dev"

 

그리고 각 Phase 별로 프로퍼티 값이 잘 설정됐는지 확인하기 위해서 MyappApplication.kt에 아래처럼 프로퍼티 파일을 @Value 어노테이션으로 가져와서 출력하는 코드를 추가하고 Spring Boot 앱을 실행하면 현재 active 상태인 profile의 종류와 우리가 출력한 프로퍼티 값을 콘솔창을 통해서 확인할 수 있다.

 

@SpringBootApplication
class MyappApplication {

    @Value("\${my-app.welcome-message}")
    val myAppWelcomeMessage: String = ""

    @PostConstruct
    fun printMyAppWelcomeMessage() {
        println(myAppWelcomeMessage)
    }
}

fun main(args: Array<String>) {
    runApplication<MyappApplication>(*args)
}

 

 


마무리

Profile 설정은 간단하지만 사실 매우 중요하고 복잡한 과정이다. 실제로 웹 어플리케이션은 Profile 설정에 따라서 변경되는 프로퍼티 설정 값 외에도 고정된 프로퍼티 값과 다양한 환경변수 값을 조합해서 사용한다. 따라서 프로퍼티 설정은 최대한 깔끔하게 관리하는 것이 중요하다. 다음 10분 실습에서는 Logback 설정을 통해서 스프링부트의 Logging을 설정을 Profile 전략에 따라서 설정해본다.