๐ ๋ค์ด๊ฐ๋ฉฐ ์ด ํฌ์คํ ์ Next.js 11 ๋ฒ์ (page router) ํ๊ฒฝ์์ ์์ฑ๋ ๊ธ์ ๋๋ค. 13๋ฒ์ ์ดํ app router ํ๊ฒฝ์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ด ํฌ์คํ ์์ 1 ~ 1-3๊น์ง๋ง ๋ณด์๊ณ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์. Next.js + Typescript ํ๊ฒฝ์์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ์ค ์นด์นด์คํก์ผ๋ก ๊ณต์ ํ๊ธฐ ๊ธฐ๋ฅ์ด ํ์ํด์ ๊ตฌํ์ ํ์๋๋ฐ, ๋ช๋ช ์ค๋ฅ๋ ๋ง์ฃผ์น๊ณ ๋ฐ๋ก ์ ๋ฆฌ๋ฅผ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์ด๋ ๊ฒ ์ ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. 1. ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ๋กํ๊ธฐ ์ผ๋จ ์ฒซ ๋ฒ์งธ๋ก ๊ฐ๋ฐํ๊ธฐ์ ์์์ Kakao Developers์์ ์ดํ๋ฆฌ์ผ์ด์ ๋ฑ๋ก์ ํด์ค์ผ ํฉ๋๋ค. 1-1 ๋ก๊ทธ์ธ ์ฌ์ดํธ์ ์ ์ ํด์ฃผ์๊ณ ์ฒซ ํ๋ฉด์์ ๋ก๊ทธ์ธ์ ํด์ฃผ์๊ณ '๋ด ์ ํ๋ฆฌ์ผ์ด์ '์ ํด๋ฆญํด์ฃผ์ธ์. 1-2 ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํ๊ธฐ ๊ทธ๋ฌ๋ฉด ์ด๋ ๊ฒ ์ ..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋๋ก ์น์ฌ์ดํธ ๊ฐ๋ฐ ์ ๋ง์ด ์ฌ์ฉ๋๋ ์ธ์ด์ ๋๋ค. ํนํ ์ต๊ทผ๋ค์ด ๋ง์ ์ฌ๋๋ค์ด ๊ด์ฌ์ ๊ฐ์ง๊ณ ์๊ณ , ์ค์ ๋ก ํ์ฌ์์๋ ์ ๊ทน์ ์ผ๋ก ํ์ฉ๋๊ณ ์๋ ์ถ์ธ์ฃ . ์ด๋ฒ ํฌ์คํ ์์๋ ๋ฆฌ์กํธ๊ฐ ์ด๋ค ํน์ง์ ๊ฐ์ง๊ณ ์๋์ง ์์๋ณด๊ณ ์ ํฉ๋๋ค. ๋ฆฌ์กํธ(React.js)๋ ๋ฌด์์ผ๊น โ React.js๋ ํนํ SPA(Single Page Application)์ ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์คํ ์์ค JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. React๋ Facebook์์ ์ผํ๋ ์ํํธ์จ์ด ์์ง๋์ด jordan walke๊ฐ ์ฒ์ ๋ง๋ค์์ต๋๋ค. ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ view layer๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๊ธฐ๋ฒ์ ํตํด์ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ํ ๊ณณ์ ๋ชจ์..
๐ ๋ค์ด๊ฐ๋ฉฐ React๋ฅผ ์ฒ์ ํ์ตํ๋ ์์ , Redux๊ฐ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ ํ์ํ์ง์ ๋ํ ๋ช ํํ ์ดํด ์์ด 'Redux๋ฅผ ์ ๋ฐฐ์์ผ ํ๋์ง'์ ๋ํด ์๋ฌธ์ ๊ฐ๊ณค ํ์ต๋๋ค. ํ์ง๋ง, React๋ฅผ ์ด์ฉํ์ฌ ํด๋ก ์ฝ๋ฉ์ ํ๊ฑฐ๋ ์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ด ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ถํ์ํ๊ฒ ๋ง์ Props๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํฉ(Props Driling)์ ๊ฒช๊ฒ ๋์์ต๋๋ค. ์ด๋ฐ ๊ฒฝํ์ ํตํด "์ ์ญ ์ํ ๊ด๋ฆฌ"์ ํ์์ฑ์ ์ฒด๊ฐํ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์๋ Redux์ ๋ํด ์์๋ณด๋ ค ํฉ๋๋ค. Redux๋ โ Redux๋ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Redux๋ React์ ํจ๊ป ์ฌ์ฉ๋..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ด๋ฒ์ ํ ํ๋ก์ ํธ๋ก ํ ํ๋ก์ ํธ๋ฅผ ๊ตฌํ๋ ์น์ฑ์ ํด๋ก ์ฝ๋ฉํ๊ฒ ๋๋ฉด์ ํ๋ก์ ํธ ์งํ ๊ธฐ๊ฐ์ ์ ํํ ์ ์๊ฒ ํ๋ Input์ด ํ์ํ์ต๋๋ค. ๊ทธ๋์ ์บ๋ฆฐ๋๊ฐ ํ์๋๊ณ ์บ๋ฆฐ๋์์ ๋ ์ง๋ฅผ ์ ํํ๋ฉด Input์ ํด๋น ๋ ์ง๊ฐ ์ ๋ ฅ๋ ์ ์๊ฒ ๊ตฌํํ๊ณ ์ถ์์ต๋๋ค. ์บ๋ฆฐ๋๋ฅผ ์ผ์ผ์ด ๊ตฌํํ๊ธฐ์๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฑฐ ๊ฐ์์, ๋ฆฌ์กํธ ์บ๋ฆฐ๋ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋ณด๋ ์ค์ react-datepicker๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ง๊ธ๊ป ๊ณต๋ถํ๋ฉด์ ์บ๋ฆฐ๋ ๊ด๋ จํด์๋ ์ฒ์์ด๊ธฐ ๋๋ฌธ์ ์๊ฒ ๋ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค ํฉ๋๋ค. react-datepicker react-datepicker๋ ๋ฆฌ์กํธ์์ ๋ฌ๋ ฅ์ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ฌ์ฌ์ฉ์ด ์ฝ๊ฒ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์๊ฒ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค! npm ์ฌ์ดํธ์ ์ฃผ๊ฐ ๋ค์ด๋ก๋ ํ์๋ฅผ ..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋ฆฌ์กํธ๋ก ํ์ฝ ํ์์ ํด๋ก ์ฝ๋ฉํ๋ ํฌํธํด๋ฆฌ์ค๋ฅผ ์ ์ํ๋ฉด์ ๊ณต๋ถ ์ค์, Link (react-router-dom)์ ํด๋ฆญํ๋ฉด url์ ๋ณ๊ฒฝ์ด ๋์ง๋ง ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๋์ง ์์์ ์ ๋๋ก ๊ธฐ๋ฅ์ด ์๋ํ์ง ์๋ ๋ฌธ์ ๋ฅผ ๊ฒช์๋ค. ํด๊ฒฐํ๊ณ ๋๋๊น ์ ๋ง ๋ณ ๊ฒ ์๋์์ง๋ง...(๊ฐ๋ ๋ถ์กฑ) ๋ฌด์์ด ๋ฌธ์ ์ด๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๋ค์ ๋ณต์ตํ๊ธฐ ์ํด ์ ๋ฆฌํด๋ณธ๋ค. โ ๋ฌธ์ ๋ฌธ์ ์ ํ๋ฉด์ด๋ค. Detail ์ปดํฌ๋ํธ์์ ํด๋น ์ํ์ ๊ด๋ จ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ๋ค. Detail ์ปดํฌ๋ํธ์์ ๊ด๋ จ ์ํ๋ฅผ ๋ณด์ฌ์ค ๋ค, ๊ด๋ จ ์ํ๋ฅผ ํด๋ฆญํ๋ฉด ๊ทธ ๊ด๋ จ ์ํ์ Detail ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๊ฒ ๊ตฌํํ๊ณ ์ถ์๋ค. ํ์ง๋ง ์ฌ์ง์ ๋ณด์ด๋ ๋ฐ์ ๊ฐ์ด ํด๋ฆญ์ ํ๋ฉด url์ ์ ๋ณ๊ฒฝ์ด ๋์ง๋ง ํด๋น ์ํ์ Deta..
๐ ๋ค์ด๊ฐ๋ฉฐ์ด๋ ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ์ for๋ฌธ์ ์ข ๋ฅ์ ๋ํ ๊ธ์ ์ ๋ฆฌํ๋ ์ด์ ๋ ํ์ฌ ๋์ค์ ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ค๋นํ๋ฉด์ for๋ฌธ์ ์์ฑํ ๋๊ฐ ๋ง์๋ฐ, ๊ณต๋ถ๋ฅผ ํ๋ฉด์ for๋ฌธ์ ์ข ๋ฅ๊ฐ ๋ค์ํ๊ฒ ์๋ ๊ฑด ์์์ง๋ง ์ค์ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ ๊ฐ ์์ฃผ ์ฌ์ฉํ for๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ for๋ฌธ๊ณผ forEach๋ฌธ๋ง ์์ฃผ ์ฌ์ฉํ์๊ณ , ๊ทธ ์ธ์๋ ๊ฑฐ์ ํ ๋ฒ๋ ์ฌ์ฉํด ๋ณธ ์ ์ด ์์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋ค์ํ for๋ฌธ๊ณผ ์ ์ด ํด๋ณด๋ฉด์ ๊ฐ๊ฐ์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ for๋ฌธ๋ง๋ค ์ฅ์ ์ด ์๊ณ , ์ฑ๋ฅ์ ์ฐจ์ด๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ธฐํ์ ํ์คํ๊ฒ ์๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๊ฐ๋จํ๊ฒ ์ด๋ค ์ญํ ์ ํ๋ ์ ๋์ธ์ง์ ๋ํด์ ์ ๋ฆฌํ๋ค.๐ก ์์๋ณผ ๊ฒ๋ค(์ ํ์ ์ธ) forfor infor offo..
๐ ๋ค์ด๊ฐ๋ฉฐ ๊ณต๋ถํ ๋ด์ฉ์ ํ๋ฒ ๋ ์ ๋ฆฌํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ๊ธ์ ์์ฑํด๋ณธ๋ค. โ ๋ฌธ์ ์ผ๊ณฑ ๋์์ด ์๋น๋ฅผ ํผํด ์ผ๊ณฑ ๋์์ด๋ค๊ณผ ํจ๊ป ํํ๋กญ๊ฒ ์ํํ๊ณ ์๋ ๋ฐฑ์ค๊ณต์ฃผ์๊ฒ ์๊ธฐ๊ฐ ์ฐพ์์๋ค. ์ผ๊ณผ๋ฅผ ๋ง์น๊ณ ๋์์จ ๋์์ด๊ฐ ์ผ๊ณฑ ๋ช ์ด ์๋ ์ํ ๋ช ์ด์๋ ๊ฒ์ด๋ค. ์ํ ๋ช ์ ๋์์ด๋ ๋ชจ๋ ์์ ์ด "๋ฐฑ์ค ๊ณต์ฃผ์ ์ผ๊ณฑ ๋์์ด"์ ์ฃผ์ธ๊ณต์ด๋ผ๊ณ ์ฃผ์ฅํ๋ค. ๋ฐ์ด๋ ์ํ์ ์ง๊ด๋ ฅ์ ๊ฐ์ง๊ณ ์๋ ๋ฐฑ์ค๊ณต์ฃผ๋, ๋คํ์ค๋ฝ๊ฒ๋ ์ผ๊ณฑ ๋์์ด์ ํค์ ํฉ์ด 100์ด ๋จ์ ๊ธฐ์ตํด ๋๋ค. ์ํ ๋์์ด์ ํค๊ฐ ์ฃผ์ด์ก์ ๋, ๋ฐฑ์ค๊ณต์ฃผ๋ฅผ ๋์ ์ผ๊ณฑ ๋์์ด๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ ์ค. (๋ฌธ์ ์ถ์ฒ : ํ๊ตญ์ ๋ณด์ฌ๋ฆผํผ์๋) ์ ๋ ฅ ์ํ ๊ฐ์ ์ค์ ๊ฑธ์ณ ์ผ๊ณฑ ๋์์ด์ ํค๊ฐ ์ฃผ์ด์ง๋ค. ์ฃผ์ด์ง๋ ํค๋ 100์ ๋์ง ์๋ ์์ฐ์์ด๋ฉฐ, ์ํ ๋์์ด์ ํค๋ ๋ชจ..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ต๊ทผ React๋ฅผ ๊ณต๋ถํ๋ ๋์ค์ react router๋ฅผ ์ค์นํด์ผ ํ๋ ์ํฉ์ด์์ต๋๋ค. react router๋ฅผ ์ค์น ํ๋๋ฐ, ๋ก๊ทธ์ npm error๊ฐ ์ฌ๋ฌ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ฆฌ์กํธ๋ก ์คํ ์ํค์ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ./src/App.js Module not found: Can't resolve './src/components/Navbar/Navbar' in '/Desktop/React_Components/test/src' Module not found: Can't resolve './node_modules/react' ๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ create-react-app์ผ๋ก ๊ตฌ์ฑ๋ ๋ฆฌ์กํธ ํ์ผ์ ์๋์ ๊ฐ์ด ๋์ด์์ต๋๋ค. ํ๋ก์ ํธ ๋ด๋ถ์ ์๋ package-lock.json ๋๋ ..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ ํ์ธ์. ์ค๋์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฒํผ ํด๋ฆญ์ผ๋ก ์ค๋์ค๋ฅผ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. ๋ฒํผ ํด๋ฆญ์ผ๋ก ์์ ์ ์ผ๊ณ ๋๊ณ , ๋ค์ ์์ ์ผ๋ก ๋๊ธฐ๋ ์ฌ๋ฌ ์์ ์ ์ ์ดํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ HTML์๋ audioํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ์ค์ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ง audio ์ ์ด๋ฅผ ํ๋ค๊ฐ ๋งํ์ง๋ง, ๊ฒฐ๊ตญ ์ ํด๊ฒฐ์ ํด์ ๋ฐ๋ก ์ ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์์ฃผ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด์, const audio = new Audio('audio_file.mp3'); audio.play(); HTML์ ๋ฐ๋ก ์ค๋์ค ํ๊ทธ๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฐ ์์ผ๋ก audio ์ฝ๋ฉ์ ํด์ ๋ก์ปฌ์์ ์ ์๋ํ๋ ๊ฒ์ ํ์ธํ๊ณ , ๊นํ๋ธ ํผ๋ธ๋ฆฌ์ฑ์ ํ์ฌ ์ฌ์ดํธ๋ก ๋ฐฐํฌํ๋๊น ์๋์ ๊ฐ์ ์ค๋ฅ๋ก ์ค๋์ค ์ฌ์์ด ์๋ํ์ง ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค..