[연재] 성경 아틀라스 (1) 66권을 10개 시대로
"빠짐없이 넣었다"고 적어놓고, 세어봤더니 8권이 없었습니다
설계 문서에 이렇게 적혀 있습니다.
각 책이 반드시 한 시대에 포함된다. 10개 시대:
그 아래에 표가 하나 있어요. 왼쪽 칸에 시대 이름, 오른쪽 칸에 그 시대에 들어가는 책 이름. 창세기부터 요한계시록까지 66권이 열 칸에 나뉘어 들어가 있습니다. 규칙은 딱 한 줄이에요. 빠지는 책이 없다.
그래서 다 됐다고 생각했죠.
그런데 이 글을 쓰려고 데이터 파일을 하나씩 열어봤습니다. 아홉 번째 칸, 09-early-church.json — 초대교회와 바울 시대요. 파일 맨 위에 그 시대가 담당하는 책 목록이 적혀 있는데, 이렇게 되어 있었습니다.
사도행전, 로마서, 고린도전서, 고린도후서, 갈라디아서,
에베소서, 빌립보서, 골로새서, 데살로니가전서, 데살로니가후서,
디모데전서, 디모데후서, 디도서, 빌레몬서
열네 권입니다.
같은 시대를 가리키는 목록이 한 군데 더 있어요. 열 개 시대의 순서를 적어두는 manifest.json 이라는 파일인데, 거기 적힌 아홉 번째 칸은 스물두 권입니다. 열네 권 뒤에 히브리서·야고보서·베드로전서·베드로후서·요한1서·요한2서·요한3서·유다서가 더 붙어 있어요.

여덟 권이 한쪽에만 있습니다.
빌드를 돌리면 통과합니다. 화면도 멀쩡하게 뜨고요. 아무도 안 알려줘요. 왜냐면 검사기가 그 목록을 안 보거든요. 이건 나중에 다시 이야기하겠습니다.
오늘은 이 이야기예요. 성경 지도를 만든 이야기 같지만, 사실은 자료를 어떤 칸으로 나눌 것인가 이야기입니다. 그리고 그 칸을 정하는 일은 지금까지 만든 것 중에 기계에게 가장 못 맡긴 일이었어요.
먼저 하나만 짚고 갈게요. 이 글은 성경을 어떻게 해석하느냐는 이야기가 아닙니다. 저는 그럴 자격이 없고요. 66권이라는 자료 뭉치를 지도 위에 올리려고 어떻게 잘랐는가, 딱 그 이야기만 합니다.

처음엔 66권이 아니었습니다
이 도구의 첫 커밋은 7월 19일 오후 2시 25분입니다. 커밋 메시지가 이래요.
docs: bible map v1 design spec (사복음서)
괄호 안이 전부입니다. 사복음서. 마태·마가·누가·요한, 예수의 생애만 다루는 지도였어요.
그날 오후에 쓴 첫 설계 문서를 보면 범위를 아주 분명하게 못 박아뒀습니다.
v1 범위: 사복음서(예수의 생애)만. 사도행전(바울 선교여행 등)은 이번 범위에서 제외하고, v1이 동작하는 걸 먼저 확인한 뒤 별도 스펙으로 확장한다.
그리고 문서 맨 끝, '향후 확장' 항목에는 이렇게 적혀 있어요.
구약 전체 확장 여부는 v1 결과를 보고 재논의.
재논의. 그러니까 처음부터 66권을 노린 게 아니었습니다. 사복음서 하나가 되는지 보고, 되면 그때 생각하자는 거였어요.
그날 오후 2시 41분에 구현 계획을 쓰고, 2시 48분에 프로젝트 뼈대를 커밋했다가 1분 뒤에 통째로 되돌렸습니다(reset). 그리고 오후 3시 51분에 구현이 들어왔어요. 한 시간 반 만에 사복음서 지도가 돌아간 겁니다.
그날 저녁은 지도 자체를 손보는 데 다 썼습니다. 4시 5분에 지도 조작 개선 설계, 4시 46분에 반영. 7시 2분에 지도 투영 방식을 바꾸는 설계, 8시 13분에 반영. 8시 29분에 지도 범위를 더 넓히는 작업까지요. 이 지도 이야기는 다음 편에서 제대로 할게요.

