실무에 바로 쓰는 DDD기반으로 유연성과 확정성 있게 MSA 설계하기

Config Server 구성

Config Server 구성


Config Server란 무엇인가?

MSA 환경에서는 서비스 개수가 많아질수록 설정 관리가 매우 복잡해진다.

예를 들어 다음과 같은 설정들이 서비스마다 존재할 수 있다.

  • DB 연결 정보
  • Redis 설정
  • Kafka 설정
  • 외부 API URL
  • 인증 정보
  • 환경(dev, stage, prod)별 설정

서비스가 몇 개 없을 때는 application.yml 파일을 직접 관리해도 괜찮다. 하지만 서비스가 많아지면 설정 변경과 배포 관리가 매우 어려워진다.

이 문제를 해결하기 위해 사용하는 것이 바로 Config Server이다.

강의 자료에서도 Config Server를 MSA 환경에서 설정 정보를 중앙 관리하기 위한 핵심 구성 요소로 설명한다.


Config Server가 필요한 이유

MSA 환경에서는 다음과 같은 문제가 자주 발생한다.

  • 서비스마다 설정 파일이 중복됨
  • 환경별 설정 관리 어려움
  • 설정 변경 시 재배포 필요
  • 운영 환경 설정 추적 어려움

예를 들어:

Order Service
User Service
Menu Service
Payment Service

각 서비스마다 DB 주소와 포트가 다르고, 운영 환경(dev/prod)에 따라 값도 달라질 수 있다.

이런 설정을 각각의 프로젝트 안에서 관리하면 운영 복잡도가 급격하게 증가한다.


Config Server의 핵심 개념

Config Server는 애플리케이션 설정 정보를 중앙에서 관리하는 서버이다.

각 서비스는 실행 시 Config Server로부터 설정 정보를 가져온다.

즉:

  • 설정은 중앙 서버에서 관리
  • 서비스는 필요한 설정만 조회

하는 구조이다.


Config Server 구조

전체 흐름은 다음과 같이 구성된다.

flowchart LR
    ConfigRepo[Configuration Repository]

    ConfigServer[Config Server :8888]

    Menu[Menu Service]
    Order[Order Service]
    User[User Service]

    ConfigRepo --> ConfigServer

    ConfigServer --> Menu
    ConfigServer --> Order
    ConfigServer --> User

이 구조에서 중요한 점은:

  • 설정 파일은 중앙 저장소에서 관리된다
  • 각 서비스는 실행 시 Config Server에 요청한다
  • Config Server가 필요한 설정을 반환한다

Config Server 의존성 추가

강의 자료에서는 Spring Cloud Config Server 의존성을 추가하는 방식으로 구성한다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    <version>${spring.cloud.version}</version>
</dependency>

Spring Cloud Config Server는 설정 파일을 외부에서 읽고 서비스에 전달하는 역할을 한다.


Config Server 활성화

Config Server 애플리케이션에는 @EnableConfigServer를 추가해야 한다.

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

이 설정을 통해 해당 애플리케이션이 Config Server 역할을 수행한다.


application.yml 설정

강의 자료에서는 Config Server를 8888 포트로 실행한다.

server:
  port: 8888

spring:
  application:
    name: config-server

  profiles:
    active: native

  cloud:
    config:
      server:
        native:
          search-locations: classpath:configuration-repository/

native 프로필

native 프로필은 로컬 파일 시스템 또는 classpath 기반 설정 저장소를 사용하는 방식이다.

즉:

configuration-repository/

폴더 내부의 yml 파일들을 설정 저장소처럼 사용하는 구조이다.


설정 파일 구조

강의 자료에서는 다음과 같은 설정 파일 예시를 제공한다.


templateSimple-dev.yml

config:
  profile: sht
  message: templateSimple(dev)

Globals:
  DbType: mysql
  DriverClassName: com.mysql.jdbc.Driver
  Url: jdbc:mysql://127.0.0.1:3306/sht
  Username: admin
  Password: admin

templatePortal-dev.yml

