Setting up the configuration files for a service

2025. 3. 4. 15:29Spring Microservice

🌟 Spring Cloud Config를 활용한 애플리케이션 설정 관리 🌟

Spring Cloud Config를 사용하면 분산된 환경에서 애플리케이션의 설정 정보를 중앙에서 관리할 수 있습니다.
이를 통해 애플리케이션의 구성을 코드에서 완전히 분리하고, 변경 사항을 재배포 없이 동적으로 적용할 수 있습니다.

📌 Spring Cloud Config의 핵심 개념

구성 파일의 중앙 집중화 → 설정 정보를 한 곳에서 관리
REST API를 통한 설정 제공 → 애플리케이션이 시작될 때 설정을 읽어옴
다중 환경 지원 → 개발(dev), 운영(prod) 등 환경별로 설정을 분리
설정 변경의 동적 반영 → 설정을 변경하면 애플리케이션이 자동으로 반영 가능

🚀 Spring Cloud Config 구성 및 설정 방법

1️⃣ 애플리케이션 구성 파일 구조

Spring Cloud Config는 환경별로 다른 설정 파일을 정의할 수 있습니다.
예를 들어 라이선싱 서비스(licensing-service)의 설정 파일을 다음과 같이 구성할 수 있습니다.

📂 구성 파일 예시

config/
 ├── licensing-service.properties         (기본 설정)
 ├── licensing-service-dev.properties     (개발 환경)
 ├── licensing-service-prod.properties    (운영 환경)

📍 설정 파일은 HTTP 기반 REST API로 조회할 수 있으며,
예를 들어 http://localhost:8071/licensing-service/dev 요청 시 디폴트 설정 + 개발 환경 설정이 반환됩니다.

2️⃣ 디폴트 설정 파일 (licensing-service.properties)

📄 파일 위치: config/licensing-service.properties

example.property= I AM THE DEFAULT
spring.jpa.hibernate.ddl-auto=none
spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=true
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.database.driverClassName=org.postgresql.Driver
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
management.endpoints.web.exposure.include=*
management.endpoints.enabled-by-default=true

💡 디폴트 값 설정

  • example.property= I AM THE DEFAULT → 디폴트 프로퍼티 값
  • 데이터베이스는 PostgreSQL을 사용하도록 설정
  • Hibernate 관련 설정 및 JPA 속성 정의

3️⃣ 개발 환경 설정 (licensing-service-dev.properties)

📄 파일 위치: config/licensing-service-dev.properties

example.property= I AM DEV
spring.datasource.url = jdbc:postgresql://localhost:5432/ostock_dev
spring.datasource.username = postgres
spring.datasource.password = postgres

💡 개발 환경에서만 적용되는 설정

  • example.property= I AM DEV → 기본 설정을 덮어씌움
  • 데이터베이스 연결 URL, 사용자명, 비밀번호 개발 환경에 맞게 변경

4️⃣ Spring Cloud Config의 동작 방식

🔎 디폴트 환경 요청

  • http://localhost:8071/licensing-service/default
  • licensing-service.properties 파일이 반환됨

🔎 개발 환경 요청

  • http://localhost:8071/licensing-service/dev
  • 기본 설정 + 개발 환경 설정을 함께 반환
  • 환경별 값이 존재하면 기본값을 덮어씌움

📌 Spring Boot의 프로파일 기반 설정 로직
Spring Boot는 프로파일 기반 설정 계층 구조를 따릅니다.
즉, licensing-service.properties 값이 기본적으로 로드되고,
licensing-service-dev.properties 값이 해당 프로파일에서만 덮어씌워짐

출처 : Spring Microservices in Action 2nd Edition

 

⚠️ 주의할 점 (Think Before You Implement)

파일 시스템 기반 설정의 한계

  • 공유 파일 시스템이 필요 → 유지보수 부담 증가
  • 클라우드 환경에서 확장성 부족
  • 설정 변경 시 모든 서버에 반영 어려움

Git 또는 HashiCorp Vault 사용 권장

  • Git 저장소를 활용하면 변경 이력 추적 가능
  • HashiCorp Vault를 사용하면 보안이 강화됨
  • 클라우드 환경에서 자동화 및 배포가 용이

🏁 Summary

✅ Spring Cloud Config를 활용하면 환경별 설정을 중앙에서 관리하고,
REST API를 통해 설정 정보를 동적으로 제공할 수 있으며,
환경별 설정을 자동으로 병합하여 유연한 설정 관리가 가능합니다! 🎯

 

👉 다음 단계에서는 Spring Cloud Config를 라이선싱 서비스에 통합하는 방법을 살펴봅니다! 🚀