그리고 다음 날 아침입니다.
07-20 08:42 브랜치 만듦 (feat/bible-atlas-66books)
07-20 08:43 feat: 사복음서 지도 → 성경 66권 시공간 아틀라스로 확장
07-20 09:14 feat: 모바일 반응형(핀치줌·하단 시트) + 하단 광고바 대응
07-20 09:15 본줄기에 합침
브랜치 이름에 66books 가 들어갑니다. 하루 만에 재논의가 끝난 거예요.
책 순서대로 늘어놓으면 그건 지도가 아니라 목차입니다
넓히기로 마음먹은 순간, 진짜 문제가 나왔습니다.
66권을 지도 위에 어떻게 얹느냐.
제일 쉬운 답은 성경 순서대로 늘어놓는 거예요. 창세기, 출애굽기, 레위기… 요한계시록. 화면 왼쪽에 66개 항목을 세로로 쭉 세워두고 누르면 그 책이 나오게. 만들기도 제일 쉽고요.
그런데 그건 지도가 아니라 목차입니다. 성경 앞장 넘기면 이미 있는 거예요. 굳이 지형도를 깔고 만들 이유가 없죠.
지도가 지도인 이유는 동시에 볼 수 있어서입니다. "이때 여기서 이 일이 있었고, 그동안 저쪽엔 저 나라가 있었다" 가 한 화면에 들어와야 지도예요. 그러려면 세로축이 책이 아니라 시간이어야 합니다.
문제는 책과 시간이 안 맞는다는 거예요. 열왕기상은 한 권인데 그 안에서 나라가 갈라집니다. 시편은 여러 시대에 걸쳐 쓰였고요. 욥기는 언제 이야기인지 아무도 확정 못 합니다. 책을 시간에 그냥 부을 수가 없어요.

그래서 칸을 먼저 정했습니다 — 열 개
순서를 거꾸로 갔습니다. 책부터 보고 나누는 게 아니라, 칸을 먼저 열 개 정해놓고 66권을 거기에 밀어 넣는 방식으로요.
설계 문서에 있는 표가 그겁니다.
| # | 시대 | 들어간 책 |
|---|---|---|
| 1 | 태초 | 창세기 1–11 |
| 2 | 족장 시대 | 창세기 12–50, 욥기 |
| 3 | 출애굽과 광야 | 출애굽기·레위기·민수기·신명기 |
| 4 | 정복과 사사 | 여호수아·사사기·룻기 |
| 5 | 통일 왕국 | 사무엘상하·열왕기상 1–11·역대상·시편·잠언·전도서·아가 |
| 6 | 분열 왕국과 예언자 | 열왕기상 12–열왕기하·역대하·이사야·예레미야·예레미야애가·호세아·요엘·아모스·오바댜·요나·미가·나훔·하박국·스바냐 |
| 7 | 포로와 귀환 | 에스겔·다니엘·에스라·느헤미야·에스더·학개·스가랴·말라기 |
| 8 | 복음서 | 마태·마가·누가·요한 |
| 9 | 초대교회와 바울 | 사도행전·로마서~빌레몬·히브리서·야고보서·베드로전후·요한1·2·3서·유다서 |
| 10 | 계시록과 일곱 교회 | 요한계시록 |
이 표를 그대로 자료 구조로 옮겼습니다. 칸 하나가 파일 하나예요.
data/eras/01-beginnings.json 17,681B
data/eras/02-patriarchs.json 33,600B
data/eras/03-exodus.json 27,158B
data/eras/04-conquest.json 30,599B
data/eras/05-united-kingdom.json 37,012B
data/eras/06-divided-kingdom.json 33,619B
data/eras/07-exile-return.json 29,440B
data/eras/08-gospels.json 48,878B
data/eras/09-early-church.json 34,185B
data/eras/10-revelation.json 23,432B
data/eras/manifest.json 2,233B
다 합쳐서 315킬로바이트쯤 됩니다. 이 안에 사건이 369개 들어 있어요. 시대별로는 32·36·36·36·36·38·31·54·42·28개입니다. 복음서 칸이 54개로 제일 많은데, 그건 원래 이 도구가 복음서 지도로 태어났기 때문이에요.

