๋์ด๋์ ๋ง๋ ํ ํ๋ฆฟ์ ์ ํํด์ ์์ฑํด์ฃผ์ธ์!
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 ํ ์คํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ ๋ฒ ์ฐพ์๋ณด์๋ฉด ์ข๋ต๋๋ค!