Skip to main content
Glama
tomtomjskim

Database MCP Server

by tomtomjskim

Database MCP Server

๐Ÿš€ Enterprise-Ready Multi-Database MCP Server

Model Context Protocol (MCP) ์„œ๋ฒ„๋กœ ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ AI ์—์ด์ „ํŠธ ๊ฐ„์˜ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์ธ ํ†ต์‹ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐ŸŒŸ ์ฃผ์š” ํŠน์ง•

  • ๐Ÿข MSA ํ™˜๊ฒฝ ์™„๋ฒฝ ์ง€์›: ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค DB๋ฅผ ํ•˜๋‚˜์˜ MCP ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ

  • ๐Ÿ”’ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ณด์•ˆ: ์ฝ๊ธฐ ์ „์šฉ, SSL/TLS, ์ฟผ๋ฆฌ ๊ฒ€์ฆ, ๊ฐ์‚ฌ ๋กœ๊น…

  • ๐ŸŒ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ: AWS RDS, Azure Database, Google Cloud SQL ์™„๋ฒฝ ์ง€์›

  • โšก ๊ณ ์„ฑ๋Šฅ: ์—ฐ๊ฒฐ ํ’€๋ง, ์ง€๋Šฅํ˜• ์บ์‹ฑ, ๋ณ‘๋ ฌ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ

  • ๐Ÿค– AI ์นœํ™”์ : ์ž์—ฐ์–ด ์ฟผ๋ฆฌ, ์Šคํ‚ค๋งˆ ๋ถ„์„, ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ถ„์„

Related MCP server: Database MCP Server

๊ฐœ์š”

์ด ํ”„๋กœ์ ํŠธ๋Š” Anthropic์˜ Model Context Protocol์„ ์‚ฌ์šฉํ•˜์—ฌ Claude์™€ ๊ฐ™์€ AI ๋ชจ๋ธ์ด ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™์‹œ์— ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ณ ๊ธ‰ MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. MSA(Microservices Architecture) ํ™˜๊ฒฝ์—์„œ ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋“ค์„ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ž์—ฐ์–ด๋ฅผ ํ†ตํ•œ ํฌ๋กœ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ, ์Šคํ‚ค๋งˆ ํƒ์ƒ‰, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Claude Code์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

Claude Code ํ™˜๊ฒฝ์—์„œ ์ด DB MCP ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Claude Code ์‚ฌ์šฉ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋น ๋ฅธ ์‹œ์ž‘:

  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (.env ํŒŒ์ผ)

  2. MCP ์„œ๋ฒ„ ์„ค์ •์— ์ถ”๊ฐ€

  3. Claude์—๊ฒŒ "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”" ์š”์ฒญ

  4. ์ž์—ฐ์–ด๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋ฐ ๋ถ„์„

์ง€์› ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • โœ… MySQL - ์™„์ „ ์ง€์› (์˜จํ”„๋ ˆ๋ฏธ์Šค, AWS RDS, Azure Database)

  • โœ… PostgreSQL - ์™„์ „ ์ง€์› (์˜จํ”„๋ ˆ๋ฏธ์Šค, AWS RDS, Azure Database, Google Cloud SQL)

  • ๐Ÿ”„ SQLite (๊ฐœ๋ฐœ ์˜ˆ์ •)

  • ๐Ÿ”„ ClickHouse (๊ฐœ๋ฐœ ์˜ˆ์ •)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ ํƒ ๊ฐ€์ด๋“œ

MySQL vs PostgreSQL ๋น„๊ต

๊ธฐ๋Šฅ

MySQL

PostgreSQL

์„ฑ๋Šฅ

์ฝ๊ธฐ ์ตœ์ ํ™”, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ

๋ณต์žกํ•œ ์ฟผ๋ฆฌ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ ํ•ฉ

๋ฐ์ดํ„ฐ ํƒ€์ž…

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์›

JSON, Array, ์ปค์Šคํ…€ ํƒ€์ž… ๋“ฑ ํ’๋ถ€ํ•œ ์ง€์›

ํ™•์žฅ์„ฑ

์ˆ˜ํ‰ ํ™•์žฅ (์ƒค๋”ฉ) ์šฐ์ˆ˜

์ˆ˜์ง ํ™•์žฅ ์šฐ์ˆ˜, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ง€์›

ACID ์ค€์ˆ˜

InnoDB ์—”์ง„ ์‚ฌ์šฉ ์‹œ ์™„์ „ ์ง€์›

์™„์ „ํ•œ ACID ์ค€์ˆ˜

๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์ค‘์‹ฌ

Window Functions, CTE, Full-text Search ๋“ฑ

ํด๋ผ์šฐ๋“œ ์ง€์›

AWS RDS, Azure Database

AWS RDS, Azure Database, Google Cloud SQL

์–ด๋Œ‘ํ„ฐ ์ž๋™ ์„ ํƒ

์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒ€์ž…์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค:

  1. ๋ช…์‹œ์  ์ง€์ •: DB_TYPE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” config.type ์„ค์ •

  2. ํฌํŠธ ๊ธฐ๋ฐ˜ ๊ฐ์ง€:

    • 3306 โ†’ MySQL

    • 5432 โ†’ PostgreSQL

  3. ํ˜ธ์ŠคํŠธ๋ช… ๊ธฐ๋ฐ˜ ๊ฐ์ง€:

    • ํ˜ธ์ŠคํŠธ๋ช…์— 'mysql' ํฌํ•จ โ†’ MySQL

    • ํ˜ธ์ŠคํŠธ๋ช…์— 'postgres' ํฌํ•จ โ†’ PostgreSQL

  4. ๊ธฐ๋ณธ๊ฐ’: MySQL

๊ถŒ์žฅ ์‚ฌ์šฉ ์‚ฌ๋ก€