칸마다 그 시대가 언제인지도 한 줄로 적어뒀습니다.
| 시대 | 적어둔 연대 |
|---|---|
| 태초 | 태초 (연대 미상) |
| 족장 시대 | BC 2100–1800년경 |
| 출애굽과 광야 | BC 1446–1406년경 |
| 정복과 사사 | BC 1406–1050년경 |
| 통일 왕국 | BC 1050–930년경 |
| 분열 왕국과 예언자 | BC 930–586년경 |
| 포로와 귀환 | BC 605–430년경 |
| 복음서 | BC 4년경 – AD 30년경 |
| 초대교회와 바울 | AD 30–68년경 |
| 계시록과 일곱 교회 | AD 95년경 |
첫 칸 보이시죠. "태초 (연대 미상)". 열 칸 중 하나는 연도를 못 적었습니다.
이걸 그냥 비워둘 수도 있었고, 아무 숫자나 넣을 수도 있었어요. 그런데 비워두면 화면이 이상해지고, 숫자를 넣으면 그건 거짓말이잖아요. 모른다는 걸 적는 칸으로 쓴 겁니다. 앞 편에서 보험 계산기에 "자료 없음"을 박아둔 거랑 똑같은 결정이에요.
설계 문서에도 이걸 원칙으로 적어놨습니다.
모든 연대·경계는 추정치이며 UI가 "추정" 맥락을 유지(정확한 사실로 오인 방지).
'기타' 칸을 안 만든 게 제일 어려운 결정이었습니다
칸을 열 개로 정하면 반드시 애매한 게 나옵니다. 어디에도 딱 안 맞는 책이요.
이때 제일 편한 답은 '기타' 칸을 하나 더 만드는 것입니다. 열한 번째 칸을 만들어서 애매한 걸 다 거기 넣으면 표가 깔끔하게 채워져요. 아무도 뭐라 안 합니다.
그런데 그 순간 지도가 아니게 됩니다.
'기타'에 들어간 책은 시간축 위에 자리가 없어요. 지도 어디에도 안 뜨고, 시대를 넘겨도 안 나옵니다. 그건 그냥 처리 안 한 걸 처리한 것처럼 보이게 만드는 서랍이에요. 서랍이 하나 생기면 애매한 게 전부 거기로 갑니다. 그리고 두 달쯤 지나면 아무도 그 서랍을 안 열어요.
그래서 규칙을 한 줄로 박았습니다. 각 책이 반드시 한 시대에 속한다. 기타 없음.
이건 기계가 정해줄 수 있는 일이 아닙니다. 자동으로 나눌 방법이 없어요. 시편을 어느 왕 시대에 붙일지, 욥기를 몇 번째 칸에 넣을지는 누가 결정하고 그 결정에 이름을 다는 일입니다. 설계 문서의 표는 그 결정의 결과물이에요.

