Skip to main content

prod-log-audit

Investigate OpenMMO production warnings, errors, suspicious behavior, and unresolved incidents within a deployment interval; correlate journald, nginx, and targeted evidence, then write a dated note to ~/work/notes. Use for "๋กœ๊ทธ ์กฐ์‚ฌ", "๋กœ๊ทธ ์ ๊ฒ€", "์ˆ˜์ƒํ•œ ์  ์—†๋Š”์ง€", or "prod ์ ๊ฒ€". Routine statistics are covered by the dashboard.

Source facts

Repository
Julian-adv/OpenMMO
Last source activity
September 13, 2026 at 04:50
Detected SKILL.md language
Korean
Stars
1,784
Forks
253

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
3 files

Showing SKILL.md

SKILL.md
Source instructions ยท Read-only preview
name
prod-log-audit
description
Investigate OpenMMO production warnings, errors, suspicious behavior, and unresolved incidents within a deployment interval; correlate journald, nginx, and targeted evidence, then write a dated note to ~/work/notes. Use for "๋กœ๊ทธ ์กฐ์‚ฌ", "๋กœ๊ทธ ์ ๊ฒ€", "์ˆ˜์ƒํ•œ ์  ์—†๋Š”์ง€", or "prod ์ ๊ฒ€". Routine statistics are covered by the dashboard.
# prod ์ด์ƒ ์ง•ํ›„ ์กฐ์‚ฌ ๊ฒฝ๊ณ ยท์˜ค๋ฅ˜, ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฒช์€ ๋ฐ˜๋ณต ์‹คํŒจ, ๋น„์ •์ƒ ๋™์ž‘์„ ์กฐ์‚ฌํ•œ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜ ํ†ต๊ณ„๋ฅผ ๋งค๋ฒˆ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์กฐ์‚ฌ๋Š” ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค. ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ยท์„ค์ • ๋ณ€๊ฒฝยท์ œ์žฌยท์ปค๋ฐ‹์€ ๋ณ„๋„ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งŒ ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋Š” `~/work/notes/openmmo-YYYY-MM-DD-log-audit.md`, ์›๋ฌธยท๋ถ„์„ ์ž๋ฃŒ๋Š” ๊ฐ™์€ ๋‚ ์งœ์˜ `*-audit/`์— ๋‘”๋‹ค. ํ”Œ๋ ˆ์ด์–ด๋ช…ยทIPยท๊ณ„์ • ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ณต๊ฐœ ๋ฆฌํฌ ๋ฐ–์— ๋ณด๊ด€ํ•œ๋‹ค. ## ๋ฒ”์œ„์™€ ์ž๋ฃŒ - `ssh prod`๋กœ ์ ‘์†ํ•œ๋‹ค(VPN ํ•„์š”). ์ ‘์† ์‹คํŒจ๋งŒ์œผ๋กœ ๊ฒŒ์ž„ ์žฅ์• ๋ฅผ ๋‹จ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. - ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ธฐ๊ฐ„์„ ์šฐ์„ ํ•œ๋‹ค. โ€œ์–ด์ œ ๋ฐฐํฌ๋ถ€ํ„ฐ ์˜ค๋Š˜ ๋ฐฐํฌ๊นŒ์ง€โ€๋Š” ์–ด์ œ ์„œ๋ฒ„ ์‹œ์ž‘๋ถ€ํ„ฐ ์˜ค๋Š˜ ๋ฐฐํฌ์˜ ์ฒซ ์„œ๋น„์Šค ์ •์ง€ ์ง์ „๊นŒ์ง€ `[์‹œ์ž‘, ์ข…๋ฃŒ)`๋‹ค. ๋ณ„๋„ ์ง€์ •์ด ์—†์œผ๋ฉด ์ง์ „ ๋ฐฐํฌ๋ถ€ํ„ฐ ์กฐํšŒ ์‹œ์ ๊นŒ์ง€๋‹ค. - `openmmo-server`, `openmmo-agent-client`์˜ systemd ์‹œ์ž‘ยท์ •์ง€ ๊ธฐ๋ก, ๋ฐฐํฌ ๊ธฐ๋ก๊ณผ Git reflog๋กœ ๊ฒฝ๊ณ„์™€ ์‹คํ–‰ ์ปค๋ฐ‹์„ ํ™•์ธํ•œ๋‹ค. ๊ตฌ๊ฐ„ ๋‚ด ์ถ”๊ฐ€ ์žฌ์‹œ์ž‘์€ ์›์ธ๊ณผ ํ•จ๊ป˜ ๋ณด๊ณ ํ•œ๋‹ค. ์˜ค๋Š˜ ๋ฐฐํฌ ์งํ›„ ๊ฒ€์ฆ์€ ๋ณธ ์กฐ์‚ฌ ๊ตฌ๊ฐ„๊ณผ ๊ตฌ๋ถ„ํ•œ๋‹ค. - ์‹œ๊ฐ„์„ ์ถ”์ธกํ•˜์ง€ ์•Š๋Š”๋‹ค. `journalctl`์—๋Š” `+0900` ๋“ฑ ์‹œ๊ฐ„๋Œ€๋ฅผ ๋ช…์‹œํ•˜๊ณ  JSON์˜ `__REALTIME_TIMESTAMP`๋กœ ์ •ํ™•ํžˆ ์ž๋ฅธ๋‹ค. ๋ณธ๋ฌธ์€ KST, ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ์•ˆ ์‹œ๊ฐ์€ UTC์ผ ์ˆ˜ ์žˆ๋‹ค. SQLite epoch ๋น„๊ต์—๋Š” UTC๋ฅผ ์“ด๋‹ค. - ๊ฒฝ๊ณ„ ์ „ํ›„๋ฅผ ํฌํ•จํ•œ ์ €๋„์„ ํ•œ ๋ฒˆ ์ˆ˜์ง‘ํ•ด ๋กœ์ปฌ์—์„œ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ANSI๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  JSON `MESSAGE`๊ฐ€ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์ด๋ฉด UTF-8๋กœ ๋ณต์›ํ•œ๋‹ค. ์ฒซยท๋งˆ์ง€๋ง‰ ์‹œ๊ฐ, ๋ˆ„๋ฝยทsuppressionยทํŒŒ์‹ฑ ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. - Nginx์˜ ํšŒ์ „๋œ access/error ๋กœ๊ทธ์™€ ์ปค๋„ยทjournald์˜ ํ•ด๋‹น ๊ตฌ๊ฐ„๋„ ํ™•์ธํ•œ๋‹ค. ์›๋ฌธ๊ณผ ๋ถ„์„ ์Šคํฌ๋ฆฝํŠธ, ์ฒดํฌ์„ฌ์„ ๋‚จ๊ธด๋‹ค. ๋Œ€ํ™” ์ „๋ฌธยท์ „์ฒด DB๋Š” ๊ธฐ๋ณธ ์ˆ˜์ง‘ ๋Œ€์ƒ์ด ์•„๋‹ˆ๋ฉฐ ๊ตฌ์ฒด์ ์ธ ์ด์ƒ ์ง•ํ›„ ํ™•์ธ์— ํ•„์š”ํ•œ ์ž๋ฃŒ๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค. - ๊ณผ๊ฑฐ ๋กœ๊ทธ์˜ ๋™์ž‘ยท์„ค์ •์€ ๋‹น์‹œ ๋ฐฐํฌ ์ปค๋ฐ‹๊ณผ ๋Œ€์กฐํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ๋‚˜ ํ˜„์žฌ HTTP ์‘๋‹ต์„ ๊ณผ๊ฑฐ ์ƒํƒœ์˜ ์ฆ๊ฑฐ๋กœ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ## ๊ฒฝ๊ณ ยท์˜ค๋ฅ˜ ์กฐ์‚ฌ ๋จผ์ € ์„œ๋ฒ„ยทNPC์˜ WARN/ERROR๋ฅผ ์œ ํ˜•๋ณ„๋กœ ๋ฌถ๋Š”๋‹ค. ์‹ฌ๊ฐํ•œ ์ €๋นˆ๋„ ์˜ค๋ฅ˜๋ฅผ ๋†“์น˜์ง€ ์•Š๋„๋ก ์ƒ์œ„ ๋นˆ๋„ ๋ฐ–์˜ ์œ ํ˜•๋„ ์ฝ๋Š”๋‹ค. INFO์˜ ์‹คํŒจ ๊ฒฐ๊ณผ์™€ ์ „ํˆฌ ๊ฐ์‚ฌ ๊ธฐ๋ก๋„ ํ•„์š”์— ๋”ฐ๋ผ ๋Œ€์กฐํ•œ๋‹ค. ๊ฐ ์œ ์˜๋ฏธํ•œ ํ•ญ๋ชฉ์— **์ฆ์ƒยท์˜ํ–ฅ, ๋Œ€์ƒ, ์ฒซ/๋งˆ์ง€๋ง‰ ์‹œ๊ฐ, ๋ฐ˜๋ณต ํšŸ์ˆ˜ยท๋นˆ๋„, ๋Œ€ํ‘œ ๊ทผ๊ฑฐ, ์›์ธ ํ™•์‹ค์„ฑ, ํ›„์† ํ›„๋ณด**๋ฅผ ์ ๋Š”๋‹ค. ๊ฑด์ˆ˜๋Š” ์ด์ƒ ํŒ๋‹จ์— ํ•„์š”ํ•œ ๋ฒ”์œ„์—์„œ๋งŒ ์“ด๋‹ค. - ์•ˆ์ •์„ฑ: panic, OOM, ๋น„์ •์ƒ ์ข…๋ฃŒ, DB ์ž ๊ธˆยท์ €์žฅ ์‹คํŒจ, ๋””์Šคํฌ ๋ถ€์กฑ, ๋กœ๊ทธ ์œ ์‹ค, ์ง€์—ฐยทํ ํฌํ™”. ํ”Œ๋ ˆ์ด์–ด๋ช…์ด๋‚˜ ๋Œ€ํ™”์— ํฌํ•จ๋œ ๋‹จ์–ด๋ฅผ ์‹ค์ œ ์žฅ์• ์™€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. - ์ด๋™: `Blocked move`, ์šธํƒ€๋ฆฌยท์ง‘ ์ถฉ๋Œ, ๊ณ„๋‹จ ๋ฐ– ์ธต ๋ณ€๊ฒฝ, `Waypoint queue full`, ๊ฐ•์ œ ์ด๋™ ์ข…๋ฃŒ. ๊ฐ™์€ ํ”Œ๋ ˆ์ด์–ดยท์œ„์น˜์˜ ์—ฐ์†์„ฑ, ์—ฌ๋Ÿฌ ํ”Œ๋ ˆ์ด์–ด์˜ ๋™์ผ ์ง€์  ์‹คํŒจ, ๋ถ„๋‹น ํ”ผํฌ์™€ ์งํ›„ ์ด๋ฒคํŠธ๋ฅผ ๋ณธ๋‹ค. ํ ์ดˆ๊ณผ ๋’ค ์‚ฌ๋ง๋งŒ์œผ๋กœ ์ŠคํŒธ ํด๋ฆญ์„ ๋‹จ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. `Waypoint queue full`์ด ๋ฐ˜๋ณต๋˜๋ฉด ๊ฐ™์€ ํ”Œ๋ ˆ์ด์–ด์˜ `movement_audit` ํƒ€๊นƒ WARN `Waypoint overflow trace`(30์ดˆ๋‹น 1ํšŒ)์—์„œ ์š”์ฒญ ์ˆ˜์‹  ๊ฐ„๊ฒฉยท`raw.sprinting`ยท`received_pose.mounted`์™€ ํ‹ฑ์˜ `speed`ยท`hunger_mult`ยท`sprint_allowed`๋ฅผ ๋Œ€์กฐํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์†๋„ ๋ถˆ์ผ์น˜ ์›์ธ์„ ํ™•์ธํ•œ๋‹ค. - ๊ณต๊ฒฉ: `Rejected player attack`์˜ reason๊ณผ ์ƒ์„ธ(๋Œ€์ƒ ์†Œ๋ฉธยท์‹œ์ฒดยท์ธตยท๊ฑฐ๋ฆฌ), ๋™์ผ ๊ณต๊ฒฉ์ž/๋Œ€์ƒ์˜ ๋ฐ˜๋ณต ๊ธฐ๊ฐ„๊ณผ ํ—ˆ์šฉ ๊ณต๊ฒฉ์„ ๋Œ€์กฐํ•œ๋‹ค. ๊ณ ์ • ๋นˆ๋„๋‚˜ ๋‚ฎ์€ ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜๋งŒ์œผ๋กœ ์ •์ƒยท์–ด๋ทฐ์ฆˆ๋ฅผ ํŒ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ `data/combat-audit/*.jsonl`์˜ HP ์ˆ˜์ง€ยท์š”์ฒญ ๊ฐ„๊ฒฉยทํ—ˆ์šฉ/๊ฑฐ์ ˆยท`history_overflow`ยท`dropped_events`๋ฅผ ํ™•์ธํ•œ๋‹ค. ๊ฐ์‚ฌ ๋Œ€์ƒ ๋ฐ–๊นŒ์ง€ ๊ฒฐ๊ณผ๋ฅผ ์ผ๋ฐ˜ํ™”ํ•˜์ง€ ์•Š๋Š”๋‹ค. - ์ ‘์†: ํ”„๋กœํ† ์ฝœ ๊ฑฐ๋ถ€, ์„ธ์…˜ ๊ต์ฒด, heartbeat, reset, ์ธ์ฆ ์‹คํŒจ. ๋ฐฐํฌ ์ „ํ™˜ ์ค‘ ์ผ์‹œ ์‹คํŒจ์™€ ์ •์ƒํ™” ํ›„ ์ง€์† ์‹คํŒจ๋ฅผ ๋‚˜๋ˆˆ๋‹ค. `[+N more in the last 60s]`๋Š” ์–ต์ œ๋ถ„์ด๋ฉฐ ๋กœ๊ทธ ์ค„ ์ˆ˜์™€ ์š”์ฒญ ์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ฐ™์€ IP๋‚˜ /24๋งŒ์œผ๋กœ ๋‹ค์ค‘ ๊ณ„์ •ยทํ”„๋ก์‹œยท๋ถ€์ •ํ–‰์œ„๋ฅผ ํ™•์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. - NPC: LLM ์ธ์ฆยท์šฉ๋Ÿ‰ยทํƒ€์ž„์•„์›ƒ, ์‘๋‹ต ํŒŒ์‹ฑ ์‹คํŒจ, ๊ธด ๋Œ€๊ธฐ, ํ–‰๋™ ์‹คํŒจ ๋ฃจํ”„, ์ƒ์ /์—ฌ๊ด€ ๊ณ ์ฐฉ, ์›์žฅ ํ˜•์‹ ์˜ค๋ฅ˜. `llm turn ... error`์™€ `LLM prompt failed`์ฒ˜๋Ÿผ ํ•œ ์‚ฌ๊ฑด์˜ ์ค‘๋ณต ๋กœ๊ทธ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์„œ๋น„์Šค active๋‚˜ NPC ์ž…์žฅ๋งŒ์œผ๋กœ LLM ์ •์ƒ์ด๋ผ๊ณ  ํŒ๋‹จํ•˜์ง€ ์•Š๋Š”๋‹ค. - Nginx: ๋ชจ๋“  5xx, ๋ฐ˜๋ณต๋˜๋Š” ์‹ค์ œ ๋ฆฌ์†Œ์Šค 404, ์˜ˆ์ƒ ๋ฐ– API ์ธ์ฆ ์‘๋‹ต๊ณผ ๊ณต๊ฒฉ์„ฑ ์š”์ฒญ์„ ํ™•์ธํ•œ๋‹ค. ์—†๋Š” ํƒ€์ผ์˜ `/api/terrain/water-field`ยท`height-original` 404์™€ ์Šค์บ๋„ˆ ์š”์ฒญ์€ ์‹ค์ œ ํ”Œ๋ ˆ์ด ์žฅ์• ์™€ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์บ์‹œยท์žฌ๋‹ค์šด๋กœ๋“œยท์ „์†ก ํญ์ฆ์€ ์ด์ƒ ์ง•ํ›„๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์ƒ์„ธ ๋ถ„์„ํ•œ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌยท๋น„์ •์ƒ ์š”์ฒญ์ค„ ๋•Œ๋ฌธ์— ์กฐ์šฉํžˆ ์ง‘๊ณ„์—์„œ ๋ˆ„๋ฝ๋˜์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. ๊ด€์ธก ์‚ฌ์‹ค๊ณผ ๊ฐ€์„ค์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์žฅ์‹œ๊ฐ„ ํ™œ๋™ยท๋ฐ˜๋ณต ์ ‘์†ยท๊ณต์œ  IP๋งŒ์œผ๋กœ ์ œ์žฌ ํ›„๋ณด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ˆ˜์ • ํšจ๊ณผ๋Š” ์ˆ˜์ •์ด ์‹ค์ œ ์ ์šฉ๋œ ๊ตฌ๊ฐ„๊ณผ ์ถฉ๋ถ„ํ•œ ํ™œ๋™์ด ์žˆ์„ ๋•Œ ํ‰๊ฐ€ํ•œ๋‹ค. ## ์ผ๋ฐ˜ ํ†ต๊ณ„์™€ ์„ ํƒ ์กฐ์‚ฌ ๊ธฐ๋ณธ ๋ณด๊ณ ์„œ์—์„œ ์ ‘์†์žยท๊ณ„์ •ยท๋ ˆ๋ฒจยทXP ์ˆœ์œ„, ์ „์ฒด ๊ฒฝ์ œ ์ˆ˜์ง€ยท์žฌ๊ณ ยท์ธ์ฑˆํŠธ/๋“œ๋กญ ํ†ต๊ณ„, ์›น ์ƒํƒœ์ฝ”๋“œยท์ „์†ก๋Ÿ‰ ๋ถ„ํฌ, ์˜์›…๋‹ด ํ›„๋ณด๋ฅผ ์ƒ๋žตํ•œ๋‹ค. ์˜ˆ์ „ ๋ณด๊ณ ์„œ์˜ ํ•ด๋‹น ํ‘œ๋ฅผ ๊ด€์„ฑ์ ์œผ๋กœ ์žฌ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด์ƒ ์ง•ํ›„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ถ„๋ชจยท๋น„๊ต ์ˆ˜์น˜๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ„๋„๋กœ ์š”์ฒญํ•œ ํ†ต๊ณ„๋Š” ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ํฌํ•จํ•œ๋‹ค. - ์•„์ดํ…œ ๋ณต์ œยท๋น„์ •์ƒ ์ž์‚ฐ ์ฆ๊ฐ€๊ฐ€ ์˜์‹ฌ๋˜๋ฉด ํ•ด๋‹น ๊ฑฐ๋ž˜ยท์บ๋ฆญํ„ฐยท๊ธฐ๊ฐ„์œผ๋กœ ์ขํ˜€ ๋กœ๊ทธ์™€ ์ฝ๊ธฐ ์ „์šฉ DB ์‚ฌ๋ณธ์„ ๋Œ€์กฐํ•œ๋‹ค. DB๋Š” `/home/ubuntu/work/OnlineRPG/data/game_data.db`๋กœ ๊ณ ์ •ํ•˜๊ณ , ์‹คํ–‰ ์ค‘ ํŒŒ์ผ์˜ ๋‹จ์ˆœ ๋ณต์‚ฌ ๋Œ€์‹  ์ผ๊ด€๋œ SQLite ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•œ๋‹ค. ์Šค๋ƒ…์ƒท ์‹œ๊ฐ๊ณผ ๋กœ๊ทธ ์ฐฝ์˜ ์ฐจ์ด, ์˜์ง€ ์ฐฝ๊ณ ยท์ขŒํŒยท๊ธˆ๊ณ ยท์„ธ๊ธˆยท์‚ญ์ œ๋ฅผ ๊ณ ๋ คํ•œ๋‹ค. - [gold_flow.py](gold_flow.py)๋Š” ์„ ํƒ์  ๋ณด์กฐ ๋„๊ตฌ๋‹ค. ๋‹น์‹œ ๋ฐฐํฌ๋ณธ์˜ ์ƒ์ธ ์ข…๋ฅ˜์™€ ๋กœ๊ทธ๋ฅผ ๋Œ€์กฐํ•˜๊ณ  ์ขŒํŒ ์›๊ธˆยท์„ธ๊ธˆ ๋“ฑ ๋ฏธ์ง€์› ํ๋ฆ„์„ ๋ณด์ •ํ•˜๊ธฐ ์ „์—๋Š” ์ˆœ์ˆ˜์ง€๋ฅผ ํ™•์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. RicaยทWick ๊ฑฐ๋ž˜๋Š” ์ƒ์„ฑ/์†Œ๋ฉธ, KarlยทSigne๋Š” ์ด์ „์ด๋ฉฐ ๋˜์‚ฌ๊ธฐ๋Š” ๋ณ„๋„ ํ™•์ธํ•œ๋‹ค. 1g = 10,000c. - ๊ฐ•ํ™” ์ด์ƒ์€ ๋‹น์‹œ `data-src/items.csv`ยท`world_drop.csv`์™€ ์‹œ๋„/์„ฑ๊ณต/ํŒŒ๊ดด ๋กœ๊ทธ๋กœ ํ™•์ธํ•œ๋‹ค. `destroyed ... enchanting at +N`์€ ์‹œ๋„ ์ „ ๋‹จ๊ณ„์ด๋ฉฐ ๋ณด๋„ˆ์Šค ๋“œ๋กญ ํ•œ ์ค„์— ์—ฌ๋Ÿฌ ์žฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. - ์˜์›…๋‹ด์€ ๋ณ„๋„ ์š”์ฒญ ์‹œ์—๋งŒ [tales.py](tales.py)์™€ `doc/HEROIC_TALES.md`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ›„๋ณด๋Š” ์‚ฌ์‹ค ํ™•์ธ ์ „ ์›์žฅ์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค. ์šด์˜ `agent-client/data/tales/ledger.txt` ์“ฐ๊ธฐ๋Š” ํ•ด๋‹น ์“ฐ๊ธฐ ์š”์ฒญ/์Šน์ธ์ด ์žˆ์„ ๋•Œ๋งŒ ํ•˜๋ฉฐ, ์ž์—ฐ์–ด `DATE | HERO | ๊ธฐ๋ก` ํ˜•์‹๊ณผ ๊ธฐ์กด ๋‚ด์šฉ์„ ๋ณด์กดํ•œ๋‹ค. ## ์ง์ „ ์กฐ์‚ฌ์™€ ๋ณด๊ณ  ์ง์ „ ๋ณด๊ณ ์„œ์˜ ๋ฏธํ•ด๊ฒฐ ๊ฒฝ๊ณ ยท์˜ค๋ฅ˜ยท์ˆ˜์ƒํ•œ ๋™์ž‘์„ ์ด๋ฒˆ ์ฐฝ์—์„œ ๋Œ€์กฐํ•œ๋‹ค. ์ผ๋ฐ˜ ํ†ต๊ณ„ ์ถ”์  ํ•ญ๋ชฉ์€ ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋„˜๊ธฐ๊ณ  ๋งค๋ฒˆ ์žฌ์ธก์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํŒ์ •์€ ํ•ด์†Œยท๊ฐœ์„ ยท๋ฏธํ•ด๊ฒฐยท์•…ํ™”ยท๋ฏธ์žฌํ˜„ยท์žฌ๊ฒ€์ฆ ๋ถˆ๊ฐ€๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ™œ๋™ํ•˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ํ‘œ๋ณธ์ด ๋ถ€์กฑํ•˜๋ฉด ํ•ด์†Œ๋ผ๊ณ  ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์ด์ „ ๋ฐฐํฌ์—๋งŒ ์žˆ๋˜ ํ˜„์ƒ๊ณผ ์ด๋ฒˆ์— ์ƒˆ๋กœ ์ƒ๊ธด ํ˜„์ƒ์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๋ณด๊ณ ์„œ๋Š” ๋‹ค์Œ ๋‚ด์šฉ๋งŒ ํ•„์š”ํ•œ ๋ถ„๋Ÿ‰์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. 1. ์ •ํ™•ํ•œ ์กฐ์‚ฌ ์ฐฝยท์‹คํ–‰ ์ปค๋ฐ‹ยท๊ตฌ๊ฐ„ ๋‚ด ๋น„์ •์ƒ ์žฌ์‹œ์ž‘ ์—ฌ๋ถ€. 2. ์˜ํ–ฅ๊ณผ ์‹œ๊ธ‰์„ฑ ์ˆœ์˜ ์ฃผ์š” ์ด์ƒ ์ง•ํ›„ ๋ฐ ๊ทผ๊ฑฐ. 3. ๋ฐฐํฌ ์ „ํ™˜ยท์ผ๋ฐ˜ ์Šค์บ” ๋“ฑ ์„ค๋ช… ๊ฐ€๋Šฅํ•œ ์žก์Œ์˜ ์งง์€ ์š”์•ฝ. 4. ์ง์ „ ๋ฏธํ•ด๊ฒฐ ํ•ญ๋ชฉ์˜ ๊ด€๋ จ ๊ฒฐ๊ณผ์™€ ์šฐ์„  ํ›„์† ํ›„๋ณด. 5. ์›๋ฌธ ๊ฒฝ๋กœยท์žฌํ˜„ ๋ฐฉ๋ฒ•ยท๋ˆ„๋ฝ ๋ฐ ํŒ์ • ํ•œ๊ณ„. ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•ต์‹ฌ ๋ฐœ๊ฒฌ๊ณผ ๋‹ค์Œ ์กฐ์น˜ ํ›„๋ณด๋ฅผ ์งง๊ฒŒ ๋ณด๊ณ ํ•˜๊ณ  ์ „์ฒด ๋…ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. ๋ฐœ๊ฒฌ์ด ์—†์œผ๋ฉด ํ™•์ธ ๋ฒ”์œ„์™€ ํ•จ๊ป˜ ๊ทธ๋ ‡๊ฒŒ ๋งํ•˜๋ฉฐ ํ†ต๊ณ„๋กœ ๋ถ„๋Ÿ‰์„ ์ฑ„์šฐ์ง€ ์•Š๋Š”๋‹ค.
View on GitHub