Skip to content

Tickatch/config-server

Repository files navigation

Config Server

Tickatch MSA의 중앙 설정 관리 서버입니다.


역할

  • 모든 마이크로서비스의 설정 중앙 관리
  • Git 저장소 기반 설정 파일 관리
  • 환경별 설정 분리 (local, dev, prod)
  • 설정 변경 시 동적 갱신 지원 (Spring Cloud Bus)

기술 스택

항목 버전
Java 21
Spring Boot 4.0.0
Spring Cloud 2025.1.0
Spring Cloud Config 5.0.x

실행 방법

로컬 실행

./gradlew bootRun

Docker 실행

# 이미지 빌드
./gradlew clean bootJar
docker build -t ghcr.io/tickatch/config-server:latest .

# 컨테이너 실행
docker-compose up -d

아키텍처

┌─────────────────────────────────────────────────┐
│                    GitHub                        │
│  ┌───────────────────────────────────────────┐  │
│  │              config-repo                   │  │
│  │  configs/                                  │  │
│  │  ├── common/application.yml               │  │
│  │  ├── gateway-server/application.yml       │  │
│  │  ├── auth-service/application.yml         │  │
│  │  ├── user-service/application.yml         │  │
│  │  ├── product-service/application.yml      │  │
│  │  ├── reservation-service/application.yml  │  │
│  │  └── ...                                   │  │
│  └───────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘
                        │
                        ▼
              ┌─────────────────┐
              │  Config Server  │
              │     :3100       │
              └─────────────────┘
                        │
    ┌───────────┬───────┴───────┬───────────┐
    ▼           ▼               ▼           ▼
┌─────────┐ ┌─────────┐   ┌─────────┐ ┌─────────┐
│ Gateway │ │  Auth   │   │  User   │ │ Product │
│ Server  │ │ Service │   │ Service │ │ Service │
└─────────┘ └─────────┘   └─────────┘ └─────────┘

포트

서비스 포트
config-server 3100

환경 변수

필수 환경 변수

변수 설명 예시
SERVER_PORT 서버 포트 3100
EUREKA_CLIENT_SERVICEURL_DEFAULTZONE Eureka 서버 주소 http://eureka:3150/eureka/
SPRING_CLOUD_CONFIG_SERVER_GIT_URI Git 저장소 URI https://github.com/org/repo
SPRING_CLOUD_CONFIG_SERVER_GIT_DEFAULT_LABEL Git 브랜치 main

Eureka Instance 설정

변수 설명
EUREKA_INSTANCE_HOSTNAME 인스턴스 호스트명
EUREKA_INSTANCE_PREFER_IP_ADDRESS IP 주소 사용 여부
EUREKA_INSTANCE_HOME_PAGE_URL 홈페이지 URL
EUREKA_INSTANCE_STATUS_PAGE_URL 상태 페이지 URL
EUREKA_INSTANCE_HEALTH_CHECK_URL 헬스체크 URL

RabbitMQ 설정 (Bus Refresh)

변수 설명
SPRING_RABBITMQ_HOST RabbitMQ 호스트
SPRING_RABBITMQ_PORT RabbitMQ 포트
SPRING_RABBITMQ_USERNAME RabbitMQ 사용자명
SPRING_RABBITMQ_PASSWORD RabbitMQ 비밀번호

기타 설정

변수 설명
LOGSTASH_HOST Logstash 호스트 (로그 수집)
JAVA_OPTS JVM 옵션
LOG_LEVEL 로그 레벨

환경 설정 파일

.env.example

# ========================================
# Config Server Configuration
# ========================================
CONFIG_IMAGE=ghcr.io/tickatch/config-server:latest

# ========================================
# Git Repository (설정 저장소)
# ========================================
SPRING_CLOUD_CONFIG_SERVER_GIT_URI=https://github.com/your-org/config-repo
SPRING_CLOUD_CONFIG_SERVER_GIT_DEFAULT_LABEL=main

# ========================================
# Eureka Instance 설정
# ========================================
EUREKA_INSTANCE_HOSTNAME=your-domain.com
EUREKA_INSTANCE_PREFER_IP_ADDRESS=false
EUREKA_INSTANCE_HOME_PAGE_URL=https://your-domain.com/config/
EUREKA_INSTANCE_STATUS_PAGE_URL=https://your-domain.com/config/actuator/info
EUREKA_INSTANCE_HEALTH_CHECK_URL=https://your-domain.com/config/actuator/health
EUREKA_INSTANCE_NON_SECURE_PORT_ENABLED=false
EUREKA_INSTANCE_SECURE_PORT_ENABLED=true
EUREKA_INSTANCE_SECURE_PORT=443

