ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํํ ๋ง์ฃผํ ์ ์๋ ์ํฉ์ด๋ค. Select, Toggle ๋๋ DatePicker ๋ฑ์ ์ธํ ์ปดํฌ๋ํธ๋ค์ ์ค๊ณํ ๋, ๊ทธ ์ปดํฌ๋ํธ๋ค์ ํธ๋ค๋งํ ์ปค์คํ
ํ
๋ ๊ฐ์ด ์์ฑํด ์ฌ์ฉํ ์ ์๋ค. ๋ณดํต์ useToggle, useSelect ๋ฑ์ ์ด๋ฆ์ผ๋ก ์ฐ๊ณ [value, onChange] ๊ฐ์ ๋ฐฐ์ด์ returnํด ์ฌ์ฉํ๋ค. ์ธ์ฃผ ๊ฐ๋ฐ์ ํ๋ฉด์ ์ด๊ธฐ์ ์ด๋ฐ ์ปดํฌ๋ํธ ์์
์ ํด์ผํ ์ผ์ด ๋ง์๋ค. import useSelect from '~hooks/useSelect'; import Select from '~components/Select'; const App = () => { const [value, handleSelectValue] = useSelect(); return ( ); };..
๐ง๐ป ์งง์ํธํก
๊ท์ฐฎ์ ์ผ์ ๊ฝค๋ ์์ฃผ ์ผ์ด๋๋ค. ์ธ์ฃผ ์์
์ค ํ
์ด๋ธ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํด์ผํ๋ ์ผ์ด ์์๊ณ , ๊ธฐ์กด ์ฝ๋๋ Core UI๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ 4.0๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ ๋๋ฉด์ PRO๋ฒ์ ์ด ์๋ก ์๊ฒผ๊ณ , ๊ทธ๋ฅผ ์ํ ๊ธ๋๋๊ธฐ์ ํ
์ด๋ธ ์ปดํฌ๋ํธ๊ฐ ๊ฑธ๋ ค๋ฒ๋ ธ๋ค. ๊ธฐ์กด์ ์ฌ์ฉํ๋ onRowClick, scopedSlots๋ฑ์ ๊ธฐ๋ฅ๋ค์ด ์ฌ๋ผ์ก๊ณ ์ง์ ๊ตฌํํด์ผ ํ๋ค. { navigate(`/notices/${data.id}`); }} customCellItem={{ info: data => alert(data.index)}>์ปค์คํ
cell, date: data => {data.date}, }} />; ์ถ์ํ๋ Table์ ์์ ์ปดํฌ๋ํธ๋ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. ์ปฌ๋ผ๊ณผ data ๋ฐฐ์ด์ ๋๊ฒจ์ฃผ๋ฉด..
ํ์
์คํฌ๋ฆฝํธ๊ฐ ๊ฒฐ๊ตญ ํ์
์ ์ํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ๋ณ์๋ฅผ ์ ์ธํ ๋๋ง๋ค ํ์
์ ๋ช
์ํด์ผ ํ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ๊ทธ๋ฌ๋ ํ์
์คํฌ๋ฆฝํธ์ ๋ง์ ํ์
๊ตฌ๋ฌธ์ ์ฌ์ค ๋ถํ์ํ๋ค. ์ด๋ ๊ฒ ์๋ฌด ์๊ฐ์์ด ๋ช
์ํ๋ ํ์
๋ค์ด ์๋ค. ํ์์ ์ฝ๋. ํ์
์ถ๋ก ์ด ๋๋ค๋ฉด ๋ช
์์ ํ์
๊ตฌ๋ฌธ์ ํ์ํ์ง ์๋ค. ์คํ๋ ค ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๊ฐ๋
์ฑ์ด ์์ข์์ง ์ ์๊ธฐ ๋๋ฌธ์. ํ์ง๋ง ํ์
์ด ์ถ๋ก ๋ ์ ์์์๋ ํ์
์ ๋ช
์ํ๋ ๊ฒ์ด ๋ ์ข์ ๋ช๊ฐ์ง ์ํฉ๋ค์ด ์๋ค. ๋ ์ ํํ ์์น์ ์ค๋ฅ๋ฅผ ํ์ํ๊ธฐ ์ํจ์ด๋ค. ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ ์ํ ๋ ํจ์์ ๋ฐํ๊ฐ์ ๋ช
์ํ ๋ ํ์
๋ํ๊ธฐ let ์ผ๋ก ์ ์ธํ๋ ๊ฒฝ์ฐ. ๊ฐ์ด ์ฌํ ๋น๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๋ฐ๋ผ์ ์ฒ์ ์ด๊ธฐํํ ๊ฐ์ ๊ฐ์ง๊ณ ํ ๋น ๊ฐ๋ฅํ ๊ฐ๋ค์ ์งํฉ์ ์ ์ถํด์ผ ํจ. ์ด๋์ ๋ ๊ฐ๋ฅ์ฑ์ ์ด์ด์ฃผ๊ธฐ ์ํด์ ํ..
์ฑ
์ ์ด์ฉํ ์คํฐ๋๋ฅผ ํ๋ฉด์ ํ์์ ์ฐ์ง ์๋ (๊ฒฝํ์ด ์๋ ์ฑ
๋ด์ฉ์ ์ ๋ฆฌํ๋) ๊ธ์ ์ฐ๋ฉด์ ๋ง์ ๊ณ ๋ฏผ์ ํ๊ฒ ๋๋ค. ์ด๋ป๊ฒ ํด์ผ ์๋ฒฝํ ์ดํดํ๊ณ , ์ ๋ฆฌํ๊ณ , ๊ธฐ๋กํ ์ ์์๊น. ์ฑ
์ ์์ ๊ทธ๋๋ก ์ฐ์ง ์๊ณ ๋ด๊ฐ ์ดํดํ ํ๋ฆ๋๋ก ์ฌ๊ตฌ์ฑํด์ ๊ธ์ ์ฐ๋๋ก ๋
ธ๋ ฅํด๋ณด๋ ค๊ณ ํ๋ค. ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง. ์ง๋์ฃผ์ ๊ณต๋ถํ๋ ๊ตฌ์กฐ์ ํ์ดํ์ ๊ด์ ์์ ๋ณด๋ฉด ์๋์ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. interface Room { numDoors: number; ceilingHeightFt: number; } const obj = { numDoors: 1, ceilingHeightFt: 10; elephant: 'present', } const r: Room = obj; ์ถ๋ก ๋ obj์ ํ์
์ Roomํ์
์ ๋ถ๋ถ ..

ํ์
์ ์ฐ๋๋ฐ์ ์ค๋ ฅ์ ํธ์ฐจ๊ฐ ํฌ๊ฒ ๋ํ๋๋ค. ์ง๋ ๋ฅ์คํฐ์ฆ ํ๋ ํ๊ธฐ์ ์ ์๋ ๋ฌธ์ฅ์ด๋ค. ์ด๋ ต๊ฒ ๋ง ํ์
์ ์ด๋ฆฌ์ ๋ฆฌ ์ฐ๊ณ ์ด๋ฐ๋ฌธ์ ๊ฐ ์๋๋ค. ์ค๋ซ๋์ ๋๋๋๋ค ๋ฐ๊ฒฌํ ๋ฐฉ๋ฒ์ด ์๊ณ ๋ณด๋ฉด ๊ต์ฅํ ๊ธฐ๋ณธ์ ์ธ ํ์
๋ฌธ๋ฒ์ด์๋ ๊ฒฝ์ฐ๊ฐ ๊ฝค ์์๋ค. ์ด๋ ๊ฒ ์ผ๋ ๋ฒ๋ ๊ฐ๋ฐํด์จ ํ๊ท์ง์ ์ํ ํ์
์คํฌ๋ฆฝํธ ๋ฟ์๊ธฐ ์คํฐ๋. ํ์
์ดํดํ๊ธฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ๊ฐ๋๋ค. ๊ฐ์ ์ ์ฅํ ๋ ํ๋ณดํด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด, ๊ฐ์ ์ฐธ์กฐํ ๋ ํ ๋ฒ์ ์ฝ์ด ๋ค์ฌ์ผ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด, ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด ๋ค์ธ 2์ง์๋ฅผ ์ด๋ป๊ฒ ํด์ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ์ ํ์
์ด ์๋ ๋์ ํ์
์ธ์ด์ด๋ค. ๋ณ์๋ฅผ ์ ์ธํ ๋ ๋ฐ์ดํฐ์ ํ์
์ ์ฌ์ ์ ์ ์ธํ๋ ๊ฒ์ด ์๋๋ค. ์ด๋ค ๋ฐ์ด..

๋๋ฅ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ Next.js๋ฅผ ์ฒ์ ํ๋ก์ ํธ์ ์ฌ์ฉํ๋ค. ๊ธฐํ์ ์ด์ ํ๋ก์ ํธ๋ณด๋ค SEO๋ฅผ ๋ ์ ๊ฒฝ์จ์ผํ๊ณ , ์ด๋ฏธ์ง ์ต์ ํ์ ๊ฐ์ ๊ฒ๋ค์ ์๋์ผ๋ก ์ ๊ณตํด์ค๋ค๋ ์ ์ด ์ข์๋ค. ์ด์ ๋ถํฐ ๊ณ์ ์จ๋ณด๊ณ ์ถ์๋ ๊ธฐ์ ์ด์์ด์ ๊ณต๋ถํ๋ฉด์ ํ๋ก์ ํธ์ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์๋ค. ์ด๋ฒ ํฌ์คํ
์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง ํ๊ฒฝ์์ ์นด์นด์ค ์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๋ฉด์ ๊ณต๋ถํ๋ ๋ด์ฉ๊ณผ ๋ง์ฃผ์ณค๋ ๊ณ ๋ฏผ๋ค์ ๊ธฐ๋กํ ๊ธ์ด๋ค. ๋ชฉ์ฐจ 1. Next.js์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) 2. ์๋ฒ ์ฌ์ด๋์์ ์ฟ ํค ์ฌ์ฉํ๊ธฐ 3. getInitialProps๋ฅผ ์ฌ์ฉํด๋ ๋๋๊ฐ? 1. Next.js์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๊ธ์ ์ค๋นํ๋ฉด์ Next.js์์ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ๋ฐฉ์์ ์กฐ๊ธ ๋ ๊ณต๋ถํด๋ณด์๋ค. ๋จผ์ ๋ค๋ค ์๋ ์๊ธฐ. Next.js๋ SSR์..
์ฌ์ค ํ๋ฒ์ ๋๋ ์ค ์๊ณ dev ๋ธ๋์น์ ๋ฐ๋ก ํ
์คํธ๋ฅผ ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์์ง ์ ๋๋ก ์์๋ ์ํ๋๋ฐ ์ปค๋ฐ์ด 100๊ฐ๊ฐ ๋์ด๊ฐ๋ ๋ถ์์ฌ๊ฐ ์๊ฒผ๋ค. ์ด์จ๋ ๋ชจ๋
ธ๋ ํฌ ์๋ฆฌ์ฆ ๋ง์ง๋ง์ Docker์ Github Actions๋ฅผ ์ด์ฉํ CI/CD ๊ตฌ์ถ ์ฝ์ง๊ธฐ. ๋ณ๋ก ์ด๋ ค์ด ๋ด์ฉ์ด ์๋๊ณ , ๊ทธ๋ ๊ธฐ์ ๊ฑฐ์ฐฝํ ์ ๋ณด ๊ณต์ ๋ชฉ์ ์ ๊ฒฐ์ฝ ์๋๋ค. ํ์ง๋ง ๋์ฒ๋ผ ์ฉํ ์ฒ์ ๋ชจ๋
ธ๋ ํฌ๋ฅผ ์๋ํด๋ณด๋ ์ฌ๋๋ค์ด ์ฝ๊ฒ ์ฐธ๊ณ ํ ์ ์์๋งํ ๊ธ์ด ๋ณ๋ก ์์ด ํ๋ค์๊ธฐ ๋๋ฌธ์ ๊พธ์ญ๊พธ์ญ ์ฐ๋ ๊ธ. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด์ ์ ๊ตฌ์ถํด ์ฌ์ฉํ๋ ์ธํ
์ ๋ฐํ์ผ๋ก ํ๊ณ ์๋ค. (1ํธ, 2ํธ) ํฌ๊ฒ ๋ค๋ฅผ๊ฑด ์์ง๋ง, ๊ฑฐ๊ธฐ์๋ถํฐ ํ์คํ์ค์ฉ ๋ฐ๊ฟ๊ฐ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ์. ๋ฐ์ง๊ณ ๋ณด๋ฉด ํ์คํ์ค์ฉ ๊ณ ์ณ๋๊ฐ๋ ๊ณผ์ .. "scripts": { // ... "admi..
1. ์์ํ๊ธฐ yarn set version berry yarn init yarn add -D typescript @types/node @types/react ๋๋ ํ ๋ฆฌ ํ๋๋ฅผ ํ๊ณ yarn ๋ฒ์ ์ berry๋ก ์ค์ ํ ํ์ package.json์ ์์ฑํด์ค๋ค. ํ์
์คํฌ๋ฆฝํธ๋ ํจ๊ป ์ธํ
ํด์ค๋ค. yarn ๊ด๋ จ ์ค์ ์ ์ด์ ๊ธ์์ ์งค๋งํ๊ฒ ์ ์ด๋์๋ค. ๋ค์ ๊ฐ๋ตํ๊ฒ ์ ์๋ฉด, // ./package.json { "name": "dudoong-front", "packageManager": "yarn@3.3.0", "private": true, "workspaces": { "packages": [ "apps/*", "shared/*" ] }, // ... } ๋ฃจํธ์ package.json์์ workspaces๋ฅผ ์ถ..