시리즈: AI 협업 개발기: 타로 마스터 프로젝트
키워드: 데이터 설계, 콘텐츠 구조화, AI 텍스트 생성, 타로 해석, JSON 스키마
코드보다 먼저, 데이터가 있어야 한다
스펙이 정해졌으니 코딩을 시작하고 싶은 유혹이 있었다. 하지만 이 프로젝트에서 가장 중요한 건 코드가 아니라 데이터였다. 78장의 카드 각각에 이름, 이미지 경로, 정방향 해석, 역방향 해석, 키워드가 필요했다. 단순 계산으로도 최소 156개의 해석 텍스트가 필요한 셈이다.
타로 마스터에서 사용자가 실제로 "경험"하는 건 카드 해석 텍스트다. UI가 아무리 화려해도 해석이 빈약하면 앱의 가치는 없다. 콘텐츠가 곧 제품인 프로젝트에서 데이터 설계는 아키텍처 설계와 동급으로 중요하다.
데이터 스키마를 먼저 잡다
Claude와 함께 카드 하나의 데이터 구조를 먼저 정의했다. 어떤 필드가 필요한지, 각 필드의 역할은 무엇인지 대화를 통해 정리했다.
최종적으로 확정된 구조는 이랬다. 각 카드에는 고유 식별자(id), 영문 이름(name), 한국어 이름(nameKr), 카드 번호(number), 아르카나 유형(type), 이미지 경로(image)가 기본 정보로 들어가고, 정방향(upright)과 역방향(reversed) 각각에 키워드 배열(keywords)과 해석 텍스트(meaning)가 포함된다.
여기서 한 가지 의사결정이 있었다. 해석 텍스트를 한 문단으로 할 것인가, 여러 항목으로 쪼갤 것인가. 여러 항목으로 나누면 UI에서 유연하게 표시할 수 있지만, 타로 해석의 특성상 "흐름"이 중요하다. 개별 문장을 나열하면 점술의 분위기가 깨진다. 결국 자연스러운 문단 형태를 선택했다.
메이저 아르카나 22장: AI가 생성하고, 사람이 검증하다
메이저 아르카나는 타로의 핵심이다. The Fool부터 The World까지 22장은 각각 강력한 상징성과 의미를 가진다. 이 22장의 해석 텍스트를 Claude에게 일괄 생성 요청했다.
요청 시 몇 가지 가이드라인을 주었다. 해석은 한국어로 자연스러운 문장을 사용할 것, 키워드는 4개 내외로 간결하게 할 것, 정방향과 역방향이 단순히 반대 의미가 아니라 카드 고유의 맥락을 반영할 것, 점술 특유의 조언 톤을 유지할 것 등이었다.
결과물의 품질은 놀라울 정도로 괜찮았다. 예를 들어, "바보(The Fool)" 카드의 정방향 해석은 "새로운 여정의 시작을 알립니다. 두려움 없이 미지의 세계로 발을 내딛을 때입니다. 순수한 마음으로 새로운 가능성을 받아들이세요"였고, 역방향은 "무모한 행동을 경고합니다. 충분한 준비 없이 뛰어드는 것은 위험할 수 있습니다"였다.
하지만 검증 없이 그대로 사용하진 않았다. 각 카드의 전통적인 의미와 대조해가며 부자연스러운 표현이나 해석 방향이 어긋난 부분을 수정했다. AI가 초안을 만들고, 사람이 품질을 보정하는 전형적인 협업 패턴이었다.
마이너 아르카나 56장: 규모의 문제
진짜 도전은 마이너 아르카나였다. 4개 슈트 × 14장 = 56장, 정역방향 합치면 112개의 해석 텍스트가 필요했다. 메이저 아르카나처럼 하나하나 검증하기엔 물리적으로 부담스러운 양이다.
여기서 전략을 바꿨다. 슈트별로 공통 주제를 먼저 정의하고, 그 안에서 번호별 진행 흐름을 설계한 것이다.
Wands(지팡이)는 열정, 창의력, 행동의 영역이다. Ace에서 시작해 King까지 "영감의 불꽃 → 실행 → 확장 → 도전 → 완성"의 서사가 흐른다. Cups(잔)는 감정과 관계, Swords(검)는 지성과 갈등, Pentacles(동전)는 물질과 현실을 다룬다.
이 프레임워크를 Claude에게 먼저 설명한 뒤 슈트 단위로 14장씩 생성 요청했다. 프레임워크가 있으니 카드 간의 일관성이 유지됐고, 같은 슈트 안에서 비슷한 말이 반복되는 문제도 줄었다. "AI에게 맥락을 충분히 주면 결과물의 일관성이 올라간다"는 것을 실감한 순간이었다.
데이터 파일 구조의 결정
78장의 데이터를 어떤 파일 구조로 관리할 것인가도 고민이었다. 크게 세 가지 선택지가 있었다.
첫째, 단일 파일에 78장을 모두 넣는 방식. 관리가 단순하지만 파일이 거대해진다. 둘째, 메이저/마이너를 분리하는 방식. 논리적이지만 import가 번거로워진다. 셋째, 슈트별로 완전히 분리하는 방식. 가장 모듈화되지만 이 규모에서는 오버엔지니어링이다.
결국 단일 파일을 선택했다. 이유는 간단하다. 이 데이터는 런타임에 전체가 필요하고, 부분 로딩의 이점이 없다. 코드 스플리팅이 의미 없는 정적 데이터에 파일을 쪼개는 건 복잡성만 높일 뿐이다. 메이저 아르카나와 마이너 아르카나를 별도 배열로 선언하고, export 시 합치는 방식으로 파일 내부에서만 논리적으로 구분했다.
한국어 해석의 톤 잡기
영어 타로 해석과 한국어 해석 사이에는 미묘한 차이가 있다. 영어권에서는 "You are entering a period of transformation"처럼 2인칭 직접 화법이 일반적이다. 한국어에서 이걸 그대로 번역하면 "당신은 변화의 시기에 접어들고 있습니다"가 되는데, 어색하진 않지만 한국적 점술의 분위기와는 거리가 있다.
한국에서 점을 볼 때의 어투를 떠올려봤다. "~하는 시기입니다", "~에 주의하세요", "~할 때입니다"와 같은 권유형이 자연스럽다. 2인칭 주어 없이 상황을 서술하고 조언하는 형태다.
이 톤을 AI에게 명확히 지시했고, 전체 78장에 걸쳐 일관된 어투를 유지할 수 있었다. 프롬프트 한 줄이 156개 텍스트의 톤을 결정한 셈이다.
키워드 설계: 검색이 아니라 직관을 위한 것
각 카드에 4개 내외의 키워드를 붙였다. 이 키워드의 목적은 검색 기능이 아니다. 사용자가 카드 해석을 읽기 전에 핵심 의미를 한눈에 파악하기 위한 "해석의 앵커"다.
키워드 선정 기준도 정했다. 추상적인 단어(예: "에너지", "변화")보다 구체적인 상태(예: "새로운 시작", "재정적 안정")를 선호했다. 같은 슈트 내에서 키워드가 겹치지 않도록 했다. 정방향과 역방향의 키워드가 단순 반의어 관계가 되지 않도록 주의했다. 예를 들어, 정방향이 "성공"이면 역방향은 "실패"가 아니라 "성급함" 같은 원인 측면의 키워드를 배치했다.
역방향(Reversed) 해석의 철학
타로에서 역방향 카드의 해석은 학파마다 다르다. 크게 세 가지 관점이 있다. 정방향의 반대 의미로 보는 관점, 정방향 에너지의 약화 또는 내면화로 보는 관점, 그리고 정방향의 부정적 측면이 강조된 것으로 보는 관점이다.
타로 마스터에서는 세 번째 관점을 주로 채택했다. 단순히 "반대"로 읽는 것은 해석의 깊이가 떨어지고, "약화"는 너무 모호하다. "이 카드가 가진 에너지가 과잉되거나 왜곡되면 어떤 문제가 생기는가"라는 질문으로 역방향을 풀어냈다.
예를 들어, "마법사(The Magician)" 정방향이 "창조력, 의지력, 집중"이라면, 역방향은 단순히 "무능력"이 아니라 "속임수, 재능 낭비, 조작"이다. 능력이 있지만 그것이 잘못된 방향으로 쓰이고 있다는 뉘앙스다.
이런 해석 철학을 AI에게 설명하는 것도 흥미로운 경험이었다. "역방향은 정방향의 그림자(shadow) 측면"이라고 표현하니 Claude가 그 맥락을 잘 반영한 텍스트를 생성해줬다.
데이터 품질 검증: 어떻게 했나
156개의 해석 텍스트가 만들어진 후, 전수 검사 대신 샘플링 검증을 했다. 메이저 아르카나 22장은 전수 검토했다. 이 카드들은 사용자가 가장 많이 접하고, 해석에 대한 기대치도 높기 때문이다.
마이너 아르카나는 슈트별로 Ace, Five, Ten, Court 카드(Page/Knight/Queen/King)를 검증했다. Ace는 시작의 의미, Five는 갈등의 의미, Ten은 완성의 의미로 각 슈트의 서사 흐름이 맞는지 확인하는 체크포인트 역할을 했다. Court 카드는 인물 카드라 해석 방식이 다르므로 별도 검증이 필요했다.
이 검증 과정에서 수정한 것들은 주로 "한국어 표현의 자연스러움"이었다. AI가 생성한 텍스트는 문법적으로는 맞지만 "사람이 실제로 이렇게 말하진 않는다"는 미묘한 부자연스러움이 간혹 있었다.
이 과정에서 배운 것
첫째, 콘텐츠 중심 프로젝트에서 데이터 설계는 첫 번째 마일스톤이다. 코드는 데이터 구조가 확정된 후에 쓰는 게 맞다. 데이터 스키마가 바뀌면 UI부터 로직까지 전부 영향받기 때문이다.
둘째, AI를 활용한 대량 텍스트 생성에서 핵심은 "프레임워크 먼저, 생성 나중에"다. 슈트별 주제 → 번호별 서사 흐름 → 톤 가이드라인을 먼저 정의하고 생성을 요청하면 일관성이 크게 향상된다.
셋째, 전수 검증이 불가능하면 샘플링 전략을 세워야 한다. 무작위 샘플링보다 구조적으로 중요한 포인트를 골라 검증하는 것이 효율적이다.
다음 편 예고
78장의 데이터가 준비됐다. 이제 이 카드들을 화면에 보여줄 차례다. 별이 흐르는 다크 테마, 3D 카드 뒤집기 애니메이션, 켈틱 크로스의 전통적인 십자형 배치까지 — 신비로운 분위기의 UI를 어떻게 설계하고 구현했는지 3편에서 다룬다.
이 글은 "AI 협업 개발기: 타로 마스터 프로젝트" 시리즈의 2편입니다.
'개발' 카테고리의 다른 글
| 5편: 완성 그리고 회고 — AI 협업 개발에서 배운 것들 (0) | 2026.02.17 |
|---|---|
| 4편: 이미지 소싱의 현실 — 퍼블릭 도메인과의 사투 (0) | 2026.02.17 |
| 3편: 신비로운 UI를 코드로 — 다크 테마와 카드 애니메이션 (0) | 2026.02.17 |
| 1편: 아이디어에서 스펙까지 — AI에게 "뭘 만들지"를 함께 정하다 (0) | 2026.02.17 |
| 🔮 AI와 함께 타로 웹앱을 만들다 — 시리즈 개요 (0) | 2026.02.17 |
