테마 전환

MCP 실전 튜토리얼: Cursor에서 데이터베이스 조회와 API 호출을 직접 수행하는 완벽 설정 가이드

Easton editorial illustration: multi-agent workbench

지난주 수요일 오후, 데이터 분석 기능을 만들다가 12월 신규 사용자 수를 확인해야 했습니다. 예전 같으면 DataGrip으로 전환해 SQL을 작성하고 실행한 뒤 결과를 복사해 코드에 다시 붙여 넣었을 겁니다. 간단한 조회 하나 때문에 창을 세 번이나 오가며 2분을 낭비했습니다.

그때 문득 이런 생각이 들었습니다. 매일 Cursor로 코드를 작성하고 AI가 함수 작성과 버그 수정까지 도와주는데, 데이터베이스도 직접 조회하게 할 수 없을까?

MCP를 설정한 지금은 Cursor에서 “12월 신규 사용자 수를 조회해 줘”라고 바로 묻습니다. AI가 즉시 결과를 알려 주니 창을 바꾸거나 SQL을 작성할 필요가 없고 효율이 두 배로 높아졌습니다.

처음 MCP를 들었을 때는 저도 한동안 막막했습니다. Server, Client, Protocol 같은 용어는 거창하게 들리는데, 온라인 튜토리얼은 지나치게 이론적이거나 Hello World로 끝날 만큼 단순했습니다. 이틀 동안 시행착오를 겪고 나서야 설정 방법을 제대로 이해했습니다.

그래서 이 글에서는 가장 쉬운 말로 MCP를 단계별로 설정해 AI가 데이터베이스를 직접 조회하고 API를 호출하도록 만드는 방법을 설명합니다. 15분이면 설정을 마치고 바로 사용할 수 있습니다.

MCP란 무엇이며 왜 필요한가

쉬운 말로 설명하는 MCP

MCP는 Model Context Protocol(모델 컨텍스트 프로토콜)의 약자입니다. 학술적으로 들리지만, 쉽게 말하면 AI에 ‘도구 벨트’를 채워 주는 것입니다.

기존 AI는 아주 똑똑한 조언자와 같았습니다. 질문하면 조언하고 코드를 작성해 주지만 스스로 어떤 작업도 실행하지 못합니다. 제안을 복사한 뒤 직접 실행해야 했습니다.

MCP를 사용하면 AI가 진짜 비서로 바뀝니다. 조언만 하는 데 그치지 않고 데이터베이스 조회, API 호출, 파일 읽기 같은 작업을 직접 처리할 수 있습니다.

기존 방식 vs MCP 방식

지난달 매출이 가장 높은 제품을 알고 싶다고 가정해 보겠습니다.

기존 방식(MCP 없음):

  1. 사용자: AI에 조회 SQL 작성을 요청
  2. AI: SQL 코드 제공
  3. 사용자: SQL을 복사하고 데이터베이스 클라이언트로 전환
  4. 사용자: SQL을 붙여 넣고 실행
  5. 사용자: 조회 결과 복사
  6. 사용자: Cursor로 돌아와 AI에 결과 붙여 넣기
  7. AI: 결과를 바탕으로 분석 계속

전체 과정에서 세 개의 창을 계속 오가야 하므로 번거롭습니다.

MCP 방식:

  1. 사용자: AI에 “지난달 매출이 가장 높은 제품은 무엇이야?”라고 직접 질문
  2. AI: 데이터베이스를 자동으로 조회하고 바로 답변

한 번에 끝납니다. 효율은 적어도 5배 차이 납니다.

핵심 개념(3분이면 이해)

MCP 구조는 세 가지 역할로 이루어져 있어 간단합니다.

MCP Client(도구를 사용하는 AI 두뇌)
Cursor나 Claude Desktop 같은 AI 도구입니다. 요청을 이해하고 도구 사용 여부를 판단합니다.

MCP Server(도구를 제공하는 서비스)
AI에 특정 기능을 제공하도록 설정하는 서비스입니다. 데이터베이스 MCP Server는 데이터베이스 조회 기능을, API MCP Server는 인터페이스 호출 기능을 제공합니다.

Tools(구체적인 기능)
각 MCP Server가 외부에 제공하는 기능입니다. 데이터베이스 Server라면 ‘테이블 구조 조회’, ‘SELECT 쿼리 실행’, ‘행 수 집계’ 같은 도구가 있을 수 있습니다.

AI를 작업자(Client), MCP Server를 렌치와 망치(Tools)가 들어 있는 공구함이라고 생각하면 됩니다. 못을 박으라고 하면 AI는 공구함에서 망치를 꺼내 사용합니다.

