<Reowns>rlaeowns

Claude에 mysql을 연결해보자

Reowns · 43 days ago

mcp는 llm과 서비스 간의 상호작용을 가능하게 합니다.
안전성만 보장이 된다면 dba업무에서 ai 사용 패턴을 아래와 같이 단순화 할 수 있습니다.

기존 : [ 문제 발생 -> 상태 파악 -> ai에 현상 전달, 피드백 -> 적용 ]  
변화 : [ 문제 발생 -> ai가 상태 파악, 조치]

로컬에 테스트 db를 설치하고 mysql mcp를 클로드와 연결해 사용해봤습니다.
소스 : https://github.com/benborla/mcp-server-mysql

# config
claude mcp add mcp_server_mysql \
  -e MYSQL_HOST="127.0.0.1" \
  -e MYSQL_PORT="3306" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="root" \
  -e MYSQL_DB="test" \
  -e ALLOW_INSERT_OPERATION="true" \
  -e ALLOW_UPDATE_OPERATION="true" \
  -e ALLOW_DELETE_OPERATION="true" \
  -e ALLOW_DDL_OPERATION='true' \
  -- npx @benborla29/mcp-server-mysql

# delete
claude mcp remove mcp_server_mysql

설정을 마친 뒤 테스트를 진행했습니다.

❯ 내 mysql db에서 회원 테이블에 맞게 접속 로그 테이블을 만들어 줘
● test.member_login_logs 테이블이 정상 생성됐습니다.

  ---
  테이블 설계 요약

  ┌──────────────┬────────────────────────┬────────────────────────────────────────────────────────────────┐
  │     컬럼     │          타입          │                              설명                              │
  ├──────────────┼────────────────────────┼────────────────────────────────────────────────────────────────┤
  │ log_id       │ BIGINT UNSIGNED (PK)   │ 로그 고유 ID (로그는 대용량 예상이라 BIGINT)                   │
  ├──────────────┼────────────────────────┼────────────────────────────────────────────────────────────────┤
  │ member_id    │ INT UNSIGNED (FK)      │ members.id 참조, 탈퇴 시 CASCADE 삭제                          │
  ├──────────────┼────────────────────────┼────────────────────────────────────────────────────────────────┤
  │ email        │ VARCHAR(100)           │ 로그인 시도 이메일 (FK 삭제 후에도 기록 남기기 위해 별도 저장) │
  ├──────────────┼────────────────────────┼────────────────────────────────────────────────────────────────┤
  │ login_at     │ DATETIME               │ 접속 시각 (DEFAULT: 현재 시각)                                 │
...

  인덱스: member_id, email, login_at 조회 성능을 위해 인덱스 추가

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ 테스트 데이터 몇 개 넣어줘
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

● 총 14건 삽입 완료했습니다. 다양한 시나리오로 구성했습니다.

  삽입된 테스트 데이터 시나리오

  ┌───────────────────────┬───────────────────────────────────────────────────────────────────────────────┐
  │       시나리오        │                                     내용                                      │
  ├───────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
  │ 정상 로그인           │ 여러 회원의 PC·모바일·태블릿 등 다양한 기기에서 성공                          │
  ├───────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
  │ 비밀번호 오류 후 성공 │ 오준혁(user7091) — 2회 실패 후 3번째 성공                                     │
  ├───────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
  │ 계정 비활성화         │ 오시우(user6091) — 비활성 계정 접근 시도                                      │
  ├───────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
  │ 의심스러운 연속 실패  │ 오준혁(user3091) — python-requests로 2초 간격 3회 연속 실패 (브루트포스 패턴) │
  ├───────────────────────┼───────────────────────────────────────────────────────────────────────────────┤
  │ 다기기 접속           │ PC(Chrome/Edge/Firefox), iPhone, Android, iPad, Mac 등 다양한 User-Agent      │
  └───────────────────────┴───────────────────────────────────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯ 브루트포스 시도 회원 조회 쿼리 짜줘
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
...

❯ 운영에 적용시킬 변경사항 DDL을 .sql 파일로 추출해줘
  파일 구성 내용
  - 테스트 데이터(INSERT)는 제외하고 CREATE TABLE DDL만 포함
  - 운영 DB에 바로 적용 가능하도록 DB명(test) 제거 — 운영 DB 선택 후 실행하는 방식
  - IF NOT EXISTS는 의도적으로 제외 — 운영 적용 시 중복 실행 방지를 위해 명시적 오류가 더 안전

  운영 적용 시 아래 순서로 실행하시면 됩니다.

  USE 운영DB명;
  SOURCE member_login_logs_ddl.sql;

역시나 만족스러운 결과가 나왔고 잘만 활용한다면 업무의 상당 부분을 자연어로 처리 가능할 것 같습니다.

← Back