스프링 환경 설정 (Environment)

__〆( ̄ー ̄ ) ·2025년 1월 31일

스프링 부트

목록 보기
3/9

스프링 환경 설정 (Environment)

스프링 환경 설정은 애플리케이션의 환경 정보를 담고 있는 인터페이스로 주로 스프링 프로파일(Profiles)과 프로퍼티(Properties)를 관리하는 인터페이스이에요.

스프링 프로파일 (Profiles)

애플리케이션이 다양한 환경에서 각 환경에 맞는 설정을 적용할 수 있도록 하는 기능이에요. 환경에 따라 빈과 프로퍼티 값 등을 다르게 구성할 수 있게해서 배포 환경에 따라 소스 코드를 수정하지 않아도 돼요.

빈의 경우 @Profile 어노테이션을 통해 빈의 프로파일을 지정해줄 수 있어요. 앞의 Engine 빈에 프로파일을 적용해보면 다음과 같아요.

@Profile("gasoline")
@Component
public class GasolineEngine implements Engine {
    @Override
    public void start() {
        // ...
    }
}

@Profile("electric")
@Component
public class ElectricEngine implements Engine {
    @Override
    public void start() {
        // ...
    }
}

가솔린(gasoline) 환경인지 전기(electric) 환경 인지에 따라 가솔린 엔진과 전기 엔진을 빈으로 지정할 수 있어요. @Bean 어노테이션을 사용할 경우에도 같은 방식으로 프로파일을 적용할 수 있어요.

일반적으로 주로 사용되는 스프링 프로파일은 로컬, 개발, 운영 환경, 테스트 환경 등으로 구분해요. 스프링 프로파일에는 표현식도 사용할 수 있는데, 사용할 수 있는 표현식은 아래와 같습니다.

  • ! (not): 이 프로파일이 아닌 경우
  • & (and): 두 가지 프로파일이 모두 활성화 되는 경우
  • | (or): 둘 중 하나의 프로파일이 활성화 되는 경우

각각의 조건을 묶을 경우 ()을 사용해요.

프로파일 활성화

프로파일을 활성화 하는 방법은 아래와 같이 Java 옵션을 지정하는 것이에요.

-Dspring.profiles.active=프로파일 이름

예를 들어 Wildfly나 JBoss를 사용한다면 env.sh 파일에 선언해두면 되고 Tomcat 같은 경우는 setenv.sh 파일에 선언해두면 돼요. 여러 개의 프로파일을 활성화하고 싶은 경우는 이후에 설명할 스프링 프로퍼티에서 프로파일 그룹을 설정해주면 돼요.

다른 방식은 @ActiveProfiles 어노테이션을 활용하는 방법으로 테스트 할때 사용돼요.

스프링 프로퍼티 (Properties)

스프링 부트는 기본적으로 애플리케이션 설정을 지원하는 프로퍼티 소스 파일을 지원해요. 파일명은 각각 application.properties 또는 application.yml이에요. propertiesyml에 따라 설정하는 방식이 조금 달라요

기본 (properties) 방식

app.host=http://localhost.com:8080

YAML (Ain't Markup Language) 방식

app:
  host: http://localhost.com:8080

이번 시리즈에서는 읽기 편한 YAML 방식으로 설명하도록 할게요.

스프링 프로퍼티에 프로파일 지정하기

스프링 프로퍼티 소스(application.yml) 기준으로 프로파일을 지정하는 방식은 크게 두가지가 있는데 먼저 파일 이름을 통해 프로파일을 지정하는 방식이 있어요.

applicatnion-dev.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
    password: 

applicatnion-prod.yml

spring:
  datasource:
    url: jdbc:mysql://prod-db.example.com:3306/mydb
    username: produser
    password: prodpassword

각각 devprod 프로파일의DataSource에 대한 설정이에요. 다른 하나의 방식은 ---를 사용해 하나의 파일에서 프로파일을 지정하는 방법이에요.

application.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  config:
    activate:
      on-profile: prod
---
spring:
  datasource:
    url: jdbc:mysql://prod-db.example.com:3306/mydb
    username: produser
    password: prodpassword
  config:
    activate:
      on-profile: prod

프로파일 그룹

동시에 여러 프로파일을 활성화하고 싶을 경우 프로퍼티에 프로파일 그룹을 지정해서 사용할 수 있어요.

spring:
  profiles:
    group:
	  prod: prod,common

이 설정은 prodcommon 프로파일에 대한 그룹을 지정한 것이에요. 이후 prod 프로파일을 활성화할 경우 두 프로파일이 모두 적용돼요.

profile
뭐라도 적자

0개의 댓글