이 세 가지 개념을 이해하면 이후 설정이 어떤 작업인지 알 수 있습니다.

실전 사례 1 - SQLite 데이터베이스 연동

SQLite부터 시작하는 이유

SQLite의 가장 큰 장점은 단순함입니다. 데이터베이스 서비스를 설치하거나 포트를 설정할 필요 없이 파일 하나가 데이터베이스가 됩니다. 연습용으로 가장 좋습니다.

과정에 익숙해지면 PostgreSQL이나 MySQL로 바꿔도 방법은 같습니다.

준비: 테스트 데이터베이스 만들기

조회 결과를 테스트할 수 있도록 먼저 데이터를 만듭니다. test.db 파일을 생성하세요.

-- 사용자 테이블 생성
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE,
    created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

-- 주문 테이블 생성
CREATE TABLE orders (
    id INTEGER PRIMARY KEY,
    user_id INTEGER,
    product_name TEXT,
    amount REAL,
    order_date TEXT DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 테스트 사용자 삽입
INSERT INTO users (name, email) VALUES
    ('张三', '[email protected]'),
    ('李四', '[email protected]'),
    ('王五', '[email protected]');

-- 테스트 주문 삽입
INSERT INTO orders (user_id, product_name, amount) VALUES
    (1, 'MacBook Pro', 12999.00),
    (1, 'AirPods', 1299.00),
    (2, 'iPhone 15', 5999.00),
    (3, 'iPad Air', 4799.00),
    (3, 'Apple Watch', 2999.00);

DB Browser나 명령줄 등 어떤 SQLite 도구로도 이 SQL을 실행할 수 있으며, Python을 직접 사용해도 됩니다.

import sqlite3

conn = sqlite3.connect('test.db')
cursor = conn.cursor()

# 위 SQL 문 실행
# ...

conn.commit()
conn.close()

MCP Server 설정(핵심)

이 튜토리얼에서 가장 중요한 부분입니다. MCP 설정 파일은 필요에 따라 다음 두 위치 중 하나에 둡니다.

전역 설정(모든 프로젝트에서 사용):

  • Windows: C:\Users\사용자명\.cursor\mcp.json
  • Mac/Linux: ~/.cursor/mcp.json

프로젝트 설정(현재 프로젝트에만 적용):

  • 프로젝트 루트의 .cursor/mcp.json

먼저 프로젝트 설정으로 연습해 정상 작동하는지 확인한 뒤 전역 설정으로 옮기는 것을 권합니다.

.cursor/mcp.json 파일을 만들고 다음 내용을 입력합니다.

{
  "mcpServers": {
    "sqlite": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sqlite",
        "--db-path",
        "D:/path/to/your/test.db"
      ]
    }
  }
}

핵심 설명(많은 사람이 여기서 막힙니다):

  1. mcpServers: 바꾸면 안 되는 고정 필드명입니다.
  2. "sqlite": Server에 붙이는 이름으로 자유롭게 정할 수 있으며 AI에도 이 이름이 표시됩니다.
  3. command: "npx": 직접 설치하지 않고 npx로 MCP Server를 실행합니다.
  4. args: 명령에 전달하는 인수입니다.
    • -y: 설치 자동 승인
    • @modelcontextprotocol/server-sqlite: 공식 SQLite MCP Server 패키지
    • --db-path: 데이터베이스 파일 경로(반드시 절대 경로!)

Windows 사용자 주의: 경로에는 슬래시 / 또는 이중 백슬래시 \\를 사용해야 하며 단일 백슬래시는 사용할 수 없습니다.

  • D:/projects/test.db
  • D:\\projects\\test.db
  • D:\projects\test.db(오류 발생)

Cursor 재시작 및 설정 확인

설정 파일을 저장한 뒤에는 창만 닫지 말고 Cursor를 완전히 종료한 후 다시 실행해야 합니다.

재시작 후 Cursor 설정에서 MCP 적용 여부를 확인할 수 있습니다.

  1. 설정 열기(Ctrl+,)
  2. “MCP” 검색
  3. 설정한 SQLite Server가 표시되는지 확인

더 간단히 확인하려면 AI에 데이터베이스 관련 질문을 해서 MCP를 호출하는지 보면 됩니다.

실전 시연

설정에 성공하면 다음처럼 사용할 수 있습니다.

조회 1: 테이블 확인

사용자: 데이터베이스에 어떤 테이블이 있어?
AI: [MCP 조회 호출] users와 orders, 두 개의 테이블이 있습니다.

조회 2: 사용자 수 집계

사용자: 전체 사용자 수를 조회해 줘.
AI: [SELECT COUNT(*) FROM users 실행] 총 3명입니다.

조회 3: 특정 사용자의 주문 조회

사용자: 张三은 무엇을 샀어?
AI: [조인 쿼리 실행] 张三이 구매한 제품:
- MacBook Pro(12,999위안)
- AirPods(1,299위안)
합계: 14,298위안

조회 4: 집계 분석

사용자: 누가 가장 많이 소비했어?
AI: [GROUP BY 쿼리 실행] 张三이 총 14,298위안으로 가장 많이 소비했습니다.

SQL을 직접 작성하지 않아도 AI가 자동으로 처리합니다. 이것이 MCP의 힘입니다.

자주 발생하는 문제 해결

문제 1: MCP Server가 시작되지 않음
증상: AI가 답변은 하지만 데이터베이스를 호출하지 않음
해결:

  • 설정 파일 문법 확인(JSON 형식이 올바르고 불필요한 쉼표가 없어야 함)
  • Cursor를 완전히 재시작했는지 확인
  • Cursor 출력 로그에서 “MCP” 관련 오류 검색

문제 2: 데이터베이스 파일을 찾지 못함
증상: “cannot open database file” 오류
해결:

  • 상대 경로가 아닌 절대 경로인지 확인
  • Windows 사용자는 슬래시 방향 확인
  • 파일이 실제로 있는지 ls 또는 dir 명령으로 확인

문제 3: 권한 오류
증상: Permission denied
해결:

  • 데이터베이스 파일의 읽기 및 쓰기 권한 확인
  • Windows: 파일을 마우스 오른쪽 버튼으로 클릭 → 속성 → 보안에서 현재 사용자에게 읽기 권한이 있는지 확인

디버깅 팁: VS Code(Cursor)에서 “출력” 패널(View → Output)을 열고 “MCP” 채널을 선택하면 자세한 오류 로그를 볼 수 있습니다.

실전 사례 2 - PostgreSQL 데이터베이스 연동

고급 환경: 운영 데이터베이스

SQLite는 학습과 소규모 프로젝트에 적합하지만 실제 업무에서는 PostgreSQL이나 MySQL 같은 운영급 데이터베이스를 사용할 수 있습니다. 설정 방식은 같고 인수만 다릅니다.

여기서는 PostgreSQL을 예로 들지만 MySQL도 비슷합니다.

설정 차이: 연결 정보와 환경 변수

PostgreSQL은 C/S 구조라 연결 정보가 필요합니다. 하지만 비밀번호를 설정 파일에 직접 쓰면 절대 안 됩니다. 가장 흔한 보안 실수입니다.

올바른 방법은 환경 변수를 사용하는 것입니다.

먼저 프로젝트 루트에 .env 파일을 만들고 .gitignore에 추가합니다.

POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DATABASE=myapp
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=your_secure_password

그런 다음 .cursor/mcp.json을 설정합니다.

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "--stdio"
      ],
      "env": {
        "POSTGRES_HOST": "${POSTGRES_HOST}",
        "POSTGRES_PORT": "${POSTGRES_PORT}",
        "POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
        "POSTGRES_USER": "${POSTGRES_USER}",
        "POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
      }
    }
  }
}

핵심 사항:

  • --stdio: 표준 입출력으로 통신한다는 뜻입니다(로컬 방식).
  • env: 환경 변수 설정이며 Cursor가 프로젝트의 .env 파일을 자동으로 읽습니다.

보안 모범 사례(매우 중요)

AI에 데이터베이스 권한을 줄 때는 안전이 최우선입니다. 제가 겪은 실수를 반복하지 마세요.

1. 읽기 전용 계정 사용

AI에 쓰기 권한을 주지 마세요. AI가 의도를 잘못 이해해 DELETEUPDATE를 실행하면 큰 문제가 생깁니다.

읽기 전용 사용자를 만듭니다.

-- 읽기 전용 사용자 생성
CREATE USER readonly_user WITH PASSWORD 'secure_password';

-- SELECT 권한만 부여
GRANT CONNECT ON DATABASE myapp TO readonly_user;
GRANT USAGE ON SCHEMA public TO readonly_user;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

-- 이후 생성되는 테이블에도 SELECT 권한만 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly_user;

2. 접근 범위 제한

사용자 비밀번호나 결제 정보 같은 민감한 테이블이 있다면 AI가 접근하지 못하게 하세요.

