์ด ๋ฌธ์„œ๋Š” ์Šฌ๋ž˜์‹œํŽ˜์ด์ง€ ์›๋ฌธ **ใ€ŒOpenClaw ์บ์‹ฑ ์™„์ „ ๊ฐ€์ด๋“œใ€**๋ฅผ ๊ธฐ์ค€์œผ๋กœ, ํ•ต์‹ฌ ์ฃผ์žฅ๊ณผ ์„ค์ •๊ฐ’ยท์šด์˜ ํŒ์„ ๋ˆ„๋ฝ ์—†์ด ์‹ค๋ฌดํ˜•์œผ๋กœ ์žฌ์ •๋ฆฌํ•œ ๋ฒ„์ „์ด๋‹ค.
ํ•ต์‹ฌ ๋ฉ”์‹œ์ง€: OpenClaw๋Š” ๋ฐ˜๋ณต๋˜๋Š” ์‹œ์Šคํ…œ ์ปจํ…์ŠคํŠธ ๋น„์ค‘์ด ํฐ ๊ตฌ์กฐ๋ผ, ์บ์‹ฑ ์ „๋žต์ด ๊ณง ๋น„์šฉ ์ „๋žต์ด๋‹ค.

0) ์ „์ฒด ๊ตฌ์กฐ ํ•œ ์žฅ ์š”์•ฝ

mindmap
  root((OpenClaw ์บ์‹ฑ ์šด์˜))
    ์™œ ์ค‘์š”ํ•œ๊ฐ€
      ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋ฐ˜๋ณต
      ํžˆ์Šคํ† ๋ฆฌ ๋ˆ„์ 
      heartbeat cron ๋Œ€ํ™” ๋ฐ˜๋ณต ํ˜ธ์ถœ
    ํ•ต์‹ฌ ์„ค์ •
      cacheRetention long
      contextPruning cache-ttl
      heartbeat TTL ์ง์ „ ํ˜ธ์ถœ
    ์ ˆ๊ฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜
      ์ฒซ ๊ตฌ๊ฐ„ cacheWrite
      ๋ฐ˜๋ณต ๊ตฌ๊ฐ„ cacheRead
      TTL ์ดํ›„ ์ฒซ ์š”์ฒญ ์žฌ์บ์‹œ ๋น„์šฉ ์™„ํ™”
    ์šด์˜ ์ „๋žต
      cron isolated ๋ถ„๋ฆฌ
      ์ง€์‹œ ํŒŒ์ผ ๊ฒฝ๋Ÿ‰ํ™”
      ๋ชจ๋ธ ์—ญํ•  ๋ถ„๋ฆฌ
      ์ปจํ…์ŠคํŠธ ์ƒํ•œ ๊ด€๋ฆฌ

1) ์บ์‹ฑ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€

1-1. ๊ธฐ๋ณธ ๊ฐœ๋…

  • Claude API๋Š” ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ค์‹œ ์ฝ๋Š”๋‹ค.
  • Prompt Caching์€ ๋ฐ˜๋ณต๋˜๋Š” ๋ธ”๋ก์„ ์ €์žฅํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

์›๋ฌธ ์˜ˆ์‹œ:

  • ์บ์‹ฑ ์—†์Œ: [System 10k] + [History 60k] + [์ƒˆ ๋ฉ”์‹œ์ง€] = 70k ํ† ํฐ ๊ณผ๊ธˆ
  • ์บ์‹ฑ ์žˆ์Œ: [cacheRead 69k] + [์ƒˆ ๋ฉ”์‹œ์ง€ 1k] ์ค‘์‹ฌ ๊ณผ๊ธˆ

1-2. ํ† ํฐ ์š”๊ธˆ ๋น„๊ต(์›๋ฌธ ์ œ์‹œ๊ฐ’, Sonnet 4.5 ๊ธฐ์ค€)

์ข…๋ฅ˜์š”๊ธˆ (per 1M tokens)๋น„์œจ
์ผ๋ฐ˜ Input$3.00100%
Cache Write$3.75125%
Cache Read$0.3010%
Output$15.00500%

์š”์ง€:

  • Write๋Š” ๋น„์‹ธ์ง€๋งŒ ์ƒ๋Œ€์ ์œผ๋กœ ๋“œ๋ฌผ๊ณ ,
  • Read๋Š” ๋งค์šฐ ์ €๋ ดํ•ด ๋ฐ˜๋ณต ์š”์ฒญ์—์„œ ์ ˆ๊ฐ ํšจ๊ณผ๊ฐ€ ์ปค์ง„๋‹ค.

2) OpenClaw์—์„œ ์บ์‹ฑ์ด ํŠนํžˆ ์ค‘์š”ํ•œ ์ด์œ 

2-1. ๋งค ์š”์ฒญ๋งˆ๋‹ค ํฐ ์‹œ์Šคํ…œ ์ปจํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋จ

์›๋ฌธ์—์„œ ๊ฐ•์กฐํ•œ OpenClaw ํฌํ•จ ์š”์†Œ:

  • SOUL.md, USER.md, AGENTS.md, MEMORY.md, HEARTBEAT.md, IDENTITY.md
  • ๋„๊ตฌ/์Šคํ‚ฌ ๋ชฉ๋ก

๊ณต์‹ docs ๊ด€์ ์œผ๋กœ ๋ณด๋ฉด:

  • OpenClaw๋Š” ๋งค ํ˜ธ์ถœ์— ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์žฌ์กฐ๋ฆฝํ•œ๋‹ค.
  • ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ•ต์‹ฌ ํŒŒ์ผ + ๋Ÿฐํƒ€์ž„ ๋ฉ”ํƒ€ + ๋„๊ตฌ/์Šคํ‚ฌ ๋ฉ”ํƒ€๊ฐ€ ํฌํ•จ๋œ๋‹ค.

2-2. ์บ์‹ฑ์ด ์—†์œผ๋ฉด ๋ฐ˜๋ณต ๋น„์šฉ์ด ๊ทธ๋Œ€๋กœ ๋ˆ„์ ๋จ

์›๋ฌธ ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์•„์นจ cron, heartbeat, ์ผ๋ฐ˜ ๋Œ€ํ™”๊ฐ€ ๋ฐ˜๋ณต๋  ๋•Œ
  • ๊ฐ™์€ ์‹œ์Šคํ…œ ๋ธ”๋ก ๊ณผ๊ธˆ์ด ๊ณ„์† ๋ฐœ์ƒ

2-3. ์ •์ (static) ๋ธ”๋ก์€ ์บ์‹ฑ ํšจ์œจ์ด ๋†’์Œ

์›๋ฌธ ํฌ์ธํŠธ:

  • ์ž์ฃผ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํŒŒ์ผ์ด ์บ์‹œ ํžˆํŠธ์— ์œ ๋ฆฌ
  • ๋ฐ˜๋ณต ๊ตฌ์กฐ๊ฐ€ ์œ ์ง€๋ ์ˆ˜๋ก Read ๋น„์ค‘์ด ์ปค์ง
  • (์›๋ฌธ ์–ธ๊ธ‰) Anthropic ์บ์‹ฑ์€ ํฐ ๋ธ”๋ก ๋ฐ˜๋ณต ์‹œ ํšจ๊ณผ๊ฐ€ ํฌ๋ฉฐ, ์ตœ์†Œ ํ† ํฐ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•จ

3) ์‹ค์ œ ๋น„์šฉ ๋ฐ์ดํ„ฐ(์›๋ฌธ ์‚ฌ๋ก€)

3-1. ํ˜ธ์ถœ๋ณ„ ํŒจํ„ด(์›๋ฌธ ํ‘œ ์žฌ๊ตฌ์„ฑ)

ํ˜ธ์ถœcacheReadcacheWrite์‹ค์ œ ๋น„์šฉ์บ์‹ฑ ์—†์—ˆ๋‹ค๋ฉด(์›๋ฌธ)
18,59011,772$0.047~$0.094
28,59012,045$0.049~$0.094
320,6356,395$0.036~$0.162
427,468266$0.011~$0.207
527,734838$0.013~$0.210
1669,836455$0.025~$0.527
1770,2911,126$0.032~$0.531

3-2. ์›๋ฌธ ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ

  • cacheRead 69,836 ๊ทœ๋ชจ ํ˜ธ์ถœ์€ ์ผ๋ฐ˜ input ๋Œ€๋น„ ํฐ ์ ˆ๊ฐ ๊ตฌ๊ฐ„
  • ๋Œ€ํ™”๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ์ ˆ๊ฐ๋ฅ ์ด ์ƒ์Šน
    • ์ดˆ๋ฐ˜: ์•ฝ 50%
    • ์ค‘๋ฐ˜: ์•ฝ 70%
    • ํ›„๋ฐ˜: ์•ฝ 87%
flowchart LR
A[์ดˆ๊ธฐ: cacheWrite ๋น„์ค‘ ํผ] --> B[์ค‘๋ฐ˜: cacheRead ์ฆ๊ฐ€]
B --> C[ํ›„๋ฐ˜: cacheRead ์šฐ์„ธ]
C --> D[๋ฐ˜๋ณต ํ˜ธ์ถœ ๊ตฌ๊ฐ„์—์„œ ์ ˆ๊ฐ ๊ทน๋Œ€ํ™”]

4) ์บ์‹ฑ ์„ค์ • ๋ฐฉ๋ฒ• (์›๋ฌธ + OpenClaw ๋ฌธ๋ฒ• ์ •๋ฆฌ)

4-1. cacheRetention ์„ค์ • (ํ•ต์‹ฌ)

{
  "agents": {
    "defaults": {
      "models": {
        "anthropic/claude-sonnet-4-5-20250929": {
          "params": { "cacheRetention": "long" }
        },
        "anthropic/claude-haiku-4-5": {
          "alias": "haiku",
          "params": { "cacheRetention": "long" }
        }
      }
    }
  }
}
  • none: ์บ์‹ฑ ๋”
  • short: 5๋ถ„
  • long: 1์‹œ๊ฐ„

๊ณต์‹ docs ๋ณด๊ฐ•:

  • Anthropic API key ์ธ์ฆ์˜ ๊ธฐ๋ณธ๊ฐ’์€ short
  • ๋ช…์‹œ ์„ค์ •์œผ๋กœ long ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ
  • ๊ตฌ๋ฒ„์ „ cacheControlTtl๋„ ํ˜ธํ™˜(5mโ†”short, 1hโ†”long)

4-2. ์บ์‹œ ํŠธ๋ ˆ์ด์Šค ์ง„๋‹จ(์„ ํƒ)

{
  "diagnostics": {
    "cacheTrace": {
      "enabled": true,
      "includeSystem": true,
      "includeMessages": false,
      "includePrompt": false
    }
  }
}

์›๋ฌธ ๋กœ๊ทธ ์˜ˆ์‹œ ๊ฒฝ๋กœ:

  • <OPENCLAW_HOME>/logs/cache-trace.jsonl

4-3. contextPruning ์—ฐ๊ณ„

{
  "agents": {
    "defaults": {
      "contextPruning": {
        "mode": "cache-ttl",
        "ttl": "1h"
      }
    }
  }
}

์›๋ฌธ ์„ค๋ช…:

  • ์บ์‹œ ๋งŒ๋ฃŒ ํƒ€์ด๋ฐ๊ณผ ๋งž์ถฐ ์˜ค๋ž˜๋œ ํžˆ์Šคํ† ๋ฆฌ/๋„๊ตฌ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•ด
  • TTL ์ง€๋‚œ ๋’ค ์ฒซ ์š”์ฒญ์˜ ์žฌ์บ์‹œ ๋น„์šฉ์„ ์™„ํ™”

๊ณต์‹ docs ๋ณด๊ฐ•:

  • pruning์€ ์˜จ๋””์Šคํฌ ์ด๋ ฅ ์‚ญ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์š”์ฒญ ์ง์ „ ์ธ๋ฉ”๋ชจ๋ฆฌ ์ปจํ…์ŠคํŠธ ์ •๋ฆฌ
  • Anthropic ๊ณ„์—ด ํ˜ธ์ถœ์—์„œ TTL ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

4-4. ์„ค์ • ์ ์šฉ

  • ์„ค์ • ํŒŒ์ผ ๋ฐ˜์˜ ํ›„ ์žฌ์‹œ์ž‘
  • openclaw gateway restart
  • ๋˜๋Š” ์—์ด์ „ํŠธ์—๊ฒŒ config.patch ์š”์ฒญ

5) 1์‹œ๊ฐ„ ์บ์‹ฑ vs 5๋ถ„ ์บ์‹ฑ ๋น„๊ต

5-1. ์›๋ฌธ ์‹œ๋‚˜๋ฆฌ์˜ค(10k system prompt, ํ•˜๋ฃจ 50ํšŒ ํ˜ธ์ถœ)

  • ์บ์‹ฑ ์—†์Œ: ์•ฝ $1.50/์ผ โ†’ ์›” $45
  • 5๋ถ„ ์บ์‹ฑ(short): ์›” $20 ์ˆ˜์ค€(์›๋ฌธ ์ถ”์ •)
  • 1์‹œ๊ฐ„ ์บ์‹ฑ(long): ์›” $5 ์ˆ˜์ค€(์›๋ฌธ ์ถ”์ •)

5-2. ์›๋ฌธ ํ•ต์‹ฌ ํŒ: heartbeat๋ฅผ TTL๋ณด๋‹ค ์‚ด์ง ์งง๊ฒŒ

์›๋ฌธ์€ 59m ์ „๋žต์„ ์ œ์•ˆํ•œ๋‹ค.

{
  "heartbeat": {
    "every": "59m"
  }
}

๋…ผ๋ฆฌ:

  • TTL 60๋ถ„ ์ „์— ํ˜ธ์ถœ์ด ๋“ค์–ด์˜ค๋ฉด ์บ์‹œ ์œ ์ง€/๊ฐฑ์‹ ์— ์œ ๋ฆฌ

๊ณต์‹ docs ๋ณด๊ฐ•:

  • token-use ๋ฌธ์„œ์—์„œ๋Š” 55m ์˜ˆ์‹œ๋„ ์ œ์‹œ
  • ์‹ค๋ฌด์—์„  ๋„คํŠธ์›Œํฌ ์ง€์—ฐ/์‹คํ–‰ ํŽธ์ฐจ๋ฅผ ๊ณ ๋ คํ•ด 55~59๋ถ„ ๋ฒ”์œ„์—์„œ ์šด์˜

5-3. ์›๋ฌธ์˜ OpenClaw ํŒจํ„ด ๋น„๊ต ์š”์ง€

  • heartbeat/cron/์ž๋ฆฌ๋น„์›€ ํ›„ ๋ณต๊ท€์ฒ˜๋Ÿผ ๊ฐ„ํ—์  ํ˜ธ์ถœ์ด ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ
  • ๊ธด TTL ์บ์‹ฑ์˜ ์ฒด๊ฐ ํšจ๊ณผ๊ฐ€ ์ปค์ง„๋‹ค.

6) ๋น„์šฉ์„ ์ค„์ด๋Š” ์ „๋žต (์›๋ฌธ 5๊ฐ€์ง€, ๋ˆ„๋ฝ ์—†์ด)

Strategy 1. ํŽ˜๋ฅด์†Œ๋‚˜/์ •์  ๋ธ”๋ก ์ตœ์ ํ™”

์›๋ฌธ DO:

  • ์ •์  ๊ทœ์น™ ๋ธ”๋ก์„ ์•ž๋ถ€๋ถ„์— ๋‘๊ณ , ์ž์ฃผ ์•ˆ ๋ฐ”๊พธ๊ธฐ
  • ๋™์  ๋ฐ์ดํ„ฐ(์‹œ๊ฐ„/์‹ค์‹œ๊ฐ„ ์ƒํƒœ)๋Š” ๋’ค์ชฝ์œผ๋กœ ๋ถ„๋ฆฌ

์›๋ฌธ DONโ€™T:

  • ์š”์ฒญ๋งˆ๋‹ค ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์žฌ์ž‘์„ฑํ•ด ์บ์‹œ ๋ฌดํšจํ™”
  • ํ”„๋กฌํ”„ํŠธ ์•ž๋ถ€๋ถ„์— ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๊ฐ’ ์‚ฝ์ž…

Strategy 2. Cron ์„ธ์…˜ ๋ถ„๋ฆฌ (isolated)

{
  "sessionTarget": "isolated",
  "payload": {
    "kind": "agentTurn",
    "message": "CRON.md์˜ '์•„์นจ ์ธ์‚ฌ' ์„น์…˜์„ ๋”ฐ๋ผ ์‹คํ–‰"
  }
}

ํšจ๊ณผ:

  • Main ์„ธ์…˜ ๋ˆ„์  ์ด๋ ฅ๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์ดˆ๊ธฐ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ฐ€๋ฒผ์›Œ์ง

Strategy 3. CRON ์ง€์‹œ ํŒŒ์ผ ๋ถ„๋ฆฌ/์†Œํ˜•ํ™”

์›๋ฌธ ๋น„๊ต:

  • Bad: ํฐ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ํ†ต์งธ๋กœ ์ฝ๊ธฐ
  • Good: ์งง์€ CRON.md์˜ ํ•„์š”ํ•œ ์„น์…˜๋งŒ ์ฝ๊ธฐ

Strategy 4. ์ปจํ…์ŠคํŠธ ์ƒํ•œ ๊ด€๋ฆฌ

์›๋ฌธ ํฌ์ธํŠธ:

  • ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ์ปค์ง€๋ฉด
    • cacheWrite ๋น„์šฉ ๊ธ‰์ฆ
    • ํ† ํฐ ํ•œ๋„ ์œ„ํ—˜
    • ์บ์‹œ ํšจ์œจ ์ €ํ•˜
  • ๋”ฐ๋ผ์„œ ์„ธ์…˜ ๋ถ„๊ธฐ/์ปดํŒฉ์…˜/์ •๋ฆฌ ๋ฃจํ‹ด์ด ํ•„์š”

Strategy 5. ๋ชจ๋ธ ์„ ํƒ ์ตœ์ ํ™”

์›๋ฌธ ์ทจ์ง€:

  • ๋ฐ˜๋ณต ๋ฃจํ‹ด(heartbeat/cron ์š”์•ฝ)์€ ์ €๋น„์šฉ ๋ชจ๋ธ
  • ๋ณต์žก ๋ถ„์„/์ฝ”๋”ฉ์€ ๊ณ ์„ฑ๋Šฅ ๋ชจ๋ธ

7) ์บ์‹ฑ ์ž‘๋™ ์—ฌ๋ถ€ ํ™•์ธ๋ฒ•

7-1. ์„ธ์…˜ JSONL์—์„œ usage ํ™•์ธ

