Naite ๊ฐ์
ํ ์คํธ ๋ก๊น
์คํ ์ค ๋ก๊ทธ ๊ธฐ๋ก์ฒด๊ณ์ ์ธ ์ถ์
์กฐํ ์์คํ
wildcard ํจํด์ฒด์ด๋ ์ฟผ๋ฆฌ
์ฝ์คํ ์ถ์
ํธ์ถ ๊ฒฝ๋ก ์ถ์ ๋๋ฒ๊น
์ง์
VSCode ํตํฉ
์ค์๊ฐ ์๊ฐํExtension ์ง์
Naite๋?
Naite(๋์ดํ )๋ Sonamu์ ํ ์คํธ ๋ก๊น ์์คํ ์ ๋๋ค. ํ ์คํธ ์คํ ์ค ๋ฐ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ธฐ๋กํ๊ณ , ์ด๋ฅผ ์กฐํํ์ฌ ํ ์คํธ ๋๋ฒ๊น ์ ๋์ต๋๋ค. ๋๋ฌด์ ๋์ดํ ๊ฐ ์ฑ์ฅ ๊ณผ์ ์ ๊ธฐ๋กํ๋ฏ, Naite๋ ํ ์คํธ ์คํ์ ์ ๊ณผ์ ์ ๊ธฐ๋กํฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ๋ ๋์ง, ์ด๋ค ํจ์๊ฐ ํธ์ถ๋์๋์ง๋ฅผ ์๊ฐ ์์๋๋ก ์ถ์ ํ ์ ์์ต๋๋ค.์ Naite๊ฐ ํ์ํ๊ฐ?
์ผ๋ฐ์ ์ธ ๋๋ฒ๊น ์ ํ๊ณ
ํ ์คํธ๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์์ฃผ ๋ง์ฃผํฉ๋๋ค:console.log์ ํผ๋
console.log์ ํผ๋
์ฌ๋ฌ ํ
์คํธ๊ฐ ๋์์ ์คํ๋๋ฉด ์ฝ์ ์ถ๋ ฅ:์ด๋ ๊ฒ์ด ๋จผ์ ์๋ฃ๋์๋์ง, ์์๊ฐ ๋ค์์ฌ ํ์
์ด ์ด๋ ต์ต๋๋ค.
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[]> ํ์
์ผ๋ก, ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ก๊ทธ๋ฅผ ๋ฐฐ์ด๋ก ์ ์ฅํฉ๋๋ค.
NaiteStore ๊ตฌ์กฐ
NaiteStore ๊ตฌ์กฐ
4. ์ฝ์คํ ์๋ ์ถ์
Naite๋Naite.t() ํธ์ถ ์์ ์ ์ฝ์คํ์ ์๋์ผ๋ก ์์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ก๊ทธ๊ฐ ์ด๋์ ๊ธฐ๋ก๋์๋์ง, ์ด๋ค ํจ์ ํธ์ถ ๊ฒฝ๋ก๋ฅผ ๊ฑฐ์ณค๋์ง ํ์
ํ ์ ์์ต๋๋ค.
- ๋จ์ผ ํธ์ถ
- ํจ์ ์ฒด์ธ
- ๊น์ ํธ์ถ
fromFunction("createUser")๋ก ํน์ ํจ์์์ ๊ธฐ๋ก๋ ๋ก๊ทธ๋ง ํํฐ๋ง- VSCode Extension์์ ์ฝ์คํ ํด๋ฆญ โ ์ฝ๋ ์์น๋ก ๋ฐ๋ก ์ด๋
- ๋ณต์กํ ํธ์ถ ์ฒด์ธ ๋๋ฒ๊น
์ค์ ํ์ฉ ์์
๊ธฐ๋ณธ ์ฌ์ฉ - ํ๋ฆ ์ถ์
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ํ ์คํธ ํ๋ฆ์ ๊ฐ ๋จ๊ณ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ ๋๋ค.์ค๊ธ ์ฌ์ฉ - ์กฐ๊ฑด๋ถ ์ถ์
๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๊ธฐ๋ฅผ ์ถ์ ํฉ๋๋ค.๊ณ ๊ธ ์ฌ์ฉ - ์๋ฌ ์ถ์
์๋ฌ ๋ฐ์ ์ํฉ์ ์์ธํ ๊ธฐ๋กํฉ๋๋ค.์๋ฌ ์ถ์ ์ ๊ฐ์น: ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ ์ด๋ค ์
๋ ฅ๊ฐ์ผ๋ก, ์ด๋ ๋จ๊ณ์์ ์คํจํ๋์ง ๋ช
ํํ ์ ์ ์์ต๋๋ค. 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 ํ์
์ผ๋ก ๋ฐ์ ์ฌ์ฉ ํธ์์ฑ์ ๋์์ต๋๋ค.์ฃผ์ ํน์ง
1. ํ
์คํธ ์ ์ฉ ์ค๊ณ
1. ํ ์คํธ ์ ์ฉ ์ค๊ณ
Naite๋ ํ
์คํธ ํ๊ฒฝ์์๋ง ๋์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ํ๋ก๋์
์ฝ๋์
Naite.t()๊ฐ ์์ด๋ ์ฑ๋ฅ ์ํฅ์ด ์ ํ ์์ต๋๋ค.2. ์์ ํ ํ
์คํธ ๊ฒฉ๋ฆฌ
2. ์์ ํ ํ ์คํธ ๊ฒฉ๋ฆฌ
๊ฐ ํ
์คํธ๋ ๋
๋ฆฝ๋ NaiteStore๋ฅผ ๊ฐ์ง๋๋ค.
bootstrap.ts์ getMockContext()์์ ๋งค๋ฒ ์๋ก์ด Store๋ฅผ ์์ฑํฉ๋๋ค.3. Any ํ์
ํ์ฉ
3. Any ํ์ ํ์ฉ
Naite.t(value: any)๋ any ํ์
์ ๋ฐ์ต๋๋ค. TypeScript์ ํ์
์์ ์ฑ๋ณด๋ค ์ฌ์ฉ ํธ์์ฑ์ ์ฐ์ ํ์ต๋๋ค.4. ์๋ ์ง๋ ฌํ
4. ์๋ ์ง๋ ฌํ
getAllTraces()๋ ๋ชจ๋ ๊ฐ์ JSON์ผ๋ก ์ง๋ ฌํํ์ฌ ๋ฐํํฉ๋๋ค. ์ด๋ Vitest์ task.meta๋ฅผ ํตํ ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ํ ๊ฒ์
๋๋ค.5. wildcard ํจํด ๋งค์นญ
5. wildcard ํจํด ๋งค์นญ
๊ฐ๋จํ์ง๋ง ๊ฐ๋ ฅํ ํจํด ๋งค์นญ์ ์ง์ํฉ๋๋ค:
user:*: prefix ๋งค์นญ (๊ธธ์ด ๋ฌด๊ด)*:create: suffix ๋งค์นญ (๊ธธ์ด ๋์ผ)user:*:done: ์ค๊ฐ wildcard (๊ธธ์ด ๋์ผ)
์ฃผ์์ฌํญ
๋ค์ ๋จ๊ณ
๋ก๊ทธ ๊ธฐ๋กํ๊ธฐ
Naite.t()์ ์์ธ ์ฌ์ฉ๋ฒ๊ณผ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์์๋ด
๋๋ค.
๋ก๊ทธ ์กฐํํ๊ธฐ
Naite.get()๊ณผ ์ฒด์ด๋ ์ฟผ๋ฆฌ ์์คํ
์ ๋ฐฐ์๋๋ค.
Naite Viewer
VSCode Extension์ผ๋ก ๋ก๊ทธ๋ฅผ ์ค์๊ฐ ์๊ฐํํ๋ ๋ฐฉ๋ฒ์ ์์๋ด
๋๋ค.
ํ ์คํธ ๋๋ฒ๊น
์ฝ์คํ ์ถ์ ์ผ๋ก ๋ณต์กํ ๋ฒ๊ทธ๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.