욥기를 어디에 넣을 것인가
가장 대표적인 게 욥기였습니다.
욥기는 시대를 알 수 없는 책이에요. 이스라엘 이야기도 아니고, 왕도 안 나오고, 다른 책과 이어지는 사건도 없습니다. 성경 순서로는 시가서 쪽에 있는데, 그 자리는 시간 순서가 아니라 성격으로 묶은 자리라 시간축에 쓸 수가 없어요.
결정은 2번 칸(족장 시대) 이었습니다. 족장 시대 파일에 적어둔 시대 설명이 이렇게 끝납니다.
…한 가문을 통해 온 민족과 땅에 복을 흘려보내시려는 하나님의 계획이 기근·갈등·이주 속에서도 신실하게 이어지며, 우스 땅 욥의 시련과 회복이 같은 하늘 아래 놓인다.
"같은 하늘 아래 놓인다"는 표현이 좀 재미있죠. 확정한 게 아니라 나란히 뒀다는 말이에요.
실제 데이터는 이렇습니다. 족장 시대 36개 사건 중 36번째, 맨 마지막에 딱 하나 붙어 있어요.
title : 욥의 시련과 회복
location_id : uz (우스 땅)
character_ids: job, eliphaz, bildad, zophar
icon : worship
citation : 욥기 42:12
date_approx : 족장 시대
여기서 마지막 줄을 봐주세요. date_approx 는 그 사건이 언제인지 적는 자리입니다. 같은 파일의 다른 사건들은 "기원전 약 2091년" 같은 게 들어가 있어요. 그런데 욥만 "족장 시대" 라고 적혀 있습니다.
연도 자리에 시대 이름이 들어간 겁니다. 형식은 좀 어긋나죠. 그런데 저는 이게 맞다고 봤어요. 모르는 걸 아는 척하는 것보다 칸을 어긋나게 쓰는 게 낫습니다.
욥기 66권 중 한 권에 사건은 한 개. 42장 12절 하나만 인용돼 있어요. 결말 구절입니다. 욥기 전체를 지도 위 점 하나로 줄인 셈인데, 이건 축소가 맞습니다. 그런데 우스 땅에 점을 안 찍으면 욥기는 이 지도에서 아예 없는 책이 돼요. 둘 중 하나를 고른 겁니다.

이미 있던 걸 다시 만들지 않았습니다
66권으로 넓히면서 제일 실수하기 쉬운 지점이 여기였어요.
기존 사복음서 지도에는 이미 데이터가 네 뭉치 쌓여 있었습니다. 사건 목록(harmony_events), 지명(locations), 인물(characters), 지역 경계(regions). 하루치 작업이 들어간 것들이에요.
새 구조는 "시대 파일 하나에 그 시대 것이 다 들어간다"입니다. 기존 파일들은 그 모양이 아니었고요. 그러니 새 형식으로 다시 만들면 구조가 깨끗해집니다. 기계한테 시키면 금방 하고요.
안 했습니다. 옮겼어요.
기존 네 뭉치를 여덟 번째 칸(gospels)으로 통째로 편입했습니다. 지금 data/ 폴더에는 eras/ 하나만 남아 있어요. 옛 파일들은 사라진 게 아니라 8번 칸 안에 들어가 있는 겁니다. 48.9킬로바이트로 열 칸 중 제일 큰 게 그 이유예요.
문제는 형식이 다르다는 거였습니다. 복음서 사건은 인용 구절이 네 개예요. 같은 사건을 마태·마가·누가·요한이 각각 어디에 적었는지를 다 갖고 있어야 하거든요. 안 다루는 복음서는 빈칸(null)이고요. 지금 세어보니 그 빈칸이 88개 있습니다. 반면 나머지 아홉 칸의 사건은 인용 구절이 하나예요. "창세기 12:1-9" 처럼요.
두 형식을 하나로 통일하려면 어느 쪽이든 손해를 봐야 합니다. 복음서를 한 개로 줄이면 네 복음서를 비교하는 기능이 죽고, 다 네 개짜리로 늘리면 구약 사건마다 쓸데없는 빈칸이 세 개씩 생겨요.
그래서 통일 안 했습니다. 칸마다 깃발을 하나 달았어요.
has_gospel_harmony: true ← 8번 칸만
has_gospel_harmony: false ← 나머지 아홉 칸
이 깃발이 켜져 있으면 인용 구절이 네 개짜리 묶음이고, 꺼져 있으면 문자열 하나입니다. 두 형식이 그냥 같이 삽니다.
깔끔한 설계는 아니에요. 그런데 이미 돌아가는 걸 다시 만드는 것보다 훨씬 쌉니다. 다시 만들면 그 안에 있던 검증된 좌표와 인용 구절을 전부 다시 확인해야 하잖아요.

