[database MCP / Text2SQL] Claude 한테 DB 접근 권한을 준다면?

소개

성장피터님이 보내주신 MCP관련 노마드 코더 유튜브 영상을 보다가,

postgreSQL MCP를 사용해보고 싶다는 생각이 들었습니다.

(PostgreSQL은 mySQL과 비슷한 관계형 데이터베이스(RDBMS)의 일종이라고 생각하시면 됩니다.)

https://youtu.be/szUo30BOZlo?si=VkkvK8IQvlgOQ8na

Claude한테 데이터베이스에 접근할 수 있는 권한을 주면,

- 개발자들은 개발을 더 쉽게 할 수 있지 않을까? (DB 테이블 설계/생성/테스트데이터 생성)

- 비개발자들은 SQL을 몰라도 자연어로 질의해서 database에서 원하는 정보를 찾거나 데이터 시각화/분석을 할 수 있지 않을까?

생각이 들었고, 한번 Claude에 database MCP를 연결해 봤습니다.

실제로 당근마켓에서는 Text2SQL(자연어를 SQL로 바꿔주는 것)을 이용하여 비개발 직군(PM, 마케팅 팀, 서비스 기획자, 운영팀)에서 자유롭게 당근마켓 데이터에 접근해서 인사이트를 얻을 수 있게 한다고 합니다!

진행 방법

어떤 도구를 사용했고, 어떻게 활용하셨나요?

  • Docker로 PostgreSQL 띄우기

    • 도커를 사용하지 않고 직접 로컬에서 설치해서 DB를 띄워도 되지만, 저는 도커를 사용해서 로컬에서 PostgreSQL database를 띄웠습니다.

    • 윈도우환경이라 도커 데스크 탑에서 진행했습니다.

      1. 도커 데스크탑 설치후, Postgres 이미지를 받고 컨테이너 띄우기

        컴퓨터 화면에서 설정의 스크린 샷
      2. 아래 명령어 실행하여 도커에 postgres container 띄우기

        docker run -d \
        --name postgres-container \
        -e POSTGRES_USER=testuser \ 
        -e POSTGRES_PASSWORD=testpass \
        -e POSTGRES_DB=testdb \
        -v C:/Users/Laura/workspace/postgres-data:/var/lib/postgresql/data \
        -p 5432:5432 \
      3. 도커 컨테이너에 접속해서 postgres 접속되는지 확인

        • docker ps 명령어로 도커가 잘 떠있나 확인

          텍스트가있는 검은 색 화면의 스크린 샷
        • 도커로 들어가서 db 조회

          docker exec -it postgresql-container bash
          
          #db 접속
          psql -h 127.0.0.1 -p 5432 -U testuser -d testdb
          
          #db 목록 조회
          \l
          
          #testdb 사용
          \c testdb
          
          #testdb의 테이블 조회
          \dt
          
          #테이블이 아무것도 없는 빈 데이터베이스 조회되면 성공
      4. 로컬에서 postgreSQL 띄우기 성공!

  • Database MCP 띄우기

  • Claude 와 Database MCP 연결

    • Claude 데스크탑 앱에서 파일 > 설정 > 개발자 > 설정 편집 클릭

      탐색기 창에 파일의 스크린 샷
    • claude_desktop_config.json열어서 mcpServer에 postsql 추가

    • Claude + posrgresql mcp연결 완료!

  • Claude가 제가 로컬에서 띄운 DB에 접근할 수 있는 상태가 되었습니다!

    일단 비어있는 DB라서, 간단하게 온라인 쇼핑몰에서 사용할 DB 스키마를 만들어보겠습니다.

    한국 웹 사이트의 스크린 샷
한국어 테이블의 스크린 샷
한국 버전의 테이블 스크린 샷

https://claude.ai/public/artifacts/b2091751-09c6-4dc6-99ce-509380064f86

한국 버전의 게임 스크린 샷

https://claude.ai/public/artifacts/7d52dd5b-91b8-4ec6-9d05-bac7f2fbb32b

https://claude.ai/public/artifacts/c969697d-dca7-431d-9799-7d3fa043c73c

https://claude.ai/public/artifacts/0e58c0f2-ea96-4b3c-a4f0-7a4e01691506

결과와 배운 점

  • 개발자 입장에서,

    • 초기에 DB를 설계하고 문서를 만들고, 샘플 데이터를 넣을 때는 굉장히 유용할 것 같다는 생각이 들었습니다.

    • 다만, Claude가 가끔 DB와의 연동에서 문제가 생기면, 갑자기 테이블을 드롭했다가 다시 만드는 시도를 하는데, drop table과 같은 SQL은 Claude가 쿼리를 날릴 수 없도록 프롬프트에 명시를 하거나, MCP Server 코드에서 방어로직을 추가하는 등의 처리가 필요할 것 같습니다.

  • 비개발자 입정에서,

    • SQL 을 몰라도 DB에 접근해서 데이터를 시각화하고 분석할 수 있다는게 엄청난 장점인 것 같습니다ㅎㅎ

    • 이런식의 서비스를 만든다면, DB를 읽기만 가능하고, 수정/삭제/업데이트 권한은 철저하게 제한하여 만들어야 할 것 같습니다.

      (Claude가 혼자서 DB table을 없애버리거나, 컬럼 업데이트를 해버리면 큰일나니까..)

5
1개의 답글

👉 이 게시글도 읽어보세요