2일간의 대규모 세션을 마무리합니다. 코드 리팩토링부터 분위기 만들기, NPC 개성 극대화, LLM 프롬프트 전문가 감사까지.

이번 세션 전체 타임라인

작업 커밋
i18n 완전 적용 (639키, 에이전트 6명) 1
OG 썸네일 + 메타 태그 1
리팩토링 (버그 수정, GAME 상수, 모듈 추출) 1
완성도 개선 (도슨트 라벨, 말풍선 동기화, 대화 순서) 1
도슨트 하드코딩 메뉴 → LLM 자유 대화 1
분위기 개선 (BGM, 인트로 카메라, NPC 사전 시뮬) 1
실제 BGM 적용 (lo-fi) 1
NPC 전면 개편 (25명 이름 + 개성 + quirk) 1
LLM 프롬프트 전문가 감사 + 전면 개선 1
대화 중 NPC 따라오기 1
유진 이중 인사 수정 + ambient 채팅 억제 1
DevLog 4
합계 15커밋

NPC 전면 개편

이름 — 개성이 느껴지는 이름으로

기존 "허승준", "김민수" 같은 일반적인 이름 대신, 캐릭터가 느껴지는 이름으로 교체:

Before After 이유
허승준 도깨비 트릭스터, 무서운 이야기
김민수 하루 매일을 소중히 여김
최민영 별이 별 관측하는 과학도
정욱진 구름 멍때리기의 달인
한소영 밀순이 빵집 사장
송재현 글타래 도서관 사서
김하늘 모카 카페 바리스타
김복동 느티 느티나무 같은 할아버지

Quirk — 고유 말버릇

모든 NPC에 고유한 화법 특성을 부여:

  • 도깨비: "여기... 밤에 이상한 소리 들어본 적 있어?"
  • 하루: "오늘도 좋은 날이야~"
  • 구름: "음... 뭐였더라... 아 맞다, 그러니까..."
  • 유효곤: "인생은 디버깅의 연속이야"
  • 밀순이: "인생은 크루아상 같아요, 겹겹이 쌓여야 맛있어"
  • 모카: "그건 에스프레소처럼 진한 이야기네"

LLM 프롬프트 전문가 감사

prompt engineering 전문가 에이전트가 서버/클라이언트 프롬프트를 전면 감사했습니다.

발견된 CRITICAL 이슈와 수정

1. Quirk 강제력 부족

Before: "이 특성을 대화에 자연스럽게 녹여주세요."
After:  "[캐릭터 말버릇] ... 매 답변에 반드시 1회 이상. 빠뜨리면 캐릭터가 아닙니다."

"자연스럽게"라는 말은 LLM에게 "안 해도 된다"는 뜻입니다.

2. 낯선 사이인데 기억 다 노출

Before: favorLevel 0이어도 상세 기억 전부 프롬프트에 포함
After:  favorLevel 0이면 "이전에 N번 대화. 구체적 내용은 기억나지 않음."

3. Farewell 판단 모호

Before: "자연스럽게 끝났다고 느끼면 farewell: true"
After:  "4회 이상 → farewell. 거부 톤 → 즉시."

4. 미구현 액션이 프롬프트에 포함 give_item, request_visit를 프롬프트와 JSON 스키마에서 제거. 코드에 없는 걸 LLM에게 시키면 안 됩니다.

5. 도슨트 억지 설명

Before: "마을을 소개하고, 장소를 안내하고, 이야기를 들려주세요."
After:  "물어보면 답해주세요. 억지로 설명하지 마세요."

6. Suggestions 품질

Before: "자연스러운 후속 질문"
After:  "3개 배열, 3-8자, 겹침 금지, 마지막은 종료용"

7. 상황 톤 배고프면 짜증, 피곤하면 느릿, 외로우면 반김 — NPC 욕구가 대화 톤에 반영됩니다.

UX 버그 수정

대화 중 NPC가 따라오지 않던 문제

Before: 대화 시작 → NPC 제자리 고정 → 플레이어 이동 → NPC가 허공에 대고 말함
After:  대화 중 플레이어가 멀어지면 NPC가 60% 속도로 천천히 따라옴

유진 이중 인사

Before: LLM 인사 1 → 4초 후 LLM 인사 2 (거의 동일한 내용 반복)
After:  LLM 인사 1회 → 바로 대화 가능

대화 중 다른 NPC 채팅 끼어듦

Before: 유진과 대화 중인데 "다온: 맑은 저녁 공기가..." 채팅에 섞임
After:  대화 중이면 ambient/gossip은 말풍선만 (채팅 로그에 안 뜸)

수치

항목 수치
커밋 15
NPC 이름 변경 24명 (유진 제외)
NPC quirk 25명 전원
프롬프트 수정 서버 7건 + 클라이언트 4건
새 모듈 audio.js, conversation.js, tag-game.js
main.js 줄 수 ~4200줄 (4532 → 4200)
i18n 키 639 → ~660
서버 재배포 1회
DevLog 5편 (#26~#30)

현재 상태

마을에 들어오면:

  1. lo-fi BGM이 흐르고
  2. NPC들이 이미 걸어다니고 있고
  3. 카메라가 마을을 한 바퀴 훑어주고
  4. 유진이 밝게 인사하며 다가오고
  5. NPC마다 고유한 말버릇으로 대화하고
  6. 대화 중 NPC가 따라오고
  7. 플레이어의 언어에 맞게 전체가 전환됨

"어떤 개발자의 홈페이지에 들어갔더니, 작은 마을이 살아 숨쉬고 있었다."

조금 더 가까워졌습니다.