- ์ํ๋ ์ํ(ํค์๋) ํน์ ์นดํ ๊ณ ๋ฆฌ ๊ธฐ๋ฐ ์ฟ ํก ์ํ ์ ๋ณด ๋ฐ ๊ฒฝ์๋ฅ ์ ํ์ ํ ์ ์๋ ํ๋ซํผ
- ๊ตฌ๋งค๋ํ ์์ฅ ๋ด ์ ์ ์จ ๋ฐ ๋ํฅ์ ํ์ ํ๊ธฐ ์ํ ํ๋ซํผ
์ฌ์ฉ์๊ฐ ์ํ ํค์๋ ํน์ ์นดํ ๊ณ ๋ฆฌ ๊ฒ์ ์ ์ฟ ํก ํฌ๋กค๋ง์ ํตํด ์ํ ๊ฒฝ์๋ ฅ์ ๋ถ์ํ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ํ๋ซํผ
๊ธฐ๊ฐ : 2024-04 ~ 2024-05 (์ฝ 2๊ฐ์)
์ธ์ : ํ๋ก ํธ์๋(1๋ช ) : ๋ณ์ฌ์ / ๋ฐฑ์๋(1๋ช ) : ์ค์ฐฌ์
React
- ๋ฐ์ดํฐ ์กฐํ๊ธฐ๋ฅ์ด ์ฃผ๋ ์ญํ ์ธ ๋ณธ ํ๋ก์ ํธ์์ Virtual Dom์ ํจ์จ์ ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ๋ฅผ ์ ๋ฐ์ดํธ ํด์ค๋๋ค.
- ๋ฐฉ๋ํ ์ํ๊ณ ๊ธฐ๋ฐ ๋ค์ํ ์ ๋ณด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ ๊ฐ๋ฅ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ํ๋ ๊ฐ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณต
- ์์ฌ์ด ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด ์ ์ฐ์ฑ, ํธํ์ฑ ๋ฐ์ด๋ฉ๋๋ค.
Typescript
- ์์ ์ ์ธ ๊ฐ๋ฐ๊ณผ ๋์ ์์ค์ ์ฝ๋ ํ์ง์ ์ ์ง
- ์์ฝ์ด ๋ฒ๊ทธ ์๋ฐฉ
- ๊ฐ๋ ฅํ ํ์ ์์คํ ๊ธฐ๋ฐ ์ปดํ์ผ, ๋ฒ๊ทธ ์๋ฐฉ ๋ฐ ์์ฌ์ด ๋๋ฒ๊น
- ๋์ ์์ฐ์ฑ๊ณผ ํธํ์ฑ
Styled Components
- CSS ํ์ผ์ ๋ณ๋ ๊ด๋ฆฌํ ํ์์๋ CSS-in-JS ๋ฐฉ๋ฒ
- CSS ์ปดํฌ๋ํธํ๋ก CSS ๋ชจ๋ธ์ ๋ฌธ์ ๋ ๋ฒจ์ด ์๋ ์ปดํฌ๋ํธ ๋ ๋ฒจ๋ก ์ถ์ํ. (๋ชจ๋์ฑ ์ด์ )
- JavaScript์ CSS ์ฌ์ด์ ์์์ ํจ์๋ฅผ ์ฝ๊ฒ ๊ณต์ ๊ฐ๋ฅ
- ์ ๋ํฌํ ํด๋์ค๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ๊ฒฝ๋ํ ๋ฐ ํด๋์ค ์๋ช ๊ณ ์ถฉ ํด์
Vite
- ES build๋ฅผ ์ฌ์ฉํด์ ์ข ์์ฑ์ ๋ฏธ๋ฆฌ ๋ฌถ์ด ๋ฒ๋ค๋ง ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ ๋๋ค.
- HMR(Hot Module Replacement)์ ์ด์ฉํด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ ์์ํ์ง ์๊ณ ๋ ์ผ๋ถ ์ปจํ
์ธ ๋ง์ ๊ฐฑ์ .
- ์ฆ ์์ค์ฝ๋ ์์ ์ ๋ฒ๋ค๋ง๊ณผ์ ์ ๋ค์ ๊ฑฐ์น๋ ๊ฒ์ด ์๋ ์์ ๋ ๋ชจ๋ ๊ด๋ จ ๋ถ๋ถ๋ง ๊ต์ฒด ์ดํ, ๋ธ๋ผ์ฐ์ ์์ ํด๋น ๋ชจ๋์ ์์ฒญํ๋ฉด ๊ต์ฒด๋ ๋ชจ๋์ ์ ๋ฌ.
- HTTP ํค๋๋ฅผ ํ์ฉํ์ฌ ์ ์ฒด ํ์ด์ง์ ๋ก๋ ์๋ ํฅ์ + ์บ์ ๊ธฐ๋ฅ ์ ๊ณต
Redux
- ์ฝ๋์ ์ ์ง๋ณด์์ฑ ํฅ์
- ์ก์ ์ ๋ฐ๋ฅธ ๋ชจ๋ ๋ณ๊ฒฝ์ ์ถ์ ๊ฐ๋ฅ
- ์์ ํจ์จ ๊ทน๋ํ
- ํธ๋ฆฌํ๊ณ ๊ฐ๋ ฅํ ๊ฐ๋ฐ์๋๊ตฌ ์ง์
- ๋งค์ฐ ๊ฐ๋ณ์ต๋๋ค. (์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ 2kB)
react-hook-form
- ์ ์ด ์ปดํฌ๋ํธ์์๋ง ๋ค๋ฃฐ ์ ์๋ ์ค์๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ๋๊ธฐํ๋ฅผ ๋น์ ์ด ์ปดํฌ๋ํธ ํ์์ผ๋ก ์ ๊ณต.
- ์ ์ด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋ ๋ณด๋ค ํจ์ฌ ์ ์ ์ฝ๋๋ก ๋ ๋์ ์ฑ๋ฅ ์ ๊ณต.
- ๋น์ ์ด ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๋ฆฌ๋ ๋๋ง์ ์ต์ํ -> ๋ง์ดํ ์๋ ํฅ์.
- ์ข ์์ฑ์ด ์๋ ๊ฒฝ๋ ์ฌ์ด์ฆ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ์ ๊ณต
- ๊ณต์๋ฌธ์๊ฐ ์ ๋ง ์น์ ํ๊ฒ ์ค๋ช ๋์ด์์ต๋๋ค.
- ์ง์์ ์ธ ์ ๋ฐ์ดํธ
React-Query
- ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋น ์ ์ ์์ BoilerPlate -> ๊ฐํธ, ์ ์ง ๋ณด์ ์ฉ์ด
- React Hooks๊ณผ ์ ์ฌํ ์ธํฐํ์ด์ค ์ ๊ณต
- ๋น๋๊ธฐ ๊ณผ์ ์ ์ ์ธ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- ์ค๋๋ ๋ฐ์ดํฐ ์ํ ํ์ ํ ์ ๋ฐ์ดํธ ๊ฐ๋ฅ (์บ์ฑ ๊ธฐ๋ฅ)
- ์บ์ฑ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์๋ ํฅ์ ๋ฐ ์ค๋ณต ๋ฐ์ดํฐ ์์ฒญ ์ ๊ฑฐ
Vercel
- ์ ๋ง ๊ฐํธํ ๋ฐฐํฌ๊ณผ์
- ๋นํธ์ธ CI/CD, Live Preview, Analytics, ์ฌ์ดํธ ์ฑ๋ฅ ์ธก์ ์ ๊ณต
- ํ ํ๋ฉด : ํค์๋ ๊ธฐ๋ฐ ๊ฒ์, ์นดํ ๊ณ ๋ฆฌ ๊ธฐ๋ฐ ๊ฒ์ ๋ถ๋ฅ
- ์ํ์กฐํ : ์ฌ์ฉ์๊ฐ ์ ํํ ์ํ ํํฐ๋ง ํ ์ถ๋ ฅ
- ์ํ์กฐํ ํํฐ๋ง : Query-String ๊ธฐ๋ฐ ๋ ์ง, ์ํ๊ฐ์, ์ํ ๊ฐ๊ฒฉ ํ๋๋ง ๊ธฐ๋ฅ ๊ตฌํ
- ์ํํ์ด์ง ์ ์ : ์กฐํ๋ ์ํ ์์ธํ์ด์ง ์ ์ ๊ฐ๋ฅ
- ์นดํ ๊ณ ๋ฆฌ ๋ฆฌ์คํธ ๋ ๋๋ง : 1์ฐจ, 2์ฐจ, 3์ฐจ ์นดํ ๊ณ ๋ฆฌ๋ณ ๋์ ๋ ๋๋ง ๊ตฌํ
- ์กฐํ ๋ฐ์ดํฐ ์์ ๋ค์ด๋ก๋ : ๋ถ๋ฌ์จ ์ํ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ผ๋ก ์ ์ฅ ๊ฐ๋ฅ
- 1์ฐจ, 2์ฐจ, 3์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ ๊ตฌํ
- ์์ ์นดํ ๊ณ ๋ฆฌ ๊ฐ์ ๋ฐ๋ผ ํ์ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ ๋ชฉ๋ก์ด ๋์ ์ผ๋ก ๋ฌ๋ผ์ง๋๋ก ๊ตฌํ
- ์์ -> ํ์ ์นดํ ๊ณ ๋ฆฌ ์ด๋ ์ ํด๋น ์นดํ ๊ณ ๋ฆฌ ๊ฐ ํ์ดํ ์์ด์ฝ ๊ณ ์ ํ์
- 1์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ hover -> 2์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ ๋ ๋๋ง, 2์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ hover -> 3์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ hover
- 2์ฐจ -> 1์ฐจ ์นดํ ๊ณ ๋ฆฌ hover ์ 3์ฐจ ์นดํ ๊ณ ๋ฆฌ ์ปดํฌ๋ํธ unmount
- ์นดํ ๊ณ ๋ฆฌ ์ปจํฌ๋ํธ ์์ญ ์ดํ ์ ๋ชจ๋ ์ปดํฌ๋ํธ unmount
- ์นดํ ๊ณ ๋ฆฌ ๊ฐ ์ ํ ์ ์์ ์นดํ ๊ณ ๋ฆฌ ๊ฐ ๊ฐ์ด ๋ ๋๋ง
- ์ ๊ทํํ์์ ํ์ฉํด ์ซ์ ์ธ ๊ฐ ์ ๋ ฅ์ ๊ณต๋ฐฑ์ผ๋ก ์ฆ์ ๋ณํ
- ์์ฐ์ ์ธ ๊ฐ์ ์ ๋ ฅ ํ ๋ฐ์ดํฐ ์กฐํ ์ ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ฏ๋ก ์๋ฌ ์ฌ์ ์ฐจ๋จ
- transition, transform ์์ฑ์ ์ด์ฉํ ์ ๋๋ฉ์ด์ ์ ์ฉ
- pseudo-element ๋ฅผ ํ์ฉํด ํดํ content ์ ์
- content๋ฅผ props๋ก ์ ๋ฌํด ๋์ ๋ฉ์์ง ๊ตฌํ
- React Hook Form ์ ํตํด ๋น์ ์ด ์ปดํฌ๋ํธ ํ์์ผ๋ก ์ค์๊ฐ ์ ํจ์ฑ ๊ฒ์ฆ
- register, watch ํจ์๋ฅผ ์ด์ฉํด ์ค์๊ฐ input๊ฐ ๊ฐ์
- CSVLink ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ ์์ ๋ค์ด๋ก๋ ๊ธฐ๋ฅ ๊ตฌํ
๊ฒ์๋ฐฉ๋ฒ ๋ฐ ๊ฐ๊ฒฉ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ฅธ ๋์ Modal์ฐฝ์ ์ด์ฉํ ๊ตฌํ ๋ฐ ์๋ฌ ํธ๋ค๋ง
- createPortal์ ์ด์ฉํด Modal ์ฐฝ์ DOM์ ๋ค๋ฅธ ์์น์์ ๋ ๋๋ง ๋๋๋ก ๊ตฌํ
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ DOM ๊ตฌ์กฐ๋ฅผ ๋ฒ์ด๋ ํน์ DOM ์๋ฆฌ๋จผํธ์ ์ง์ ๋ ๋๋ง
- Modal content๊ฐ์ props๋ก ๋๊ฒจ ๋์ ๋ฉ์์ง ๋ ๋๋ง
- ์นดํ ๊ณ ๋ฆฌ ๋ฏธ์ ํ ์ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ์ต์๊ฐ๊ฒฉ์ด ์ต๋๊ฐ๊ฒฉ๋ณด๋ค ํด ๊ฒฝ์ฐ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ์ต์๊ฐ๊ฒฉ ๋ฏธ์ ๋ ฅ, ์ต๋๊ฐ๊ฒฉ์ด 10000๋ณด๋ค ์์ ๊ฒฝ์ฐ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ํค์๋ ๋ฏธ์ ๋ ฅ์ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ์ต์๊ฐ๊ฒฉ์ด ์ต๋๊ฐ๊ฒฉ๋ณด๋ค ํด ๊ฒฝ์ฐ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ์ต์๊ฐ๊ฒฉ ๋ฏธ์ ๋ ฅ, ์ต๋๊ฐ๊ฒฉ์ด 10000๋ณด๋ค ์์ ๊ฒฝ์ฐ ์๋ฆผ์ฐฝ ๋ ๋๋ง
- ๋ฒํผ ํด๋ฆญ ์ ๋ฌผํ์ฅ ์ ๋๋ฉ์ด์ ๊ตฌํ
- keyframes, pseudo-element ๋ฅผ ํ์ฉํด ํด๋ฆญ ์ด๋ฒคํธ ๋ฐ์ ์ ๋์ ์ ๋๋ฉ์ด์ ๊ตฌํ
- ๋๋กญ๋ฐ์ค -> ์ปดํฌ๋ํธ hover ๋ฐฉ์ (reference : ์ฟ ํก )
- ๋๋กญ๋ฐ์ค๋ ๋ณ๋๋ก ํด๋ฆญํด์ผํ๊ธฐ์ ๋ฒ๊ฑฐ๋กญ๋ค๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์์ด hover ๋ฐฉ์์ผ๋ก ๋ฆฌํฉํ ๋ง์ ์งํํ์ต๋๋ค.
- onMouseOver, onMouseLeavee ๋ฑ ์ปค์ ์ด๋ฒคํธ ๊ด๋ จ ํจ์๋ฅผ ๊ณต๋ถํ๋ฉฐ ์๋ก์ด ๊ธฐ์ ์ ๋์ ์ ์ด๋ฃฉํ ์ ์์์ต๋๋ค.
๋ฌธ์ ์
- ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ฐ์ดํฐ์กฐํํํฐ๋ง๊ฐ์ด ์ ๋ฌ๋์ง๋ง ํด๋น url์ ๋ณต์ฌ ํ ์์ฐฝ์์ ์ด๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค์ง์๋ ๋ฌธ์ ๋ฐ์
- ํํฐ๋ง๊ฐ๋ค์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ์ ๋ฌํ๊ธฐ๋ง ํ ๋ฟ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์ปดํฌ๋ํธ๊ฐ Result๊ฐ ์๋ ๊ฒ์ด ๋ฌธ์
- ๋ถ๋ชจ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ ํ props ๋ก ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ผ ์๊ธด ๋ฌธ์
ํด๊ฒฐ๋ฐฉ๋ฒ
- ์ํ์กฐํ ๋ฒํผ ํด๋ฆญ์ ํํฐ๋ง ๊ฐ์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ์ ๋ฌ
- urlํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด Result ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋๋๋ก useEffect ์์กด์ฑ ๋ฐฐ์ด์ ์ฟผ๋ฆฌ์คํธ๋ง๊ฐ์ ๋ฃ์ด์คฌ์ต๋๋ค.
- spinner ์ปดํฌ๋ํธ -> skeleton UI ๋ณ๊ฒฝ
- BootStrap์์ ๊ฐ์ ธ์จ
spinner์ปดํฌ๋ํธ๋ฅผ ๋ก๋ฉ์ฐฝ์ผ๋ก ์ฌ์ฉํ๋ค ๋๋ฌด ๋จ์กฐ๋กญ๋ค ์๊ฐํด ๋์ ์ด๋ฏธ์ง์ธskeleton UI๋ฅผ ๋์ ํ๊ธฐ๋ก ํ์ต๋๋ค. - ๋ถ๋ฌ์ค๋ ๋ฐ์ดํฐ๋ฅผ Table ํ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋ง์ถฐ ์ปค์คํฐ๋ง์ด์งํ
skeleton UI๋ฅผ ์ ์ํ๋ฉด์ ๊ฐ์์์์ ๋ํ ๊ธฐ์ ์ ๋์ ๋ฐ ํ์ตํ๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค.