MySQL ๊ถŒ์žฅ:

  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฑ์—”๋“œ

  • ๋‹จ์ˆœํ•œ CRUD ์ž‘์—… ์ค‘์‹ฌ

  • ๋†’์€ ๋™์‹œ์„ฑ ์ฝ๊ธฐ ์ž‘์—…

  • ๊ธฐ์กด MySQL ์ธํ”„๋ผ ํ™œ์šฉ

PostgreSQL ๊ถŒ์žฅ:

  • ๋ณต์žกํ•œ ๋ถ„์„ ์ฟผ๋ฆฌ

  • JSON ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

  • ์ง€๋ฆฌ ์ •๋ณด ์‹œ์Šคํ…œ (PostGIS)

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

MSA ํ™˜๊ฒฝ์—์„œ์˜ ๋‹ค์ค‘ DB ์—ฐ๊ฒฐ

MSA(Microservices Architecture) ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™์‹œ์— ์ ‘์†ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด MCP ์„œ๋ฒ„๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

๋ฐฉ๋ฒ• 1: ๋‹จ์ผ MCP ์„œ๋ฒ„์—์„œ ๋‹ค์ค‘ DB ์ง€์› (๊ถŒ์žฅ)

ํ•˜๋‚˜์˜ MCP ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค์—์„œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ๋ฐฉ์‹

db-config.json ํŒŒ์ผ ์ƒ์„ฑ:

{
  "connections": {
    "user-service": {
      "name": "user-service",
      "type": "mysql",
      "host": "user-db.cluster-xxx.rds.amazonaws.com",
      "port": 3306,
      "user": "readonly_user",
      "password": "secure_password",
      "database": "user_service",
      "description": "์‚ฌ์šฉ์ž ์„œ๋น„์Šค DB",
      "tags": ["microservice", "user", "mysql"]
    },
    "order-service": {
      "name": "order-service",
      "type": "postgresql",
      "host": "order-db.cluster-yyy.rds.amazonaws.com",
      "port": 5432,
      "user": "readonly_user",
      "password": "secure_password",
      "database": "order_service",
      "description": "์ฃผ๋ฌธ ์„œ๋น„์Šค DB",
      "tags": ["microservice", "order", "postgresql"]
    }
  },
  "defaultConnection": "user-service"
}

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฐฉ์‹

# ์‚ฌ์šฉ์ž ์„œ๋น„์Šค DB
DB_USER_HOST=user-db.cluster-xxx.rds.amazonaws.com
DB_USER_PORT=3306
DB_USER_TYPE=mysql
DB_USER_USER=readonly_user
DB_USER_PASSWORD=secure_password
DB_USER_DATABASE=user_service
DB_USER_DESCRIPTION=์‚ฌ์šฉ์ž ์„œ๋น„์Šค DB
DB_USER_TAGS=microservice,user,mysql

# ์ฃผ๋ฌธ ์„œ๋น„์Šค DB
DB_ORDER_HOST=order-db.cluster-yyy.rds.amazonaws.com
DB_ORDER_PORT=5432
DB_ORDER_TYPE=postgresql
DB_ORDER_USER=readonly_user
DB_ORDER_PASSWORD=secure_password
DB_ORDER_DATABASE=order_service
DB_ORDER_DESCRIPTION=์ฃผ๋ฌธ ์„œ๋น„์Šค DB
DB_ORDER_TAGS=microservice,order,postgresql

# ๊ธฐ๋ณธ ์—ฐ๊ฒฐ
DB_DEFAULT_CONNECTION=user

Claude Desktop ์„ค์ • (๋‹ค์ค‘ DB)

{
  "mcpServers": {
    "multi-database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/multi-database-server.js"],
      "env": {
        "DB_CONFIG_FILE": "./db-config.json"
      }
    }
  }
}

Claude Code ์„ค์ • (๋‹ค์ค‘ DB - ๊ฐ„์†Œํ™”๋œ ๋ฐฉ์‹)

๊ฐœ์„ ๋œ ์„ค์ • ๋ฐฉ์‹: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ„์†Œํ™”๋ฅผ ํ†ตํ•œ ์„ค์ • ๋‹จ์ˆœํ™” (8๊ฐœ โ†’ 3๊ฐœ)

~/.claude.json ํŒŒ์ผ์— ์ถ”๊ฐ€:

{
  "mcpServers": {
    "db-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/db-mcp/dist/multi-index.js"],
      "env": {
        "DB_CONFIG_FILE": "/absolute/path/to/db-mcp/db-config.json",
        "LOG_LEVEL": "info",
        "MCP_SERVER_NAME": "db-mcp"
      }
    }
  }
}

ํ•ต์‹ฌ ๊ฐœ์„ ์ :

  • โœ… ๋ถˆํ•„์š”ํ•œ dummy ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ œ๊ฑฐ: MYSQL_HOST, MYSQL_PORT, MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD ๋ถˆํ•„์š”

  • โœ… ์ง„์ •ํ•œ ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ์„œ๋ฒ„: DB_CONFIG_FILE๋งŒ์œผ๋กœ ๋ชจ๋“  ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

  • โœ… ์ฝ”๋“œ ๋ ˆ๋ฒจ ๊ฐœ์„ : src/config/index.ts์—์„œ multi-DB ๋ชจ๋“œ ์ž๋™ ๊ฐ์ง€

  • โœ… ์„ค์ • ๊ฐ„์†Œํ™”: ํ™˜๊ฒฝ๋ณ€์ˆ˜ 62.5% ๊ฐ์†Œ (8๊ฐœ โ†’ 3๊ฐœ)

๋™์ž‘ ์›๋ฆฌ:

  1. DB_CONFIG_FILE ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์กด์žฌ ์‹œ multi-DB ๋ชจ๋“œ๋กœ ์ž๋™ ์ „ํ™˜

  2. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋Š” db-config.json ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ

  3. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฒ€์ฆ ๋กœ์ง ์ž๋™ ์Šคํ‚ต์œผ๋กœ dummy ๊ฐ’ ๋ถˆํ•„์š”

๊ฒ€์ฆ ๋ฐฉ๋ฒ•:

# MCP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ํ™•์ธ
claude mcp list

# ํ—ฌ์Šค์ฒดํฌ ์‹คํ–‰
# Claude Code์—์„œ: "db-mcp ์„œ๋ฒ„ ํ—ฌ์Šค์ฒดํฌ ์‹คํ–‰ํ•ด์ค˜"

๋ฐฉ๋ฒ• 2: DB๋ณ„ ๋ณ„๋„ MCP ์„œ๋ฒ„ (๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•)

๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งˆ๋‹ค ๋ณ„๋„์˜ MCP ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Claude Desktop ์„ค์ • (๋ณ„๋„ ์„œ๋ฒ„)

{
  "mcpServers": {
    "user-db": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "mysql",
        "MYSQL_HOST": "user-db.cluster-xxx.rds.amazonaws.com",
        "MYSQL_DB": "user_service"
      }
    },
    "order-db": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "postgresql",
        "POSTGRES_HOST": "order-db.cluster-yyy.rds.amazonaws.com",
        "POSTGRES_DB": "order_service"
      }
    }
  }
}

๋‹ค์ค‘ DB ์ „์šฉ ๊ธฐ๋Šฅ

๋‹จ์ผ MCP ์„œ๋ฒ„์—์„œ ๋‹ค์ค‘ DB๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ:

1. ํฌ๋กœ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ

"์‚ฌ์šฉ์ž ์„œ๋น„์Šค์™€ ์ฃผ๋ฌธ ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด์„œ ๋ณด์—ฌ์ค˜"
โ†’ ์—ฌ๋Ÿฌ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜์—ฌ ํ†ตํ•ฉ ๋ถ„์„

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํƒœ๊ทธ ํ•„ํ„ฐ๋ง

"microservice ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ๋ชจ๋“  DB ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์ค˜"
โ†’ ํƒœ๊ทธ ๊ธฐ๋ฐ˜์œผ๋กœ DB ๊ทธ๋ฃน ๊ด€๋ฆฌ

3. ํ†ตํ•ฉ ํ—ฌ์Šค์ฒดํฌ

"๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ•œ๋ฒˆ์— ํ™•์ธํ•ด์ค˜"
โ†’ ์ „์ฒด ์ธํ”„๋ผ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง

4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„ ๊ด€๊ณ„ ๋ถ„์„

"์‚ฌ์šฉ์ž ID๋กœ ๋ชจ๋“  ์„œ๋น„์Šค์˜ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์ค˜"
โ†’ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์ถ”์ 

๐Ÿ›  ์ œ๊ณต ๊ธฐ๋Šฅ

๐Ÿ”— 1. ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

  • ๐Ÿข MSA ์™„๋ฒฝ ์ง€์›: ํ•˜๋‚˜์˜ MCP ์„œ๋ฒ„์—์„œ ์ˆ˜์‹ญ ๊ฐœ์˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค DB ๊ด€๋ฆฌ

  • โšก ๊ณ ์„ฑ๋Šฅ ์—ฐ๊ฒฐ ํ’€๋ง: DB๋ณ„ ๋…๋ฆฝ์ ์ธ ์—ฐ๊ฒฐ ํ’€๋กœ ์ตœ์ ํ™”๋œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

  • ๐Ÿ”„ ์ž๋™ ํŽ˜์ผ์˜ค๋ฒ„: ์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ์ž๋™ ์žฌ์—ฐ๊ฒฐ ๋ฐ ์ƒํƒœ ๋ณต๊ตฌ

  • ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: ์—ฐ๊ฒฐ ์ƒํƒœ, ํ™œ์„ฑ ์ฟผ๋ฆฌ, ์‘๋‹ต ์‹œ๊ฐ„ ์‹ค์‹œ๊ฐ„ ์ถ”์ 

  • ๐Ÿท ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ: ํ™˜๊ฒฝ๋ณ„, ์„œ๋น„์Šค๋ณ„ DB ๊ทธ๋ฃน ๊ด€๋ฆฌ (production, staging, analytics ๋“ฑ)

โš™๏ธ 2. ๊ณ ๊ธ‰ ์ฟผ๋ฆฌ ์‹คํ–‰ ๋„๊ตฌ (Tools)

list_databases ๐Ÿ—‚

  • ๊ธฐ๋Šฅ: ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก ๋ฐ ์ƒํƒœ ์กฐํšŒ

  • ์ถœ๋ ฅ: DB ํƒ€์ž…, ์—ฐ๊ฒฐ ์ƒํƒœ, ํƒœ๊ทธ, ์„ค๋ช…, ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ

  • ํ™œ์šฉ: ์ „์ฒด ์ธํ”„๋ผ ํ˜„ํ™ฉ ํŒŒ์•…, ํ—ฌ์Šค์ฒดํฌ

execute_query ๐Ÿš€

  • ๊ธฐ๋Šฅ: ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— SQL ์ฟผ๋ฆฌ ์‹คํ–‰

  • ์ž…๋ ฅ: SQL ๋ฌธ์ž์—ด, ๋Œ€์ƒ DB, ํŒŒ๋ผ๋ฏธํ„ฐ

  • ์ถœ๋ ฅ: ๊ตฌ์กฐํ™”๋œ ๊ฒฐ๊ณผ + ์‹คํ–‰ ๋ฉ”ํŠธ๋ฆญ

  • ๋ณด์•ˆ: ์ฝ๊ธฐ ์ „์šฉ ์ฟผ๋ฆฌ๋งŒ ํ—ˆ์šฉ, SQL ์ธ์ ์…˜ ๋ฐฉ์ง€

cross_database_query ๐Ÿ”„

  • ๊ธฐ๋Šฅ: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋™์‹œ ์ฟผ๋ฆฌ ์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ํ†ตํ•ฉ

  • ์ž…๋ ฅ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„ ์ฟผ๋ฆฌ ๋ฐฐ์—ด

  • ์ถœ๋ ฅ: ํ†ตํ•ฉ๋œ ๊ฒฐ๊ณผ์…‹ + ์„ฑ๋Šฅ ๋น„๊ต

  • ํ™œ์šฉ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๋น„๊ต, ํ†ตํ•ฉ ๋ฆฌํฌํŒ…