-- 민감한 테이블의 접근 권한 회수
REVOKE SELECT ON TABLE user_passwords FROM readonly_user;
REVOKE SELECT ON TABLE payment_info FROM readonly_user;

3. 운영 환경에서는 읽기 복제본 사용

운영 환경에서 MCP를 꼭 사용해야 한다면(먼저 사용하지 않는 것을 권합니다) 적어도 주 데이터베이스가 아닌 읽기 복제본(Read Replica)에 연결하세요. AI의 쿼리가 너무 복잡해 데이터베이스에 부하를 주더라도 온라인 서비스에는 영향을 덜 줍니다.

실전 시연

설정을 마치면 SQLite로 하기 어려운 작업도 할 수 있습니다.

복잡한 조회: 여러 테이블 JOIN

사용자: 부서별 평균 급여를 집계해 줘.
AI: [복잡한 쿼리 실행]
SELECT d.name, AVG(e.salary) as avg_salary
FROM departments d
JOIN employees e ON d.id = e.department_id
GROUP BY d.name
ORDER BY avg_salary DESC;

결과:
- 기술부: 평균 15,000위안
- 제품부: 평균 12,000위안
- 운영부: 평균 10,000위안

성능 분석: 실행 계획 확인

사용자: 이 조회가 왜 이렇게 느린지 확인해 줘.
AI: [EXPLAIN 실행] 인덱스를 사용하지 않는 것을 발견했습니다. user_id 필드에 인덱스를 추가하는 것을 권합니다.

데이터 분석: 보고서 생성

사용자: 지난 7일간 일별 신규 사용자 수를 알려 줘.
AI: [시간 범위 쿼리 실행]
2024-01-10: 45명
2024-01-11: 52명
...

자주 발생하는 문제

문제 1: 연결 시간 초과
증상: timeout connecting to database
해결:

  • 데이터베이스가 실행 중인지 pg_isready 명령으로 확인
  • 방화벽에서 연결을 허용하는지 확인
  • host와 port 설정이 올바른지 확인

문제 2: 인증 실패
증상: authentication failed
해결:

  • 사용자명과 비밀번호가 올바른지 확인
  • PostgreSQL의 pg_hba.conf가 해당 사용자의 연결을 허용하는지 확인
  • psql 명령줄 도구로 직접 연결해 자격 증명이 올바른지 확인

문제 3: 권한 부족
증상: permission denied for table xxx
해결:

  • 읽기 전용 권한이 적용되었다는 뜻이므로 좋은 신호일 수도 있음
  • 해당 테이블을 꼭 조회해야 한다면 관리자 계정으로 위의 GRANT 명령 실행

실전 사례 3 - API 호출 연동

활용 환경: AI가 외부 서비스를 호출하게 만들기

데이터베이스는 내부 데이터 조회에 쓰지만 외부 API에 필요한 데이터가 있을 때도 있습니다. 예를 들면 다음과 같습니다.

  • GitHub 저장소의 star 수와 issue 목록 조회
  • 회사 내부 마이크로서비스 API 호출
  • 날씨, 환율 등 실시간 데이터 가져오기

MCP를 사용하면 AI가 이런 인터페이스도 호출할 수 있습니다.

HTTP 유형의 MCP Server 설정

API 호출은 데이터베이스와 달라 MCP Server 패키지를 설치할 필요 없이 HTTP 유형을 직접 설정하면 됩니다.

GitHub API를 예로 들어 .cursor/mcp.json을 설정해 보겠습니다.

{
  "mcpServers": {
    "github-api": {
      "url": "https://api.github.com",
      "headers": {
        "Accept": "application/vnd.github.v3+json",
        "User-Agent": "Cursor-MCP-Client"
      }
    }
  }
}

GitHub 비공개 저장소처럼 API 인증이 필요하다면 token을 추가합니다.

{
  "mcpServers": {
    "github-api": {
      "url": "https://api.github.com",
      "headers": {
        "Accept": "application/vnd.github.v3+json",
        "Authorization": "Bearer ${GITHUB_TOKEN}",
        "User-Agent": "Cursor-MCP-Client"
      }
    }
  }
}

마찬가지로 token은 .env 파일에 넣습니다.

GITHUB_TOKEN=ghp_your_personal_access_token_here

GitHub Token 발급 방법:

  1. GitHub → Settings → Developer settings 열기
  2. Personal access tokens → Tokens (classic)
  3. Generate new token → 필요한 권한(repo, user 등) 선택
  4. token 복사(한 번만 표시되므로 반드시 저장)

실전 시연

설정을 마치면 AI가 API를 직접 호출하게 할 수 있습니다.

저장소 정보 조회