# ========================================
# RabbitMQ (Bus Refresh용)
# ========================================
SPRING_RABBITMQ_HOST=rabbitmq
SPRING_RABBITMQ_PORT=5672
SPRING_RABBITMQ_USERNAME=your_username
SPRING_RABBITMQ_PASSWORD=your_password

# ========================================
# JVM Options
# ========================================
JAVA_OPTS=-Xms256m -Xmx512m

# ========================================
# Logging
# ========================================
LOG_LEVEL=INFO
LOGSTASH_HOST=logstash:5000

⚠️ 주의: .env 파일은 .gitignore에 포함되어 있습니다. .env.example을 복사하여 실제 값을 설정하세요.


Docker Compose

version: '3.8'
services:
  config-server:
    image: ghcr.io/tickatch/config-server:latest
    container_name: tickatch-config
    env_file:
      - .env
    environment:
      - SERVER_PORT=3100
      - EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=${EUREKA_URLS}
      - SPRING_RABBITMQ_HOST=${RABBITMQ_HOST}
      - LOGSTASH_HOST=${LOGSTASH_HOST}
      - SPRING_CLOUD_CONFIG_SERVER_GIT_URI=${CONFIG_REPO_URI}
      - SPRING_CLOUD_CONFIG_SERVER_GIT_DEFAULT_LABEL=${CONFIG_REPO_BRANCH}
      - SPRING_CLOUD_CONFIG_SERVER_GIT_TRY_MASTER_BRANCH=false
      - SPRING_CLOUD_CONFIG_SERVER_GIT_CLONE_ON_START=true
      - SPRING_CLOUD_CONFIG_SERVER_HEALTH_ENABLED=false
    ports:
      - "3100:3100"
    networks:
      - tickatch-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3100/actuator/health"]
      interval: 30s
      timeout: 10s
      retries: 5

networks:
  tickatch-network:
    external: true

API 엔드포인트

엔드포인트 설명
/{application}/{profile} 서비스별 설정 조회
/{application}/{profile}/{label} 특정 브랜치 설정 조회
/actuator/health 헬스 체크
/actuator/info 서비스 정보
/actuator/metrics 메트릭 정보
/actuator/prometheus Prometheus 메트릭
/actuator/refresh 설정 갱신
/actuator/busrefresh 전체 서비스 설정 갱신 (Spring Cloud Bus)

예시

# gateway-server의 default 설정 조회
curl http://localhost:3100/gateway-server/default

# auth-service의 dev 프로파일 설정 조회
curl http://localhost:3100/auth-service/dev

디렉토리 구조

config-server/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/tickatch/configserver/
│       │       └── ConfigServerApplication.java
│       └── resources/
│           ├── application.yaml
│           └── logback-spring.xml
├── .env.example          # 환경 변수 템플릿
├── .gitignore            # .env 제외
├── docker-compose.yml
├── build.gradle
├── Dockerfile
└── README.md

설정 검색 경로

search-paths:
  - configs/common           # 공통 설정 (모든 서비스)
  - configs/{application}    # 서비스별 기본 설정
  - configs/{application}/{profile}  # 서비스별 환경 설정

설정 우선순위: configs/{application}/{profile} > configs/{application} > configs/common


로깅

로그 출력

  • Console: 표준 출력 (traceId, spanId 포함)
  • Logstash: ELK 스택 연동

로그 패턴

%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId:-},%X{spanId:-}] %-5level %logger{36} - %msg%n

의존 관계

Eureka Server (HA 구성)
   ├── eureka-server-1 (:3150)
   └── eureka-server-2 (:3151)
        ▲
        │ 등록
        │
Config Server (:3100) ◄──── RabbitMQ (Bus Refresh)
        │
        │ 설정 제공
        ▼
┌───────────────────────────────────────────────────────┐
│                    Microservices                       │
│  Gateway, Auth, User, Product, Reservation, Ticket... │
└───────────────────────────────────────────────────────┘

주의사항

  • .env 파일은 절대 Git에 커밋하지 마세요
  • 민감 정보는 환경 변수로 주입
  • Config Server는 Eureka Server가 먼저 기동되어야 합니다

About

컨피그 서버

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors