๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(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 ์ฝ”๋“œ๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์™€ ๋ Œ๋”๋งํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‹ค ๋” ์ธํ„ฐ๋ ‰ํ‹ฐ๋ธŒํ•˜๊ณ  ๋™์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ณ  ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ˜ํ…์ธ ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ..