tooth-is-silver ๋‹˜์˜ ์ƒ์„ธํŽ˜์ด์ง€ ๏ผž [3ํŒ€ ์ด๊ฐ€์€] Chapter ๐Ÿฆ 3-1. ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๐Ÿฆ

๋‚œ์ด๋„์— ๋งž๋Š” ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•ด์„œ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”!


Medium

7์ฃผ์ฐจ ๊ณผ์ œ ์ฒดํฌํฌ์ธํŠธ

๊ธฐ๋ณธ๊ณผ์ œ

Medium

  • ์ด 11๊ฐœ์˜ ํŒŒ์ผ, 115๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์‚ฌํžˆ ์ž‘์„ฑํ•˜๊ณ  ํ†ต๊ณผ์‹œํ‚จ๋‹ค.

์งˆ๋ฌธ

Q. medium.useEventOperations.spec.ts > ์•„๋ž˜ enqueueSnackbarFn๊ณผ mock๊ณผ ์ด fn์€ ๋ฌด์—‡์„ ํ•ด์ค„๊นŒ์š”?

const enqueueSnackbarFn = vi.fn();

vi.mock('notistack', async () => {
  const actual = await vi.importActual('notistack');
  return {
    ...actual,
    useSnackbar: () => ({
      enqueueSnackbar: enqueueSnackbarFn,
    }),
  };
});

React Notistack - https://notistack.com/ notistack์ด๋ผ๋Š” React ์•Œ๋ฆผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์ƒ์œผ๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ชจํ‚น ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. vi.fn()์œผ๋กœ ์ƒ์„ฑ๋œ enqueueSnackbarFn์€ ์‹ค์ œ ์•Œ๋ฆผ์„ ํ™”๋ฉด์— ๋„์šฐ์ง€ ์•Š์œผ๋ฉด์„œ๋„ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์—ฌ๋ถ€, ํ˜ธ์ถœ ํšŸ์ˆ˜, ์ „๋‹ฌ๋œ ๋ฉ”์‹œ์ง€ ๋“ฑ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. vi.mock์„ ํ†ตํ•ด notistack ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ useSnackbar ํ›…๋งŒ ๊ฐ€์งœ ํ•จ์ˆ˜๋กœ ๊ต์ฒดํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ๋“ค์€ ์›๋ณธ์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ํ…Œ์ŠคํŠธ ์ง„ํ–‰์‹œ enqueueSnackbarFn๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘ ์‹ค์ œ ํŒ์—…์ด ๋œจ์ง€ ์•Š์•„ ํ…Œ์ŠคํŠธ ์ง„ํ–‰์— ๋ฐฉํ•ด๋ฐ›์ง€ ์•Š์œผ๋ฉด์„œ๋„, expect๋ฅผ ์‚ฌ์šฉํ•ด ์•Œ๋ฆผ ๊ธฐ๋Šฅ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Q. medium.integration.spec.ts > ์—ฌ๊ธฐ์„œ Provider๋กœ ๋ฌถ์–ด์ฃผ๋Š” ๋™์ž‘์€ ์˜๋ฏธ์žˆ์„๊นŒ์š”? ์žˆ๋‹ค๋ฉด ์–ด๋–ค ์˜๋ฏธ์ผ๊นŒ์š”?

Provider ๋ž˜ํ•‘์€ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ๊ณผ ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ํ…Œ์ŠคํŠธ์—์„œ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ThemeProvider: MUI ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ผ๊ด€๋œ ํ…Œ๋งˆ๋ฅผ ์ ์šฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•จ
  • CssBaseline: ๋ธŒ๋ผ์šฐ์ €๋ณ„ ๊ธฐ๋ณธ ์Šคํƒ€์ผ ์ฐจ์ด๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ์ผ๊ด€๋œ ์‹œ์ž‘์  ์ œ๊ณต
  • SnackbarProvider: ์ „์—ญ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

์ด๋Ÿฌํ•œ Provider๋“ค ์—†์ด๋Š” ํ…Œ์ŠคํŠธ ์ค‘์ธ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. handlersUtils > ์•„๋ž˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ use ํ•จ์ˆ˜๋Š” ์–ด๋–ค ์—ญํ• ์„ ํ• ๊นŒ์š”? ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๊ฐ ํ•จ์ˆ˜๋Š” ํ…Œ์ŠคํŠธ์šฉ Mock ์„œ๋ฒ„์—์„œ CREAT,UPDATE,DELETE ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • setupMockHandlerCreation: ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ. ๋‹จ์ผ ์ด๋ฒคํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด, ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ ์„ค์ •์ด๋‚˜ ๋นˆ ์ƒํƒœ(์ผ์ •์ด ์—†๋Š” ์ƒํƒœ)์—์„œ์˜ ํ…Œ์ŠคํŠธ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • setupMockHandlerUpdating: ๊ธฐ์กด mockEvents ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜์ • ์ž‘์—…์„ ์ฒ˜๋ฆฌ. ๊ธฐ์กด ์ผ์ • ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์—์„œ์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ์˜ ์—…๋ฐ์ดํŠธ ํ…Œ์ŠคํŠธ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • setupMockHandlerDeletion: mockEvents์—์„œ ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ์‚ญ์ œ. ์‚ญ์ œ ํ›„์˜ ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•˜๋Š” ํ…Œ์ŠคํŠธ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

Q. setupTests.ts > ์™œ ์ด ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฑธ๊นŒ์š”?

beforeEach(() => {
  expect.hasAssertions();
  vi.setSystemTime(new Date('2025-10-01'));
});

beforeEach์—์„œ ์ด ์„ค์ •๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์ผํ•œ ์กฐ๊ฑด์—์„œ ์‹คํ–‰๋˜๋„๋ก ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • vi.setSystemTime: ์‹œ์Šคํ…œ ์‹œ๊ฐ„์„ ๊ณ ์ •ํ•˜์—ฌ Mock ๋ฐ์ดํ„ฐ์™€ ๋‚ ์งœ ๋น„๊ต ์‹œ ํ•ญ์ƒ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‹œ๊ฐ„ ์„ค์ • ์—†์ด ํ…Œ์ŠคํŠธํ•˜๋ฉด ์‹คํ–‰ ๋‚ ์งœ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์–ด ๋ถˆ์•ˆ์ •ํ•œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ฑ•ํ„ฐ2 ์ง„ํ–‰์‹œ ํ™”์š”์ผ์ด ์•„๋‹Œ ๋‚ ์—๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒ๋์—ˆ์Šต๋‹ˆ๋‹ค.
  • expect.hasAssertions: ๋ชจ๋“  ํ…Œ์ŠคํŠธ์—์„œ ๋ฐ˜๋“œ์‹œ expect๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒ€์ฆ์ด ์ด๋ฃจ์–ด์ง€๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ ์—†์ด ํ†ต๊ณผํ•˜๋Š” ๋ฌด์˜๋ฏธํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์‹ฌํ™” ๊ณผ์ œ

  • App ์ปดํฌ๋„ŒํŠธ ์ ์ ˆํ•œ ๋‹จ์œ„์˜ ์ปดํฌ๋„ŒํŠธ, ํ›…, ์œ ํ‹ธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ–ˆ๋Š”๊ฐ€?
  • ํ•ด๋‹น ๋ชจ๋“ˆ๋“ค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ๋ฅผ 2๊ฐœ ์ด์ƒ ์ž‘์„ฑํ–ˆ๋Š”๊ฐ€?

๊ณผ์ œ ์…€ํ”„ํšŒ๊ณ 

๊ธฐ์ˆ ์  ์„ฑ์žฅ

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๋Š”๋ฐ ์ด์ œ ๋งŽ์ด ์นœํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋น„๋™๊ธฐ/๋™๊ธฐ ํ…Œ์ŠคํŠธ ๋ฐฉ์‹์˜ ์ฐจ์ด์ , API ์š”์ฒญ์„ Mock ๋ฐ์ดํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋“ค์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. toBe๋Š” ์ฐธ์กฐ ๋น„๊ต์™€ ์›์‹œ๊ฐ’ ๋น„๊ต์— ์‚ฌ์šฉํ•˜๊ณ , toEqual์€ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๋‚ด์šฉ๊นŒ์ง€ ๊นŠ์€ ๋น„๊ต๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. queryByTestId๋Š” ์š”์†Œ๊ฐ€ ์žˆ์„์ง€ ์—†์„์ง€ ๋ชจ๋ฅผ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ null์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , getByTestId๋Š” ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์š”์†Œ์— ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ฐจ์ด์ ๋„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ฒซ ๋งŒ๋‚จ์ธ๋ฐ ๋„ˆ๋ฌด ์žฌ๋ฐ‹๊ณ  ์–ด๋ ต๊ณ  ์‹ ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํ•œํ… ์œ ๋‹ˆ์ฝ˜๐Ÿฆ„ ๊ฐ™์€ ์กด์žฌ์˜€๋Š”๋ฐ ์‹ค์ œ๋กœ ๋งŒ๋‚˜์„œ ๋ฟ”๋„ ๋งŒ์ ธ๋ณด๊ณ  ๋ง๋„ ๊ฑธ์–ด๋ณด๊ณ  ์ƒ๊น€์ƒˆ๋ฅผ ๊ด€์ฐฐํ•ด๋ณธ ๋А๋‚Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์ฐฐํ•ด๋ณธ ํ›„๊ธฐ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์•„์ง์€ ์žฌ๋ฐ‹๊ณ  ํฅ๋ฏธ์ง„์ง„ํ•œ๋ฐ ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์€ ๋‹ค๋“ค ์žฌ๋ฏธ์—†์–ดํ•ด์„œ ๋ฉ‹์ฉ์€ ๋А๋‚Œ์ž…๋‹ˆ๋‹ค. ์™œ ๋‹ค๋“ค ์žฌ๋ฏธ์—†๋Š”์ง€ ์œ ์ถ”ํ•ด๋ณด์ž๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ธฐํš, UX์ ์ธ ์ธก๋ฉด์—์„œ ๊ณ ๋ คํ•ด์•ผํ•  ๊ฒƒ์ด ๋งŽ๊ณ  ๊ทธ ๋ถ€๋ถ„์„ ์ฝ”๋“œ๋กœ ํ’€์–ด์•ผ ํ•˜๋‹ค๋ณด๋‹ˆ UX์™€ ์นœํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ๋งˆ๋‹ค ๊ณ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ํ’ˆ์งˆ

๋…ธ๋ ฅํ•œ ๋ถ€๋ถ„

  • test description๋ฅผ ๊ธฐํš ์นœํ™”์ ์œผ๋กœ ํ’€์–ด์„œ ์ƒ์„ธํ•˜๊ฒŒ ์ ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.
  • timeValidation.ts์— ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž๊ฐ€ string ์›์‹œ ํƒ€์ž…์ด๋‹ค๋ณด๋‹ˆ ์ข€ ๋” ๋ช…ํ™•ํ•œ ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋กœ์ง์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. (regex๋กœ string ํฌ๋ฉง ํ™•์ธ + ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€)

๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ˆœ์ˆ˜ํ•จ์ˆ˜์ด๊ฑฐ๋‚˜ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์งง์„์ˆ˜๋ก, ๊ทธ๋ฆฌ๊ณ  ์‘์ง‘๋„๊ฐ€ ๋†’๊ณ  ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ์ฝ”๋“œ์ผ์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ํ†ตํ•ฉํ…Œ์ŠคํŠธ์ฒ˜๋Ÿผ ๊ด€๋ฆฌํ•ด์•ผ ํ•  ์ƒํƒœ๊ฐ€ ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๋ณต์žก๋„๋„ ํ•จ๊ป˜ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ถ€๋ถ„์ด ๋งŽ์•„์ ธ ๋†“์น˜๋Š” ๋ถ€๋ถ„์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ๋†’์•„์ง„๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋ชฉ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด์„œ๋„ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ dummies.ts ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, ์ค‘๋ณต ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์ด ํฌ๊ฒŒ ์—†๊ณ  ๋ฐ์ดํ„ฐ์–‘์ด ๋งŽ์ง€ ์•Š์•„์„œ ํ•œ ํŒŒ์ผ ๋‚ด์—์„œ ํ…Œ์ŠคํŠธ๋ณ„๋กœ ํ•„์š”ํ•œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ ๋” ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ handlerUtils.ts๋‚ด๋ถ€์— ๋ชฉ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ๋งค๋ฒˆ ํ•ด๋‹น ํŒŒ์ผ๋กœ ์ด๋™ํ•˜์—ฌ ๋ชฉ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ฉด์„œ ์ง„ํ–‰ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ํšจ๊ณผ ๋ถ„์„

๊ฐ€์žฅ ํฐ ๋ฐฐ์›€์€ TDD(Test-Driven Development)์˜ ์ค‘์š”์„ฑ์„ ๋А๋‚€ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. UI๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜์ค‘์— ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ณ ๋ฏผ ํ•  ๊ฒƒ์ด ๋งŽ์•„ ๋„ˆ๋ฌด ์–ด๋ ค์› ๊ณ , ์™„์„ฑ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ ๋†“์น˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋Š” TDD ๋ฐฉ์‹์ด ํ›จ์”ฌ ํšจ์œจ์ ์ผ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ƒ์„ธํ•œ UX ๊ธฐํš์„œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ํ›จ์”ฌ ์ฒด๊ณ„์ ์ด๊ณ  ์™„์„ฑ๋„ ๋†’์€ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์™œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ์‹ซ์–ดํ•˜๋Š”์ง€๋„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ํšŒ์‚ฌ์—์„œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ค‘์š”์„ฑ์„ ์•Œ๊ณ  ํ™€๋กœ ๋„์ž…ํ–ˆ์œผ๋‚˜, ํ”„๋กœ๋•ํŠธ ์ฝ”๋“œ๊ฐ€ ํด๋ฆฐํ•˜์ง€ ์•Š์•„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํฌ๊ฒŒ ์—๋Ÿฌ๊ฐ€ ํ„ฐ์ง„ ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•ํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•œ ํ›„์— ๋งŒ๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋„์ž… ์˜๋ฏธ๊ฐ€ ํฌ์„๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์™„๋ฒฝ์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ๋‹นํ•œ ์‹œ๊ฐ„ ํˆฌ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ณผ์ œํ•˜๋ฉด์„œ ๋˜ ๋‹ค์‹œ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ณด๋‹ค ํ›จ์”ฌ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์‹ค๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์™€ ์ƒํƒœ๊ฐ€ ์–ฝํ˜€์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋‹ค ์ปค๋ฒ„ํ•˜๋ ค๋‹ค ๋ณด๋‹ˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊นŒ์ง€ ์ƒ์„ธํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ํž˜๋“ค์–ด์ง„๋‹ค๋Š” ๋”œ๋ ˆ๋งˆ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ํด๋ฆฐ ์ฝ”๋“œ๋งŒํผ์ด๋‚˜ ๊ฐ€๋…์„ฑ์ด ์ค‘์š”ํ•˜๊ณ  ๊ฐœ์ธ์˜ ์ทจํ–ฅ์„ ๋งŽ์ด ํƒ€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ, ํŒ€ ๋‚ด์—์„œ ์ผ๊ด€๋œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋‚˜ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ์ž‘์„ฑํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ๋ช…ํ™•ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์žˆ์—ˆ์œผ๋ฉด ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ทฐ ๋ฐ›๊ณ  ์‹ถ์€ ๋‚ด์šฉ

ํ…Œ์ŠคํŠธ ๋”๋ฏธ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๊ณ ๋ฏผ ํ˜„์žฌ๋Š” ๊ฐ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ๋‚ด์—์„œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•œ ํšจ๊ณผ์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ ๋ถ„๋ฆฌํ•˜๊ณ  ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”? ์ด์ „ ๋ฉ˜ํ† ๋ง๋•Œ ์ฝ”์น˜๋‹˜๊ป˜์„œ ์‹ค๋ฌด์—์„œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์…จ๋Š”๋ฐ ๊ทธ ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ด์–ด์„œ ์ฑ„ํƒ๋๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ๋œ๊ฑด์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

ํ†ตํ•ฉํ…Œ์ŠคํŠธ vs ๋‹จ์œ„ํ…Œ์ŠคํŠธ ๋น„์œจ๊ณผ ์ „๋žต ํ†ตํ•ฉํ…Œ์ŠคํŠธ๊ฐ€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด ๋‘˜์˜ ์ ์ ˆํ•œ ๋น„์œจ์ด๋‚˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์—†์ด ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋งŒ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์„๊นŒ์š”? ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ผ๋ถ€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์˜ ๋‚ด์šฉ์ด ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—๋„ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์—์„œ ์ตœ๋Œ€ํ•œ ์ปค๋ฒ„ํ•˜๊ณ  ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋”ฑ! ๋‹จ์ผ ui์ ์ธ ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ..ํ•˜๊ณ  ์ƒ์ƒํ•ด๋ดค๋Š”๋ฐ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค!


๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

์•ˆ๋…•ํ•˜์„ธ์š” ๊ฐ€์€๋‹˜!! 7์ฃผ์ฐจ ๊ณผ์ œ ๋„ˆ๋ฌด ์ž˜ ์ง„ํ–‰ํ•ด์ฃผ์…จ๋„ค์š” ใ…Žใ…Ž ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!!!

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ฒซ ๋งŒ๋‚จ์ธ๋ฐ ๋„ˆ๋ฌด ์žฌ๋ฐ‹๊ณ  ์–ด๋ ต๊ณ  ์‹ ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํ•œํ… ์œ ๋‹ˆ์ฝ˜๐Ÿฆ„ ๊ฐ™์€ ์กด์žฌ์˜€๋Š”๋ฐ ์‹ค์ œ๋กœ ๋งŒ๋‚˜์„œ ๋ฟ”๋„ ๋งŒ์ ธ๋ณด๊ณ  ๋ง๋„ ๊ฑธ์–ด๋ณด๊ณ  ์ƒ๊น€์ƒˆ๋ฅผ ๊ด€์ฐฐํ•ด๋ณธ ๋А๋‚Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํ‘œํ˜„์ด ์ธ์ƒ์ ์ด๋„ค์š”!!

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๊ธฐํš, UX์ ์ธ ์ธก๋ฉด์—์„œ ๊ณ ๋ คํ•ด์•ผํ•  ๊ฒƒ์ด ๋งŽ๊ณ  ๊ทธ ๋ถ€๋ถ„์„ ์ฝ”๋“œ๋กœ ํ’€์–ด์•ผ ํ•˜๋‹ค๋ณด๋‹ˆ UX์™€ ์นœํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ๋งˆ๋‹ค ๊ณ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ ์˜์—ญ์—์„œ์˜ ํ…Œ์ŠคํŠธ๋Š” ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ ์ฒ˜๋Ÿผ UI/UX ์— ๋Œ€ํ•œ ํ‘œํ˜„๊ณผ ๊ฒฐํ•ฉ์ด ๋˜์–ด์žˆ์–ด์„œ ์ด๋Ÿฐ ๋ถ€๋ถ„๊นŒ์ง€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•˜๊ธฐ๊ฐ€ ์‚ฌ์‹ค ์‰ฝ์ง€ ์•Š์ฃ .. ๋ณ€๊ฒฝ๋„ ๋ฌด์ฒ™ ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•˜๊ณ ..? ๊ทธ๋ ‡๋‹ค๋ฉด UI/UX์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ผญ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆํ•ด์•ผ ์ข‹์€์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋Š”๊ฒƒ๋„ ํ•„์š”ํ•ด์š”. ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„์ง€, ํ˜น์€ ์–ด๋–ป๊ฒŒ ํ•ต์‹ฌ๋งŒ ๋ถ„๋ฆฌํ•ด์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„์ง€ ๋“ฑ!

ํ”„๋กœ๋•ํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•œ ํ›„์— ๋งŒ๋“œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ๋„์ž… ์˜๋ฏธ๊ฐ€ ํฌ์„๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์™„๋ฒฝ์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒ๋‹นํ•œ ์‹œ๊ฐ„ ํˆฌ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ณผ์ œํ•˜๋ฉด์„œ ๋˜ ๋‹ค์‹œ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์‚ฌ์‹ค ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋Š” ํŽธ์ธ๋ฐ์š”, ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋“  ๋Šฆ๊ฒŒ ์ž‘์„ฑํ•˜๋“  ์ผ๋‹จ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๊ทธ ์ดํ›„๋กœ๋Š” ์•ˆ์ •๊ฐ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด์š”. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ๋” ์ ๊ทน์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ์ด ์˜ฌ๋ผ๊ฐ€๋Š”๊ฑฐ์ฃ  ใ…Žใ…Ž

์‚ฌ๋žŒ๋งˆ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝํ—˜์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์–ธํ•  ์ˆ˜๋Š” ์—†๊ฒ ์ง€๋งŒ... ์ €๋Š” TDD๋ฅผ ํ•ด์•ผํ•œ๋‹ค๊ฐ€ ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์ต์ˆ™ํ•ด์•ผ TDD๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”!

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ํด๋ฆฐ ์ฝ”๋“œ๋งŒํผ์ด๋‚˜ ๊ฐ€๋…์„ฑ์ด ์ค‘์š”ํ•˜๊ณ  ๊ฐœ์ธ์˜ ์ทจํ–ฅ์„ ๋งŽ์ด ํƒ€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ, ํŒ€ ๋‚ด์—์„œ ์ผ๊ด€๋œ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋‚˜ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ์ž‘์„ฑํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ๋ช…ํ™•ํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์ด ์žˆ์—ˆ์œผ๋ฉด ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ€์ด๋“œ๋ผ์ธ์€ ์Šค์Šค๋กœ ์ฒด๊ฐํ•˜๋ฉด์„œ ๋งŒ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š” ใ…Žใ…Ž ๊ทธ๋ž˜์•ผ ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๋” ์ž์‹ ์žˆ๊ฒŒ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค! ๋‚จ๋“ค์ด ๋งํ•˜๋Š” ์ข‹์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋‚ด๊ฐ€ ๋А๋ผ๊ณ  ์ฒดํ—˜ํ•œ ์ข‹์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ค‘์š”ํ•œ๊ฑฐ์ฃ .