config:
  profile: pst
  message: templatePortal(dev)

Globals:
  DbType: mysql
  DriverClassName: com.mysql.jdbc.Driver
  Url: jdbc:mysql://127.0.0.1:3306/pst
  Username: admin
  Password: admin

templateEnterprise-dev.yml

config:
  profile: ebt
  message: templateEnterprise(dev)

Globals:
  DbType: mysql
  DriverClassName: com.mysql.jdbc.Driver
  Url: jdbc:mysql://127.0.0.1:3306/ebt
  Username: admin
  Password: admin

설정 파일 명명 규칙

Config Server는 일반적으로 다음 규칙으로 설정 파일을 조회한다.

{application-name}-{profile}.yml

예를 들어:

order-dev.yml
catalog-prod.yml
payment-stage.yml

Config Server 요청 흐름

서비스는 실행 시 Config Server에 설정 정보를 요청한다.

sequenceDiagram
    participant Service as Order Service
    participant Config as Config Server
    participant Repo as Configuration Repository

    Service->>Config: 설정 요청
    Config->>Repo: 설정 파일 조회
    Repo-->>Config: yml 반환
    Config-->>Service: 설정 전달

MSA에서 Config Server가 중요한 이유

MSA 환경에서는 설정이 매우 많아진다.

예를 들어 서비스마다:

  • DB 설정
  • Redis 설정
  • Kafka 주소
  • 외부 API URL

등이 모두 다를 수 있다.

Config Server를 사용하면:

  • 설정 중앙 관리 가능
  • 환경별 설정 분리 가능
  • 설정 변경 추적 가능
  • 서비스 재배포 최소화 가능

Eureka + Config Server 구조

실제 MSA 환경에서는 Eureka와 Config Server를 함께 사용하는 경우가 많다.

강의 자료에서도 Config Server가 Eureka와 함께 동작하는 구조를 보여준다.

전체 구조는 다음과 같이 정리할 수 있다.

flowchart TD
    Client[Client]

    Gateway[API Gateway]

    Eureka[Eureka Server]

    Config[Config Server]

    Menu[Menu Service]
    Order[Order Service]

    Client --> Gateway

    Gateway --> Eureka

    Menu --> Eureka
    Order --> Eureka

    Menu --> Config
    Order --> Config

실행 환경 예시

강의 자료 실행 화면에서는 다음 서비스들이 함께 실행되는 것을 확인할 수 있다.

ConfigServer : 8888
EurekaServer : 8761
Menus : 8081
Orders : 8082
ZuulServer : 8000

이 구조는 기본적인 Spring Cloud 기반 MSA 구조에 해당한다.


Actuator 확인

강의 자료에서는 Config Server의 Actuator 엔드포인트 확인 화면도 제공한다.

예시:

http://localhost:8888/actuator

Actuator를 통해 다음 정보를 확인할 수 있다.

  • health
  • info
  • metrics
  • env

이는 운영 환경에서 상태 모니터링에 매우 중요하다.


Config Server의 장점

정리하면 Config Server는 다음 장점을 가진다.


설정 중앙화

설정을 한 곳에서 관리 가능


환경별 설정 분리

dev / stage / prod 설정 분리 가능


운영 효율성 증가

설정 변경 시 서비스 전체 수정 불필요


보안 관리 용이

민감한 설정을 중앙에서 관리 가능


정리

Config Server는 MSA 환경에서 분산된 서비스들의 설정 정보를 중앙에서 관리하기 위한 핵심 구성 요소이다.

서비스는 실행 시 Config Server로부터 필요한 설정을 받아 사용하며, 이를 통해 설정 중복과 운영 복잡도를 줄일 수 있다.


한 줄 요약

Config Server는 MSA 환경에서 여러 서비스의 설정 정보를 중앙 집중 방식으로 관리하여 환경별 설정 분리, 운영 효율성 향상, 설정 변경 관리 등을 가능하게 해주는 구성 요소이다.


© 2020. All rights reserved.

SIKSIK