테이블 분리 전에 실제 데이터 네 줄을 세워봤다
한 표가 두 일을 겸해서 챗봇이 없는 사실을 말했다. 표를 가르려다 어디에도 안 들어가는 줄을 만났다.
챗봇이 사용자에게 이렇게 말했다.
"기록상 ○○ 갤러리와는 2026년 아트페어에서 함께했습니다."
아트페어에 같이 나간 적이 없었다. 그 갤러리가 자기 공간에서 연 전시였다.
원인은 표 하나가 두 가지 일을 겸하고 있었던 점이다. 전시 정보를 다루는 서비스인데, history 라는 표에 두 종류의 줄이 섞여 있었다. 하나는 옛날 도록에서 긁어온 기록이고, 다른 하나는 지금 열리는 행사에 누가 나오는지 적은 명부다. 둘을 가르는 건 칸 하나였다 — 행사 번호가 비어 있으면 옛날 기록, 채워져 있으면 지금 명부.
우리 서비스로 등록한 전시는 명부 쪽에 쌓이는데, 이력을 조회하는 함수들이 그걸 옛날 기록과 똑같이 읽었다. 그래서 없는 사실이 문장으로 나왔다.
표를 둘로 가르기로 했다
성격이 정반대로 보였다.
옛날 기록 과거 · 우리 밖 · 안 바뀐다
지금 명부 현재 · 우리 안 · 계속 바뀐다
깔끔했다. 설계 문서에 그렇게 적었다.
세 번째 줄이 갈 곳이 없었다
문서를 쓰고 나서, 실제 데이터 네 줄을 늘어놓고 어디로 갈지 매겨봤다.
① 2019 A 페어 ← 도록에서 긁음
② 2023 B 페어 ← 도록에서 긁음
③ 2025 C 갤러리 전시 ← 우리 서비스로 열었다. 작년이라 끝났다
④ 2026 D 개인전 ← 우리 서비스, 지금 진행 중
①②는 옛날 기록. ④는 지금 명부. ③이 갈 곳이 없었다.
우리 서비스로 열었는데 이미 끝났다. 「옛날 기록」에 넣자니 거긴 도록에서 긁은 것만 담기로 한 표고, 「지금 명부」에 넣자니 지금이 아니다.
그리고 더 나쁜 걸 발견했다. 시간이 지나면 ④도 ③이 된다. 행사가 끝나는 순간 그 줄을 다른 표로 옮겨야 하나. 그러면 "언제 끝난 걸로 칠까"를 정해야 하고, 옮긴 뒤엔 등록한 사람이 오타를 못 고친다.
내가 잡은 기준이 사실은 두 개였다. 「도록이냐 우리 것이냐」와 「과거냐 현재냐」. 그 둘이 서로 엇갈리는데 표는 두 개뿐이니, 네 칸 중 두 칸이 비고 두 칸이 겹쳤다.
두 가지 기준으로 가르려면 표가 넷이어야 했다. 그런데 넷은 아무도 원하지 않는다.
표를 안 가르고 칸을 두 개 더했다
| 연도 | 행사 | 종류 | 출처 |
|---|---|---|---|
| 2019 | A 페어 | 아트페어 | 도록 |
| 2023 | B 페어 | 아트페어 | 도록 |
| 2025 | C 갤러리 전시 | 갤러리 전시 | 우리 서비스 |
| 2026 | D 개인전 | 갤러리 전시 | 우리 서비스 |
네 줄이 한 표에 그대로 있고, 무엇을 묻느냐에 따라 골라 읽는다. 이력을 물으면 전부 읽되 「종류」를 보고 말을 가른다 — "페어에 참가했다"와 "전시를 열었다"는 다른 문장이다. 순위를 셀 때는 「출처」가 도록인 것만 센다. 우리 서비스에 등록한 건 스스로 무한정 만들 수 있어서 순위가 부풀려지니까.
그리고 줄을 옮길 일이 영영 없어졌다. 행사가 끝나도 그 줄은 제자리다.
버릇 하나가 남았다. 표를 가르자는 생각이 들면, 나누기 전에 실제 데이터 몇 줄을 늘어놓고 손으로 배분해 본다. 머릿속에서는 두 종류만 떠오르는데, 줄을 세로로 세워 놓으면 거의 항상 세 번째가 나온다. 그게 나오면 기준이 하나가 아니라는 뜻이고, 기준이 둘이면 답은 표를 늘리는 게 아니라 칸을 늘리는 것이다.
한 가지 더. 처음에 "성격이 정반대다"라고 느낀 건 가장 뚜렷한 두 줄만 보고 있었기 때문이었다. ①과 ④. 양 끝을 보면 뭐든 반대로 보인다. 가운데가 어디에 있는지는 세어봐야 안다.