사용자: facebook/react 저장소의 star 수를 조회해 줘.
AI: [GET /repos/facebook/react 호출]
React 저장소에는 현재 star 218,345개와 fork 79,234개가 있습니다.

최신 Issue 가져오기

사용자: facebook/react의 최근 issue를 확인해 줘.
AI: [GET /repos/facebook/react/issues?state=open&per_page=5 호출]
최근 issue 5개:
1. [Bug] 엄격 모드에서 useEffect가 두 번 실행됨
2. [Feature] Suspense의 새 API 지원
3. [Question] 대규모 목록 렌더링 최적화 방법
...

커밋 빈도 분석

사용자: 지난 일주일 동안 facebook/react에 커밋이 몇 번 있었어?
AI: [GET /repos/facebook/react/commits?since=... 호출]
지난 7일 동안 커밋이 43회 있었으며 주요 기여자는 ...입니다.

사용자 정의 API 설정

회사 내부 API도 같은 방식으로 설정할 수 있습니다. 내부 사용자 서비스가 있다고 가정해 보겠습니다.

{
  "mcpServers": {
    "user-service": {
      "url": "https://api.yourcompany.com/user-service",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_API_KEY}",
        "Content-Type": "application/json"
      }
    }
  }
}

이제 AI에 다음과 같이 질문할 수 있습니다.

사용자: 사용자 ID 12345의 주문 내역을 조회해 줘.
AI: [내부 API 호출] 사용자 12345는 지난 30일 동안 8건을 주문했고 총 3,200위안을 소비했습니다.

주의 사항

API 속도 제한
많은 API에는 호출 빈도 제한이 있습니다. GitHub 무료 버전은 시간당 60회만 호출할 수 있습니다. AI가 과도하게 호출하면 쉽게 제한에 걸립니다.

해결 방법:

  • 인증 token 사용(GitHub 인증 후 시간당 5,000회로 한도 증가)
  • AI에 “API 호출을 최대한 줄이고 재사용할 수 있는 결과는 재사용해 줘”라고 요청

보안 위험
AI에 API 호출 권한을 준다는 것은 외부 서비스를 조작할 권한을 주는 것과 같습니다. 다음을 반드시 지키세요.

  • 읽기 전용 token 사용(쓰기 권한 부여 금지)
  • token 정기 교체
  • API 호출 로그 모니터링

고급 팁과 모범 사례

여러 MCP Server 함께 사용하기

한 프로젝트에서 여러 MCP Server를 동시에 설정할 수 있습니다. AI가 적절한 도구를 자동으로 선택합니다.

제가 사용하는 설정의 예입니다.

{
  "mcpServers": {
    "sqlite": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "D:/projects/myapp/data.db"]
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
      "env": {
        "POSTGRES_HOST": "${POSTGRES_HOST}",
        "POSTGRES_PORT": "${POSTGRES_PORT}",
        "POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
        "POSTGRES_USER": "${POSTGRES_USER}",
        "POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
      }
    },
    "github-api": {
      "url": "https://api.github.com",
      "headers": {
        "Authorization": "Bearer ${GITHUB_TOKEN}",
        "Accept": "application/vnd.github.v3+json"
      }
    }
  }
}

이렇게 설정한 뒤 AI에 다음과 같이 물을 수 있습니다.

사용자: 로컬 SQLite 데이터베이스의 사용자 수를 조회한 뒤 GitHub에서 우리 저장소의 star 수도 확인해 줘.
AI: [sqlite MCP 자동 선택] 로컬 사용자는 245명입니다.
    [github-api MCP 자동 선택] 저장소의 star는 1.2k개입니다.

AI가 질문 내용에 따라 사용할 도구를 스스로 판단합니다. 꽤 영리합니다.

프로젝트 설정 vs 전역 설정

두 설정 방식은 용도가 다릅니다.

프로젝트 설정(.cursor/mcp.json):

  • 프로젝트 전용 데이터베이스와 API에 적합
  • 장점: 프로젝트끼리 간섭하지 않고 설정을 Git에 커밋할 수 있음(민감한 정보 제외 필수)
  • 단점: 프로젝트마다 설정해야 함

전역 설정(~/.cursor/mcp.json):

  • 파일 시스템, 범용 API 같은 공용 도구에 적합
  • 장점: 한 번 설정하면 모든 프로젝트에서 사용 가능
  • 단점: 혼란스러워지기 쉽고 설정 파일이 프로젝트 밖에 있어 팀 협업에 불편함

권장 방식:

  • 데이터베이스, 프로젝트 전용 API → 프로젝트 설정
  • GitHub, 날씨 같은 범용 API → 전역 설정
  • 개발이 끝나면 프로젝트 설정을 문서로 정리해 팀원이 쉽게 복사하도록 하기

성능 최적화

MCP는 호출할 때마다 실제 조회나 API 요청을 실행하므로 자주 호출하면 느려질 수 있습니다. 다음 방법으로 최적화할 수 있습니다.

1. AI가 결과를 캐시하도록 유도

사용자: 사용자 목록을 조회해 줘. 이 결과는 나중에 쓸 테니 기억해 둬.
AI: [조회하고 기억] 사용자는 245명입니다...

사용자: 방금 확인한 245명 중 VIP는 몇 명이야?
AI: [다시 조회하지 않고 이전 결과를 바탕으로 직접 분석]

2. 조회 복잡도 제한
AI가 지나치게 복잡한 쿼리를 작성하게 두지 마세요. 10단계로 중첩된 SQL을 생성한다면 바로 중지시키고 직접 최적화해야 합니다.

3. 데이터베이스 인덱스 사용
AI 조회가 아무리 똑똑해도 데이터베이스 성능의 제약을 받습니다. 인덱스가 필요한 곳에는 여전히 추가해야 합니다.

디버깅 팁

문제가 생기면 다음 방법으로 빠르게 원인을 찾을 수 있습니다.

1. MCP 로그 확인
Cursor의 “출력” 패널(View → Output)에서 “MCP” 채널을 선택하면 다음 내용을 볼 수 있습니다.

  • MCP Server 시작 로그
  • 각 도구 호출의 인수와 반환값
  • 오류 스택

2. MCP 설정 테스트
설정을 작성한 뒤 먼저 간단한 질문으로 테스트합니다.

사용자: 데이터베이스 연결을 테스트하고 어떤 테이블이 있는지 알려 줘.

이 질문도 처리하지 못하면 설정에 문제가 있는 것입니다.

3. 직접 실행해 확인
AI가 조회에 실패했다고 하면 직접 한 번 실행해 보세요. AI가 생성한 SQL의 문제인지, 권한이나 연결의 문제인지 확인할 수 있습니다.

자주 발생하는 오류 코드의 의미

  • ENOENT: 파일 또는 경로 없음(경로 확인)
  • ECONNREFUSED: 연결 거부(데이터베이스가 시작되지 않았거나 포트가 잘못됨)
  • EACCES: 권한 부족(파일 또는 데이터베이스 권한)
  • ERR_MODULE_NOT_FOUND: MCP Server 패키지가 설치되지 않음(npx 명령 확인)
  • ETIMEDOUT: 시간 초과(네트워크 문제 또는 너무 느린 조회)

결론

솔직히 MCP를 설정한 뒤 코드를 작성하는 방식이 정말 달라졌습니다.

예전에는 데이터 하나를 조회하려고 세 개의 창을 오가면서 생각의 흐름이 자주 끊겼습니다. 지금은 Cursor에서 한마디만 하면 AI가 즉시 결과를 알려 주므로 코드 로직에 계속 집중할 수 있습니다.

이 글은 3,000자가 넘지만 핵심은 세 가지뿐입니다.

  1. 개념 이해: MCP는 AI에 도구를 제공해 조언뿐 아니라 실제 작업도 할 수 있게 합니다.
  2. 설정 따라 하기: SQLite로 연습하고 PostgreSQL을 운영 환경에 사용하며 API로 기능을 확장합니다.
  3. 보안 유의: 읽기 전용 권한과 환경 변수를 사용하고 운영 주 데이터베이스에는 연결하지 않습니다.

오늘 15분만 투자해 SQLite MCP 하나를 설정해 보세요. 효율이 10%나 20% 높아지는 정도가 아니라 완전히 다른 작업 방식을 경험하게 될 것입니다.

마지막으로 MCP는 아직 꽤 새로운 기술이라 공식 사양이 계속 발전하고 커뮤니티도 새로운 Server를 빠르게 추가하고 있습니다. 제가 GitHub에서 MCP Server 목록을 저장해 두었는데, 시간 날 때 살펴보면 자신에게 맞는 도구를 찾을 수 있을 겁니다.

궁금한 점이 있다면 댓글로 남겨 주세요. 답변하겠습니다.

MCP 데이터베이스 설정 전체 과정

처음부터 MCP Server를 설정해 Cursor가 데이터베이스를 직접 조회하도록 만드는 전체 단계

