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

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 ๊ณ„์ •์— ๋กœ..