Skip to main content
Sonamu์˜ ํ…Œ์ŠคํŠธ ๋กœ๊น… ๋ฐ ๋””๋ฒ„๊น… ์‹œ์Šคํ…œ์ธ Naite์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Naite ๊ฐœ์š”

ํ…Œ์ŠคํŠธ ๋กœ๊น…

์‹คํ–‰ ์ค‘ ๋กœ๊ทธ ๊ธฐ๋ก์ฒด๊ณ„์ ์ธ ์ถ”์ 

์กฐํšŒ ์‹œ์Šคํ…œ

wildcard ํŒจํ„ด์ฒด์ด๋‹ ์ฟผ๋ฆฌ

์ฝœ์Šคํƒ ์ถ”์ 

ํ˜ธ์ถœ ๊ฒฝ๋กœ ์ถ”์ ๋””๋ฒ„๊น… ์ง€์›

VSCode ํ†ตํ•ฉ

์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™”Extension ์ง€์›

Naite๋ž€?

Naite(๋‚˜์ดํ…Œ)๋Š” Sonamu์˜ ํ…Œ์ŠคํŠธ ๋กœ๊น… ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ธฐ๋กํ•˜๊ณ , ์ด๋ฅผ ์กฐํšŒํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๋””๋ฒ„๊น…์„ ๋•์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฌด์˜ ๋‚˜์ดํ…Œ๊ฐ€ ์„ฑ์žฅ ๊ณผ์ •์„ ๊ธฐ๋กํ•˜๋“ฏ, Naite๋Š” ํ…Œ์ŠคํŠธ ์‹คํ–‰์˜ ์ „ ๊ณผ์ •์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜๋ €๋Š”์ง€, ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ Naite๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

์ผ๋ฐ˜์ ์ธ ๋””๋ฒ„๊น…์˜ ํ•œ๊ณ„

ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ž์ฃผ ๋งˆ์ฃผํ•ฉ๋‹ˆ๋‹ค:
์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜๋ฉด console.log ์ถœ๋ ฅ์ด ๋’ค์„ž์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๋กœ๊ทธ๊ฐ€ ์–ด๋А ํ…Œ์ŠคํŠธ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
์ฝ˜์†” ์ถœ๋ ฅ:
์–ด๋А ๊ฒƒ์ด ๋จผ์ € ์™„๋ฃŒ๋˜์—ˆ๋Š”์ง€, ์ˆœ์„œ๊ฐ€ ๋’ค์„ž์—ฌ ํŒŒ์•…์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
ํŠน์ • ๋ชจ๋“ˆ์ด๋‚˜ ํ•จ์ˆ˜์˜ ๋กœ๊ทธ๋งŒ ๋ณด๊ณ  ์‹ถ์„ ๋•Œ, console.log๋กœ๋Š” ํ•„ํ„ฐ๋ง์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ ๋‹ค ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŠน์ • ๋กœ๊ทธ๊ฐ€ ์–ด๋””์„œ ์ถœ๋ ฅ๋˜์—ˆ๋Š”์ง€, ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์ณ ์™”๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
Vitest์˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ์ถœ๋ ฅ๊ณผ console.log๊ฐ€ ์„ž์—ฌ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

Naite์˜ ํ•ด๊ฒฐ์ฑ…

Naite๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค:

ํ‚ค ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ

๊ฐ ๋กœ๊ทธ์— ๊ณ ์œ ํ•œ ํ‚ค๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. user:create, syncer:render์ฒ˜๋Ÿผ ๋ชจ๋“ˆ๊ณผ ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

wildcard ํ•„ํ„ฐ๋ง

user:*๋กœ user ๊ด€๋ จ ๋กœ๊ทธ๋งŒ, *:create๋กœ ๋ชจ๋“  create ๋กœ๊ทธ๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋™ ์ฝœ์Šคํƒ ์ถ”์ 

๊ฐ ๋กœ๊ทธ๊ฐ€ ์–ด๋””์„œ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ์ฝœ์Šคํƒ์„ ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ

๊ฐ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ๋œ ๋กœ๊ทธ ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์˜ ๋กœ๊ทธ์™€ ์ ˆ๋Œ€ ์„ž์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

VSCode ํ†ตํ•ฉ

VSCode Extension์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ถœ๋ ฅ๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๊น”๋”ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์‹œ์Šคํ…œ

์ฒด์ด๋‹ ์ฟผ๋ฆฌ๋กœ ๋ณต์žกํ•œ ์กฐ๊ฑด์˜ ๋กœ๊ทธ๋„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. fromFile(), fromFunction(), where() ๋“ฑ์„ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋…

1. Naite.t() - ๋กœ๊ทธ ๊ธฐ๋ก

Naite.t()๋Š” ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ‚ค(key), ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ๊ธฐ๋กํ•  ๊ฐ’(value)์ž…๋‹ˆ๋‹ค.
ํ‚ค ๋„ค์ด๋ฐ ๊ทœ์น™:
  • ์ฝœ๋ก (:)์œผ๋กœ ๊ณ„์ธต ๊ตฌ๋ถ„
  • module:function:action ํ˜•์‹ ๊ถŒ์žฅ
  • ์˜ˆ: user:create:start, syncer:render:template, payment:charge:done
์žฅ์ :
  • wildcard ํŒจํ„ด์œผ๋กœ ์กฐํšŒ ๊ฐ€๋Šฅ (user:*, *:create)
  • ๋ชจ๋“ˆ๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ๊ด€๋ฆฌ
  • ์ง๊ด€์ ์ธ ๊ตฌ์กฐ๋กœ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

2. Naite.get() - ๋กœ๊ทธ ์กฐํšŒ

Naite.get()์€ ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋ฅผ ์กฐํšŒํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ‚ค ๋˜๋Š” wildcard ํŒจํ„ด์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ ์ฒด์ด๋‹: ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ฒด์ด๋‹ํ•˜์—ฌ ๋ณต์žกํ•œ ๊ฒ€์ƒ‰๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

3. NaiteStore - ๋กœ๊ทธ ์ €์žฅ์†Œ

๊ฐ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ๋œ NaiteStore๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ด๋Š” Map<string, NaiteTrace[]> ํƒ€์ž…์œผ๋กœ, ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋กœ๊ทธ๋ฅผ ๋ฐฐ์—ด๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ:
ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ:
๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๋…๋ฆฝ๋œ Store๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4. ์ฝœ์Šคํƒ ์ž๋™ ์ถ”์ 

Naite๋Š” Naite.t() ํ˜ธ์ถœ ์‹œ์ ์˜ ์ฝœ์Šคํƒ์„ ์ž๋™์œผ๋กœ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋กœ๊ทธ๊ฐ€ ์–ด๋””์„œ ๊ธฐ๋ก๋˜์—ˆ๋Š”์ง€, ์–ด๋–ค ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ๊ฑฐ์ณค๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ™œ์šฉ:
  • fromFunction("createUser")๋กœ ํŠน์ • ํ•จ์ˆ˜์—์„œ ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋งŒ ํ•„ํ„ฐ๋ง
  • VSCode Extension์—์„œ ์ฝœ์Šคํƒ ํด๋ฆญ โ†’ ์ฝ”๋“œ ์œ„์น˜๋กœ ๋ฐ”๋กœ ์ด๋™
  • ๋ณต์žกํ•œ ํ˜ธ์ถœ ์ฒด์ธ ๋””๋ฒ„๊น…

์‹ค์ œ ํ™œ์šฉ ์˜ˆ์‹œ

๊ธฐ๋ณธ ์‚ฌ์šฉ - ํ๋ฆ„ ์ถ”์ 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•์€ ํ…Œ์ŠคํŠธ ํ๋ฆ„์˜ ๊ฐ ๋‹จ๊ณ„๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ํŒจํ„ด: :input๊ณผ :output ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ค‘๊ธ‰ ์‚ฌ์šฉ - ์กฐ๊ฑด๋ถ€ ์ถ”์ 

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ถ„๊ธฐ๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ์‚ฌ์šฉ - ์—๋Ÿฌ ์ถ”์ 

์—๋Ÿฌ ๋ฐœ์ƒ ์ƒํ™ฉ์„ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
์—๋Ÿฌ ์ถ”์ ์˜ ๊ฐ€์น˜: ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ž…๋ ฅ๊ฐ’์œผ๋กœ, ์–ด๋А ๋‹จ๊ณ„์—์„œ ์‹คํŒจํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VSCode Extension์˜ ์ฝœ์Šคํƒ ๊ธฐ๋Šฅ๊ณผ ๊ฒฐํ•ฉํ•˜๋ฉด ์—๋Ÿฌ ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ ์›๋ฆฌ

1. ๋กœ๊ทธ ๊ธฐ๋ก ๊ณผ์ •

1

ํ™˜๊ฒฝ ์ฒดํฌ

NODE_ENV === "test"์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ฉด ์ฆ‰์‹œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
2

Context ํ™•์ธ

Sonamu.getContext()๋กœ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ Context๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. Context๊ฐ€ ์—†์œผ๋ฉด ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
3

์ฝœ์Šคํƒ ์ˆ˜์ง‘

new Error().stack์œผ๋กœ ํ˜„์žฌ ์ฝœ์Šคํƒ์„ ์ˆ˜์ง‘ํ•˜์—ฌ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
4

Trace ์ƒ์„ฑ

ํ‚ค, ๊ฐ’, ์ฝœ์Šคํƒ, ์‹œ๊ฐ„์„ ํฌํ•จํ•œ NaiteTrace ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
5

Store์— ์ €์žฅ

naiteStore.set(key, [...existing, trace])๋กœ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

2. ๋กœ๊ทธ ์กฐํšŒ ๊ณผ์ •

3. VSCode Extension ์ „์†ก

์ง๋ ฌํ™”์˜ ์ค‘์š”์„ฑ: VSCode Extension์œผ๋กœ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฐ’์€ JSON์œผ๋กœ ์ง๋ ฌํ™”๋ฉ๋‹ˆ๋‹ค. Naite.t()์— ํ•จ์ˆ˜๋‚˜ ์ˆœํ™˜ ์ฐธ์กฐ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€๋งŒ, any ํƒ€์ž…์œผ๋กœ ๋ฐ›์•„ ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•

Naite๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์— Naite.t()๊ฐ€ ์žˆ์–ด๋„ ์„ฑ๋Šฅ ์˜ํ–ฅ์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.
๊ฐ ํ…Œ์ŠคํŠธ๋Š” ๋…๋ฆฝ๋œ NaiteStore๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. bootstrap.ts์˜ getMockContext()์—์„œ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด Store๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Naite.t(value: any)๋Š” any ํƒ€์ž…์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. TypeScript์˜ ํƒ€์ž… ์•ˆ์ •์„ฑ๋ณด๋‹ค ์‚ฌ์šฉ ํŽธ์˜์„ฑ์„ ์šฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, Extension ์ „์†ก ์‹œ ์ง๋ ฌํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
getAllTraces()๋Š” ๋ชจ๋“  ๊ฐ’์„ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Vitest์˜ task.meta๋ฅผ ํ†ตํ•œ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ํŒจํ„ด ๋งค์นญ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:
  • user:*: prefix ๋งค์นญ (๊ธธ์ด ๋ฌด๊ด€)
  • *:create: suffix ๋งค์นญ (๊ธธ์ด ๋™์ผ)
  • user:*:done: ์ค‘๊ฐ„ wildcard (๊ธธ์ด ๋™์ผ)
๋ณต์žกํ•œ ์ •๊ทœ์‹ ๋Œ€์‹  ์ง๊ด€์ ์ธ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ

Naite ์‚ฌ์šฉ ์‹œ ์ฃผ์˜์‚ฌํ•ญ:
  1. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๋งŒ: NODE_ENV === "test"์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  2. Context ํ•„์š”: Sonamu.getContext()๊ฐ€ ์žˆ์–ด์•ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. bootstrap์˜ runWithMockContext() ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.
  3. ๊ณผ๋„ํ•œ ๋กœ๊น… ์ฃผ์˜: ๋ฃจํ”„ ์•ˆ์—์„œ Naite.t()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ˆ˜์ฒœ ๊ฐœ์˜ trace๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํ‚ค ๋„ค์ด๋ฐ ๊ทœ์น™: module:function:action ํ˜•์‹์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ๊ทœ์น™์œผ๋กœ ๋‚˜์ค‘์— ์ฐพ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  5. ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ๊ฐ’ ๊ถŒ์žฅ: VSCode Extension์œผ๋กœ ์ „์†กํ•˜๋ ค๋ฉด JSON์œผ๋กœ ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋‚˜ ์ˆœํ™˜ ์ฐธ์กฐ๋Š” ํ”ผํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„

๋กœ๊ทธ ๊ธฐ๋กํ•˜๊ธฐ

Naite.t()์˜ ์ƒ์„ธ ์‚ฌ์šฉ๋ฒ•๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๋กœ๊ทธ ์กฐํšŒํ•˜๊ธฐ

Naite.get()๊ณผ ์ฒด์ด๋‹ ์ฟผ๋ฆฌ ์‹œ์Šคํ…œ์„ ๋ฐฐ์›๋‹ˆ๋‹ค.

Naite Viewer

VSCode Extension์œผ๋กœ ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋””๋ฒ„๊น…

์ฝœ์Šคํƒ ์ถ”์ ์œผ๋กœ ๋ณต์žกํ•œ ๋ฒ„๊ทธ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›๋‹ˆ๋‹ค.