아홉 칸을 동시에 채웠습니다
칸이 정해지고 나서 남은 건 채우는 일입니다. 아홉 칸에 사건 300개가 넘게 들어가야 했어요.
설계 문서에 방식이 적혀 있습니다.
시대별 데이터는 병렬 서브에이전트가 스키마에 맞춰 작성하고, 참조 무결성 검증을 통과해야 통합된다.
쉽게 말하면 아홉 칸을 하나씩 순서대로 채운 게 아니라 동시에 채웠다는 뜻이에요. 각 칸이 서로를 안 보니까 동시에 해도 됩니다. 이게 칸을 먼저 나눠둔 덕이에요.
그런데 뒷문장이 더 중요합니다. 검증을 통과해야 들어온다. 동시에 여러 개를 채우면 반드시 어긋나거든요. 5번 칸이 쓴 지명을 6번 칸이 다르게 부르고, 사건 번호가 겹치고, 인물 이름이 살짝 다르고요.
그래서 검사기(validate.py)를 먼저 만들어놓고 채웠습니다. 검사 항목은 이렇습니다.
- 사건이 가리키는 지명이 그 시대 안에 실제로 있나 — 없으면
unknown location_id - 사건에 붙은 인물이 실제로 있나 — 없으면
unknown character_id - 같은 시대 안에서 사건 번호가 겹치나 — 겹치면
duplicate order - 아이콘이 정해진 목록에 있나 — 아니면
invalid icon - 인용 구절이 비어 있나 — 비면
missing citation - 복음서 칸이면 인용이 정확히 네 복음서 키를 갖고 있나
- 시대 id가 겹치나
아이콘 목록은 열네 개로 못 박아뒀어요. teaching · miracle · meal · healing · conflict · travel · passion · covenant · battle · judgment · worship · exile · birth · death. 여기 없는 걸 쓰면 빌드가 멈춥니다. 아이콘이 열다섯 개째로 늘어나는 순간 지도 범례가 무너지거든요.
그리고 빌드는 이렇게 끝납니다.
errors = validate.validate_all(eras)
if errors:
raise SystemExit("데이터 검증 실패:\n" + "\n".join(errors))
하나라도 걸리면 그냥 멈춥니다. 경고를 찍고 넘어가지 않아요. 어긋난 데이터로 지도를 그리면 그건 틀린 지도인데, 틀린 지도는 안 나오는 지도보다 나쁩니다.

칸을 먼저 나눠서 좋았던 게 하나 더 있어요. 빌드가 이렇게 돼 있습니다.
manifest 순서대로 존재하는 시대 파일만 로드한다(콘텐츠를 점진적으로 채워도 프레임워크가 동작하도록).
칸이 열 개 중 세 개만 채워져 있어도 사이트가 뜹니다. 나머지는 그냥 안 보여요. 아홉 칸을 동시에 채우는 동안에도 매 순간 배포 가능한 상태였다는 뜻입니다.
그런데 검사기가 안 보는 게 있습니다
여기서 맨 앞으로 돌아갑니다. 여덟 권이 없어진 그 목록이요.
검사기가 보는 건 사건입니다. 사건이 가리키는 지명·인물·번호·아이콘·인용 구절. 전부 사건 단위예요.
그런데 각 시대 파일 맨 위에 있는 books 목록은 사건이 아닙니다. 그냥 "이 칸은 이 책들을 담당한다"고 적어둔 메모예요. 검사기가 이걸 안 봅니다. 검사 항목 일곱 개 어디에도 books 가 없어요.
그래서 이렇게 됩니다.
- 9번 칸: 매니페스트엔 22권, 파일 안엔 14권. 여덟 권 차이. 빌드 통과.
- 5번 칸: 매니페스트엔 "열왕기상 1-11", 파일 안엔 그냥 "열왕기상".
- 6번 칸: 매니페스트엔 "열왕기상 12-", 파일 안엔 그냥 "열왕기상".
5번과 6번 보이시죠. 설계에서는 열왕기상을 11장에서 잘라 두 시대에 나눠 담기로 했는데, 파일 안에서는 그 자름표가 없어졌습니다. 열왕기상이 두 칸에 통째로 들어가 있어요. "각 책이 반드시 한 시대에 속한다"는 규칙이 정확히 여기서 깨집니다.