์›๋ฌธ ๊ธฐ์ค€ ํŒ๋‹จ:

  • cacheRead > 0 โ†’ ํžˆํŠธ
  • cacheRead = 0 โ†’ ๋ฏธ์Šค
  • cacheWrite ๊ธ‰์ฆ โ†’ ์ƒˆ ์บ์‹œ ์ž‘์„ฑ/๊ฐฑ์‹  ๊ตฌ๊ฐ„

7-2. ์›๋ฌธ grep ์˜ˆ์‹œ(์˜๋„ ์œ ์ง€)

grep "cacheRead\|cacheWrite" <session>.jsonl | python3 -c "
import sys, json
for line in sys.stdin:
    d = json.loads(line)
    if d.get('type') == 'message':
        u = d['message'].get('usage', {})
        if u.get('cacheRead', 0) > 0:
            print(f\"ํžˆํŠธ: {u['cacheRead']:,} tok read, {u['cacheWrite']:,} tok write\")
"

7-3. ์›๋ฌธ ๋น ๋ฅธ ์ ˆ๊ฐ ์ถ”์ • ์˜ˆ์‹œ(์˜๋„)

  • cacheRead ์ด๋Ÿ‰์— ๋‹จ๊ฐ€ ์ฐจ์ด๋ฅผ ๊ณฑํ•ด ๋Œ€๋žต ์ ˆ๊ฐ์•ก ์ถ”์ •

8) ์›๋ฌธ ์š”์•ฝ ์ฒดํฌ๋ฆฌ์ŠคํŠธ (๊ทธ๋Œ€๋กœ ๋ฐ˜์˜)

  • cacheRetention: "long" ์„ค์ •
  • contextPruning.mode: "cache-ttl" + ttl ์ •ํ•ฉ์„ฑ
  • cron job์€ isolated ์šฐ์„ 
  • cron ์ง€์‹œ ํŒŒ์ผ์€ ์งง๊ฒŒ ์œ ์ง€
  • ์ปจํ…์ŠคํŠธ ๊ณผ๋Œ€ํ™” ๋ฐฉ์ง€
  • ๋‹จ์ˆœ ๋ฐ˜๋ณต ์ž‘์—…์€ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ ์‚ฌ์šฉ
  • diagnostics.cacheTrace ๋˜๋Š” usage ๋กœ๊ทธ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง

9) ์šด์˜ ์‹œ ์ฃผ์˜(๊ฒ€์ฆ ๋ณด๊ฐ•)

  • ๋น„์šฉ ์ˆซ์ž๋Š” ๋ชจ๋ธ ๊ฐ€๊ฒฉํ‘œ/์ธ์ฆ ๋ฐฉ์‹/API ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
  • long ์บ์‹ฑ์€ Anthropic API ๊ฒฝ๋กœ์—์„œ ์œ ํšจํ•˜๋ฉฐ, ์ธ์ฆ ๋ฐฉ์‹๋ณ„ ๊ธฐ๋ณธ๊ฐ’ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • pruning์€ โ€œ๊ธฐ๋ก ์‚ญ์ œโ€๊ฐ€ ์•„๋‹ˆ๋ผ โ€œ์š”์ฒญ ์ง์ „ ์ „์†ก ์ปจํ…์ŠคํŠธ ์ •๋ฆฌโ€๋‹ค.

AI ํ™œ์šฉ ๊ณ ์ง€

์ด ๋ฌธ์„œ๋Š” ์™ธ๋ถ€ ๊ณต๊ฐœ ๊ธ€(์Šฌ๋ž˜์‹œํŽ˜์ด์ง€)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑํ˜• AI๊ฐ€ ์ดˆ์•ˆ์„ ์žฌ๊ตฌ์„ฑํ–ˆ๊ณ , OpenClaw ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ ํ•ญ๋ชฉ/ํ‘œํ˜„์„ ๊ต์ •ํ•ด ์ •๋ฆฌํ–ˆ๋‹ค.

๐Ÿ“š ๋‹ค์Œ ์ฝ๊ธฐ