ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํํ ๋ง์ฃผํ ์ ์๋ ์ํฉ์ด๋ค. 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 ( ); };..
๐ง๐ป ์งง์ํธํก/React
๊ท์ฐฎ์ ์ผ์ ๊ฝค๋ ์์ฃผ ์ผ์ด๋๋ค. ์ธ์ฃผ ์์
์ค ํ
์ด๋ธ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํด์ผํ๋ ์ผ์ด ์์๊ณ , ๊ธฐ์กด ์ฝ๋๋ Core UI๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ 4.0๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ ๋๋ฉด์ PRO๋ฒ์ ์ด ์๋ก ์๊ฒผ๊ณ , ๊ทธ๋ฅผ ์ํ ๊ธ๋๋๊ธฐ์ ํ
์ด๋ธ ์ปดํฌ๋ํธ๊ฐ ๊ฑธ๋ ค๋ฒ๋ ธ๋ค. ๊ธฐ์กด์ ์ฌ์ฉํ๋ onRowClick, scopedSlots๋ฑ์ ๊ธฐ๋ฅ๋ค์ด ์ฌ๋ผ์ก๊ณ ์ง์ ๊ตฌํํด์ผ ํ๋ค. { navigate(`/notices/${data.id}`); }} customCellItem={{ info: data => alert(data.index)}>์ปค์คํ
cell, date: data => {data.date}, }} />; ์ถ์ํ๋ Table์ ์์ ์ปดํฌ๋ํธ๋ ์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. ์ปฌ๋ผ๊ณผ data ๋ฐฐ์ด์ ๋๊ฒจ์ฃผ๋ฉด..
๋๋ฅ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ 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๋ฅผ ์ถ..
๊ณ ์ค๋ฝ์์ ํ๋ก์ ํธ๋ฅผ ์ธ๋ฒ์งธ ์ด์ด์ค๋ฉด์ ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ณ์ ๊ณ ๋ฏผํ๊ณ ์๋ค. ์ด๋ฒ์ ์๋ก์ด ํ๋ก์ ํธ, ๋๋ฅ์ ์์ํ๋ฉด์ ๋ชจ๋
ธ๋ ํฌ๋ฅผ ๋์
ํ๊ฒ ๋์๋ค. ์ด๋ฒ ํฌ์คํ
์ ๋ชจ๋
ธ๋ ํฌ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ CICD๋ฅผ ๊ตฌ์ถํ๋ฉด์ ๊ณต๋ถํ๋ ๊ฒ๋ค๊ณผ ์ฝ์ง์ ๋ํ ๊ธฐ๋ก์ด๋ค. 1) ๋์
์ด์ , yarn workspaces, berry 2) ๋ชจ๋
ธ๋ ํฌ ํ๊ฒฝ ์ธํ
- vite, nextjs, storybook, emotion 3) CI/CD - docker, github actions ์ธํ
1. ๋์
์ด์ ์๋
์ ์ฒ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ํ๋ก ํธ์ชฝ์ 3๊ฐ์ ๋ ํฌ๋ก ๊ตฌ์ฑํ๋ค. ์ ์ ํ๋ก ํธ ์ฌ์ดํธ, ์ด๋๋ฏผ ์ฌ์ดํธ, ๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๋ค. ์คํ ๋ฆฌ๋ถ ๋ ํฌ์งํ ๋ฆฌ์ ์ปดํฌ๋ํธ๋ค์ npm ํจํค์ง๋ก ๋ฐฐํฌํด์ ํ๋ก ํธ์ ์ด๋๋ฏผ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก..
๋๋ต์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ด ๋ชจ๋ ๋๋ฌ์ต๋๋ค. ํ๋ฃจ์ดํ๋์ ๊ธํ๊ฒ ๋ง๋ฌด๋ฆฌํ์. ์ ๋ฆฌํ์๋ฉด, todoItem์ ์ ์ ์ ๋ ์ง์ ๋ฐ๋ผ ๋ณ๋์ ์ํ๋ก ๊ด๋ฆฌํ๋ค. ํ ์ผ์ ์๋ฃํ ๋๋ง๋ค ํด๋น ๋ ์ง์ ๋ฌ๋ ฅ์ ์๊น๊ณผ ๋จ์ ๊ฐ์๊ฐ ์
๋ฐ์ดํธ๋๋ค. 1. TodoItem ๊ธฐ๋ฅ ํ์ฅ ๋ฌ๋ ฅ ๊ธฐ๋ฅ ์ ์ ๋จผ์ ํฌ๋ ํผ๋๋ฅผ ๊ตฌํํ๋ฉด์ ๋ ์ง๋ฅผ ์๊ฐํ์ง ์๊ณ ๋จ์ํ๊ฒ ํ๋์ ์ํ๋ก๋ง ๊ด๋ฆฌํ๋ค. ์ด์ ์ ํํ ๋ ์ง์ ์ ํํ ํ๋กํ์ ๋ฐ๋ผ ํฌ๋๋ค์ ๊ด๋ฆฌํ๊ณ ๋ณด์ฌ์ค์ผํ๋ค. ๋ง์ ๊ณ ๋ฏผ์ ํ์. ์ฒ์์ ๋ฐฑ๋จ ๋๋น์์ ๊ด๋ฆฌํ๋ค๋ฉด ์ด๋ป๊ฒ ๋์ด์์์ง๋ฅผ ์๊ฐํ๋ค (์๋๋ ์๋ฒ์์ ๋ฐ์์์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ก์ ํธ์์ ๋ชฉ๋ฐ์ดํฐ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์). 'ํฌ๋' ํ
์ด๋ธ์ ํ๋ ๋๊ณ , userId์ date ์ปฌ๋ผ์ ์ถ๊ฐํด์ ๊ทธ๊ฑธ ํตํด ์ ๋ณด๋ฅผ ํจ์นญํด์ค์ง ์์์๊น? ..
๋ฏธ๋ฃจ๊ณ ๋ฏธ๋ฃจ๋ ํฌ๋๋ฉ์ดํธ ๋ฌ๋ ฅ์ ๊ตฌํํด๋ด
์๋ค. ํ๋ก ํธ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ํ๋ฒ์ฏค์ ๋ง๋ค์ด์ผํ๋ ๊ด๋ฌธ ๊ฐ์ ๋๋์ด ์๋๋ฐ, ์ด๋ฒ ๊ธฐํ์ ํด๋ณด๋๊ฑฐ๋ก. dayjs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ์ค์ ํฌ๋๋ฉ์ดํธ๋ผ๊ณ ํด๋ ๋ฏฟ๊ฒ ์ฃ ? ์์ง ๋ฌ๋ ฅ์์ ๋ ์ง๋ฅผ ์ ํํ๊ณ ํด๋น ๋ ์ง์ ํฌ๋๋ฅผ ๋์ฐ๋ ๋ก์ง์ ๊ตฌํํ์ง ์์๋ค. ๋ค์์ฃผ๊น์ง ํด๊ฐ ์์ . ๋ฌ๋ ฅ์ ๋ง๋ค๊ธฐ ์ ์ ์ฐธ๊ณ ํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ค์ ๊ฐ๋ดค์๋๋ฐ, ๋ญ๊ฐ ๋ค ์์์ฐฎ๋ณต์กํ๊ณ ์ฐธ๊ณ ํ๊ธฐ ์ซ์ ๋ฐฉ๋ฒ๋ฐ์ ์์๋ค. ๊ทธ๋์ ์ด์ฌํ ๊ณ ๋ฏผ์ ํด๋ณด์์. Calender.tsx const Calender = () => { const [selectedDay, setSelectedDay] = useState( dayjs().format('MM/DD/YY'), ); const handleSelectDat..