ํ˜„์žฌ๋Š” ๊ฐ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ๋‚ด์—์„œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•œ ํšจ๊ณผ์ ์ธ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ ๋ถ„๋ฆฌํ•˜๊ณ  ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”? ์ด์ „ ๋ฉ˜ํ† ๋ง๋•Œ ์ฝ”์น˜๋‹˜๊ป˜์„œ ์‹ค๋ฌด์—์„œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ์…จ๋Š”๋ฐ ๊ทธ ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ด์–ด์„œ ์ฑ„ํƒ๋๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ๋ ‡๊ฒŒ ๋ฐ”๋€Œ๊ฒŒ ๋œ๊ฑด์ง€๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ, ์›๋ž˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒํŽธํ™” ๋˜์–ด์žˆ์—ˆ์–ด์š”. ์‚ฌ์‹ค ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค๋ฉด ์ƒ๊ด€ ์—†๋Š”๋ฐ... ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋„ 5000๊ฐœ ์ •๋„ ๋˜๋‹ˆ๊นŒ ์ž์ž˜ํ•œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ต๋‹ˆ๋‹ค ใ…Žใ…Ž ๊ทธ๋ž˜์„œ ๋‚ ์žก๊ณ  ํŒ€์›๋“ค๊ณผ ๋‹ค๊ฐ™์ด ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์— ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ–ˆ์–ด์š”. ์ด๋Ÿฌ๋ฉด ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์—ฌํŒŒ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•ด์ง€๊ณ  ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ๋Œ€์‘์„ ์‹ ์†ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ต๋‹ˆ๋‹ค!

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ ์“ฐ์ด๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด์˜ ๋ชจ์Šต์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ input/output ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ด€๋ฆฌํ•ด๋ณด์„ธ์š”!

https://jojoldu.tistory.com/611

test fixture ๋ผ๋Š” ์šฉ์–ด๋กœ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๋งŽ์ด ๋‚˜์˜จ๋‹ต๋‹ˆ๋‹ค!

api์™€ ๊ฐ•๊ฒฐํ•ฉ ๋˜์–ด์žˆ๋‹ค๋ฉด, api ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€์„œ fixture์— ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ฐพ์•„๋ณด๋ฉด ์žˆ์–ด์š”! ์ง€๊ธˆ์€ ๊ธฐ์–ต์ด ๊ฐ€๋ฌผ๊ฐ€๋ฌผํ•ด์„œ... ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€ ๊นŒ๋จน์—ˆ๋„ค์š” ใ…‹ใ…‹;

ํ†ตํ•ฉํ…Œ์ŠคํŠธ๊ฐ€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ณด๋‹ค ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ด ๋‘˜์˜ ์ ์ ˆํ•œ ๋น„์œจ์ด๋‚˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ •ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์—†์ด ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋งŒ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์„๊นŒ์š”? ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ผ๋ถ€ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์˜ ๋‚ด์šฉ์ด ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—๋„ ๋น„์Šทํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ ๋‹จ์œ„ํ…Œ์ŠคํŠธ์—์„œ ์ตœ๋Œ€ํ•œ ์ปค๋ฒ„ํ•˜๊ณ  ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋”ฑ! ๋‹จ์ผ ui์ ์ธ ๋ถ€๋ถ„๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ..ํ•˜๊ณ  ์ƒ์ƒํ•ด๋ดค๋Š”๋ฐ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค!

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๋ชฉ์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋งŒ์œผ๋กœ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋Š” ์‚ฌ์‹ค ์–ด๋ ค์›Œ์š”. ๊ทธ์น˜๋งŒ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์—.. ์ด๋ณด๋‹ค๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ๋ณดํ†ต ํ†ตํ•ฉํ…Œ์ŠคํŠธ ๋Œ€์‹ ์— ์Šคํ† ๋ฆฌ๋ถ์„ ์ด์šฉํ•ด์„œ ๊ฐœ๋ณ„ UI์— ๋Œ€ํ•œ ๋™์ž‘์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋ชจ์Šต์„ ๋งŽ์ด ๋ดค์–ด์š”. ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋Œ€์‹  ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ๋กœ์ง์„ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ํ›…์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค๊ฑฐ๋‚˜..!? ํ˜น์€ ์•„์˜ˆ e2e ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๊ฑฐ์ฃ  ใ…Žใ…Ž

playwright์œผ๋กœ e2e ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ์ฐพ์•„๋ณด์‹œ๋ฉด ์ข‹๋‹ต๋‹ˆ๋‹ค!