[Spring Boot] 외부화 구성 (설정 관리 방법)
KUKJIN LEE • 3주 전 작성
Spring Boot의 외부화 설정(Externalized Configuration)은 애플리케이션의 설정을 코드 외부에서 관리할 수 있도록 해줍니다. 다양한 환경에서 애플리케이션을 쉽게 설정하고, 유지보수성을 높일 수 있습니다.
외부화 설정이란?
Spring Boot는 설정 파일(application.properties
또는 application.yml
), 환경 변수, 명령줄 인수 등 다양한 방법으로 설정을 외부화할 수 있도록 지원합니다. 이를 통해 개발자는 동일한 코드를 유지하면서도 개발, 테스트, 운영 등 다양한 환경에 적합한 설정을 적용할 수 있습니다.
(잘 모르겠다면 우선 DB 연결로 이해하시면 좋습니다.)
주요 설정 파일
-
application.properties
및application.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.yml
과 application-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
}