natural_language_query ๐Ÿค–

  • ๊ธฐ๋Šฅ: ์ž์—ฐ์–ด๋ฅผ SQL๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰

  • ์ž…๋ ฅ: ์ž์—ฐ์–ด ์งˆ๋ฌธ, ๋Œ€์ƒ DB, ์ปจํ…์ŠคํŠธ

  • ์ถœ๋ ฅ: ์ƒ์„ฑ๋œ SQL + ์‹คํ–‰ ๊ฒฐ๊ณผ + ์‹ ๋ขฐ๋„

  • AI ์ง€์›: ์Šคํ‚ค๋งˆ ์ •๋ณด ๊ธฐ๋ฐ˜ ์ง€๋Šฅํ˜• ์ฟผ๋ฆฌ ์ƒ์„ฑ

database_health_check ๐Ÿฅ

  • ๊ธฐ๋Šฅ: ์ „์ฒด ๋˜๋Š” ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ ๊ฒ€์‚ฌ

  • ์ถœ๋ ฅ: ์‘๋‹ต ์‹œ๊ฐ„, ์—ฐ๊ฒฐ ํ’€ ์ƒํƒœ, ์„ฑ๋Šฅ ์ง€ํ‘œ

  • ํ™œ์šฉ: ์ธํ”„๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง, ์žฅ์•  ์กฐ๊ธฐ ๊ฐ์ง€

๐Ÿ“‹ 3. ํ†ตํ•ฉ ์Šคํ‚ค๋งˆ ์ •๋ณด ๋ฆฌ์†Œ์Šค (Resources)

database://connections ๐Ÿ”—

  • ๋‚ด์šฉ: ๋ชจ๋“  ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒ์„ธ ์ •๋ณด

  • ํฌํ•จ: ์—ฐ๊ฒฐ ์„ค์ •, ์ƒํƒœ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ํƒœ๊ทธ

database://{db_name}/schema ๐Ÿ“Š

  • ๋‚ด์šฉ: ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์™„์ „ํ•œ ์Šคํ‚ค๋งˆ ์ •๋ณด

  • ํฌํ•จ: ํ…Œ์ด๋ธ”, ๋ทฐ, ํ”„๋กœ์‹œ์ €, ์ธ๋ฑ์Šค, ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„

  • ์ง€์›: MySQL, PostgreSQL ๊ฐ๊ฐ ์ตœ์ ํ™”๋œ ๋ถ„์„

database://{db_name}/tables ๐Ÿ“

  • ๋‚ด์šฉ: ํ…Œ์ด๋ธ”๋ณ„ ์ƒ์„ธ ์ •๋ณด ๋ฐ ํ†ต๊ณ„

  • ํฌํ•จ: ์ปฌ๋Ÿผ ์ •๋ณด, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ œ์•ฝ์กฐ๊ฑด, ํ–‰ ์ˆ˜, ํฌ๊ธฐ

๐Ÿ” 4. ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋„๊ตฌ

์Šคํ‚ค๋งˆ ๋ถ„์„ ์—”์ง„

  • MySQL ํŠนํ™”: information_schema ์ตœ์ ํ™” ์ฟผ๋ฆฌ

  • PostgreSQL ํŠนํ™”: pg_catalog ๋ฐ ํ™•์žฅ ์ •๋ณด ๋ถ„์„

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”: ์ง€๋Šฅํ˜• ์บ์‹ฑ์œผ๋กœ ๋น ๋ฅธ ์‘๋‹ต

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ถ„์„

  • ์ปฌ๋Ÿผ ํ”„๋กœํŒŒ์ผ๋ง: ํƒ€์ž…๋ณ„ ํ†ต๊ณ„, NULL ๋น„์œจ, ๊ณ ์œ ๊ฐ’ ๋ถ„์„

  • ํŒจํ„ด ๊ฐ์ง€: ์ด๋ฉ”์ผ, ์ „ํ™”๋ฒˆํ˜ธ, URL ๋“ฑ ๋ฐ์ดํ„ฐ ํŒจํ„ด ์ž๋™ ๊ฐ์ง€

  • ์ด์ƒ์น˜ ํƒ์ง€: 3-์‹œ๊ทธ๋งˆ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ˆ˜์น˜ ์ด์ƒ์น˜ ๋ฐœ๊ฒฌ

  • ํ’ˆ์งˆ ์ ์ˆ˜: ๋ฐ์ดํ„ฐ ์™„์„ฑ๋„, ์ผ๊ด€์„ฑ, ์ •ํ™•๋„ ์ข…ํ•ฉ ํ‰๊ฐ€

๊ด€๊ณ„ ๋ถ„์„

  • ํ…Œ์ด๋ธ” ๊ด€๊ณ„ ๋งคํ•‘: ์™ธ๋ž˜ํ‚ค ๊ธฐ๋ฐ˜ ์ž๋™ ๊ด€๊ณ„๋„ ์ƒ์„ฑ

  • ๋ฐ์ดํ„ฐ ๋งํฌ ์ถ”์ : ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ์—ฐ๊ด€์„ฑ ๋ถ„์„

  • ์ข…์†์„ฑ ๋ถ„์„: ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์˜ํ–ฅ๋„ ํ‰๊ฐ€

๋ณด์•ˆ ๋ฐ ์ œํ•œ์‚ฌํ•ญ

๋ณด์•ˆ ๊ธฐ๋Šฅ

1. ์ฟผ๋ฆฌ ์ œํ•œ

  • ์ฝ๊ธฐ ์ „์šฉ: DML(INSERT, UPDATE, DELETE) ๋ฐ DDL(CREATE, DROP) ๊ธˆ์ง€

  • ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ: ํ—ˆ์šฉ๋œ SQL ํ‚ค์›Œ๋“œ๋งŒ ์‹คํ–‰

  • ๊ตฌ๋ฌธ ๊ฒ€์ฆ: SQL ์ธ์ ์…˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํŒŒ์‹ฑ ๊ฒ€์ฆ

