Spring: Profile을 사용해 각 환경별 설정하기

손찬호·2024년 6월 16일
0

Spring Boot 3

목록 보기
6/10

Profile

개발환경은 여러가지가 있을 수 있다.

  • 개발 Development
  • 품질 확인 QA
  • Stage
  • 실제 서비스 Product

이때 테스트 환경에서는 테스트 데이터베이스와 연결되어있어야하고 실제 프로덕트 환경에서는 프로덕트 데이터베이스와 연결되어있어야한다.
이때 환경별로 Profile을 만들어 각각 다르게 설정을 해줄 수 있다.

환경별 로깅 수준 다르게 하기

개발 환경별로 다르게 로깅하도록 설정해보자.
현재는 개발 환경과 프로덕트 환경 2개만 있다고 가정하고 profile을 작성해보자.
../src/main/resources/에 아래에 2개의 프로필을 만든다.

application-dev.properties

파일에 아래 내용을 추가해주자
logging.level.org.springframework=trace

application-prod.properties

파일에 아래 내용을 추가해주자
logging.level.org.springframework=info

profile 활성화

이렇게 설정해도 실제로는 application.properties파일 내용대로 실행된다.
이제 application.properties파일에 아래 내용을 추가해 환경별 프로필을 활성화해주자.
spring.profiles.active=prod

만약 이미 application.properties에 겹치는 설정이 있다면
해당 프로필의 설정이 우선순위가 높다.

예를 들어

# application.properties
`logging.level.org.springframework=DEBUG`
`spring.profiles.active=prod`
# application-prod.properties
logging.level.org.springframework=info

spring.profiles.active=prod
application-prod.properties가 활성화되어도
우선순위에 따라 스프링 애플리케이션은
logging.level.org.springframework=DEBUG로 실행이 된다.

로그 레벨

  • trace
  • debug
  • info
  • warning
  • error
  • off

보다 복잡한 Configuration을 해보자

spring에서 각 서비스나 환경별로 애플리케이션의 설정값을 다르게 주고 싶은 경우가 있다. 이때 어떻게 해야할까?
스프링에서 권장하는 방식은 @ConfigurationProperties를 사용해 클래스에 정의한느 것을 권장한다.

application.properties

logging.level.org.springframework=INFO

spring.profiles.active=dev

application-dev.properties

logging.level.org.springframework=debug

currency-service.url=http://localhost:8080
currency-service.username=devUser
currency-service.key=devKey

CurrencyServiceConfiguration

package com.penloo.learn5;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

// currency-service.url=
// currency-service.username=
// currency-service.key=

// properties를 사용하여 설정값을 가져올 수 있도록 하는 어노테이션
// prefix를 통해 설정값의 prefix를 지정할 수 있음
@ConfigurationProperties(prefix = "currency-service")
@Component
public class CurrencyServiceConfiguration {

    private String url;
    private String username;
    private String key;
	
    // getter, setter
    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}

CurrencyConfigurationController

package com.penloo.learn5;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.List;

@RestController
public class CurrencyConfigurationController {
    // CurrencyServiceConfiguration.java 파일에서 가져온 설정값을 사용하기 위해 인스턴스 생성
    @Autowired
    private CurrencyServiceConfiguration configuration;

    // 가져온 인스턴스의 설정값을 반환하는 REST API
    // Course: id, name, author
    @RequestMapping("/currency-configurations")
    public CurrencyServiceConfiguration retrieveAllConfigurations(){
        return configuration;
    }
}

API 실행

http://localhost:8080/currency-configurations
이 주소로 접속해서 API를 호출해보니

property에 설정한 값을 반환하는 것을 볼 수 있다.

profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글