왜 이렇게 됐냐면, 같은 목록을 두 군데에 적어놨기 때문입니다. 매니페스트에 한 번, 각 시대 파일 안에 또 한 번. 같은 걸 두 벌 적으면 반드시 어긋나요. 그리고 아무도 안 보는 쪽이 조용히 틀립니다.
더 정직하게 말하면, 이 목록은 지금 화면이 안 씁니다. 화면이 실제로 쓰는 건 각 사건에 달린 인용 구절이지 이 책 목록이 아니에요. 그래서 어긋나도 아무 일이 안 일어납니다.
아무 일이 안 일어나는 게 문제예요. 저는 이 표를 보고 "66권 다 넣었다"고 믿고 있었으니까요.
세어봤습니다 — 66권 중 34권
기왕 세는 김에 끝까지 셌습니다. 사건이 실제로 인용한 책이 몇 권인가.
복음서 아닌 아홉 칸의 인용 구절 315개를 다 뽑아서 책 이름만 남기고 중복을 지웠더니 30권 나왔습니다.
창세기 출애굽기 레위기 민수기 신명기 여호수아 사사기 룻기
사무엘상 사무엘하 열왕기상 열왕기하 역대하 에스라 느헤미야 에스더
욥기 이사야 예레미야 예레미야애가 에스겔 다니엘 호세아 아모스
요나 학개 스가랴 말라기 사도행전 요한계시록
여기에 복음서 네 권을 더하면 34권입니다.
66에서 34를 빼면 32권. 그 서른두 권은 표에는 칸이 배정돼 있는데, 지도 위에 자기 사건이 하나도 없습니다.
어떤 책들이냐면요. 역대상, 시편, 잠언, 전도서, 아가. 요엘, 오바댜, 미가, 나훔, 하박국, 스바냐. 그리고 로마서부터 유다서까지 신약 서신 스물한 권 전부요.
목록을 보면 규칙이 보입니다. 사건이 없는 책들이에요. 시편은 노래고 잠언은 잠언입니다. 로마서는 편지고요. "언제 어디서 무슨 일이 있었다"가 없으니 지도 위에 찍을 점이 안 나옵니다.
그러니까 이건 게으름이 아니라 이 지도 방식의 한계입니다. 시간과 장소를 축으로 잡는 순간, 시간도 장소도 없는 책은 올라갈 자리가 없어요. 칸에 이름을 넣는 것까지는 됐는데 거기서 멈춘 겁니다.
솔직히 말하면 저는 이걸 이번에 세면서 처음 알았어요. 화면만 봐서는 절대 안 보입니다. 시대를 넘기면 사건이 계속 나오니까 다 채워진 것 같거든요. 비어 있는 건 화면에 안 나타나니까 안 보여요.

갈릴리가 바다 위로 삐져나왔습니다
칸을 나누고 나면 각 칸마다 그 시대의 영역을 지도 위에 칠하게 됩니다. 여기서 눈으로 잡은 버그가 하나 나왔어요.
갈릴리 쪽 영역이 해안선 밖으로 삐져나와 있었습니다. 육지에 칠해야 할 색이 바다 위에 얹혀 있었어요.
원인은 단순합니다. 각 시대의 영역은 좌표 몇 개를 이어 만든 다각형인데, 그 좌표를 손으로 찍었거든요. 해안선은 실측 데이터고요. 손으로 찍은 선과 실측 선이 맞을 리가 없죠.
고치는 방법은 두 가진데, 좌표를 하나하나 해안선에 맞춰 다시 찍는 게 하나. 이건 시대가 열 개니까 열 번 해야 하고, 해안선 데이터를 손대면 또 다시 해야 합니다.
택한 건 다른 쪽입니다. 그릴 때 육지 밖으로 나가는 부분을 잘라내기. 지도를 그릴 때마다 육지 모양을 마스크로 씌워서 그 밖은 아예 안 그려지게 했어요. 그러면 좌표가 좀 튀어나와 있어도 화면에는 해안선에 딱 맞게 나옵니다.
설계 문서에 이유까지 적혀 있어요.
shapely 미가용이라 빌드 타임 폴리곤 교차 대신 런타임 마스크 사용.
도형 계산 라이브러리를 못 쓰는 환경이라 미리 잘라두는 대신 그릴 때마다 가린다는 뜻입니다. 좀 미련한 방법인데 결과가 같고 손이 덜 가요.
여기서 하고 싶은 말은 이겁니다. 이건 자료로는 안 잡히는 문제였어요. 좌표는 전부 유효했고, 검사기도 통과했고, 숫자 어디에도 이상이 없었습니다. 화면을 눈으로 봐야만 "어, 저게 왜 바다에 있지" 가 나옵니다.
검사기가 잡는 건 틀린 값이고, 눈이 잡는 건 틀려 보이는 그림이에요. 이 둘은 겹치지 않습니다.

그래서 사람은 어디에 남았나
이번 편에서 사람이 한 일을 정리하면 이렇습니다.
첫째, 칸을 몇 개로 할지 정한 것. 열 개라는 숫자에 근거는 없어요. 여덟 개도 되고 열두 개도 됩니다. 다만 누군가는 정해야 하고, 정하고 나면 나머지가 전부 거기에 맞춰집니다.
둘째, '기타' 칸을 안 만든 것. 만들었으면 훨씬 편했을 거예요. 애매한 게 하나도 안 남았을 거고요. 대신 그 서랍 안의 책들은 영영 지도에 안 올라갔겠죠.
셋째, 욥기를 2번 칸에 넣기로 한 것. 이건 자동으로 나올 수가 없는 답입니다. 그리고 연도 자리에 "족장 시대"라고 적어 확정 안 했다는 걸 남겨둔 것도요.
넷째, 다시 만들지 않고 옮긴 것. 형식이 안 맞으면 다시 만드는 게 깨끗한데, 깃발 하나 달아서 두 형식이 같이 살게 했습니다. 이미 검증된 데이터를 버리지 않으려고요.
다섯째, 세어본 것. 이게 제일 큽니다. 표에 66권이 적혀 있고 빌드가 통과하고 화면이 잘 뜨는데도, 실제로 사건이 걸린 책은 34권이었어요. 9번 칸에서는 여덟 권이 사라져 있었고, 열왕기상은 두 칸에 통째로 들어가 있었습니다.
이건 아무도 안 알려줍니다. 검사기가 안 보는 자리라서요. 그리고 검사기가 안 보는 자리는 누가 세어보기 전까지 계속 맞는 것처럼 보입니다.
기계가 잘한 건 분명해요. 아홉 칸을 동시에 채웠고, 사건 369개의 지명과 인물 참조가 어긋나지 않게 맞췄습니다. 그건 손으로는 절대 못 할 양이에요.
그런데 기계는 "칸이 열 개여야 한다" 고 말해주지 않고, "이 서랍은 만들면 안 된다" 고도 말해주지 않고, "표에는 66권이라 적혀 있는데 실제로는 34권입니다" 라고도 말해주지 않았습니다. 그건 물어봐야 나오는 거고, 무엇을 물어볼지가 결국 사람 몫이더라고요.
그래서 저는 이 도구에서 제일 마음에 드는 게 지도가 아니라 date_approx: "태초 (연대 미상)" 이라는 한 줄입니다. 모르는 걸 모른다고 적어둔 자리요. 그게 있으면 나중에 누가 채울 수 있거든요.
다음 편은 같은 도구의 나머지 절반입니다. 칸을 나눴으니 이제 그 위에 무엇을 그릴 것인가 인데, 여기서 아주 곤란한 문제를 하나 만납니다. 3000년 전 지도에 국경선을 그으면 안 된다는 거예요.
#성경지도 #성경아틀라스 #바이블맵 #성경66권 #성경시대구분 #성경공부 #성경통독 #구약성경 #신약성경 #복음서 #족장시대 #출애굽 #분열왕국 #포로귀환 #초대교회 #요한계시록 #욥기 #데이터구조 #JSON #데이터검증 #스키마 #파이썬 #자바스크립트 #정적사이트 #지도만들기 #개인프로젝트 #사이드프로젝트 #도구만들기 #AI개발 #휴먼인더루프