Skip to main content
์™ธ๋ถ€ API, ํŒŒ์ผ ์‹œ์Šคํ…œ, ํƒ€์ด๋จธ ๋“ฑ์˜ ์˜์กด์„ฑ์„ ๋ชจํ‚นํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

API Mocking์ด๋ž€?

ํ…Œ์ŠคํŠธ์—์„œ ์™ธ๋ถ€ ์˜์กด์„ฑ(API, ํŒŒ์ผ ์‹œ์Šคํ…œ, ์‹œ๊ฐ„ ๋“ฑ)์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์งœ ๋™์ž‘์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ Mocking์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด:
  • ์™ธ๋ถ€ ์„œ๋น„์Šค ์žฅ์• ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ ์‹คํ–‰
  • ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ์—†์ด ๋น ๋ฅธ ํ…Œ์ŠคํŠธ
  • ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋กœ ์•ˆ์ •์ ์ธ ํ…Œ์ŠคํŠธ
  • ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…(๊ฒฐ์ œ, SMS ๋“ฑ) ํšŒํ”ผ

Mocking์˜ ์ข…๋ฅ˜

Sonamu์—์„œ๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ์‹์˜ Mocking์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

Vitest Mock

Vitest์˜ ๊ธฐ๋ณธ Mocking ๊ธฐ๋Šฅ

Naite Mock

Naite๋ฅผ ํ™œ์šฉํ•œ ๋™์  Mocking

Manual Mock

์ˆ˜๋™์œผ๋กœ ๊ตฌํ˜„ํ•œ Mock ๊ฐ์ฒด

Vitest Mock ์‚ฌ์šฉํ•˜๊ธฐ

๋ชจ๋“ˆ Mocking

์™ธ๋ถ€ ๋ชจ๋“ˆ์˜ ๋™์ž‘์„ ๊ฐ€์งœ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค:

ํ•จ์ˆ˜ Spy

์‹ค์ œ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค:

ํƒ€์ด๋จธ Mocking

์‹œ๊ฐ„ ๊ด€๋ จ ํ•จ์ˆ˜๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค:
bootstrap()๊ณผ ํƒ€์ด๋จธ: Sonamu์˜ bootstrap() ํ•จ์ˆ˜๋Š” afterEach์—์„œ ์ž๋™์œผ๋กœ vi.useRealTimers()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํƒ€์ด๋จธ๋ฅผ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ ์งœ Mocking

ํ˜„์žฌ ์‹œ๊ฐ์„ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค:

Naite Mock ์‚ฌ์šฉํ•˜๊ธฐ

Naite์˜ ํŠน๋ณ„ํ•œ ํ‚ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ Mock์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ Mocking

๊ฐ€์ƒ ํŒŒ์ผ ์ƒ์„ฑ

mock:fs/promises:virtualFileSystem ํ‚ค๋กœ ๊ฐ€์ƒ ํŒŒ์ผ์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค:

์‹ค์ „ ์˜ˆ์ œ: ํŒŒ์ผ ์—…๋กœ๋“œ ํ…Œ์ŠคํŠธ

Naite Mock์˜ ์ž‘๋™ ์›๋ฆฌ

Naite๋Š” ํŠน๋ณ„ํ•œ ํ‚ค ํŒจํ„ด(mock:*)์„ ๊ฐ์ง€ํ•˜์—ฌ ํ•ด๋‹น ๋™์ž‘์„ ๊ฐ€๋กœ์ฑ•๋‹ˆ๋‹ค:

Manual Mock ๊ตฌํ˜„ํ•˜๊ธฐ

๋ณต์žกํ•œ ์™ธ๋ถ€ ์„œ๋น„์Šค๋Š” ์ง์ ‘ Mock ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Mock ํด๋ž˜์Šค ์ƒ์„ฑ

Mock ์‚ฌ์šฉํ•˜๊ธฐ

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

์™ธ๋ถ€ API ํ˜ธ์ถœ Mocking

SMS ๋ฐœ์†ก Mocking

ํŒŒ์ผ ์—…๋กœ๋“œ Mocking

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ Mocking

Mocking ์ „๋žต

๊ณ„์ธต๋ณ„ Mocking

ํ…Œ์ŠคํŠธ ๋ ˆ๋ฒจ๋ณ„ Mocking:
  1. Unit ํ…Œ์ŠคํŠธ: ๋ชจ๋“  ์˜์กด์„ฑ Mock
  2. Integration ํ…Œ์ŠคํŠธ: ์™ธ๋ถ€ ์˜์กด์„ฑ๋งŒ Mock
  3. E2E ํ…Œ์ŠคํŠธ: Mocking ์ตœ์†Œํ™”

Mock ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

ํ…Œ์ŠคํŠธ์šฉ Mock ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค:
์‚ฌ์šฉ:

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

Mocking ์‹œ ์ฃผ์˜์‚ฌํ•ญ:
  1. ๊ณผ๋„ํ•œ Mocking ์ง€์–‘: Mock์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์‹ค์ œ ๋™์ž‘๊ณผ ๊ดด๋ฆฌ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ๊ผญ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ Mockํ•˜์„ธ์š”.
  2. Mock ์ •๋ฆฌ: afterEach์—์„œ Mock์„ ์ •๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Mock๊ณผ ์‹ค์ œ ๋™์ž‘ ์ผ์น˜: Mock์˜ ๋™์ž‘์ด ์‹ค์ œ ์„œ๋น„์Šค์™€ ๋‹ค๋ฅด๋ฉด ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•ด๋„ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ํƒ€์ž… ์•ˆ์ „์„ฑ: Mock์—๋„ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜์„ธ์š”.
  5. Naite Mock ๋ฒ”์œ„: mock:* ํ‚ค๋Š” ์ „์—ญ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์ข…๋ฃŒ ์‹œ ๋ฐ˜๋“œ์‹œ ์‚ญ์ œํ•˜์„ธ์š”.

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

runWithMockContext

Mock Context๋กœ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

Database Mocking

ํŠธ๋žœ์žญ์…˜์œผ๋กœ DB ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ

Naite ๋กœ๊น…

ํ…Œ์ŠคํŠธ ๋กœ๊ทธ ๊ธฐ๋ก ๋ฐ ์ถ”์ 

Bootstrap

ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”