⏱️ Estimated time: 15 min

  1. 1

    Step 1: 설정 파일 생성: 프로젝트 설정 또는 전역 설정 선택

    설정 파일 위치를 선택합니다.

    **프로젝트 설정**(초보자에게 권장):
    • 프로젝트 루트에 .cursor/mcp.json 생성
    • 장점: 프로젝트끼리 간섭하지 않고 설정을 버전 관리할 수 있음
    • 용도: 프로젝트 전용 데이터베이스와 API

    **전역 설정**:
    • Windows: C:\Users\사용자명\.cursor\mcp.json
    • Mac/Linux: ~/.cursor/mcp.json
    • 장점: 한 번 설정하면 모든 프로젝트에서 사용 가능
    • 용도: GitHub, 날씨 등 범용 API

    생성 명령:
    • mkdir .cursor && touch .cursor/mcp.json(Mac/Linux)
    • md .cursor && type nul > .cursor\mcp.json(Windows)
  2. 2

    Step 2: SQLite 설정: 가장 간단한 입문 방법

    SQLite 설정 단계:

    1. 데이터베이스 파일(test.db) 준비
    2. .cursor/mcp.json 편집:

    ```json
    {
    "mcpServers": {
    "sqlite": {
    "command": "npx",
    "args": [
    "-y",
    "@modelcontextprotocol/server-sqlite",
    "--db-path",
    "/absolute/path/to/test.db"
    ]
    }
    }
    }
    ```

    **핵심 주의 사항**:
    • 상대 경로가 아닌 절대 경로를 사용해야 함
    • Windows에서는 슬래시 / 또는 이중 백슬래시 \\ 사용
    • npx가 MCP Server를 자동으로 내려받으므로 처음 실행할 때는 조금 느릴 수 있음
    • 설정은 Cursor를 완전히 종료한 뒤 다시 실행해야 적용됨
  3. 3

    Step 3: PostgreSQL 설정: 운영 환경의 안전 수칙

    PostgreSQL 설정 단계(안전 버전):

    1. .env 파일 생성(.gitignore에 추가):

    ```env
    POSTGRES_HOST=localhost
    POSTGRES_PORT=5432
    POSTGRES_DATABASE=myapp
    POSTGRES_USER=readonly_user
    POSTGRES_PASSWORD=your_password
    ```

    2. 읽기 전용 사용자 생성(중요):

    ```sql
    CREATE USER readonly_user WITH PASSWORD 'password';
    GRANT CONNECT ON DATABASE myapp TO readonly_user;
    GRANT USAGE ON SCHEMA public TO readonly_user;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;
    ```

    3. .cursor/mcp.json 설정:

    ```json
    {
    "mcpServers": {
    "postgres": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
    "env": {
    "POSTGRES_HOST": "${POSTGRES_HOST}",
    "POSTGRES_PORT": "${POSTGRES_PORT}",
    "POSTGRES_DATABASE": "${POSTGRES_DATABASE}",
    "POSTGRES_USER": "${POSTGRES_USER}",
    "POSTGRES_PASSWORD": "${POSTGRES_PASSWORD}"
    }
    }
    }
    }
    ```

    **보안 핵심 사항**:
    • AI에 쓰기 권한(DELETE/UPDATE)을 절대 부여하지 않기
    • 운영 환경에서는 주 데이터베이스가 아닌 읽기 복제본에 연결하기
    • 사용자 비밀번호, 결제 정보 등 민감한 테이블의 권한 회수하기
  4. 4

    Step 4: 설정 확인: MCP 작동 테스트

    설정 확인 단계:

    1. Cursor를 완전히 종료한 뒤 다시 실행(창만 닫으면 안 됨)
    2. Cursor 설정 열기(Ctrl+, 또는 Cmd+,)
    3. 'MCP'를 검색해 설정이 표시되는지 확인

    **실제 테스트**:
    AI에 간단히 질문합니다.
    • '데이터베이스에 어떤 테이블이 있어?'
    • '전체 사용자 수를 조회해 줘'

    **디버깅 방법**:
    • 출력 패널 열기: View → Output
    • 'MCP' 채널에서 로그 확인
    • 시작 오류, 연결 실패 등의 정보 확인

    **자주 발생하는 오류**:
    • ENOENT: 경로가 없음. 절대 경로가 올바른지 확인
    • ECONNREFUSED: 데이터베이스가 실행되지 않았거나 포트가 잘못됨
    • Permission denied: 파일 또는 데이터베이스 권한 부족
    • JSON parse error: 설정 파일 형식 오류. 쉼표와 따옴표 확인

FAQ

설정 후에도 AI가 데이터베이스를 호출하지 않는 이유는 무엇인가요?
가장 흔한 원인은 3가지입니다.

