엑셀 표에 말로 물어 정확한 건수 받기 — 표를 작은 데이터베이스로 (SQLite)
이 페이지 목차
시작 전에1단계 · 연습용 표를 폴더에 두기2단계 · 표를 데이터베이스 파일로 바꾸기3단계 · 몇 건인지 묻기4단계 · 원인별로 세기5단계 · 합이 맞는지 표에 다시 물어서 확인하기6단계 · 규칙으로 남기기7단계 · 새 대화에서 표가 기억되는지 시험하기다 됐습니다 — 이제 이렇게 말하면 됩니다막히면한 번에 맡기기 (익숙해진 다음에)내가 만들 때는클로드에게 엑셀 표를 통째로 주고 「몇 건이야?」 하고 물으면, 클로드가 줄을 눈으로 세다가 틀릴 수 있습니다. 그래서 표를 데이터베이스에 넣고, 세는 일은 데이터베이스가 하게 합니다. 클로드는 내 질문을 SQL(표에 묻는 질의문)로 바꿔 던지고, 돌아온 값만 말합니다. 아래 말을 순서대로 한 줄씩 치면 됩니다. (예시 자료는 가짜 이름입니다. 클로드의 답은 2026-10-10 에 실제로 돌려 받은 것을 줄였고, 줄인 곳은 「…」로 표시했습니다.)
시작 전에
- 빈 폴더 하나를 만들고(이름은 영문으로, 예: 문서 폴더 안
ask-tables), 그 폴더에서 클로드(Claude Code)를 엽니다. 데스크톱 앱이면 Code 탭에서 Local → Select folder, 터미널이면 그 폴더 안에서claude를 입력합니다. 설치·구독·승인 방식은 02편 「준비물 자세히」와 같습니다. - Node.js 22.13 이상(24 권장)이 PC 에 있어야 합니다. 2단계에서 클로드가 버전을 봐 줍니다. 없거나 낮다고 하면 「막히면」 2번.
- 클로드가 파일을 만들거나 명령을 실행하려고 허락을 물으면 무엇을 하는지 읽고 허락하세요. 이 편에서는
node로 시작하는 명령이 나옵니다. - 이 편의 표는 가짜입니다. 내 표를 쓸 때는 개인정보·급여·반출금지 자료가 든 표는 넣지 마세요. 클로드가 읽은 부분과 질의 결과는 클로드에게 전달됩니다.
준비물 자세히 (Node.js · 엑셀 파일 · 용어)
- 클로드(Claude Code): 데스크톱 앱의 Code 탭이나 터미널용 Claude Code 중 하나입니다. 일반 채팅 화면은 내 PC 의 파일에 손이 닿지 않아 이 편에는 쓸 수 없습니다. (데스크톱 앱 시작하기 · 터미널 설치 안내)
- Node.js: nodejs.org/en/download 에서 내 운영체제용 설치 파일(LTS)을 받습니다. 이 편은 Node.js 에 들어 있는 SQLite 기능(
node:sqlite)을 쓰므로 따로 설치할 것이 없습니다. 공식 문서에 따르면 이 기능은 22.13.0 부터(23 판은 23.4.0 부터) 실행 옵션 없이 쓸 수 있고, 아직 「Stability 1.2 - Release candidate」(안정화 직전 단계)로 적혀 있어 버전에 따라 조금씩 달라질 수 있습니다. (Node.js SQLite 문서) - 내 표가 엑셀 파일(.xlsx)이면 CSV 로 한 번 저장합니다. 엑셀에서 파일 → 다른 이름으로 저장 을 누르고 파일 형식에서 이름에 「CSV UTF-8」이 들어간 것을 고릅니다(한글이 깨지지 않게 하려는 것입니다). 이렇게 저장하면 지금 보고 있는 시트 하나만 저장되니, 시트가 여럿이면 시트마다 저장하세요. (Microsoft 도움말)
- 승인 방식은 처음에 Manual 로: 클로드가 파일을 만들거나 명령을 실행할 때마다 무엇을 하는지 보여 주고 허락을 묻는 방식입니다. (02편 「준비물 자세히」)
- 용어
- CSV는 쉼표로 칸을 나눈 글 파일입니다. 엑셀 표를 가장 단순하게 옮긴 꼴입니다.
- SQLite는 데이터베이스 하나가 파일 하나로 되어 있는 작은 데이터베이스입니다. 서버 설치가 필요 없습니다. (sqlite.org)
- SQL은 데이터베이스에 묻는 질의문(예: 「9월 것을 세라」)입니다. 클로드가 대신 써 줍니다.
- **표(테이블)**는 데이터베이스 안의 엑셀 시트 한 장 같은 것입니다.
1단계 · 연습용 표를 폴더에 두기
가짜 회사 「가나다전자」의 NCR(부적합 보고서) 20건짜리 표입니다. 아래 상자의 글(말 한 줄과 표 21줄)을 통째로 복사해서 클로드에게 붙여 넣고 보내면, 클로드가 ncr.csv 파일로 저장합니다.
아래 21줄을 이 폴더에 ncr.csv 로 저장해 줘. 한 글자도 바꾸지 말고, 답은 한국어로.
NCR번호,발행일,공정,부적합원인,담당자,상태
NCR-001,2026-08-04,조립,납땜불량,김가나,종결
NCR-002,2026-08-11,검사,치수불량,박나나,종결
NCR-003,2026-08-13,도장,도장불량,이다라,종결
NCR-004,2026-08-20,조립,부품불량,김가나,종결
NCR-005,2026-08-27,포장,서류누락,박나나,종결
NCR-006,2026-08-31,조립,납땜불량,이다라,종결
NCR-007,2026-09-02,조립,납땜불량,김가나,종결
NCR-008,2026-09-04,검사,치수불량,박나나,종결
NCR-009,2026-09-08,도장,도장불량,이다라,종결
NCR-010,2026-09-10,조립,납땜불량,김가나,종결
NCR-011,2026-09-15,조립,부품불량,박나나,종결
NCR-012,2026-09-17,검사,치수불량,이다라,종결
NCR-013,2026-09-22,조립,납땜불량,김가나,진행
NCR-014,2026-09-25,포장,서류누락,박나나,종결
NCR-015,2026-09-29,도장,도장불량,이다라,진행
NCR-016,2026-10-01,조립,부품불량,김가나,진행
NCR-017,2026-10-02,검사,치수불량,박나나,진행
NCR-018,2026-10-06,조립,납땜불량,이다라,진행
NCR-019,2026-10-08,도장,도장불량,김가나,진행
NCR-020,2026-10-09,검사,치수불량,박나나,진행
✅ 이렇게 나오면 성공 — 「21줄」(머리줄 1 + 20건)이 나오고 폴더에 ncr.csv 가 생기면 다음 단계로. (영어로 답하면 「막히면」 7번.)
2단계 · 표를 데이터베이스 파일로 바꾸기
ncr.csv 를 SQLite 파일 ncr.db 로 옮깁니다. 이 단계에서 클로드가 Node.js 버전도 확인합니다. 허락 창이 뜨면 명령이 node 로 시작하는지 보고 허락하세요.
✅ 이렇게 나오면 성공 — 「20줄」(또는 「20행」)이 나오고 폴더에 ncr.db 파일이 생기면 다음 단계로. (Node.js 버전과 변환 스크립트 위치는 클로드마다 조금 달라도 괜찮습니다. 클로드가 파이썬으로 하겠다고 하거나 명령이 막혔다고 하면 「막히면」 1번.)
3단계 · 몇 건인지 묻기
이제 말로 묻습니다. 「질의문도 같이 보여 줘」를 붙이면 클로드가 표에 던진 SQL 이 보여서, 센 방법을 내가 확인할 수 있습니다. 표의 날짜가 2026년 8~10월이라 「9월」로 묻습니다.
✅ 이렇게 나오면 성공 — 9건이 나오고 SQL 한 줄이 같이 보이면 다음 단계로. 직접 확인하려면 ncr.csv 를 엑셀로 열어 9월 날짜(2026-09-…)의 줄을 세어 보세요. NCR-007 부터 NCR-015 까지 9줄입니다. (읽기 전용으로 열었다는 말은 표를 바꾸지 않고 읽기만 했다는 뜻입니다.)
4단계 · 원인별로 세기
같은 원인끼리 묶어 세는 것도 한 줄이면 됩니다. SQL 에서는 묶기를 GROUP BY 라고 합니다.
✅ 이렇게 나오면 성공 — 납땜불량 6, 치수불량 5, 도장불량 4, 부품불량 3, 서류누락 2 가 나오면 다음 단계로.
5단계 · 합이 맞는지 표에 다시 물어서 확인하기
가장 중요한 단계입니다. 클로드가 건수를 자기 손으로 더한 것과 표가 센 것은 다릅니다. 줄이 몇 개 안 될 때는 같지만, 줄이 많아지면 손으로 더한 쪽이 틀립니다. 그래서 합계도 표에 물어서 확인하게 시킵니다.
✅ 이렇게 나오면 성공 — 「원인별합계」와 「전체건수」가 같고 질의문이 보이면 됩니다. 다르면 표에 빈 칸이나 이상한 값이 있다는 신호입니다. (처음 돌려 본 시험에서는 클로드가 스스로 이렇게 말했습니다. 「지난번 답에서 '합계가 20건과 맞다'고 한 것은 제가 6+5+4+3+2를 직접 더한 것이었습니다.」 이 말을 듣게 하려는 단계입니다.)
6단계 · 규칙으로 남기기
클로드는 대화를 닫으면 「표는 ncr.db 에 있다」는 것을 잊습니다. 새 대화에서도 같은 방식으로 답하게, 이 폴더의 규칙 파일 CLAUDE.md 에 적게 합니다. (CLAUDE.md 는 클로드가 이 폴더에서 대화를 열 때 읽는 지시문 파일입니다. 02편 2단계와 같습니다.)
✅ 이렇게 나오면 성공 — 폴더에 CLAUDE.md 가 생기면 다음 단계로. (규칙 문장은 클로드가 조금 다듬어도 괜찮습니다.)
7단계 · 새 대화에서 표가 기억되는지 시험하기
지금 대화를 닫고 같은 폴더에서 새 대화를 엽니다. 터미널이면 /exit 로 나갔다가 그 폴더에서 claude 를 다시 입력하고, 데스크톱 앱이면 같은 폴더로 새 대화를 시작하세요. 이전 대화는 이어지지 않습니다. 이번에는 아직 안 물어본 질문을 합니다.
✅ 이렇게 나오면 성공 — 김가나 3 · 박나나 2 · 이다라 2(합계 7)가 나오고 「DB 에 직접 물어서」라는 말이 있으면 성공입니다. 새 대화라 앞 단계 이야기는 없으니, 규칙 파일을 읽고 ncr.db 를 찾아 쓴 것이 확실합니다. (CSV 를 읽어서 셌다고 하면 「막히면」 3번.)
다 됐습니다 — 이제 이렇게 말하면 됩니다
항상 이 폴더에서 클로드를 열고 이야기합니다.
- 「10월에 들어온 건 중에서 도장불량만 보여 줘. 질의문도 같이.」
- 「공정별로 몇 건인지 센 값만 알려 줘.」
- 「김가나가 맡은 진행 중인 NCR 번호를 알려 줘.」
- 「내 표(예: 거래처 목록.csv)도 같은 방법으로 데이터베이스로 만들어 줘. 열 이름은 그대로 두고.」
- 「CSV 를 고쳤어. ncr.db 를 다시 만들어 줘. 옛 ncr.db 는 지우지 말고 이름만 바꿔 둬.」 (데이터베이스는 CSV 의 복사본이라, CSV 를 고쳐도 저절로 바뀌지 않습니다.)
막히면
- 클로드가 파이썬을 쓰겠다며 허락을 묻거나, 명령이 막혔다고 하고
ncr.db가 안 생긴다 → 처음 시험에서 그랬습니다. 클로드는 이 표를 데이터베이스로 옮길 때 파이썬을 먼저 떠올립니다. 이 편은 Node.js 로 하니 이렇게 다시 말하세요: "Node.js 의 node:sqlite 로 해 줘. 새로 설치는 하지 말고." - Node.js 가 없다거나 버전이 낮다고 한다 → 이것은 사람이 합니다. nodejs.org/en/download 에서 LTS 를 설치한 뒤, 클로드를 닫았다 다시 열고 이렇게 말하세요: "node 버전이 22.13 이상인지 확인하고 2단계를 다시 해 줘." (제 시험 PC 는 v24 가 있어 이 경우를 직접 겪지는 않았습니다.)
- 새 대화에서
ncr.db를 안 쓰고 CSV 를 읽어서 센다 → 6단계 규칙이 없을 때 실제로 그랬습니다. CSV 를 직접 읽으면 줄이 많을수록 틀리기 쉽습니다. 이렇게 다시 말하세요: "ncr.db 에 SQL 로 물어서 다시 답해 줘. 질의문도 보여 줘." 그리고 6단계 규칙을 넣으세요. - 숫자가 이상하다 → 클로드가 센 값인지 손으로 더한 값인지부터 확인합니다. 이렇게 말하세요: "방금 숫자는 표에 물어서 나온 값이야, 네가 더한 값이야? 질의문을 보여 주고, 합계도 표에 다시 물어서 확인해 줘."
- 날짜로 거르는데 0건이 나오거나 이상하다 → 날짜 칸이
2026-09-02꼴이 아니면 기간 질문이 빗나갈 수 있습니다(제가 일부러 틀린 날짜로 시험해 보지는 않았습니다). 이렇게 말하세요: "발행일 칸 값이 2026-09-02 꼴인지 확인하고, 아니면 그 꼴로 맞춰서 ncr.db 를 다시 만들어 줘." 또 이 연습 표는 2026년 8~10월 것이라, 시간이 지나 「지난달」로 물으면 0건이 나옵니다. 표에 있는 달로 물으세요. - 엑셀로 연 CSV 의 한글이 깨져 보인다 → 1단계에서 클로드가 저장한
ncr.csv는 BOM(파일 맨 앞에 붙이는 글자 형식 표시)이 없는 UTF-8 이라, 엑셀에서 더블클릭하면 한글이 깨져 보일 수 있습니다(저장은 정상입니다). 엑셀의 데이터 → 텍스트/CSV 가져오기 에서 UTF-8 을 고르면 열립니다. 반대로 엑셀에서 CSV 로 저장한 파일을 클로드에게 줄 때는 「CSV UTF-8」 형식으로 저장하세요(BOM 이 붙은 CSV 는 시험해 보니 클로드가 알아서 처리했습니다). - 클로드가 영어로 답한다 → 1단계에서 한 번 영어로 답한 적이 있습니다(그때는 말에 「답은 한국어로」를 넣지 않았습니다). 이렇게 말하세요: "한국어로 답해 줘. 앞으로도 한국어로 답하게 CLAUDE.md 에 한 줄 적어 줘."
한 번에 맡기기 (익숙해진 다음에)
긴 프롬프트 펼치기 — 위 2\~6단계를 한 번에 시키는 말
내 표가 이미 CSV 로 폴더에 있을 때, 변환·시험·규칙을 한 번에 시킵니다. 빈 폴더에 CSV 를 넣고 클로드를 연 뒤 붙여 넣으세요. 꺾쇠 <…> 칸은 내 것으로 바꿔 넣습니다. 단계로 만든 것과 규칙 내용이 조금 다릅니다(.db 를 바꾸거나 지우지 않는다는 줄이 더 들어갑니다).
역할: 너는 내 PC 에서 일하는 도우미다. 엑셀에서 저장한 표(CSV 파일) 하나를 SQLite 데이터베이스 파일로 바꾸고, 앞으로 내가 그 표에 대해 말로 묻는 건수·합계를 표에 직접 물어서 센 값으로만 답하게 만든다. 나는 초보자이니 어려운 말은 풀어서, 한 단계씩 말해 줘.
맥락: 지금 열려 있는 이 폴더에 CSV 파일이 있다. SQLite 는 파일 하나로 된 작은 데이터베이스이고, SQL 은 그 표에 묻는 질의문이다. Node.js(22.13 이상)에 들어 있는 node:sqlite 로 읽고 쓴다. 건수·합계는 눈으로 세거나 머릿속으로 더하면 틀릴 수 있으므로, 센 값은 언제나 질의 결과만 말한다. 플러그인·MCP·외부 패키지는 쓰지 않고, 아무것도 새로 설치하지 않는다.
입력: <운영체제>, <CSV 파일 이름: 예 ncr.csv>, <날짜가 든 열 이름과 형식: 예 발행일, 2026-09-02 꼴>, <확인용 질문 한두 개: 예 9월에 발행된 건수, 원인별 건수>
작업:
① 확인 — 아무것도 만들기 전에 먼저 본다.
- 지금 폴더의 전체 경로와 CSV 파일의 열 이름·앞 3줄을 내게 보여 준다.
- node --version 을 실행해 22.13 이상인지 본다. 아니면 아무것도 만들지 말고 멈춰서, 내가 nodejs.org 에서 LTS 를 설치해야 한다고 안내한다.
- 같은 이름의 .db 파일이나 CLAUDE.md 가 이미 있으면 덮어쓰지 말고 멈춰서 어떻게 할지 묻는다.
② 만들기 — 이 폴더에 다음을 만든다.
- make-db.mjs : CSV 를 읽어 <CSV 이름>.db 를 만드는 스크립트. 표 이름은 파일 이름에서 확장자를 뺀 영문, 열 이름은 CSV 그대로, 값은 모두 TEXT 로 넣는다. 파일 맨 앞의 BOM(보이지 않는 글자)이 있으면 지운다. 같은 이름의 .db 가 있으면 멈춘다.
- <CSV 이름>.db : 위 스크립트로 만든 데이터베이스. 다 만든 뒤 CSV 의 데이터 줄 수와 DB 의 줄 수를 비교해 알려 준다.
③ 시험 — 내가 준 확인용 질문을 SQL 로 물어 센 값을 알려 준다. 날짜 질문은 날짜 칸을 글자 범위로 비교한다. 질의문도 같이 보여 준다. 묶어서 센 건수는 네가 더하지 말고, 합계를 표에 한 번 더 물어 전체 건수와 맞는지 확인한다.
④ 규칙 — 이 폴더의 CLAUDE.md 를 새로 만들어 아래 「CLAUDE.md 시작」과 「CLAUDE.md 끝」 사이의 내용 그대로 적는다(한 글자도 바꾸지 말 것).
=== CLAUDE.md 시작 ===
# 표 질문 규칙
- 이 폴더의 표는 .db 파일(SQLite)에 있다. CSV 를 직접 읽어 세지 않는다.
- 건수·합계·평균은 Node.js 의 node:sqlite 로 .db 를 읽기 전용으로 열어 SQL 로 물어서 나온 값만 말한다. 손으로 더하거나 어림하지 않는다.
- 답할 때 쓴 질의문(SQL)을 같이 보여 준다. 표에 없는 값이면 없다고 말하고 지어내지 않는다.
- .db 는 바꾸거나 지우지 않는다. 표를 새로 만들어야 하면 먼저 내게 묻는다.
=== CLAUDE.md 끝 ===
⑤ 마무리 — 초보자 눈높이로 무엇이 만들어졌고, 앞으로 어떻게 말하면 되는지(예: "10월에 들어온 건 몇 건이야?", "담당자별로 몇 건이야?") 설명한다. CSV 를 고치면 .db 는 저절로 바뀌지 않으니, 그때는 "CSV 를 새로 읽어서 .db 를 다시 만들어 줘. 옛 .db 는 지우지 말고 이름만 바꿔 둬"라고 말하면 된다고 알려 준다. 새 대화에서 한 번 더 물어 봐 달라고 안내한다.
제약: 비밀키·토큰·비밀번호·개인정보를 출력하거나 파일에 쓰지 않기. 오류를 건너뛰지 않기. 기존 파일을 지우거나 덮어쓰지 않기. 이 폴더 밖의 파일을 읽지도 쓰지도 않기. 아무것도 설치하지 않기. .db 는 읽기 전용으로만 열기(만들 때만 쓰기).
출력: 한 일, 확인된 상태(Node.js 버전·CSV 줄 수), 만든 파일 목록, 시험 결과(센 값과 질의문), 검증 결과((가)~(라) 각각 통과/실패), 남은 문제와 다음 조치.
검증: 아래를 파일을 다시 열어서 전부 확인해야 "자동 확인 통과"라고 보고한다. 하나라도 실패하면 완료로 보고하지 말 것.
(가) 이 폴더에 make-db.mjs, <CSV 이름>.db, CLAUDE.md 가 있다.
(나) .db 의 줄 수가 CSV 의 데이터 줄 수와 같다.
(다) .db 의 열 이름이 CSV 의 열 이름과 같고, 첫 열 이름 앞에 보이지 않는 글자가 없다.
(라) CLAUDE.md 가 위 「CLAUDE.md 시작」과 「CLAUDE.md 끝」 사이의 내용과 같다.
그리고 ③의 확인용 질문 답이 SQL 로 센 값이어야 한다.
내가 만들 때는
처음엔 이렇게 시켰습니다. 2026-09-21 11:02, 회사 공유 서버에 쌓인 엑셀 파일 69,040개를 AI 가 읽게 만들던 날입니다. 처음 설계는 「각 표의 앞 5줄만 색인」이었고, 이렇게 물었습니다. 「음.. 색인을 안에 내용 다 하는게 아니라 앞줄 5줄만 하는 이유가 머야?」 재 보니 전부 색인해도 25시간·7GB 라 돈이나 시간이 이유가 아니었고, 진짜 이유는 따로 있었습니다. 비슷한 몇 줄만 가져오는 검색으로는 셀 수가 없다는 것입니다. 97줄 중 30줄만 보고 「30개」라고 자신 있게 답하니까요.
그런데 클로드가 「표로 만들 필요까지는 없다」 쪽으로 말하자 이렇게 되물었습니다(11:25). 「그래도 표로 해 놓으면 더 빨리 찾고 더 사용량이 적게 드는거 아냐?」 클로드도 재 보고 「맞습니다」라고 했습니다. 질문 하나에 AI 가 읽어야 하는 양이 몇 분의 일로 줄었습니다. 시트 490장의 머리행(맨 윗줄)이 서로 다른 것은 147가지뿐이라는 것도 확인한 뒤 설계를 바꿨고, 같은 양식끼리 묶어 SQLite 표 20개(3,254,940행)를 만들었습니다. 이 편의 「표를 데이터베이스에 넣고 센 값만 받는다」가 그 설계의 가장 작은 판입니다.
실패도 있었습니다. 9월 22일 새벽 3시 18분 메신저에 붙인 뒤 64분 동안 열두 판을 고쳤는데, 작은 시험(단위시험)으로 잡힌 것은 하나도 없고 전부 실제로 물어 보다가 찾았습니다. 이 편의 「네가 더하지 말고」가 그중 하나에서 나왔습니다. 재질별 건수를 물었더니 모델이 받은 줄을 제 손으로 더해, 실제 61,317 을 47,539 라고 답했습니다. 「더하지 마라」는 부탁으로는 안 됐고, 질의가 파일별로 쪼개 60줄을 내던 것을 「묻는 축 하나로만 묶는다」로 막으니 9줄이 되어 수가 맞았습니다. 부탁이 아니라 그럴 일이 없게 만든 것입니다. 또 그 서비스는 남이 쓴 SQL 을 받기 때문에 SQLite 의 권한자(어느 표를 읽어도 되는지 한 칸씩 묻는 장치)로 범위를 막았지만, 이 편의 표는 내 폴더의 파일 하나라 읽기 전용으로 여는 것까지만 합니다.
→ 뒷이야기 12단계에서 자세히 보세요.