소개
성장피터님이 보내주신 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를 띄웠습니다.
윈도우환경이라 도커 데스크 탑에서 진행했습니다.
도커 데스크탑 설치후, Postgres 이미지를 받고 컨테이너 띄우기
아래 명령어 실행하여 도커에 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 \
도커 컨테이너에 접속해서 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 #테이블이 아무것도 없는 빈 데이터베이스 조회되면 성공
로컬에서 postgreSQL 띄우기 성공!
Database MCP 띄우기
아래 mcp server 코드를 git 에서 클론후, README를 참고하여 서버 띄우기
https://github.com/executeautomation/mcp-database-server
node dist/src/index.js --postgresql --host 127.0.0.1 --database testdb --user testuser --password testpass
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을 없애버리거나, 컬럼 업데이트를 해버리면 큰일나니까..)