Skip to content

EntryDSM/Casper-Config-Server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

87 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Casper Config Server

Casper μƒνƒœκ³„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀정을 κ΄€λ¦¬ν•˜λŠ” Spring Cloud Config Serverμž…λ‹ˆλ‹€.

κ°œμš”

λΆ„μ‚° μ‹œμŠ€ν…œμ„ μœ„ν•œ μ™ΈλΆ€ 섀정을 μ œκ³΅ν•˜λŠ” 쀑앙집쀑식 μ„€μ • μ„œλ²„μž…λ‹ˆλ‹€. MySQL λ°μ΄ν„°λ² μ΄μŠ€μ— μ„€μ • 데이터λ₯Ό μ €μž₯ν•˜κ³  λ―Όκ°ν•œ 값에 λŒ€ν•œ μ•”ν˜Έν™”λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯

  • λ°μ΄ν„°λ² μ΄μŠ€ 기반 μ„€μ • μ €μž₯ - MySQL에 μ„€μ • μ €μž₯
  • ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ•”ν˜Έν™” - λ„€νŠΈμ›Œν¬ 전솑 κ΅¬κ°„μ—μ„œλ„ μ•”ν˜Έν™” μœ μ§€
  • JWT 기반 관리 API λ³΄μ•ˆ - κ΄€λ¦¬μš© API에 JWT 인증 적용
  • ν”„λ‘œν•„ 기반 μ„€μ • - ν™˜κ²½λ³„ λ‹€λ₯Έ μ„€μ •
  • REST API - μ„€μ • CRUD 및 ν‘œμ€€ Spring Cloud Config μ—”λ“œν¬μΈνŠΈ
  • μƒνƒœ λͺ¨λ‹ˆν„°λ§ - Actuator μ—”λ“œν¬μΈνŠΈλ₯Ό ν†΅ν•œ λͺ¨λ‹ˆν„°λ§

사전 μš”κ΅¬μ‚¬ν•­

  • Java 21+
  • MySQL 8.0+
  • Gradle 8.0+

ν™˜κ²½ λ³€μˆ˜ μ„€μ •

ν™˜κ²½ λ³€μˆ˜ 파일(.env λ˜λŠ” μ‹œμŠ€ν…œ ν™˜κ²½λ³€μˆ˜)에 λ‹€μŒμ„ μ„€μ •ν•˜μ„Έμš”:

MYSQL_URL=mysql://localhost:3306/casper_config
MYSQL_USER=your_mysql_user
MYSQL_PASSWORD=your_mysql_password
ENCRYPT_KEY=your_encryption_key_here
ENCRYPT_SALT=your_encryption_salt_here
JWT_SECRET_KEY=your_jwt_secret_key_here

⚠️ λ³΄μ•ˆ μ£Όμ˜μ‚¬ν•­: μ‹€μ œ μ•”ν˜Έν™” 킀와 μ†”νŠΈλŠ” μΆ©λΆ„νžˆ λ³΅μž‘ν•˜κ³  κΈ΄ 값을 μ‚¬μš©ν•˜μ„Έμš”.

λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

  1. MySQL λ°μ΄ν„°λ² μ΄μŠ€ 생성:
CREATE DATABASE casper_config;
  1. μ„€μ • ν…Œμ΄λΈ” 생성:
CREATE TABLE tbl_environment_configuration (
    id BINARY(16) NOT NULL PRIMARY KEY,
    application VARCHAR(20) NOT NULL,
    profile VARCHAR(24) NOT NULL,
    label VARCHAR(100) NOT NULL,
    prop_key VARCHAR(100) NOT NULL,
    prop_value TEXT NOT NULL
);

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

둜컬 개발 ν™˜κ²½

  1. ν™˜κ²½ λ³€μˆ˜ μ„€μ • ν›„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰:
./gradlew bootRun
  1. μ„œλ²„κ°€ http://localhost:8888μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

API μ‚¬μš©λ²• (Postman)

1. ν™˜κ²½μ„€μ • 관리 API

ν™˜κ²½μ„€μ • μ €μž₯

POST http://localhost:8888/api/env
Content-Type: application/json

{
    "application": "myapp",
    "profile": "dev",
    "label": "main",
    "properties": {
        "database.url": "jdbc:mysql://localhost:3306/myapp_dev",
        "database.username": "dev_user",
        "database.password": "my_secret_password"
    }
}

πŸ’‘ μžλ™ μ•”ν˜Έν™”: ν‰λ¬ΈμœΌλ‘œ μ „μ†‘λœ λͺ¨λ“  값은 μ„œλ²„μ—μ„œ μžλ™μœΌλ‘œ μ•”ν˜Έν™”λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€. {cipher} 접두사λ₯Ό μˆ˜λ™μœΌλ‘œ 뢙일 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  ν™˜κ²½μ„€μ • 쑰회

GET http://localhost:8888/api/env/myapp/dev/main

응닡 μ˜ˆμ‹œ:

{
    "database.url": "jdbc:mysql://localhost:3306/myapp_dev",
    "database.username": "dev_user",
    "database.password": "decrypted_password"
}

νŠΉμ • ν‚€ ν™˜κ²½μ„€μ • 쑰회

GET http://localhost:8888/api/env/myapp/dev/main/database.url

νŠΉμ • ν‚€ ν™˜κ²½μ„€μ • μ‚­μ œ

DELETE http://localhost:8888/api/env/myapp/dev/main/database.url

