[Spring Boot] 외부화 구성 (설정 관리 방법)

KUKJIN LEE's profile picture

KUKJIN LEE3주 전 작성

Spring Boot의 외부화 설정(Externalized Configuration)은 애플리케이션의 설정을 코드 외부에서 관리할 수 있도록 해줍니다. 다양한 환경에서 애플리케이션을 쉽게 설정하고, 유지보수성을 높일 수 있습니다.

 

외부화 설정이란?

Spring Boot는 설정 파일(application.properties 또는 application.yml), 환경 변수, 명령줄 인수 등 다양한 방법으로 설정을 외부화할 수 있도록 지원합니다. 이를 통해 개발자는 동일한 코드를 유지하면서도 개발, 테스트, 운영 등 다양한 환경에 적합한 설정을 적용할 수 있습니다.

(잘 모르겠다면 우선 DB 연결로 이해하시면 좋습니다.)

 

주요 설정 파일

  • application.propertiesapplication.yml Spring Boot 프로젝트의 루트 경로에 위치한 설정 파일로, 애플리케이션의 기본적인 설정을 정의합니다.

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/kakaogg
    username: admin
    password: 1234
  • application.yml 파일을 사용하여 서버 포트와 데이터베이스 설정을 정의한 것입니다.

  • 프로파일 설정: Spring Boot에서는 특정 환경에 따라 다른 설정을 적용하기 위해 프로파일(Profile)을 사용할 수 있습니다. 예를 들어, application-dev.yml, application-prod.yml 파일을 만들어 개발 환경과 운영 환경에서 서로 다른 설정을 적용할 수 있습니다. 실행 시에는 spring.profiles.active 속성을 사용하여 활성화할 프로파일을 지정합니다.

spring.profiles.active=dev

 

환경별 설정 적용하기

운영 환경과 개발 환경에서 다른 데이터베이스를 사용하고 싶을 때, 프로파일을 활용하여 설정을 관리할 수 있습니다. 예를 들어, application-dev.ymlapplication-prod.yml 파일을 각각 생성하여 아래와 같이 설정할 수 있습니다.

# application-dev.yml
spring:
  datasource:
    url: jdbc:h2:mem:devdb
    username: devadmin
    password: devpassword

# application-prod.yml
spring:
  datasource:
    url: jdbc:mysql://prod-db-server:3306/proddb
    username: prodadmin
    password: prodpassword

 

 

@Value와 @ConfigurationProperties 활용하기

  • @Value어노테이션: 특정 설정 값을 스프링 Bean에 주입하기 위해 사용합니다. 예를 들어, 데이터베이스 URL을 주입하려면 다음과 같이 사용할 수 있습니다.

@Value("${spring.datasource.url}")
private String datasourceUrl;
  • @ConfigurationProperties어노테이션: 여러 설정 값을 그룹화하여 객체 형태로 주입할 수 있도록 도와줍니다. 이를 통해 설정 값을 더욱 구조화하여 관리할 수 있습니다.
@Component
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceConfig {
    private String url;
    private String username;
    private String password;

    // getters and setters
}

 

New Tech Posts