## 📝 한줄 요약
사내 AI 교육 "Claude Code 업무 활용하기" 신청 관리 DB를, 표를 직접 그리지 않고 AI 봇(야붕이)과 인터뷰 8문답만으로 설계했어요. 결과는 교육 · 직원 · 신청 표 3개가 서로 이어진 관계형 DB입니다.
바쁘시면 이것만 읽어도 돼요:
- 도구와 목표: OpenClaw 봇 + nodak-airtable 스킬로 사내 교육 신청 DB 만들기
- 깨달은 점: DB 설계는 표를 그리는 일보다 "내가 이 표에서 뭘 자주 확인할지"에 답하는 일이었어요
- 핵심 방법: 봇에게 표를 만들어 달라고 하지 않고 "인터뷰하면서 같이 짜줘"라고 했어요
- 인상적인 순간: "MCP 없이 스크립트로"를 리모컨과 서랍에 비유한 설명에서 개념이 한 번에 이해됐어요
- 확장성: 2기·심화반이 생겨도 표에 한 줄만 추가하면 돼 요
- 교훈: 토큰(비밀번호 같은 열쇠)은 채팅에 절대 올리지 않기. 막혀도 봇과 같이 원인을 찾으면 풀려요
## 🎯 이런 분들께 도움돼요
- 엑셀만 써 봤고 관계형 DB는 처음인 비개발자
- 교육·행사 신청을 관리해야 하는 사내 담당자 (HR, 교육 운영)
- 에어테이블 스킬 설치나 토큰 연결에서 막힌 분
## 😫 문제 상황 (Before)
GPTers 2주차 과제가 "내 일로 에어테이블 DB 설계하기"였어요. 마침 회사에서 Claude Code 사내 교육을 열 계획이 있어서, 과제를 겸해 실제로 쓸 신청 관리 DB를 만들어 보기로 했어요.
평소 같으면 구글폼으로 신청을 받고 시트 한 장에 다 적었을 거예요. 그런데 이 방식은 문제가 있어요.
- 1기가 반응이 좋아서 2기나 심화반을 열면, 같은 사람의 이름·부서·이메일을 또 적어야 해요.
- 부서를 직접 입력하게 하면 "MD팀", "MD 팀", "엠디팀"이 섞여서 팀별로 모아 보기 어려워요.
- "아직 승인 안 한 사람 누구지?"를 볼 때마다 필터를 다시 걸어야 해요.
문제는 제가 "표를 어떻게 나눠야 하는지" 기준을 몰랐다는 거예요.
## 🛠️ 사용한 도구
- AI 봇: 야붕이 (OpenClaw 기반, 맥미니에서 실행, Slack DM으로 대화)
- 스킬: nodak-airtable (스터디장님이 만든 에어테이블 스킬)
- DB: Airtable
- 특이사항: 저는 맥북으로 작업하고 봇은 맥미니에 있어서, 토큰 연결 과정에서 한 번 헤맸어요
---
## 🔧 작업 과정
### 1. "MCP 없이 스크립트로"가 뭔데? — 리모컨과 서랍 비유로 이해하기
스킬을 설치 하기 전에 먼저 이 스킬이 뭔지 물어봤어요.
```
github.com/daht-mad/nodak-airtable 스킬이 무슨 내용인지 확인해줘.
```
야붕이가 README를 읽고 "Airtable을 MCP 없이 스크립트로 다루는 스킬"이라고 정리해 줬어요. 그런데 이 말이 전혀 이해가 안 됐어요.
```
mcp 없이 스크립트로 다룬다는 게 이해가 되지 않아.
```
그러자 야붕이가 "제가 너무 개발자 말로 설명드렸네요"라며 비유로 다시 설명했어요.
> MCP = 리모컨을 항상 들고 있는 방식
> Airtable 버튼이 잔뜩 달린 리모컨의 설명서 전체를 대화 시작부터 머릿속에 넣고 있어요. 편하지만, Airtable을 안 쓰는 대화에서도 그 분량을 차지해요.
>
> 스크립트 = 서랍 속 도구를 필요할 때 꺼내는 방식
> 평소엔 "서랍에 Airtable 도구가 있다"는 메모 한 장만 기억하고, 부탁받을 때만 서랍을 열어요.
여기서 "오!" 했어요. 그래서 스크립트 방식이 토큰(AI가 쓰는 비용)을 MCP 약 7,500에서 약 500으로 줄이고, "삭제는 확인받기" 같은 안전 규칙도 넣을 수 있는 거였어요.
제가 "아 그럼 에어테이블이 훨씬 좋은 거네"라고 하자, 야붕이가 한 번 더 바로잡아 줬어요. 좋은 건 에어테이블이 아니라 "스크립트 방식"이고, 다른 서비스에도 똑같이 쓸 수 있다고요. 모르는 걸 그냥 넘어가지 않고 계속 물어보길 잘했다고 느꼈어요.
---
### 2. 설치는 봇이, 허락 은 내가
```
지금 맥북에 설치해도 너가 사용할 수 있지?
```
야붕이는 "저는 맥미니에 살고 있어서, 맥북에 설치하면 제 손이 닿지 않아요"라고 답했어요. 그리고 맥미니 상태를 먼저 점검해서 Bun(스킬 실행에 필요한 프로그램)이 없다는 걸 확인했어요. 설치 전에 "프로그램을 새로 설치하는 일이라 허락받고 하겠다"고 물어봤어요.
```
그래 진행해보자~
```
설치를 마친 뒤에는 보안 점검 결과도 알려 줬어요. "스크립트가 연결하는 곳은 Airtable 하나뿐이고, 이상한 곳으로 데이터를 보내는 코드는 없어요."
---
### 3. 토큰 연결 — 세 번 막히고 네 번째에 성공
이 과제에서 가장 오래 걸린 부분이에요.
막힘 ① 보안 입력창이 안 떠요.
야붕이는 처음부터 "토큰은 채팅에 붙여넣지 마세요, 보안 입력창을 띄워 드릴게요"라고 했어요. 그런데 입력창을 여는 관리 화면이 맥미니 안에서만 열리게 잠겨 있었어요. 제가 맥북에서 띄울 수 없냐고 묻자, 야붕이는 "토큰 하나 넣자고 보안 설정을 푸는 건 추천하지 않는다"고 답했어요.
막힘 ② 맥북에서 맥미니로 원격 접속이 안 돼요.
대안으로 맥북에서 맥미니에 원격 접속하는 방법을 시도했는데 반응이 없었어요. 야붕이는 "다른 네트워크에 있어서 그런 것 같다, 급한 거 아니니 맥미니 앞에 계실 때 해도 된다"고 정리해 줬어요. 결국 저녁에 맥미니 앞에서 직접 입력했어요.
막힘 ③ 인증 실패(401).
```
에어테이블 토큰을 연결했어
```
그런데 Airtable이 거절했어요. 야붕이는 토큰 값을 직접 보지 않고 길이와 형태만 검사했어요. 진짜 토큰은 80글자가 넘는데 저장된 값은 17글자에 점(.)이 없었어요. 토큰 목록 화면에 보이는 짧은 ID를 복사한 거였어요. 새 토큰을 만들어 Copy 버튼으로 전체를 복사하니 바로 연결됐어요.
> 💡 배운 점: 에어테이블 토큰은 만들 때 딱 한 번만 전체가 보여요. 목록에 보이는 짧은 값은 토큰이 아니에요.
---
### 4. 본론: 인터뷰 8문답으로 DB 설계하기
연결이 끝나고 드디어 과제의 핵심으로 갔어요.
```
에어테이블로 DB 설계하고 싶어. 인터뷰하면서 같이 표 짜줘.
주제는 사내 AI 교육 "Claude Code 업무 활용하기" 신청 관리야.
```
야붕이는 바로 표를 만들지 않았어요. "바로 만들면 엑셀 한 장에 다 몰아넣는 구조가 되기 쉬워서, 한 번에 1~2개씩 여쭤볼게요"라고 하더니 질문을 시작했어요.
| 단계 | 봇의 질문 | 내 답 | 설계에 생긴 변화 |
|------|----------|-------|-----------------|
| 일 듣기 | 한 번 하는 행사예요, 여러 기수예요? | 10월 1기(입문반) 한 번 | |
| | 지금 신청은 어디에 적어요? | 아직 시작 전 | |
| | 가장 자주 확인할 게 뭐예요? | 신청자 몇 명? / 승인 안 한 사람? / 우리 팀 신청자? | 나중에 카운트·필터가 됨 |
| | 신청자에게 받을 정보는? | 이름, 부서, 이메일, Claude Code 경험, 배우고 싶은 업무 | 봇이 승인 상태 칸을 추가 제안 |
| 표 나누기 | 2기·심화반을 열 가능성이 있어요? | 있음 | → 교육 표를 따로 |
| | 부서 이름이 "MD팀/MD 팀"으로 갈라질 수 있어요. 목록에서 고를까요? | 목록에서 고르기 | → 부서는 표가 아니라 선택 칸 |
| 관계 | 한 사 람이 여러 교육을 신청할 수 있어요? | 예 | → 직원 표 + 신청 표로 분리 |
| 칸 정하기 | 교육 표에는 뭘 적을까요? | 교육명, 날짜, 장소, 강사, 정원, 모집 상태 | |
질문에 답하다 보니 제가 기준을 몰랐던 "표를 나누는 이유"가 자연스럽게 나왔어요.
- "2기가 생길 수 있어?" → 그럼 교육을 따로 둬야 해요.
- "한 사람이 여러 번 신청해?" → 그럼 사람 정보는 한 번만 적고, 신청을 따로 쌓아야 해요.
특히 기억에 남는 설계 이유가 두 개 있어요.
- Claude Code 경험은 직원 표가 아니라 신청 표에 둬요. 1기 때 "처음이에요"였던 사람이 심화반을 신청할 땐 "자주 써요"로 바뀔 수 있으니까요. 정보가 "사람에 붙는지, 그 시점의 신청에 붙는지"를 구분하는 게 핵심이었어요.
- 부서는 직원 표에만 적고, 신청 표에서는 끌어와서 보여줘요. 같은 정보를 두 번 적지 않아요.
최종 설계안은 이렇게 나왔어요.
```
[교육] 1 ──── N [신청] N ──── 1 [직원]
교육: 교육명 · 날짜 · 장소 · 강사 · 정원 · 모집 상태 · 신청 · 신청자 수
직원: 이름 · 부서(MD팀/HR팀/마케팅팀/개발팀) · 이메일 · 신청 · 신청 횟수
신청: 신청명 · 직원 · 교육 · 승인 상태(대기/승인/반려) · Claude Code 경험 · 배우고 싶은 업무 · 신청일 · 부서(끌어오기)
```
---
### 5. 기존 베이스 고쳐 쓰기 — 봇이 먼저 위험을 알려줬어요
```
지금 뽀야의 이벤트 베이스를 수정해서 만들자.
```
야붕이는 바로 고치지 않고, 기존 베이스에 이미 있던 데이터(웨비나 1건, 신청자 3명)를 먼저 확인했어요. 그리고 두 가지 선택지를 줬어요.
- A. 새 표 3개를 추가 (추천: 기존 데이터가 안전함)
- B. 기존 표를 고쳐 쓰기 (데이터가 섞이고, 칸 삭제는 사람이 직접 해야 함)
저는 B를 골랐어요. 야붕이는 칸 25개를 한 번에 바꾸고 직원 표를 새로 만든 뒤, 예시 데이터로 연결까지 검증해 줬어요.
- ① 신청자 몇 명? → 신청자 수 2 ✅
- ② 승인 안 된 사람? → 김엠디(예시) 대기 ✅
- ③ MD팀 신청자? → 신청 표에 부서가 자동으로 표시 ✅
API로 지울 수 없는 칸 4개는 이름 앞에 "(삭제)"만 붙여 두고 "화면에서 직접 지워 주세요"라고 안내했어요. 삭제처럼 되돌릴 수 없는 일은 끝까지 사람에게 넘기는 방식이 믿음직했어요.
---
## ✅ 결과 (After)
### Before vs After
| 항목 | Before (시트 한 장) | After (관계형 DB) |
|------|-------------------|------------------|
| 2기·심화반 추가 | 새 시트 또는 사람 정보 반복 입력 | 교육 표에 한 줄 추가 |
| 같은 사람이 재신청 | 이름·부서·이메일 다시 입력 | 직원 표에서 골라 연결 |
| 부서 표기 | MD팀 / MD 팀 / 엠디팀 혼재 | 정해진 목록에서 선택 |
| 신청자 수 | 직접 세기 | 자동 카운트 |
| 승인 대기자 | 매번 필터 | 승인 상태 = 대기로 바로 확인 |
| 교육 경험 변화 | 덮어쓰면 과거 기록이 사라짐 | 신청 건마다 그 시점 경험이 남음 |
### 결과물
- [이미지: 야붕이 인터뷰 장면 (Q5~Q7)]
- [이미지: 📋 설계안 메시지]
- [이미지: 에어테이블 교육 · 직원 · 신청 표 화면]
## 💬 이 과정에서 배운 AI 활용 팁
### 효과적이었던 것
1. "만들어줘" 대신 "인터뷰하면서 같이 짜 줘"라고 하기. 봇의 질문에 답하다 보면 내가 몰랐던 설계 기준이 저절로 나와요.
2. 이해 안 되면 "이해가 안 돼"라고 그대로 말하기. 봇이 비유로 다시 설명해 주고, 내가 잘못 이해한 부분도 바로잡아 줘요.
3. "제일 자주 확인할 게 뭐야?"에 먼저 답하기. 그 질문들이 그대로 카운트·필터가 돼요.
4. 막히면 에러 메시지나 화면을 그대로 보여주기. 토큰 401 에러도 그렇게 원인을 찾았어요.
### 이렇게 하면 안 돼요
1. 토큰을 채팅에 붙여넣지 마세요. 토큰은 집 열쇠와 같아요. 터미널 입력이나 보안 입력창으로만 넣으세요.
2. 토큰 목록에 보이는 짧은 값을 복사하지 마세요. 그건 토큰 ID예요. 진짜 토큰은 만들 때 한 번만 보여요.
3. 기존 데이터가 있는 베이스를 고칠 땐 먼저 백업하세요. "(삭제)" 칸을 지우면 기존 데이터도 같이 사라져요.
## 🌍 다른 업무에 적용한다면?
- 커머스 업무: 브랜드 · 상품 · 주문(실적)도 같은 구조예요. "주문 시점 가격"을 주문 표에 따로 남기는 것처럼, "그 시점의 정보"가 어디에 붙는지 구분하면 돼요.
- 사내 스터디 · 동호회 운영: 모임 · 회원 · 출석
- 외부 웨비나: 기존 "뽀야의 이벤트"처럼 이벤트 · 참가자 · 신청
## 🚀 앞으로의 계획
- 1기의 날짜 · 장소 · 강사 · 정원을 채우고 실제 신청 받기
- 신청 폼을 만들고, 승인되면 안내 메일을 자동으로 보내기
- 교육 후 만족도 설문 표를 추가해 신청과 연결하기