cyh-lab.com
← 블로그 목록으로

cyh-lab.com 개발기 · 2026-08-05

파티게임 제시어 데이터를 Claude로 만든 방법

타입부터 정의하고 포맷을 명확히 지정해서 요청했더니 바로 쓸 수 있는 데이터가 나왔다. 난이도·중복 검수는 직접 한 이야기까지 정리했다.

작성자: cyh-lab.com 운영자

charades.cyh-lab.com을 만들면서 가장 품이 많이 든 작업은 코드가 아니라 데이터였다. 몸으로 말해요 하나만 해도 카테고리별·난이도별 제시어가 필요하고, 이구동성·스무고개·사진 맞히기까지 합치면 수백 개 항목을 준비해야 했다. 이걸 Claude를 활용해서 빠르게 만든 과정을 정리해둔다.

데이터 구조부터 먼저 잡았다

제시어를 마구잡이로 모으기 전에 구조를 먼저 정했다. 구조 없이 데이터를 모으면 나중에 코드에 맞게 재가공하는 데 시간이 더 걸린다.

// 몸으로 말해요 제시어 타입
type Word = {
  word: string
  category: '동물' | '음식' | '직업' | '영화' | '스포츠' | '사물' | '곤충'
  difficulty: '쉬움' | '보통' | '어려움'
}

이 구조를 Claude한테 먼저 보여주고 데이터를 요청했다.

Claude에게 데이터 생성 요청한 방식

그냥 "제시어 만들어줘"라고 하면 중구난방으로 온다. 포맷을 명확하게 지정해야 바로 쓸 수 있는 결과가 나왔다.

다음 타입에 맞게 몸으로 말해요 제시어를 JSON으로 만들어줘.

type Word = {
  word: string
  category: '동물' | '음식' | '직업' | '영화' | '스포츠' | '사물' | '곤충'
  difficulty: '쉬움' | '보통' | '어려움'
}

조건:
- 각 카테고리마다 쉬움 10개, 보통 10개, 어려움 10개
- 쉬움: 누구나 금방 알아볼 수 있는 것 (예: 강아지, 밥)
- 보통: 대부분 알지만 표현하기 애매한 것 (예: 드라이기, 배드민턴)
- 어려움: 알아도 몸으로 표현하기 까다로운 것 (예: 착지, 짝사랑)
- 결과는 JSON 배열로만 출력

이렇게 하면 바로 파싱해서 쓸 수 있는 형태로 온다.

스무고개 데이터는 다르게 접근했다

스무고개는 제시어 하나에 예/아니오 힌트가 세트로 있어야 유용하다. 게임 중에 힌트를 참고할 수 있게 하려고 힌트도 같이 생성했다.

스무고개 제시어와 힌트를 아래 형식으로 만들어줘.

{
  "word": "제시어",
  "category": "동물",
  "difficulty": "보통",
  "hints": [
    "다리가 네 개다",
    "육식동물이다",
    "집에서 기르는 경우가 있다"
  ]
}

동물 카테고리 보통 난이도 10개.
힌트는 너무 직접적이지 않게, 3~5개.

검수는 직접 했다

Claude가 만들어준 데이터를 그대로 쓰지는 않았다. 두 가지를 직접 확인했다.

첫째, 난이도가 실제로 맞는지. "쉬움"인데 표현하기 애매한 단어가 섞여 있거나, "어려움"인데 너무 쉬운 게 들어올 때가 있었다. 이건 직접 해봐야 알 수 있는 부분이라 게임을 몇 번 돌려보면서 걸러냈다.

둘째, 중복 여부. 카테고리별로 따로 만들다 보니 같은 단어가 다른 카테고리에 들어오는 경우가 생겼다. 스크립트 짜서 중복 체크했다.

// 중복 체크 스크립트
const words = require('./data/words.json')
const seen = new Set()
const duplicates = []

words.forEach((item: Word) => {
  if (seen.has(item.word)) {
    duplicates.push(item.word)
  }
  seen.add(item.word)
})

console.log('중복 단어:', duplicates)

결과

카테고리 7개 × 난이도 3단계 기준으로 제시어 수백 개를 하루 안에 만들었다. 직접 찾아서 입력했으면 며칠은 걸렸을 작업이다. AI로 초안 만들고 직접 검수하는 방식이 이런 데이터 작업에는 꽤 잘 맞았다.