React (14) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [ React ] Suspense๋ ๋ฌด์์ผ๊น? React์ Suspense๋ React 18์์ ์ ์์ผ๋ก ์ง์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ React์ ๋ด์ฅ ์ปดํฌ๋ํธ๋ก, ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ ๋์, ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ์ ๋ํ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Suspense๋ Suspense์ ๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ , ๊ฒฝ๊ณ ๋ด์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๋ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฐ ๋ก๋ฉ ์ํ๋ fallbackํ๋กํผํฐ๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ํ์๋๋ค. Suspense์ ์์ ์ปดํฌ๋ํธ(children)๊ฐ ์ค์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ดํ์ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ์ด๋ค. ์์ ๊ฐ์ด {children}๋ก ์ฌ์ฉ๋๋ฉฐ, React Suspense๋ ์ฃผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ํด ์ฌ์ฉ๋๋ React.lazy์ ํจ๊ป ์ฌ์ฉ๋๋ค.(React.lazy.. [ Next.js ] Next13์์ ์ปค์คํ Font ์ธํ ํ๊ธฐ. (App Router ๊ธฐ์ค) ํ์ฌ์์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ Next13์ ๋์ ํ์ฌ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ฌ ๊ฐ๋ฐ ์งํ์ค์, ์ฐ๋ฆฌ๋ Google Font๊ฐ ์๋ Local Font๋ฅผ ์ฌ์ฉํ๊ฒ ๋์ด, ์ฝ์ง์ ์กฐ๊ธ ํ๋ค๊ฐ... ์ธํ ํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ ค ํ๋ค. ์ฐ์ , Next ๊ณต์ ํํ์ด์ง์์ App Router ์ฌ์ฉ ๋ฐฉ์์ผ๋ก Font๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์ ๋ณด๋ฉด 1. Google Font๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, 2. Local Font๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํฌ๊ฒ ๋๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ค๋ Font๋ Pretendard ์๋๋ฐ, Google Font์ ์๋ ํฐํธ์ฌ์ Local Font๋ฅผ ์ ์ฉํด์ผ ํ๋ค...^_ใ ๋ง์ฝ Google Font์์ ์ง์ํ๋ ํฐํธ์ผ ์ ์์ผ๋ ํด๋น ์ฌ์ดํธ์์ ์์นํด๋ณธ ํ ์๋ค๋ฉด Local Font๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ๋ก.... (Google Font.. [ Next.js ] Next13์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด์. Vercelํ์ด Next.js์ 13๋ฒ์ ์ด 2022๋ 10์ 26์ผ Next.js ๊ณต์ ํ์ด์ง์ ์๊ฐ๋์์ง๋ง, ์์ธํ ์ดํด๋ณด์ง๋ฅผ ์์๋๋ฐ ์๋ก ์ด์งํ๊ฒ๋ ํ์ฌ์์ Next13์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์๋ก ์ธํ ํ๊ธฐ๋ก ์ด์ผ๊ธฐ๊ฐ ๋์ด ๊ณต์ ๋ธ๋ก๊ทธ ๋ด์ฉ์ ์ดํด๋ณด์๋ค. ++Next.js 13.4(ํ์ฌ ๊ธฐ์ค ์ต์ ๋ฒ์ )์ ์ฌ์ฉํ๋ ค๋ฉด ์๋์ ๋ช ๋ น์ด๋ฅผ ํตํด ์ค์นํ ์ ์๋ค. npm i next@latest react@latest react-dom@latest eslint-config-next@latest ์ฑ ๋ผ์ฐํ (App Directory) - Next.13.4(ํ์ฌ)๊ธฐ์ค Stable ๊ธฐ์กด์ pages/ ๋๋ ํ ๋ฆฌ์์ ๋ผ์ฐํ ๋๋ ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ, app/ ๋๋ ํ ๋ฆฌ๋ก ๋ผ์ฐํ ํ๋ ๋ฐฉ์์ด ์ถ๊ฐ๋์๋ค. - Tree : ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ .. [ React ] ์ํ ๊ด๋ฆฌ ํด ๋น๊ต ๋ถ์ Recoil vs Zustand ํ์ฌ์์ ์๋ก์ด React ํ๋ก์ ํธ๋ฅผ ์ธํ ์ค์ธ๋ฐ, ์ ์ญ ์ํ๊ด๋ฆฌ ํด ์ค์์ ํ์๋ค์ด ๋น ๋ฅด๊ฒ ๋ฐฐ์ฐ๊ณ ํ์ฉํ ์ ์๋๋ก ์ฝ๊ฒ React ํ๋ก์ ํธ์ ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ํด 2๊ฐ์ง๋ฅผ ๋น๊ตํด ๋ณด๊ฒ ๋์๋ค. Recoil (v0.7.7 ๊ธฐ์ค) ์ ์ฒด ์นด์ดํฐ ์ฝ๋ counter sample code Recoil์ ์๋์ฒ๋ผ ์ฐ์ธ๋ค. (ํ ์คํธ ์ฝ๋ ์ผ๋ถ) import "./App.css"; import { countState } from "./state/countState"; import { useRecoilValue, useSetRecoilState, useResetRecoilState } from "recoil"; function App() { const count = useRecoilValue(countState); .. [ React ] React Props ์์๋ณด๊ธฐ. React๋ฅผ ์ฒ์ ์์ํ๋ ์ฌ๋๋ค ๋๋ React์ ๊ฒฝํ์ด ๋ง์ง ์์ ์ฌ๋๋ค์๊ฒ ๋น์ทํด๋ณด์ฌ์ ์ด๋ ต๊ฒ ๋๊ปด์ง ์ ์๋ React Props์ React State์ ๋ํด ์ฐจ์ด์ ์ ๋ํ ํฌ์คํ ์ ํ๋ ค๊ณ ํ์ง๋ง React์ Props๋ฅผ ๋จผ์ ์ดํดํด์ผ state์ ๋ํด ์ดํดํ๊ธฐ ๋์ฑ ์ฌ์ธ ๊ฒ ๊ฐ์, props์ ๋ํด ๋จผ์ ์์๋ณด๋ ค ํ๋ค. props์ state๋ React์ ํด๋์ค ์ปดํฌ๋ํธ์ ํจ์ ์ปดํฌ๋ํธ์์ ๋ชจ๋ ์ฌ์ฉ๋๋ค. Props React์์ props๋ "properties"์ ์ค์๋ง๋ก, ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๋ props๋ผ๋ ๊ฐ์ฒด ํํ๋ก ์ ๋ฌ๋๋ฉฐ, ์์ ์ปดํฌ๋ํธ๋ ์ด props ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ .. [ webpack ] React(๋ฆฌ์กํธ)์ webpack(์นํฉ) React.js๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ํญ์ webpack๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ ํด์ ์ฌ์ฉํ๊ฒ ๋๋ค. ์นํฉ ๊ณต์ ์ฌ์ดํธ์์ ์๊ฐํ๋ ์ปจ์ ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ํ ์ ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ผ๊ณ ๋งํ๋ค. ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฌ๋ฌ ๋ค๋ฅธ ํ์ผ๋ค(JavaScript, LESS, CSS, JSX, ESNext ๋ฑ)์ ๋ฐ์์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ค๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ๋ค๋ฅธ ํ์ผ๋ค์ ๋ฐ์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ฃผ์ด ์๊ธฐ๋ ์ด์ ์ ํฌ๊ฒ ๋ชจ๋์ฑ๊ณผ ๋คํธ์ํฌ ์ฑ๋ฅ์ด ์๋๋ฐ, ๋ชจ๋์ฑ์ ์์ค ์ฝ๋๋ฅผ ์์ ํ๊ธฐ ์ฝ๊ฒ ์ฌ๋ฌ ๋ถ๋ถ์ด๋ ๋ชจ๋๋ก ๋๋ ์ ๋ค๋ฃฐ์ ์๊ฒ ํด์ฃผ์ด ํ ์์ ๋ฑ์ ํ์ ์ ์ ๋ฆฌํ๋ค. ๋ ๋คํธ์ํฌ ์ฑ๋ฅ์ ์ธก๋ฉด์์๋ ์์กด ๊ด๊ณ๊ฐ ์๋ ์ฌ๋ฌ ํ์ผ์ ๋ฌถ์ ๋ฒ๋ค์ ๋ธ๋ผ์ฐ์ ๊ฐ 1๋ฒ๋ง ์ฝ๊ธฐ ๋๋ฌธ์ ๋คํธ์.. [ React ] React Element ์ Component์ ์ฐจ์ด์ React Element React ์๋ฆฌ๋จผํธ๋ React ์ฑ์ ๊ฐ์ฅ ์์ ๋จ์๋ก, ๋ธ๋ผ์ฐ์ DOM ์๋ฆฌ๋จผํธ์ ๋ค๋ฅด๊ฒ ์ผ๋ฐ ๊ฐ์ฒด(plain object)์ด๋ฉฐ, ์ฝ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ๋ค. React ์๋ฆฌ๋จผํธ๋ ํ๋ฉด์ ํ์ํ ๋ด์ฉ์ ๊ธฐ์ ํ๋ฉฐ, React DOM์ React ์๋ฆฌ๋จผํธ์ ์ผ์นํ๋๋ก DOM์ ์ ๋ฐ์ดํธํด์ค๋ค. const element = Hello, world; React ์๋ฆฌ๋จผํธ๋ ๋ถ๋ณ๊ฐ์ฒด์ด๋ฉฐ, ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ ์ดํ์๋ ํด๋น ์๋ฆฌ๋จผํธ์ ์์์ด๋ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์๋ค. ์๋ฆฌ๋จผํธ๋ ์ํ์์ ํ๋์ ํ๋ ์๊ณผ ๊ฐ์ด ํน์ ์์ ์ UI๋ฅผ ๋ณด์ฌ์ค๋ค. ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ก๋ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ํ๋ผ ์ ์๋ค. (Welcome ์ปดํฌ๋ํธ๋ฅผ ์๋ฆฌ๋จผํธ๋ก ์ฌ์ฉ) const element = ; React๊ฐ ์ฌ์ฉ์ ์ .. [ React / Next ] Web Google Login ๊ธฐ๋ฅ ๊ตฌํ (gsi/client) ํ์ฌ์์ Next๋ฅผ ์ฌ์ฉํ๊ณ ์๋ Web์ Google Login ์ง์์ ์ํด ์น์ฉ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํด์ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ react-google-login ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ ์ด์ ๊ตฌ๊ธ์์ ์ง์ํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ค๊ฐ ์๋์ ๊ตฌ๊ธ ๊ฐ๋ฐ์ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ฌ Google Identity Service(GSI)๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ๋ค. ๊ณต์ ๋ฌธ์ ๋งํฌ ๊ตฌ๊ธ ๊ฐ๋ฐ์ ํ์ด์ง Authentication - ์น์ฉ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ Google ๋ก๊ทธ์ธ ํน์ง - Google ๊ณ์ ์ผ๋ก ์น ์๋น์ค์์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ค. - ์ฌ์ฉ์๋ Google ๊ณ์ ์ ๋ก.. ์ด์ 1 2 ๋ค์