๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (78) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [ React ] Suspense๋ ๋ฌด์์ผ๊น? React์ Suspense๋ React 18์์ ์ ์์ผ๋ก ์ง์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ React์ ๋ด์ฅ ์ปดํฌ๋ํธ๋ก, ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ ๋์, ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ์ ๋ํ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. Suspense๋ Suspense์ ๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ , ๊ฒฝ๊ณ ๋ด์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๋ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฐ ๋ก๋ฉ ์ํ๋ fallbackํ๋กํผํฐ๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ํ์๋๋ค. Suspense์ ์์ ์ปดํฌ๋ํธ(children)๊ฐ ์ค์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ดํ์ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ์ด๋ค. ์์ ๊ฐ์ด {children}๋ก ์ฌ์ฉ๋๋ฉฐ, React Suspense๋ ์ฃผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ํด ์ฌ์ฉ๋๋ React.lazy์ ํจ๊ป ์ฌ์ฉ๋๋ค.(React.lazy.. [ TypeScript ] ํ์ ์ ์ํ interface ์ ํํธ ์ฃผ์ ๋ฌ๊ธฐ. ts๋ก ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐ ์ค์ interface์ ์ถ๊ฐ์ ์ธ ์ค๋ช ์ด ์์ผ๋ฉด ์ข๊ฒ ๋ค~! ๋ผ๋ ์๊ฐ์ด ๋ค์ด์ ํ์์๋ method๋ method parameter์ ๋ํ ์ค๋ช ์ ๋ฌ์์ค ๋ ์์ฃผ ์ฌ์ฉํ๋ JSDoc์ ์ด์ฉํ์ฌ interface ์ค๋ช ์ ์ถ๊ฐํด ๋ณด์๋ค. ๋จผ์ JSDoc์ ๋ํด ์ค๋ช ํ์๋ฉด, JSDoc์ ์๋ฐ์คํฌ๋ฆฝํธ์ฉ API ๋ฌธ์ ์์ฑ๊ธฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API๋ฅผ ๋ฌธ์ํํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค. module, namespaces, classes, methods, method parameters ๋ฑ๊ณผ ๊ฐ์ ํญ๋ชฉ๋ค์ ๋ฌธ์ํํ ์ ์๋ค. JSDoc์ ์ฝ๋ ์์ฒด์ ํจ๊ป ์์ค์ฝ๋์ ์ง์ ๋ฌธ์ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค. JSDoc ์ฃผ์์ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ํํ๋ ค๋ ์ฝ๋ ๋ฐ๋ก ์์ ์์น.. [ 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 : ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ .. [TS] ํ๋ก์ ํธ์ tsconfig ์ค์ ํ๊ธฐ. ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์ธํ ํ ๋, TypeScript ๋ก ํ์ ์ฒดํฌ๋ฅผ ์ด๋๊น์ง ํ์ฉํ ์ง, ์ด๋ค ์ค์ ์ผ๋ก ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ฅผ ์ธ์ง ๊ณ ๋ฏผํ๋ ์ค ํ์๋ค(+๋)์ ํ์ ์คํฌ๋ฆฝํธ ๋ฅ์๋๊ฐ ๊ทธ๋ฆฌ ๋์ง ์๋ค๋ ๊ฒ์ ์๊ฒ๋์ด ๊ธฐ๋ณธ ํ์ ์คํฌ๋ฆฝํธ ์ธํ ์ ํ๋ฉฐ ์ฐ๋ ๊ธ. tsconfig.json ์ค์ fucntion add(a,b){ return a+b; } add(10, null); // noImplicitAny ์ค์ ์ด ๊บผ์ ธ์๋ค๋ฉด ์์ ์ฝ๋๋ ํ์ ์ฒด์ปค๋ฅผ ํต๊ณผํ๊ณ , // noImplicitAny ์ค์ ์ด ์ผ์ ธ์๋ค๋ฉด ์ค๋ฅ๊ฐ ๋๋ค. **์์ ์์์ ๊ฒฝ์ฐ, ํ์ ์คํฌ๋ฆฝํธ์ ์ค์ ์ ๋ฐ๋ผ ๋์ผ ์ฝ๋๋ผ๋ ํ์ ์ฒด์ปค์ ํต๊ณผ ๊ฐ๋ฅ์ฌ๋ถ๊ฐ ๋ฌ๋ผ์ง๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์ค์ ์ด 100๊ฐ ๊ฐ๊น์ด ๋๊ธฐ๋๋ฌธ์, ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ์ด๋ค ํ์ ์คํฌ๋ฆฝํธ ์ค์ ์ ์ฌ์ฉํ๋์ง.. [ 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); .. [ Safari ] ์์ดํฐ์ ์ฌํ๋ฆฌ ๋ชจ๋ฐ์ผ ์น ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ ์์ดํฐ์ผ๋ก ๋ชจ๋ฐ์ผ ์ฌํ๋ฆฌ ์น์ ๋๋ฒ๊น ์ ๋งฅ๋ถ์ ์ด์ฉํ์ฌ ํ๋ ๋ฐฉ๋ฒ. 1. ์์ดํฐ์ ์ค์ ์ฑ์ ์ฐ๋ค. 2. ์ค์ ์ Safari - ๊ณ ๊ธ์์ ์น ์์ฑ ์ค์ ์ ํ์ฑํ ํ๋ค. 3. ์ผ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋งฅ๋ถ์ ์ฐ๊ฒฐํ๋ค. 4. ๋งฅ๋ถ์์ ์ฌํ๋ฆฌ๋ฅผ ์ด๊ณ ๋ฉ๋ด ํญ์์ ๊ฐ๋ฐ์์ฉ ํญ์ ํ์ธํ๋ค. 5. ๋งฅ๋ถ ์ฌํ๋ฆฌ์ ํ๊ฒฝ์ค์ - ๊ณ ๊ธ - ๋ฉ๋ด ๋ง๋์์ ๊ฐ๋ฐ์์ฉ ๋ฉ๋ด ๋ณด๊ธฐ๋ฅผ ํ์ฑํ ํ๋ค. 6. ๋งฅ๋ถ ์ฌํ๋ฆฌ์ ๊ฐ๋ฐ์์ฉ ํญ์์ iPhone์ ์ ํํ๋ค. 7. ์์ดํฐ์ ์ฌํ๋ฆฌ ์นํ์ด์ง๋ฅผ ํ์ํ๋ฉฐ, ๋งฅ๋ถ ์ฌํ๋ฆฌ๋ก ๊ฐ๋ฐ์์ฉ ์ฝ์์ ํตํด ๋๋ฒ๊น ์ ํ๋ค. [ WEB ] CSR๊ณผ SSR ๋น๊ตํ๊ธฐ CSR(client-side-rendering)๊ณผ SSR(server-side-rendering)์ ์น ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ๋๋งํ๋ ๊ธฐ์ ์ด๋ค. SSR๊ณผ CSR์ ๋ ๋๋ง ๊ณผ์ ์ด ์ผ์ด๋๋ ์์น์์ ์ฐจ์ด๊ฐ ์๋ค. CSR (Client-Side-Rendering) CSR์ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ ๋๋ง์ ํ๋ ๊ธฐ์ ๋ก ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ JavaScript๋ฅผ ํตํด ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ค. ์๋ฒ์์ ์ต์ํ์ HTML ํ์ผ์ ๋ณด๋ด๊ณ , ํด๋ผ์ด์ธํธ ์ธก JavaScript ์ฝ๋๊ฐ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ ๋ ๋๋งํ๋ค. ์ด ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ๋ณด๋ค ๋ ์ธํฐ๋ ํฐ๋ธํ๊ณ ๋์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๊ณ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ์ฝํ ์ธ ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋ค. ํ์ง๋ง ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ.. ์ด์ 1 2 3 4 5 ยทยทยท 10 ๋ค์