1. **Cursor를 완전히 재시작하지 않음**: 창만 닫지 말고 앱을 종료한 뒤 다시 열어야 합니다.
2. **설정 파일 문법 오류**: 특히 쉼표와 따옴표 등 JSON 형식을 확인하고 도구로 유효성을 검사합니다.
3. **경로 문제**: 상대 경로가 아닌 절대 경로를 사용해야 합니다.

디버깅하려면 출력 패널(View → Output)을 열고 'MCP' 채널에서 시작 로그와 오류를 확인하세요. 'MCP Server started'가 보이면 정상적으로 시작된 것이고, 그렇지 않다면 오류 메시지를 확인해야 합니다.
운영 환경에서 MCP를 사용해도 안전한가요?
운영 환경에서 MCP를 사용하려면 다음 보안 조치를 반드시 갖춰야 합니다.

**필수 사항**:
• 읽기 전용 계정을 사용하고 DELETE/UPDATE/DROP 권한 금지
• 주 데이터베이스가 아닌 읽기 복제본(Read Replica)에 연결
• 비밀번호를 하드코딩하지 말고 환경 변수로 관리
• 사용자 비밀번호, 결제 정보 등 민감한 테이블의 접근 권한 회수

**권장 사항**:
• MCP 호출 로그를 정기적으로 검토하고 비정상 조회 모니터링
• 조회 복잡도를 제한해 데이터베이스 과부하 방지
• 개발 환경에서 먼저 검증한 뒤 운영 환경에 적용

정리하면 읽기 전용 권한, 읽기 복제본, 환경 변수는 운영 환경에서 MCP를 사용할 때 지켜야 할 최소 보안 기준입니다.
여러 데이터베이스를 동시에 설정할 수 있나요?
가능합니다. AI가 적절한 도구를 자동으로 선택합니다. 설정 예시는 다음과 같습니다.

```json
{
"mcpServers": {
"sqlite-local": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/path/to/local.db"]
},
"postgres-prod": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "--stdio"],
"env": { "POSTGRES_HOST": "prod-server", ... }
}
}
}
```

사용할 때는 어느 데이터베이스를 쓸지 명확히 말하세요.
• '로컬 SQLite에서 사용자 수를 조회해 줘'
• '운영 PostgreSQL에서 최신 주문을 조회해 줘'

AI가 설명에 따라 해당 MCP Server를 자동으로 선택합니다.
Windows 경로 설정에서 계속 오류가 나는 이유는 무엇인가요?
Windows 경로 문제는 가장 흔히 빠지는 함정입니다. 올바른 표기는 다음과 같습니다.

**✅ 올바름**:
• "D:/projects/test.db"(권장, 슬래시)
• "D:\\projects\\test.db"(이중 백슬래시)

**❌ 잘못됨**:
• "D:\projects\test.db"(단일 백슬래시, JSON 파싱 오류)
• "./test.db"(상대 경로라 MCP가 찾지 못함)
• "C:\Users\사용자명\test.db"(한글 경로에서 문제가 생길 수 있음)

**디버깅 팁**:
1. CMD 또는 PowerShell에서 파일이 있는지 확인: dir "D:\projects\test.db"
2. 절대 경로를 복사한 뒤 백슬래시를 슬래시로 직접 변경
3. 온라인 JSON 검사 도구로 설정 파일 형식 확인
MCP가 Cursor 성능에 영향을 주나요?
MCP가 성능에 미치는 영향은 작지만 다음 사항은 유의해야 합니다.

**일반적인 경우**:
• MCP Server는 필요할 때만 시작되며 사용하지 않을 때는 리소스를 차지하지 않음
• 조회 지연 = 데이터베이스 응답 시간 + 네트워크 지연이며 보통 <1초

**느려질 수 있는 경우**:
• 최초 호출: npx가 MCP Server 패키지를 내려받아야 함(한 번만 발생)
• 복잡한 조회: AI가 만든 SQL이 너무 복잡해 데이터베이스가 느려짐
• API 속도 제한: 외부 API를 자주 호출해 제한에 걸림

**최적화 방법**:
• AI에 결과 캐시 유도: '이 조회 결과를 기억해 둬. 나중에 사용할 거야'
• 조회 범위 제한: '최근 100개 레코드만 조회해 줘'
• 데이터베이스에 인덱스를 추가해 조회 시간 단축

4분 읽기 · 게시일: 2026년 1월 17일 · 수정일: 2026년 9월 8일

댓글

GitHub로 로그인하여 댓글을 남기세요

Easton BlogEaston Blog