2. ์‹คํ–‰ ์ œํ•œ

const SECURITY_LIMITS = {
  MAX_EXECUTION_TIME: 30000,    // 30์ดˆ
  MAX_RESULT_ROWS: 10000,       // ์ตœ๋Œ€ 10,000ํ–‰
  MAX_RESULT_SIZE: '50MB',      // ์ตœ๋Œ€ 50MB
  MAX_QUERY_LENGTH: 10000,      // ์ตœ๋Œ€ 10,000์ž
  ALLOWED_KEYWORDS: [
    'SELECT', 'FROM', 'WHERE', 'JOIN', 'ORDER BY',
    'GROUP BY', 'HAVING', 'LIMIT', 'OFFSET',
    'SHOW', 'DESCRIBE', 'EXPLAIN'
  ]
};

3. ์ ‘๊ทผ ์ œ์–ด

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„ ๊ถŒํ•œ: ๊ฐ DB ์—ฐ๊ฒฐ๋งˆ๋‹ค ๋ณ„๋„ ๊ถŒํ•œ ์„ค์ •

  • ํ…Œ์ด๋ธ”๋ณ„ ์ œํ•œ: ํŠน์ • ํ…Œ์ด๋ธ” ์ ‘๊ทผ ์ œํ•œ ๊ฐ€๋Šฅ

  • ๊ฐ์‚ฌ ๋กœ๊น…: ๋ชจ๋“  ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ธฐ๋ก ์ €์žฅ

4. ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ

  • TLS/SSL ์•”ํ˜ธํ™”: ์›๊ฒฉ DB ์—ฐ๊ฒฐ ์•”ํ˜ธํ™” ๊ฐ•์ œ (AWS RDS, Azure DB ๋“ฑ)

  • VPC ์ง€์›: AWS VPC, Azure VNet ๋‚ด ์ ‘๊ทผ

  • ์—ฐ๊ฒฐ ์ œํ•œ: IP ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ง€์›

  • ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค: ํŠน์ • ์‹œ๊ฐ„๋Œ€์—๋งŒ ์ ‘๊ทผ ํ—ˆ์šฉ

  • Connection Timeout: ์›๊ฒฉ ์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ œํ•œ ์„ค์ •

๊ธฐ๋Šฅ ์ œํ•œ์‚ฌํ•ญ

1. ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ

  • โŒ ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์ž‘์—… (INSERT, UPDATE, DELETE)

  • โŒ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ (CREATE, ALTER, DROP)

  • โŒ ์ €์žฅ ํ”„๋กœ์‹œ์ € ์‹คํ–‰

  • โŒ ํŠธ๋žœ์žญ์…˜ ์ œ์–ด (BEGIN, COMMIT, ROLLBACK)

  • โŒ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋ช…๋ น

  • โŒ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ

2. ์„ฑ๋Šฅ ์ œํ•œ

  • ๋™์‹œ ์—ฐ๊ฒฐ: ์ตœ๋Œ€ 10๊ฐœ ๋™์‹œ ์ฟผ๋ฆฌ

  • ์บ์‹ฑ: ์Šคํ‚ค๋งˆ ์ •๋ณด 5๋ถ„ ์บ์‹œ

  • Rate Limiting: ๋ถ„๋‹น 100ํšŒ ์ฟผ๋ฆฌ ์ œํ•œ

3. ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ œํ•œ

  • BLOB/TEXT: ํฐ ๋ฐ์ดํ„ฐ๋Š” ์š”์•ฝ ์ •๋ณด๋งŒ ์ œ๊ณต

  • JSON/XML: ๊ตฌ์กฐํ™”๋œ ํ˜•ํƒœ๋กœ ํŒŒ์‹ฑํ•˜์—ฌ ์ œ๊ณต

  • Binary: Base64 ์ธ์ฝ”๋”ฉ์œผ๋กœ ์ œํ•œ์  ์ง€์›

์„ค์น˜ ๋ฐ ์„ค์ •

1. ์„ค์น˜

npm install

2. ํ™˜๊ฒฝ ์„ค์ •

.env ํŒŒ์ผ ์ƒ์„ฑ:

MySQL ์„ค์ •

# MySQL ์—ฐ๊ฒฐ ์ •๋ณด (๋กœ์ปฌ ๋˜๋Š” ์›๊ฒฉ)
DB_TYPE=mysql                           # ๋ช…์‹œ์  ํƒ€์ž… ์ง€์ • (์„ ํƒ์‚ฌํ•ญ)
MYSQL_HOST=localhost                    # ๋˜๋Š” AWS RDS ์—”๋“œํฌ์ธํŠธ
MYSQL_PORT=3306
MYSQL_DB=mydb
MYSQL_USER=readonly_user
MYSQL_PASSWORD=secure_password

# ์›๊ฒฉ DB ์„ค์ • (AWS RDS ์˜ˆ์‹œ)
# MYSQL_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# MYSQL_SSL_MODE=REQUIRED
# MYSQL_SSL_CA=/path/to/rds-ca-2019-root.pem
# MYSQL_CONNECTION_TIMEOUT=60000
# MYSQL_ACQUIRECONNECTION_TIMEOUT=60000

PostgreSQL ์„ค์ •

# PostgreSQL ์—ฐ๊ฒฐ ์ •๋ณด (๋กœ์ปฌ ๋˜๋Š” ์›๊ฒฉ)
DB_TYPE=postgresql                      # ๋ช…์‹œ์  ํƒ€์ž… ์ง€์ • (์„ ํƒ์‚ฌํ•ญ)
POSTGRES_HOST=localhost                 # ๋˜๋Š” AWS RDS ์—”๋“œํฌ์ธํŠธ
POSTGRES_PORT=5432
POSTGRES_DB=mydb
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=secure_password

# ์›๊ฒฉ DB ์„ค์ • (AWS RDS PostgreSQL ์˜ˆ์‹œ)
# POSTGRES_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# POSTGRES_SSL_MODE=REQUIRED
# POSTGRES_SSL_CA=/path/to/rds-ca-2019-root.pem
# POSTGRES_CONNECTION_TIMEOUT=60000

๊ณตํ†ต ๋ณด์•ˆ ์„ค์ •

MAX_QUERY_EXECUTION_TIME=30000
MAX_RESULT_ROWS=10000
ENABLE_QUERY_LOGGING=true

3. Claude Desktop ์„ค์ •

MySQL ์‚ฌ์šฉ ์‹œ

claude_desktop_config.json์— ์ถ”๊ฐ€:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "mysql",
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_DB": "mydb",
        "MYSQL_USER": "readonly_user",
        "MYSQL_PASSWORD": "secure_password"
      }
    }
  }
}

PostgreSQL ์‚ฌ์šฉ ์‹œ

claude_desktop_config.json์— ์ถ”๊ฐ€:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["path/to/db-mcp/dist/index.js"],
      "env": {
        "DB_TYPE": "postgresql",
        "POSTGRES_HOST": "localhost",
        "POSTGRES_PORT": "5432",
        "POSTGRES_DB": "mydb",
        "POSTGRES_USER": "readonly_user",
        "POSTGRES_PASSWORD": "secure_password"
      }
    }
  }
}

๐Ÿ’ก ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

๐Ÿข MSA ํ™˜๊ฒฝ์—์„œ์˜ ํ™œ์šฉ

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ถ„์„

๐Ÿ’ฌ "user-service์™€ order-service์—์„œ ์ตœ๊ทผ 1์ฃผ์ผ ๋™์•ˆ ์‹ ๊ทœ ๊ฐ€์ž…ํ•œ ์‚ฌ์šฉ์ž๋“ค์˜ ์ฃผ๋ฌธ ํŒจํ„ด์„ ๋น„๊ต ๋ถ„์„ํ•ด์ค˜"

๐Ÿค– Claude๊ฐ€ ์ž๋™์œผ๋กœ:
1. user-service DB์—์„œ ์ตœ๊ทผ ๊ฐ€์ž…์ž ์กฐํšŒ
2. order-service DB์—์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋“ค์˜ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ ์กฐํšŒ
3. ํฌ๋กœ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„์„์œผ๋กœ ํŒจํ„ด ์‹๋ณ„
4. ํ†ตํ•ฉ ๋ฆฌํฌํŠธ ์ƒ์„ฑ

์ „์ฒด ์ธํ”„๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ’ฌ "production ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ์ฐพ์•„์ค˜"

๐Ÿค– ๊ฒฐ๊ณผ:
- 5๊ฐœ ํ”„๋กœ๋•์…˜ DB ์ค‘ 4๊ฐœ ์ •์ƒ, 1๊ฐœ ๊ฒฝ๊ณ 
- analytics-db: ์‘๋‹ต์‹œ๊ฐ„ 3.2์ดˆ (ํ‰๊ท ์˜ 2๋ฐฐ)
- ์—ฐ๊ฒฐ ํ’€ ์‚ฌ์šฉ๋ฅ : order-service 90% (์ฃผ์˜ ํ•„์š”)

๐Ÿ” ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ๋ถ„์„

๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฒ€์‚ฌ

๐Ÿ’ฌ "๋ชจ๋“  ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์—์„œ ์ด๋ฉ”์ผ ํ˜•์‹์ด ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์ค˜"

๐Ÿค– ์ž๋™ ์‹คํ–‰:
- user-service.users ํ…Œ์ด๋ธ”: ์ด๋ฉ”์ผ ํŒจํ„ด ๊ฒ€์ฆ
- auth-service.profiles ํ…Œ์ด๋ธ”: ์ด๋ฉ”์ผ ์ค‘๋ณต ๊ฒ€์‚ฌ
- notification-service.recipients ํ…Œ์ด๋ธ”: ์œ ํšจํ•˜์ง€ ์•Š์€ ๋„๋ฉ”์ธ ํƒ์ง€

์Šคํ‚ค๋งˆ ์˜ํ–ฅ๋„ ๋ถ„์„

๐Ÿ’ฌ "user_id ์ปฌ๋Ÿผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ์ฐพ์•„์„œ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์˜ํ–ฅ๋„๋ฅผ ๋ถ„์„ํ•ด์ค˜"

๐Ÿค– ๊ฒฐ๊ณผ:
- ์ง์ ‘ ์ฐธ์กฐ: 15๊ฐœ ํ…Œ์ด๋ธ”
- ๊ฐ„์ ‘ ์ฐธ์กฐ: 8๊ฐœ ํ…Œ์ด๋ธ”
- ์˜ํ–ฅ ๋ฐ›๋Š” ์„œ๋น„์Šค: user, order, payment, notification, analytics
- ๊ถŒ์žฅ์‚ฌํ•ญ: ๋‹จ๊ณ„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš ํ•„์š”

๐Ÿš€ ์ž์—ฐ์–ด ์ฟผ๋ฆฌ

๋น„์ฆˆ๋‹ˆ์Šค ์งˆ๋ฌธ โ†’ SQL

๐Ÿ’ฌ "์ง€๋‚œ ๋‹ฌ ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ƒํ’ˆ ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋ญ์•ผ?"

๐Ÿค– ์ƒ์„ฑ๋œ SQL:
SELECT c.name, COUNT(oi.product_id) as sales_count
FROM order_items oi
JOIN products p ON oi.product_id = p.id
JOIN categories c ON p.category_id = c.id
WHERE oi.created_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY c.id
ORDER BY sales_count DESC
LIMIT 1

๋ณต์žกํ•œ ๋ถ„์„ ์ฟผ๋ฆฌ