λͺ¨λ“  ν™˜κ²½μ„€μ • μ‚­μ œ

DELETE http://localhost:8888/api/env/myapp/dev/main

2. Spring Cloud Config ν‘œμ€€ API

μ„€μ • 쑰회 (ν‘œμ€€ ν˜•μ‹)

GET http://localhost:8888/myapp/dev
GET http://localhost:8888/myapp/dev/main

응닡 μ˜ˆμ‹œ:

{
    "name": "myapp",
    "profiles": ["dev"],
    "label": "main",
    "version": null,
    "state": null,
    "propertySources": [
        {
            "name": "myapp-dev-main",
            "source": {
                "database.url": "jdbc:mysql://localhost:3306/myapp_dev",
                "database.username": "dev_user",
                "database.password": "decrypted_password"
            }
        }
    ]
}

3. μ•”ν˜Έν™”/λ³΅ν˜Έν™” API

κ°’ μ•”ν˜Έν™”

POST http://localhost:8888/encrypt
Content-Type: text/plain

my_secret_password

응닡:

AQCKx8xPJ5N8C2YHnBWJ5+nMqpZ8XbWzEqK3...

κ°’ λ³΅ν˜Έν™”

POST http://localhost:8888/decrypt
Content-Type: text/plain

AQCKx8xPJ5N8C2YHnBWJ5+nMqpZ8XbWzEqK3...

응닡:

my_secret_password

4. 앑좔에이터 API

ν—¬μŠ€ 체크

GET http://localhost:8888/actuator/health

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 정보

GET http://localhost:8888/actuator/info

μ„€μ • μƒˆλ‘œκ³ μΉ¨

POST http://localhost:8888/actuator/refresh

Postman μ»¬λ ‰μ…˜ μ‚¬μš©λ²•

κΈ°λ³Έ μ›Œν¬ν”Œλ‘œμš°

  1. μ„€μ • μ €μž₯:

    • /api/env POST μ—”λ“œν¬μΈνŠΈμ— ν‰λ¬ΈμœΌλ‘œ 전솑
    • μ„œλ²„μ—μ„œ μžλ™μœΌλ‘œ μ•”ν˜Έν™”ν•˜μ—¬ μ €μž₯
  2. μ„€μ • 쑰회:

    • Spring Cloud Config ν‘œμ€€ μ—”λ“œν¬μΈνŠΈ λ˜λŠ” μ»€μŠ€ν…€ μ—”λ“œν¬μΈνŠΈ μ‚¬μš©
    • μ•”ν˜Έν™”λœ 값은 μžλ™μœΌλ‘œ λ³΅ν˜Έν™”λ˜μ–΄ λ°˜ν™˜
  3. μ„€μ • 관리:

    • ν•„μš”μ‹œ DELETE μ—”λ“œν¬μΈνŠΈλ‘œ μ„€μ • μ‚­μ œ

ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€ μ˜ˆμ‹œ

1. μ„€μ • μ €μž₯ (ν‰λ¬ΈμœΌλ‘œ 전솑)

POST /api/env
Content-Type: application/json

{
    "application": "user-service",
    "profile": "production",
    "label": "v1.0",
    "properties": {
        "spring.datasource.url": "jdbc:mysql://prod-db:3306/userdb",
        "spring.datasource.username": "prod_user",
        "spring.datasource.password": "my_database_password",
        "external.api.key": "secret_api_key_123",
        "logging.level.root": "WARN"
    }
}

2. μ„€μ • 쑰회 및 확인

GET /user-service/production/v1.0

πŸ’‘ μ„œλ²„μ—μ„œ μžλ™μœΌλ‘œ λ―Όκ°ν•œ 값듀을 μ•”ν˜Έν™”ν•˜μ—¬ μ €μž₯ν•˜κ³ , 쑰회 μ‹œμ—λŠ” λ³΅ν˜Έν™”λœ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„€μ •

πŸ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ λ³΅ν˜Έν™” μ„€μ •

bootstrap.yml (μ€‘μš”!):

encrypt:
  key: ${ENCRYPT_KEY}
  salt: ${ENCRYPT_SALT}

spring:
  application:
    name: myapp
  profiles:
    active: dev
  config:
    import: "configserver:http://localhost:8888"
  cloud:
    config:
      fail-fast: true
      retry:
        initial-interval: 1000
        max-attempts: 6

ν™˜κ²½λ³€μˆ˜ μ„€μ •:

ENCRYPT_KEY=your_encryption_key_here
ENCRYPT_SALT=your_encryption_salt_here

πŸ’‘ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ³΅ν˜Έν™”: μ„œλ²„μ—μ„œ μ•”ν˜Έν™”λœ 값을 μ „μ†‘ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈκ°€ 직접 λ³΅ν˜Έν™”ν•˜μ—¬ λ„€νŠΈμ›Œν¬ λ³΄μ•ˆμ„ κ°•ν™”ν•©λ‹ˆλ‹€.

πŸ”’ 관리 API 인증

κ΄€λ¦¬μš© API μ‚¬μš© μ‹œ JWT 토큰이 ν•„μš”ν•©λ‹ˆλ‹€:

1. JWT 토큰 λ°œκΈ‰:

POST http://localhost:8888/auth/token
Content-Type: application/json

{
    "username": "admin",
    "password": "config-admin-2024"
}

2. 관리 API μ‚¬μš©:

POST http://localhost:8888/api/env
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json

{
    "application": "myapp",
    "profile": "dev",
    "label": "main",
    "properties": { ... }
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages