์ฝ๋ ์กฐ์ปค
โฆ ๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋(๊ฐ๋ฐ๋ถํฐ ํ
์คํธ๊น์ง, ์ด๋ก ๊ณผ ์์ ๋ก ๋ฐฐ์ฐ๋ ํ๋ฐํธ์๋) ์ ์
โฆ 12๋
์ฐจ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์
โฆ (ํ) ๊ธ๋ก๋ฒ ์ปจํ
์ธ ํ์ฌ FE ๊ฐ๋ฐ ๋ถ๋ฌธ ํ์ฅ
โฆ (์ ) NHN TOAST Cloud FE ๊ฐ๋ฐ ํ์ฅ
โฆ (์ ) ์ผ์ฑ SDS FE ๊ฐ๋ฐ์
์คํ
โฆ ๊ธฐ์ด๋ถํฐ ์์ฑ๊น์ง, ํ๋ฐํธ์๋(๊ฐ๋ฐ๋ถํฐ ํ
์คํธ๊น์ง, ์ด๋ก ๊ณผ ์์ ๋ก ๋ฐฐ์ฐ๋ ํ๋ฐํธ์๋) ์ ์
โฆ 8๋
์ฐจ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์
โฆ (ํ) ๊ธ๋ก๋ฒ ๋ฉ์ ์ ํ์ฌ FE ๊ฐ๋ฐ์
โฆ (์ ) NHN TOAST UI ์คํ์์ค ๊ฐ๋ฐ์
Courses
Reviews
- 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 Testshuman2642622
ยท
Front-end testing for practical use - Part 2. Testing in depth: Visual regression and E2E testingFront-end testing for practical use - Part 2. Testing in depth: Visual regression and E2E testing
Posts
Q&A
e2e ํ ์คํธ CI , ์๋ฒ๋น์ฉ
์๋ ํ์ธ์ ์ฌ์ด๋!๋ง์ํด์ฃผ์ ๋๋ก e2e ํ ์คํธ๋ ์ค์ ์ฌ์ฉ์์ ๊ฐ์ ํ๊ฒฝ์์ ์ ์ฒด ์์คํ ์ ํ๋ฆ์ ๊ฒ์ฆํ๋ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ด์ง๋ง, ์คํ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ๋ค์ด ๊ด๋ฆฌํ๊ธฐ๊ฐ ๊น๋ค๋กญ์ฃ . ๋จ์ ํ ์คํธ๋ ํตํฉ ํ ์คํธ์ ๋นํด ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ๋ฐ๊ธฐ ์ด๋ ต๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ์ ํดํ ์๋ ์์ต๋๋ค.์ง๋ฌธ ์ฃผ์ ๋ถ๋ถ๊ณผ ์ฝ๊ฐ์ ๋ค๋ฅด์ง๋ง, ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ธฐ๋ฅ ๊ด์ ์์์ ํ ์คํธ์์ Node.jsํ๊ฒฝ์์ ๊ตฌ๋๋๋ ๋จ์-ํตํฉํ ์คํธ์ E2E ํ ์คํธ๊ฐ ์๋ค๋ฉด ๋ ๋ค ๊ฒ์ฆ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋จ์ - ํตํฉ ํ ์คํธ์ ์์ฑ์ ํด E2E ํ ์คํธ์์ ์ด์์ด ๋์ด์ผ ํ๋ ํ ์คํธ๋ค์ ๊ฐ๋ฅํ๋ฉด ์ค์ํ ์๋๋ฆฌ์ค ์์ฃผ๋ก ์ ์งํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.๋ํ, Playwright์ ๊ฒฝ์ฐ ์ด๋ฏธ ์ ๊ณตํ๊ณ ์๊ณ , Cypress์ ๊ฒฝ์ฐ ์ ๋ฃ ๊ฒฐ์ ๋ Sorry Cypress ๋ฑ์ ์จํ๋ ๋ฏธ์ค ํํ๋ก ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ๋ค์ ํ์ฉํด ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ๊ตฌ๋ํ๋ ๋ฐฉ์๋ ์๊ฐ์ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ถ๊ฐ๋ก ์ฌ์ด๋๊ป์ ๋ฆฌ์์นํ์ ์ค์ผ์ค ์คํ(Nightly/์ฃผ๋ง)๊ณผ ์จ๋๋งจ๋ ์คํ(PR ์ฝ๋ฉํธ/์๋ ํธ๋ฆฌ๊ฑฐ)์ ๋ณํํ๋ ์ ๋ต์ ํ์ ์์ ๋งค์ฐ ๋ง์ด ์ฐ์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ค์ ๋ก ๋ง์ ํ์ด ์ด ๋ ๊ฐ์ง ๋ฐฉ์์ ๊ธฐ๋ณธ ์ถ์ผ๋ก ์ผ์ E2E ํ ์คํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. ๊ฒ์ฆํด์ผ ํ๋ ์๋๋ฆฌ์ค๋ณ๋ก ์ค์๋, ์ํฉ์ ๋ฐ๋ผ ๊ทธ๋ฃนํ์ ํ๊ณ ํ ์คํธ๋ฅผ ๋ง์ํด์ฃผ์ ๋๋ก ์ด์ํ๋ค๋ฉด ์๊ฐ์ ์กฐ๊ธ ๋ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์ข์ ์ง๋ฌธ ๊ฐ์ฌํฉ๋๋ค!ํน์ ์ถ๊ฐ๋ก ๊ถ๊ธํ์ ์ ์๋ค๋ฉด ํธํ๊ฒ ๋จ๊ฒจ์ฃผ์ธ์~
- 0
- 1
- 20
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
- 54
Q&A
useNavigate ํ ์คํธ ์, ๊ฒ์ฆ ๋์ ์ง๋ฌธ์ ๋๋ค.
์๋ ํ์ธ์! ๋ต๋ณ์ ๋จ๊ธฐ๋ ค๊ณ ํ๋๋ฐ, ์๋ AI๊ฐ ๋ต๋ณ์ ๋๋ฆ ์ ํํ๊ฒ ๋จ๊ฒจ๋จ๋ค์ ใ ใ ๋จ์ ํตํฉํ ์คํธ์ ์์ด์๋ ์ค์ ํ์ด์ง ์ด๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์๋์ง๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ๊ทธ๋ฆฌ๊ณ ํด๋น ๋์์ ๊ตฌํํ๋๋ฐ ์์ด์ ์ด๋ฏธ ๊ตฌํ๋์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ๊ฒ์ฆ์ ํ๋ค๊ณ ํด์ ๋ ๋์ ์ ๋ขฐ์ฑ์ ์ป๊ธฐ๋ ์ด๋ ค์ธ ๊ฒ ๊ฐ์์. ๋ชจํน์ ์ด๋ ค์, ๋ณต์ก์ฑ๋ ๋ ๋์ด๋ ๊ฒ ๊ฐ๊ตฌ์.์ด๊ฐ์ ๋งฅ๋ฝ์์ ์๋ ๋ต๋ณ์ ์ฐธ๊ณ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
- 0
- 2
- 49
Q&A
๊ฐ์ ์์ํ๋ก์ ํธ ์ ๋ฐ์ดํธ์ข ๋ถํ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์ ใ ใ ํ๋ก์ ํธ ์ธํ ์ ์ด๋ ค์์ ๊ฒช๊ณ ๊ณ์๊ตฐ์..ํน์ ์ด๋ค ๋ถ๋ถ ์ด๋ ค์ฐ์ จ๋์ง ๋ง์ํด์ฃผ์๋ฉด ์ต๋ํ ๋น ๋ฅด๊ฒ ๋ต๋ณ ๋๋ ค๋ณด๊ฒ ์ต๋๋ค~ ํธํ๊ฒ ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์ธ์~
- 0
- 2
- 81
Q&A
ํตํฉํ ์คํธ์ ๋จ์ํ ์คํธ ํ์ผ ๋ถ๋ฆฌ
์๋ ํ์ธ์.๊ฐ์์์๋ ๋ ํ ์คํธ ๋ฐฉ๋ฒ์ ๋ณ๋๋ก ๊ตฌ๋ถํด ๋ง์์ ๋๋ฆฌ๊ณ ์์ง๋ง, ๋จ์, ํตํฉ์ ๊ตฌ๋ถํ๊ธฐ๋ณด๋ค๋ ํ์ผ ๋ชจ๋ ๋จ์๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋ค ๋ผ๊ณ ์ดํดํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 1
- 62
Q&A
grid ์์์ margin์ ์ด๋์ ์ค์ ๋์ด์๋๊ฑด๊ฐ์ ?
์๋ ํ์ธ์. ๋ต๋ณ์ด ์กฐ๊ธ ๋ฆ์๋๋ฐ์. ์๋ง ๋ง์ํด์ฃผ์ ๋ถ๋ถ์ ๋ํ ์คํ์ผ์ mui ์ปดํฌ๋ํธ์ ์ ์ฉ๋์ด์๋ ์คํ์ผ๋ก ๋ณด์ฌ์ง๋๋ค.๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํตํด ํ๋ฉด์์ ๋ณด์ฌ์ง๋ ์คํ์ผ์ ๋ณด์ฌ์ฃผ์๋ฉด ์ข ๋ ํ์คํ ํน์ ํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ์!ํน์ ๊ถ๊ธํ์๋ค๋ฉด ์ถ๊ฐ๋ก ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์~
- 0
- 1
- 84
Q&A
vitest ์ค์นํ๋๋ฐ
์๋ ํ์ธ์. ๋ต๋ณ์ด ์กฐ๊ธ ๋ฆ์๋ค์ ใ ใ ์ฃ์กํฉ๋๋ค.์ง๊ธ ๋น์ฅ vitest ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ง ์์๋ ๊ฐ์๋ฅผ ์งํํ์๋๋ฐ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.๊ตฌ์ฒด์ ์ธ ์์ธ์ ์กฐ๊ธ ๋ ์ฐพ์๋ณด๊ณ ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค๋ง, ์ฐ์ ์ cli์ ๋ ธ์ถ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ณ๊ฒฝ์ ๋ํ ๋ถ๋ถ์ด ํ ์คํธ๊ฐ ์งํ๋๋ ๊ฐ์๋ฅผ ์งํํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
- 0
- 2
- 128
Q&A
2๋ถ ํ ์ธ์ฟ ํฐ ๊ด๋ จ
๋ฉ์ผ ์ฃผ์๋ฉด ๋ค์ ๋ฐ๊ธํด๋๋ฆฌ๊ฒ ์ต๋๋ค!
- 0
- 1
- 137
Q&A
์๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๋ ํ์ธ์~AI ์ธํด ์น๊ตฌ๊ฐ ๋จ๊ฒจ์ฃผ์ ๊ฒ์ฒ๋ผ ์๋ง ๋ ธ๋ ๋ฒ์ ์ ๋ฌธ์ ์ด์ง ์์๊น ์ถ์ต๋๋ค.์ฌ์ฉํ์๋ ๋ ธ๋ ๋ฒ์ ์ด 22๋ฒ์ ์ด๋ผ๊ณ ๋์ด์๋๋ฐ, ๊ฐ์๋ 19๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ด์์.๊ฐ๋ฅํ๋ค๋ฉด nvm use ๋ฅผ ํตํด ๋ฒ์ ์ ๋ง์ถฐ ๊ฐ์๋ฅผ ์งํํด์ฃผ์๊ฑฐ๋ ํ์ฌ ๋ฒ์ ์ผ๋ก ์งํํ๊ณ ์ถ์ผ์๋ค๋ฉด assert ๋์ with๋ก ๊ตฌ๋ฌธ์ ๋ณ๊ฒฝํด์ ์ฌ์ฉํด์ฃผ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ด๋ จ ์ด์๋ ์ฌ๋ ค๋๋ฆด๊ฒ์!๊ฐ์ฌํฉ๋๋ค~https://stackoverflow.com/questions/78876691/syntaxerror-unexpected-identifier-assert-on-json-import-in-node-v22
- 0
- 2
- 261
Q&A
Retry-ability์ ์ปค์คํ ์ปค๋งจ๋, ์ปค์คํ ์ฟผ๋ฆฌ ์ง๋ฌธ
์๋ ํ์ธ์ ๋ฉ๊ฐ๋! ๋ต์ด ์กฐ๊ธ ๋ฆ์๋ค์ ใ ใ ์ฃ์กํฉ๋๋ค.1. ์ปค์คํ ์ฟผ๋ฆฌ๋ Retry-ability ์ง์๋๊ณ ์ปค์คํ ์ฟผ๋ฆฌ ์์ ์ปค๋งจ๋๋ Retry-ability๊ฐ ์ง์๋๋ฉด n์ m์ ๊ณฑ ๋ฒ์ ์ฌ์๋๊ฐ ๋ฐ์ํ๋ ๊ฒ์ผ๊น์?์ด ๋ถ๋ถ์ ์ค์ ๊ตฌํ์ ์ฐธ๊ณ ํด๋ด์ผ ํ ๊ฒ ๊ฐ์๋ฐ์. ์ ๊ฐ ๊ตฌํ์ ํ๋ค๊ณ ๊ฐ์ ์ ํ๊ณ ๊ฐํ ์ถ์ธก์ ํด๋ณด๋ฉด, n์ m์น์ผ๋ก ์ฌ์๋๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๊ทธ๋ ๊ฒ ์ฌ์๋ ์๊ธฐ์ ๊ฒ์ฆ ํจ์ฉ์ด ์๋ค๊ณ ํ๋จํ๊ณ (์ ๋ค ๋ณด๋ ์๋ ๊ฒฝ์ฐ๋ ์์ ์ ์์ ๊ฒ ๊ฐ๋ค์) ์ต์ ํ๋ฅผ ํ์ ๊ฒ ๊ฐ์๋ฐ cypress์ธก์ ๋ฌธ์๋ฅผ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค์ ใ ใ https://github.com/cypress-io/cypress/issues์๊ธฐ์ ๋ฌธ์๋ฅผ ์งํํด๋ณด์๋ฉด ์ด๋จ๊น ์ถ์ต๋๋ค!2. ์ปค์คํ ์ปค๋งจ๋์ ์ปค์คํ ์ฟผ๋ฆฌ ์ค์ ๋ญ ์ฌ์ฉํ ๊ฒ์ธ์ง๋ Retry-ability ์ง์ ์ ๋ฌด์ ์ฒด์ด๋์ ๊ธฐ์ค์ผ๋ก ์ ํํ๋ฉด ๋ ๊น์?์์์ฝ๋๋ฅผ ๋ดค์ ๋ getCardButton์getProductCardByIndex ๋ ๋ค DOM ์์๋ฅผ ์กฐํํด์ subject๋ฅผ ๋ฆฌํดํ์ฌ ์ฒด์ด๋์ ํตํด ํ์ ์์ ์ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ ์ getProductCardByIndex๋ ์ปค์คํ ์ปค๋งจ๋๋ก ์์ฑํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.. ๋ง์ํด์ฃผ์ ๋๋ก Query๊ฐ ๋ถ์ API์ ์๋ถ์ API์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ retry-ability์ง์ ์ฌ๋ถ์ ๋๋ค.Query๊ฐ ๋ถ์ API๋ ๋๊ธฐ ๋ฐฉ์์ผ๋ก ๋์ํ๋ฉฐ ์ด์ ๊น์ง ์ฒด์ด๋์ผ๋ก ์ฌ์ฉํ ์ปค๋งจ๋์ subject ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฒด์ด๋์ผ๋ก ์ฐ๊ฒฐ๋ ์ฝ๋๋ฅผ ์ผ์ ์๊ฐ๋์ ์ฌ์๋ํฉ๋๋ค.(https://docs.cypress.io/api/cypress-api/custom-queries)๋ฐ๋๋ก Query๊ฐ ๋ถ์ง ์์ ์ปค์คํ ์ปค๋งจ๋๋ ๋น๋๊ธฐ๋ก ๋์ํ ์ ์์ผ๋ฉฐ, ํน๋ณํ ์ค์ ์ ํ์ง ์์ผ๋ฉด ์ด์ ์ subject๋ฅผ ์ด์ด ๋ฐ์ ์ฌ์ฉํ์ง๋ ์์ต๋๋ค.๋ํ ๋ด๋ถ์ ์ผ๋ก ์ฌ์๋๋ฅผ ์คํํ์ง ์๊ณ ๋จ ํ๋ฒ๋ง ์คํํฉ๋๋ค.์์์ ๊ฒฝ์ฐ ์๋ง ๊ฐ์ ํน์ฑ์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐ๋ฅผ ๋๋ฆฌ๋ ค๊ณ ํ๋ค๋ณด๋ ์ง์ ์ ์ด๊ฒ ์๋ฟ๋ ์์๊ฐ ์๋ ์ ์๋๋ฐ์. ์ด ๋ถ๋ถ์ ์ฃ์กํฉ๋๋ค. ๋ชฉ์ ์ ๋ง๊ฒ ์ ํํด ๊ตฌํํ ๋ค ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
- 0
- 1
- 102