๐Ÿ’ฌ "๊ฐ ์ง€์—ญ๋ณ„๋กœ ์›”๋ณ„ ๋งค์ถœ ์ถ”์ด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ์ „๋…„ ๋™๊ธฐ ๋Œ€๋น„ ์„ฑ์žฅ๋ฅ ๋„ ๊ณ„์‚ฐํ•ด์ค˜"

๐Ÿค– ์ž๋™์œผ๋กœ:
1. ์ง€์—ญ, ๋‚ ์งœ๋ณ„ ๋งค์ถœ ์ง‘๊ณ„
2. ์ „๋…„ ๋™๊ธฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ
3. ์„ฑ์žฅ๋ฅ  ๊ณ„์‚ฐ
4. ์‹œ๊ฐํ™” ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ ์ •๋ฆฌ

๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

์„ฑ๋Šฅ ์ด์Šˆ ํƒ์ง€

๐Ÿ’ฌ "ํ˜„์žฌ ๋А๋ฆฌ๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฐพ์•„์ค˜"

๐Ÿค– ์‹ค์‹œ๊ฐ„ ๋ถ„์„:
- order-service: 3๊ฐœ ์ฟผ๋ฆฌ๊ฐ€ 10์ดˆ ์ด์ƒ ์‹คํ–‰ ์ค‘
- analytics-db: ๋Œ€์šฉ๋Ÿ‰ ์ง‘๊ณ„ ์ฟผ๋ฆฌ ์ง„ํ–‰ ์ค‘ (์ •์ƒ)
- user-service: ๋ชจ๋“  ์ฟผ๋ฆฌ 1์ดˆ ์ด๋‚ด (์–‘ํ˜ธ)

์šฉ๋Ÿ‰ ๊ด€๋ฆฌ

๐Ÿ’ฌ "๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”๋ณ„ ํฌ๊ธฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ํ…Œ์ด๋ธ”์„ ์ถ”์ฒœํ•ด์ค˜"

๐Ÿค– ๋ถ„์„ ๊ฒฐ๊ณผ:
- log_events ํ…Œ์ด๋ธ”: 15GB (ํŒŒํ‹ฐ์…”๋‹ ๊ถŒ์žฅ)
- user_sessions ํ…Œ์ด๋ธ”: 8GB (TTL ์„ค์ • ๊ถŒ์žฅ)
- temp_data ํ…Œ์ด๋ธ”: 3GB (์ •๋ฆฌ ์Šค์ผ€์ค„ ํ•„์š”)

๐Ÿ—บ ๊ฐœ๋ฐœ ๋กœ๋“œ๋งต & ๋ฒ„์ „ ํžˆ์Šคํ† ๋ฆฌ

โœ… ์™„๋ฃŒ๋œ ๊ธฐ๋Šฅ (v1.0)

  • Phase 1: ๊ธฐ๋ณธ MCP ์„œ๋ฒ„ + MySQL ์—ฐ๊ฒฐ

  • Phase 2: ์ฟผ๋ฆฌ ์‹คํ–‰ ๋„๊ตฌ ๊ตฌํ˜„

  • Phase 3: ์Šคํ‚ค๋งˆ ์ •๋ณด ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€

  • Phase 4: PostgreSQL ์ง€์› ํ™•์žฅ

  • Phase 5: ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์› (MSA ๋Œ€์‘)

  • Phase 6: ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ธฐ๋Šฅ

  • Phase 7: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๐Ÿšง ๊ฐœ๋ฐœ ์˜ˆ์ • (v1.1+)

Phase 8: ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์›

  • SQLite ์ง€์› (๋กœ์ปฌ ๊ฐœ๋ฐœ, ์ž„๋ฒ ๋””๋“œ ํ™˜๊ฒฝ)

  • ClickHouse ์ง€์› (๋Œ€์šฉ๋Ÿ‰ ๋ถ„์„ ์›Œํฌ๋กœ๋“œ)

  • MongoDB ์ง€์› (NoSQL ๋ฌธ์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)

  • Redis ์ง€์› (์บ์‹œ ๋ฐ ์„ธ์…˜ ๋ฐ์ดํ„ฐ ๋ถ„์„)

Phase 9: AI ๊ธฐ๋Šฅ ๊ฐ•ํ™”

  • ๊ณ ๊ธ‰ ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ: GPT-4 ๊ธฐ๋ฐ˜ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ƒ์„ฑ

  • ์ž๋™ ์ธ๋ฑ์Šค ์ถ”์ฒœ: ์ฟผ๋ฆฌ ํŒจํ„ด ๋ถ„์„ ๊ธฐ๋ฐ˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ์ด์ƒ ํƒ์ง€: ML ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ฐ ๋ณด์•ˆ ์ด์Šˆ ๊ฐ์ง€

  • ์ฟผ๋ฆฌ ์ตœ์ ํ™”: ์‹คํ–‰ ๊ณ„ํš ๋ถ„์„ ๋ฐ ์ž๋™ ๊ฐœ์„  ์ œ์•ˆ

Phase 10: ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ธฐ๋Šฅ

  • RBAC (Role-Based Access Control): ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ

  • ๊ฐ์‚ฌ ๋ฐ ์ปดํ”Œ๋ผ์ด์–ธ์Šค: GDPR, SOX ๋“ฑ ๊ทœ์ • ์ค€์ˆ˜

  • ๊ณ ๊ฐ€์šฉ์„ฑ: ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

  • ๋ฉ”ํŠธ๋ฆญ & ์•Œ๋ฆผ: Prometheus, Grafana ์—ฐ๋™

Phase 11: ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

  • GUI ๊ด€๋ฆฌ ๋„๊ตฌ: ์›น ๊ธฐ๋ฐ˜ ์„ค์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ

  • CLI ๋„๊ตฌ: ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ ์ž๋™ํ™”

  • Docker ์ปจํ…Œ์ด๋„ˆ: ์›ํด๋ฆญ ๋ฐฐํฌ ์ง€์›

  • Kubernetes Operator: ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฐํฌ

๐Ÿ“Š ์„ฑ๋Šฅ ๋ชฉํ‘œ (v2.0)

  • ์‘๋‹ต ์‹œ๊ฐ„: ๋‹จ์ˆœ ์ฟผ๋ฆฌ < 100ms, ๋ณต์žกํ•œ ๋ถ„์„ < 5s

  • ๋™์‹œ ์—ฐ๊ฒฐ: 1000+ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋™์‹œ ๊ด€๋ฆฌ

  • ์ฒ˜๋ฆฌ๋Ÿ‰: 10,000+ qps (queries per second)

  • ๊ฐ€์šฉ์„ฑ: 99.9% ์—…ํƒ€์ž„ ๋ณด์žฅ

๐Ÿค ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ

์šฐ๋ฆฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ

  • GitHub Issues๋ฅผ ํ†ตํ•ด ๋ฒ„๊ทธ ์‹ ๊ณ 

  • ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ์ œ ์ฝ”๋“œ ํฌํ•จ

  • ํ™˜๊ฒฝ ์ •๋ณด (OS, Node.js ๋ฒ„์ „, DB ํƒ€์ž…) ๋ช…์‹œ

๐Ÿ’ก ๊ธฐ๋Šฅ ์ œ์•ˆ

  • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์› ์š”์ฒญ

  • MCP ๋„๊ตฌ ๊ฐœ์„  ์•„์ด๋””์–ด

  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ œ์•ˆ

๐Ÿ”ง ๊ฐœ๋ฐœ ์ฐธ์—ฌ

  1. Fork & Clone: ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•˜๊ณ  ๋กœ์ปฌ์— ํด๋ก 

  2. ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ: git checkout -b feature/your-feature

  3. ๊ฐœ๋ฐœ: TypeScript, Jest ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ํ•„์ˆ˜

  4. ํ…Œ์ŠคํŠธ: npm test && npm run build ํ†ต๊ณผ ํ™•์ธ

  5. PR ์ƒ์„ฑ: ์ƒ์„ธํ•œ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ Pull Request

๐Ÿ“š ๋ฌธ์„œํ™”

  • README ๊ฐœ์„ 

  • ์ฝ”๋“œ ์ฃผ์„ ์ถ”๊ฐ€

  • ์‚ฌ์šฉ ์˜ˆ์‹œ ํ™•์žฅ

  • ๋‹ค๊ตญ์–ด ๋ฒˆ์—ญ (English, ํ•œ๊ตญ์–ด)

๐Ÿ”’ ๋ณด์•ˆ ์ด์Šˆ

๋ฏผ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋Š” public issue ๋Œ€์‹  ์ง์ ‘ ์—ฐ๋ฝํ•ด ์ฃผ์„ธ์š”.

๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js: โ‰ฅ 18.0.0

  • NPM: โ‰ฅ 8.0.0

  • TypeScript: โ‰ฅ 5.0.0

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: MySQL 5.7+ ๋˜๋Š” PostgreSQL 12+

๐Ÿ— ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Claude AI Client                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                Model Context Protocol                       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚              Multi-Database MCP Server                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Connection Mgr  โ”‚  โ”‚  Query Executor  โ”‚  โ”‚ Schema Mgr  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚              Database Adapter Layer                         โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  MySQL Adapter  โ”‚  โ”‚PostgreSQL Adapterโ”‚  โ”‚ Future DBs  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                    Database Layer                           โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ User Service DB โ”‚  โ”‚ Order Service DB โ”‚  โ”‚Analytics DB โ”‚ โ”‚
โ”‚  โ”‚     (MySQL)     โ”‚  โ”‚   (PostgreSQL)   โ”‚  โ”‚(PostgreSQL) โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŒŸ ํ›„์› ๋ฐ ์ง€์›

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด:

  • โญ GitHub Star ๋ˆŒ๋Ÿฌ์ฃผ๊ธฐ

  • ๐Ÿ› ์ด์Šˆ ๋ฆฌํฌํŠธ ๋ฐ ํ”ผ๋“œ๋ฐฑ

  • ๐Ÿ’ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์‚ฌ์šฉ ๊ฒฝํ—˜ ๊ณต์œ 

  • ๐Ÿ”— SNS์—์„œ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๐Ÿ“œ ๋ผ์ด์„ ์Šค

MIT License - ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ, ์ˆ˜์ •, ๋ฐฐํฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

  • Anthropic: Model Context Protocol ๋ฐ Claude ์ œ๊ณต

  • ์ปค๋ฎค๋‹ˆํ‹ฐ: ํ”ผ๋“œ๋ฐฑ๊ณผ ๊ธฐ์—ฌ๋กœ ํ”„๋กœ์ ํŠธ ๋ฐœ์ „์— ๋„์›€

  • ์˜คํ”ˆ์†Œ์Šค: mysql2, pg, TypeScript ๋“ฑ ํ›Œ๋ฅญํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค


๐Ÿ“ž ๋ฌธ์˜ ๋ฐ ์ง€์›

  • GitHub Issues: ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ, ๊ธฐ๋Šฅ ์š”์ฒญ

  • GitHub Discussions: ์‚ฌ์šฉ๋ฒ• ์งˆ๋ฌธ, ์•„์ด๋””์–ด ๊ณต์œ 

  • Documentation: ์ž์„ธํ•œ API ๋ฌธ์„œ ๋ฐ ๊ฐ€์ด๋“œ

Enterprise Support๊ฐ€ ํ•„์š”ํ•˜์‹ ๊ฐ€์š”? ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ, ์ปค์Šคํ…€ ๊ฐœ๋ฐœ, ๊ธฐ์ˆ  ์ง€์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ„๋„ ๋ฌธ์˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ Database MCP Server - AI ์‹œ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ†ตํ•ฉ ์†”๋ฃจ์…˜

Made with โค๏ธ for the AI & Database community

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tomtomjskim/db-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server