KAKAO.GG
백엔드

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

65870717953200389e7820de
2024. 11. 19.
조회 227
#Spring Boot 외부화 구성, Spring Boot 외부 톰캣, Spring Boot 외부 톰캣 연동, Spring Boot 외부 톰캣 배포, 외부화된 구성, Externalized Configureation

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
}