hanjungv
@hanjungv
Students
1,639
Reviews
100
Course Rating
4.9
์ฝ๋ ์กฐ์ปค
โฆ ๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋(๊ฐ๋ฐ๋ถํฐ ํ
์คํธ๊น์ง, ์ด๋ก ๊ณผ ์์ ๋ก ๋ฐฐ์ฐ๋ ํ๋ฐํธ์๋) ์ ์
โฆ 12๋
์ฐจ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์
โฆ (ํ) ๊ธ๋ก๋ฒ ์ปจํ
์ธ ํ์ฌ FE ๊ฐ๋ฐ ๋ถ๋ฌธ ํ์ฅ
โฆ (์ ) NHN TOAST Cloud FE ๊ฐ๋ฐ ํ์ฅ
โฆ (์ ) ์ผ์ฑ SDS FE ๊ฐ๋ฐ์
์คํ
โฆ ๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋(๊ฐ๋ฐ๋ถํฐ ํ
์คํธ๊น์ง, ์ด๋ก ๊ณผ ์์ ๋ก ๋ฐฐ์ฐ๋ ํ๋ฐํธ์๋) ์ ์
โฆ 8๋
์ฐจ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์
โฆ (ํ) ๊ธ๋ก๋ฒ ๋ฉ์ ์ ํ์ฌ FE ๊ฐ๋ฐ์
โฆ (์ ) NHN TOAST UI ์คํ์์ค ๊ฐ๋ฐ์
Courses
Reviews
suinkim
ยท
Frontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration TestsFrontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration Tests- Frontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration Tests
hochoi86214872
ยท
Frontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration TestsFrontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration Testseinere
ยท
Frontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration TestsFrontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration Testswqer23
ยท
Frontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration TestsFrontend Testing for Immediate Application - Part 1. Testing Basics: Unit & Integration Tests
Posts
Q&A
๋ก๋ฉ/์๋ฌ์ฒ๋ฆฌ ๊ฒ์ฆ์ ์ด๋ป๊ฒ ํ๋๊ฒ ์ข์๊น์?
์๋ ํ์ธ์! ์ข์ ์ง๋ฌธ์ด๋ค์.๋จ์ํ API ํธ์ถ์ ๋ํ ๊ฒ์ด ์๋ Error Boundary๋ Suspense๊ฐ ๋จ์ํ ๋ฆฌ์กํธ ๊ธฐ๋ฅ์ ํ์คํ๋ ์ ๋๋ก ๋์ํ๋ ๊ฒ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ์๋๋ผ, ๋ ธ์ถ๋๋ ์กฐ๊ฑด์ด ๋ณต์กํ๊ฑฐ๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฝํ์๋ ๊ฒฝ์ฐ์๋ ํ ์คํธ๋ฅผ ์งํํ๋ ๊ฒ์ด ์ข์๋ณด์ ๋๋ค.๋ง์ํด์ฃผ์ ๋๋ก ํฉ์ฑํด์ ์ฌ์ฉํ ์ ์๋๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๋ํผ ํํ๋ก ์์ฑํด๋๋ค๋ฉด, ๊ฒ์ฆ์ ์งํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ErrorBoundary์ Suspense๊ฐ ํจ๊ป ๊ด๋ฆฌ๋๋ ์ปดํฌ๋ํธ๊ธฐ๋ ํ๊ณ , ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ ์ ์๋ ๊ณต์ฉ ์ปดํผ๋ํธ๋๊น์.์ถ๊ฐ๋ก ๊ถ๊ธํ์ ์ ์์ผ๋ฉด ํธํ๊ฒ ์ง๋ฌธ์ฃผ์ธ์! ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 13
Q&A
ํตํฉ ํ ์คํธ์์ API ์์ฒญ์ ๋ํ ๊ฒ์ฆ์ ์ด๋ฃจ์ด์ง์ง ์์๋ ๊ด์ฐฎ์๊น์?
๋ต๋ณ์ด ์กฐ๊ธ ๋ฆ์๋ค์!์นํ๋ ์๋ ํ์ธ์. ์ ํํ๊ฒ ํ์ ํ์ จ์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์๋ต์ด๋ผ๊ณ ๊ฐ์ ์ ์งํํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ํ ์คํธ, ๋ค์ํ ์๋๋ฆฌ์ค ๊ฒ์ฆ, ํ๋ฉด์ ์ง์คํ ์ ์๋ ๋ถ๋ถ๋ค์ด ์ฅ์ ์ผ๋ก ์์ง๋ง, ๋ชจํนํ๋ ์ง์ ์ด ์๊ธฐ๊ฒ ๋๋ฉด ์ ๋๋ก ๊ฒ์ฆ์ ๋ชปํ๊ฒ ๋๋ ๋ถ๋ถ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. MSW๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ ๋ํ ์ค์ ๊ตฌํ๊ณผ ์ฑํฌ๊ฐ ์๋ง๊ฒ ๋ ์ ์๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์ฆ์ด ์ ํํ์ง ์์ ์ ์๊ตฌ์.์ด๋ฐ ๊ฒฝ์ฐ์๋ 2๋ถ์์ ์๊ฐ๋๋ E2E ํ ์คํธ๊ฐ ์ด๋์ ๋ ํด๊ฒฐ์ฑ ์ด ๋ ์ ์๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ค์ API ํต์ ์ ๋ฐ์์ํค๊ณ ์๋ฒ์์ ์๋ต์ ๋ฐ์ ํด๋น ์๋๋ฆฌ์ค์ ๋ง์ถฐ ๊ฒ์ฆ์ ์งํํ ์ ์์ผ๋๊น์.์ฑ ๊ด์ ์์์ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๊ฒ์ฆํ๊ธฐ์ ์ ์ ํ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํน์ ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์์ผ์๋ฉด ํธํ๊ฒ ๋ต๋ณ์ฃผ์ธ์!
- 0
- 2
- 24
Q&A
e2e ํ ์คํธ CI , ์๋ฒ๋น์ฉ
์๋ ํ์ธ์ ์ฌ์ด๋!๋ง์ํด์ฃผ์ ๋๋ก e2e ํ ์คํธ๋ ์ค์ ์ฌ์ฉ์์ ๊ฐ์ ํ๊ฒฝ์์ ์ ์ฒด ์์คํ ์ ํ๋ฆ์ ๊ฒ์ฆํ๋ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ด์ง๋ง, ์คํ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ๋ค์ด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๊น๋ค๋กญ์ฃ . ๋จ์ ํ ์คํธ๋ ํตํฉ ํ ์คํธ์ ๋นํด ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ด๋ ต๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ์ ํดํ ์๋ ์์ต๋๋ค.์ง๋ฌธ ์ฃผ์ ๋ถ๋ถ๊ณผ ์ฝ๊ฐ์ ๋ค๋ฅด์ง๋ง, ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ธฐ๋ฅ ๊ด์ ์์์ ํ ์คํธ์์ Node.jsํ๊ฒฝ์์ ๊ตฌ๋๋๋ ๋จ์-ํตํฉํ ์คํธ์ E2E ํ ์คํธ๊ฐ ์๋ค๋ฉด ๋ ๋ค ๊ฒ์ฆ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋จ์ - ํตํฉ ํ ์คํธ์ ์์ฑ์ ํด E2E ํ ์คํธ์์ ์ด์์ด ๋์ด์ผ ํ๋ ํ ์คํธ๋ค์ ๊ฐ๋ฅํ๋ฉด ์ค์ํ ์๋๋ฆฌ์ค ์์ฃผ๋ก ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.๋ํ, Playwright์ ๊ฒฝ์ฐ ์ด๋ฏธ ์ ๊ณตํ๊ณ ์๊ณ , Cypress์ ๊ฒฝ์ฐ ์ ๋ฃ ๊ฒฐ์ ๋ Sorry Cypress ๋ฑ์ ์จํ๋ ๋ฏธ์ค ํํ๋ก ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ๋ค์ ํ์ฉํด ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ๊ตฌ๋ํ๋ ๋ฐฉ์๋ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ถ๊ฐ๋ก ์ฌ์ด๋๊ป์ ๋ฆฌ์์นํ์ ์ค์ผ์ค ์คํ(Nightly/์ฃผ๋ง)๊ณผ ์จ๋๋งจ๋ ์คํ(PR ์ฝ๋ฉํธ/์๋ ํธ๋ฆฌ๊ฑฐ)์ ๋ณํํ๋ ์ ๋ต์ ํ์ ์์ ๋งค์ฐ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ค์ ๋ก ๋ง์ ํ์ด ์ด ๋ ๊ฐ์ง ๋ฐฉ์์ ๊ธฐ๋ณธ ์ถ์ผ๋ก ์ผ์ E2E ํ ์คํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. ๊ฒ์ฆํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ณ๋ก ์ค์๋, ์ํฉ์ ๋ฐ๋ผ ๊ทธ๋ฃนํ์ ํ๊ณ ํ ์คํธ๋ฅผ ๋ง์ํด์ฃผ์ ๋๋ก ์ด์ํ๋ค๋ฉด ์๊ฐ์ ์กฐ๊ธ ๋ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ข์ ์ง๋ฌธ ๊ฐ์ฌํฉ๋๋ค!ํน์ ์ถ๊ฐ๋ก ๊ถ๊ธํ์ ์ ์๋ค๋ฉด ํธํ๊ฒ ๋จ๊ฒจ์ฃผ์ธ์~
- 0
- 1
- 35
Q&A
๋จ์ธ๋ฌธ ์์์ ๋ฐ๋ผ ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ์ ๋ฌ๋ผ์ง๋์?
์๋ ํ์ธ์ Einere๋~!์ฐ์ ๋ง์์ฃผ์ ๋๋ก ์๋์ ์ฝ๋๋ ์ ์์ ์ผ๋ก ํต๊ณผํด์ผ ํฉ๋๋ค.expect(screen.getByTestId('cart-icon')).toBeInTheDocument(); expect( await screen.findByRole('button', { name: 'Maria' }), ).toBeInTheDocument(); expect(screen.getByText('2')).toBeInTheDocument(); NavigationBar.jsx ํ์ผ์ ๋ก๊ทธ์ธ ํ์ ๊ฒฝ์ฐ ํด๋น ์ฅ๋ฐ๊ตฌ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ๊ฐ์ ธ์ ์ค์ ํ๋ ์ฝ๋๊ฐ ์๋๋์.const { data, remove } = useProfile({ config: { onSuccess: profile => { setUserData(profile); // ์ฅ๋ฐ๊ตฌ๋ ๋ฐ์ดํฐ ์ค์ initCart(profile.id); }, enabled: !!isLogin, }, });๋ก๊ทธ์ธ ์ํ์ผ ๊ฒฝ์ฐ, ํ๋กํ ์กฐํ API๊ฐ ์คํinitCart(userId)์คํ๋ก์ปฌ ์คํ ๋ฆฌ์ง์์ ํด๋น userId์ ํด๋นํ๋ cart ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ค์ (/store/cart.js))ํ ์คํธ ํ๊ฒฝ์์๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์3๋ฒ์งธ use case๋ฅผ ๋์น์ฑ๋ก ํ ์คํธ ๋ก์ง์ด ์์ฑ๋์ด ์ฝ๋ ์์ ์ด ํ์ํ ๋ถ๋ถ์ ๋๋ค.์๋์ ์ฝ๋์ฒ๋ผ ํ ์คํธ ํ๊ฒฝ์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์๋ cart mock ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๋ฉด ํ ์คํธ๋ ์ ์์ ์ผ๋ก ํต๊ณผํฉ๋๋ค.import { screen, within } from '@testing-library/react'; import { rest } from 'msw'; import React from 'react'; import NavigationBar from '@/pages/common/components/NavigationBar'; // ๋ชจ๋ ์ถ๊ฐ import { setCartToLocalStorage } from '@/store/cart'; import { mockUseUserStore, mockUseCartStore, } from '@/utils/test/mockZustandStore'; // ... beforeEach(() => { // ... const cart = { // ... }; // ์๋ ์ฝ๋ ์ถ๊ฐ setCartToLocalStorage(cart, userId); mockUseCartStore({ cart }); });์ ๋ฆฌํ์๋ฉด ๋ง์ํ์ ๋๋ก ๋จ์ธ๋ฌธ์ ์์์ ๋ฌด๊ดํ๊ฒ ํ ์คํธ๊ฐ ํต๊ณผํ๋ ๊ฒ์ด ๋ง์ต๋๋ค.(์ฝ๋ ์์ ๋งํฌ)์ ๋ณดํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค..!๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 73
Q&A
useNavigate ํ ์คํธ ์, ๊ฒ์ฆ ๋์ ์ง๋ฌธ์ ๋๋ค.
์๋ ํ์ธ์! ๋ต๋ณ์ ๋จ๊ธฐ๋ ค๊ณ ํ๋๋ฐ, ์๋ AI๊ฐ ๋ต๋ณ์ ๋๋ฆ ์ ํํ๊ฒ ๋จ๊ฒจ๋จ๋ค์ ใ ใ ๋จ์ ํตํฉํ ์คํธ์ ์์ด์๋ ์ค์ ํ์ด์ง ์ด๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์๋์ง๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ํด๋น ๋์์ ๊ตฌํํ๋๋ฐ ์์ด์ ์ด๋ฏธ ๊ตฌํ๋์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ๊ฒ์ฆ์ ํ๋ค๊ณ ํด์ ๋ ๋์ ์ ๋ขฐ์ฑ์ ์ป๊ธฐ๋ ์ด๋ ค์ธ ๊ฒ ๊ฐ์์. ๋ชจํน์ ์ด๋ ค์, ๋ณต์ก์ฑ๋ ๋ ๋์ด๋ ๊ฒ ๊ฐ๊ตฌ์.์ด๊ฐ์ ๋งฅ๋ฝ์์ ์๋ ๋ต๋ณ์ ์ฐธ๊ณ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
- 0
- 2
- 74
Q&A
๊ฐ์ ์์ํ๋ก์ ํธ ์ ๋ฐ์ดํธ์ข ๋ถํ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์ ใ ใ ํ๋ก์ ํธ ์ธํ ์ ์ด๋ ค์์ ๊ฒช๊ณ ๊ณ์๊ตฐ์..ํน์ ์ด๋ค ๋ถ๋ถ ์ด๋ ค์ฐ์ จ๋์ง ๋ง์ํด์ฃผ์๋ฉด ์ต๋ํ ๋น ๋ฅด๊ฒ ๋ต๋ณ ๋๋ ค๋ณด๊ฒ ์ต๋๋ค~ ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์~
- 1
- 2
- 117
Q&A
ํตํฉํ ์คํธ์ ๋จ์ํ ์คํธ ํ์ผ ๋ถ๋ฆฌ
์๋ ํ์ธ์.๊ฐ์์์๋ ๋ ํ ์คํธ ๋ฐฉ๋ฒ์ ๋ณ๋๋ก ๊ตฌ๋ถํด ๋ง์์ ๋๋ฆฌ๊ณ ์์ง๋ง, ๋จ์, ํตํฉ์ ๊ตฌ๋ถํ๊ธฐ๋ณด๋ค๋ ํ์ผ ๋ชจ๋ ๋จ์๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋ค ๋ผ๊ณ ์ดํดํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 1
- 77
Q&A
grid ์์์ margin์ ์ด๋์ ์ค์ ๋์ด์๋๊ฑด๊ฐ์ ?
์๋ ํ์ธ์. ๋ต๋ณ์ด ์กฐ๊ธ ๋ฆ์๋๋ฐ์. ์๋ง ๋ง์ํด์ฃผ์ ๋ถ๋ถ์ ๋ํ ์คํ์ผ์ mui ์ปดํฌ๋ํธ์ ์ ์ฉ๋์ด์๋ ์คํ์ผ๋ก ๋ณด์ฌ์ง๋๋ค.๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํตํด ํ๋ฉด์์ ๋ณด์ฌ์ง๋ ์คํ์ผ์ ๋ณด์ฌ์ฃผ์๋ฉด ์ข ๋ ํ์คํ ํน์ ํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ์!ํน์ ๊ถ๊ธํ์๋ค๋ฉด ์ถ๊ฐ๋ก ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์~
- 0
- 1
- 103
Q&A
vitest ์ค์นํ๋๋ฐ
์๋ ํ์ธ์. ๋ต๋ณ์ด ์กฐ๊ธ ๋ฆ์๋ค์ ใ ใ ์ฃ์กํฉ๋๋ค.์ง๊ธ ๋น์ฅ vitest ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ง ์์๋ ๊ฐ์๋ฅผ ์งํํ์๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.๊ตฌ์ฒด์ ์ธ ์์ธ์ ์กฐ๊ธ ๋ ์ฐพ์๋ณด๊ณ ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค๋ง, ์ฐ์ ์ cli์ ๋ ธ์ถ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ์ ๋ํ ๋ถ๋ถ์ด ํ ์คํธ๊ฐ ์งํ๋๋ ๊ฐ์๋ฅผ ์งํํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
- 0
- 2
- 158
Q&A
2๋ถ ํ ์ธ์ฟ ํฐ ๊ด๋ จ
๋ฉ์ผ ์ฃผ์๋ฉด ๋ค์ ๋ฐ๊ธํด๋๋ฆฌ๊ฒ ์ต๋๋ค!
- 0
- 1
- 148





