๐ฉ๐ป๐ป dev (42) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์ธ์ ์คํ ๋ฆฌ์ง, ๋ก์ปฌ ์คํ ๋ฆฌ์ง ์ด๋ค ๊ฑธ ์จ์ผํ ๊น? 2025.03.13 - [๐ฉ๐ป๐ป dev] - ๋ก์ปฌ ์คํ ๋ฆฌ์ง vs ์ธ์ ์คํ ๋ฆฌ์ง vs ์ฟ ํค ๋ก์ปฌ ์คํ ๋ฆฌ์ง vs ์ธ์ ์คํ ๋ฆฌ์ง vs ์ฟ ํคhttp ํ๋กํ ์ฝ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ์ฉ์ดํ๋๋ก ์ค์ํ ํด์ค๋ค. ๋ค๋ง http ํ๋กํ ์ฝ์ stateless ํ๋กํ ์ฝ์ด๋ผ๋ ์ ์์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด๋ ์๋ต์ ํธ๋ํน ํ์ง ์pyotato-dev.tistory.com์ด์ ๋์์ด ์ ๋งคํ๋ ๋์ useFunnel ๊ณ ์ณ๋ณด๊ธฐ๋ฅผ ์งํํ๋ฉด์ ํผ๋ ์คํญ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ๋ฐฉ๋ฒ์ ๋ํด ๊ณ ๋ฏผํ๋ ์ ์ด ์๊ฐ์ด ๋์ ๋ค๋ค๋ณด๊ณ ์ ํ๋ค. ๊ทธ์ค ์ด์ ์ ์ดํด๋ดค๋ ์ธ์ /๋ก์ปฌ ์คํ ๋ฆฌ์ง ๋ฐ ์ฟ ํค์ ๊ด๋ จํด์ ์ ํํ ์ต์ ์ ๋ํด ์ดํด๋ณด๊ณ ์ ํ๋ค.๐ค ํญ์ด๋ ํ์ด์ง๋ฅผ ๋ซ๊ณ ๋ค์ ์ง์ ํ์ ๊ฒฝ์ฐ, ํด๋น ์ ํ์ฌํญ์ด ์ ์ง๋์ด์ผํ ๊น? ์ญ.. ๋ก์ปฌ ์คํ ๋ฆฌ์ง vs ์ธ์ ์คํ ๋ฆฌ์ง vs ์ฟ ํค http ํ๋กํ ์ฝ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ์ฉ์ดํ๋๋ก ์ค์ํ ํด์ค๋ค. ๋ค๋ง http ํ๋กํ ์ฝ์ stateless ํ๋กํ ์ฝ์ด๋ผ๋ ์ ์์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด๋ ์๋ต์ ํธ๋ํน ํ์ง ์๋๋ค๋ ์ ์ด๋ค. ํด๋น ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก์ปฌ/์ธ์ ์คํ ๋ฆฌ์ง ๋ฐ ์ฟ ํค๋ฅผ ์ฌ์ฉํด์ ์๋ฒ๋ค ๊ฐ์ ์์ฒญ์ ํธ๋ํน ํ ์ ์๋ค.TLDR;ํ๋์ ๋น๊ตํด๋ณด๊ธฐlocal storagesession storagecookie์ ์ฅ ์ฉ๋5MB ~ 10MB๋๋ถ๋ถ 5MB์ต๋ 4KBpersistence๋ธ๋ผ์ฐ์ /ํญ์ ๋ซ์๋ ์ ์ง, ์ง์ ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ญ์ ๋ฅผ ํด์ค์ผ ์ ๊ฑฐ๋๋ค.๋ธ๋ผ์ฐ์ /ํญ์ด ๋ซํ๋ฉด ์ ๊ฑฐ๋จ์ฟ ํค ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค (session-base ๋๋ persist)scopeorigin, ๋๋ฉ์ธ์ด๋ ํ๋กํ ์ฝ์ ์ํด ๊ฐ๊ฐ ์ ์ฅ๋จ.. ๐ฌ React import ์ Wrapper ํจํด ํ์ฉํด๋ณด๊ธฐ ์ต๊ทผ์ ๋ฆฌ์กํธ์์ import ์์ wrapper ํจํด์ ํ์ฉํ๋ค๋ ๊ธ์ ์ฝ์๋ค.lodash๋ Framer Motion๋ฅผ ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋จ์๋ก importํ๋ ์ํฉ์ด ์ข ์ข ์๋ค๊ณ ํ๋ค.์๋ฅผ ๋ค์ด, lodash๋ฅผ > ๊ณผ ๊ฐ์ด importํ๋ ๊ฒฝ์ฐ์ ๊ฐ๋ค.>import _ from 'lodash' -> imported 71.78KB>import debounce from "lodash/debounce"; -> imported 3.41KBimport merge from 'lodash/merge'; -> imported 16KB๋ฌผ๋ก ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ๊ณ ์์ง๋ ์์ง๋ง, ๊ธ์ด์ด๊ฐ ์ธ๊ธํ ๋ฐ์ ๊ฐ์ด, ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ ธ ์๋ ํ์ผ๋ค๋ง๋ค framer-motion๋ className/bind๋ฅผ importํ๊ณ .. ๐ ๊ตฟ๋ฐ์ด CRA (Sunsetting Create React App) TLDR;๋ฆฌ์กํธ ์ฑ์ ์ค์นํ๊ธฐ ์ํด CRA๋ฅผ ์ฌ์ฉํ๊ณ ๊ณ์ จ๋์? ์ด์ ๋ CRA๊ฐ deprecate ๋ฉ๋๋ค.ํด๋น ์ด์ ๋ ํฌ๊ฒ CRA๋ ๋ผ์ฐํ , ๋ฐ์ดํฐ fetching, ์ฝ๋ ์คํ๋ฆฟ์ ์์ฒด์ ์ผ๋ก ์ง์ํ์ง ์์ ์ถ๊ฐ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํด์ผํ๋ค๋ ์ , ์ต๊ทผ ๋ง์ ํ๋ ์์ํฌ๋ค์ด ํด๋น ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ณ ํด๋น ๊ธฐ๋ฅ๋ค์ ์ํด CRA๊ด๋ฆฌ๊ฐ ๋ถํ์ํด์ก๊ธฐ ๋๋ฌธ์ ๋๋ค.ํ๋ ์์ํฌ๋ ๋น๋ ํด๋ก ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๋น๋ก CRA+๋น๋ ํด๋ ์ ํ ๊ฐ๋ฅํ ์ต์ ์ด์ง๋ง ๋ผ์ฐํ , ๋ฐ์ดํฐ fetching, ์ฝ๋ ์คํ๋ฆฟ ๊ธฐ๋ฅ์ “์” ํตํฉํด๋์ Next.js, React Router, Expo์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.์์ ํ๋ ์์ํฌ๋ค์ SSR๊ณผ CSR ์ต์ ๋ชจ๋ ์ ๊ณตํฉ๋๋ค.SSR์ด SEO๋ฟ๋ง.. [Nextjs] Dynamic metadata tag ์์ฑํ๊ธฐ (Part.2) 2025.02.25 - [๐ฉ๐ป๐ป dev] - [Nextjs] Dynamic metadata tag ์์ฑํ๊ธฐ (SEO ์งํ 54 โก๏ธ 91) [Nextjs] Dynamic metadata tag ์์ฑํ๊ธฐ (SEO ์งํ 54 โก๏ธ 91)nextjs๋ก ํด๋ณด๊ณ ์ถ์๋ ๊ฒ์ด ์๋ค๋ฉด Metadata API ๋ฅผ ํ์ฉํด์ ๊ฐ๋จํ๊ฒ metadata tag๋ฅผ ๋ฌ์์ฃผ๋ ๊ฒ ์๋๊น ์ถ๋ค.์ค๋์ ๊ทธ ์ค ํ์ด์ง ํ๋์ ๋ฐ๋ผ ๋ค์ด๋ด๋ฏนํ๊ฒ ๋ฉํํ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋pyotato-dev.tistory.com ์ด์ ์๋ /region ๊ฒฝ๋ก์ ํ์ด์ง๋ค์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฌ์คฌ๋ค.ํ์ง๋ง ๋น์ ์ค๋ณต๋๋ ๋ถ๋ถ์ด ๋ง์ ๊ฑฐ ๊ฐ์์ ์ข ๋ ๊ฐ๊ฒฐํ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋, ์์์ ํ์ด์ง์ ๊ณต์ ํ ๋ฉํ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ธ .. [Nextjs] Dynamic metadata tag ์์ฑํ๊ธฐ (SEO ์งํ 54 โก๏ธ 91) nextjs๋ก ํด๋ณด๊ณ ์ถ์๋ ๊ฒ์ด ์๋ค๋ฉด Metadata API ๋ฅผ ํ์ฉํด์ ๊ฐ๋จํ๊ฒ metadata tag๋ฅผ ๋ฌ์์ฃผ๋ ๊ฒ ์๋๊น ์ถ๋ค.์ค๋์ ๊ทธ ์ค ํ์ด์ง ํ๋์ ๋ฐ๋ผ ๋ค์ด๋ด๋ฏนํ๊ฒ ๋ฉํํ๊ทธ๋ฅผ ์์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ฃจ๊ณ ์ ํ๋ค.Tripie ์ฑ์ ํฌ๊ฒ ๋ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ํธ๋ฆฌํ์์ ์คํฌ๋ํํ ์ฌํ์ง์ ๋ํ ํ, ์ง์ญ ์ ๋ณด๋ ์๋น ์ ๋ณด, ์ฌํ ์ผ์ ํ ๋ฑ์ ์ด๋ํ ์ ์๋ค.์ฑ์งํผํฐ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์์ ๊ธฐํธ์ ๋ฐ๋ผ ์ฌํ์ผ์ ์ ์์ฑํด ์ค๋ค. ์ด ์ค ๋ฉํํ๊ทธ๋ก ์ผ์ ๋ฐ์ดํฐ๋ค์ด ๋ชจ๋ ์ค๋น๋ ์ฒซ ๋ฒ์งธ์ธ ์ฌํ์ง ์ ๋ณด์ ๋ํ ํ์ด์ง๋ค์ ๋ฉํํ๊ทธ๋ฅผ ์ถ๊ฐํด์ฃผ๊ณ ์ ํ๋ค. ๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ฉด, ๋ฉํํ๊ทธ๋ฅผ ๋ฌ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๊ฐ์ง๋ค.Config ๊ธฐ๋ฐ : static metadata object๋ dynami.. Nextjs blurDataUrl dynamicํ๊ฒ ์ ๊ณตํ๊ธฐ ์ค๋๋ง์ ํฌ์คํ ! ์ค๋์ nextjs ์ด๋ฏธ์ง ์ปดํฌ๋ํธ์์ blurDataUrl์ ํ์ฉํด์ ์ด๋ฏธ์ง๊ฐ ์์ ํ ๋ก๋๋๊ธฐ ์ , ํ๋ฆฌ๊ฒ ๋ณด์ด๋๋ก ํ๋ ๋ก๋๋ฅผ ํ์ฉํด ๋ณด๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๊ณ ์ ํ๋ค.์ง๊ธ๊น์ง๋ ์ผ๋ฐ img ํ๊ทธ์ ์ค์ผ๋ ํค์ ํ์ฉํด์ placeholder๋ฅผ ๊ตฌํํ์๋๋ฐ, tripie๋ ์ฌํ ๊ด๋ จ ์ฑ์ด๋ฏ๋ก ์ฌ์ง ์ฝํ ์ธ ๊ฐ ์์ฒญ ๋ง์ ๋ชจ๋ ์ค์ผ๋ ํค์ผ๋ก ๋ก๋ํ๊ธฐ์๋ ๋ณด๊ธฐ์ ์ข์ง ์์๋ค.๋ฐ๋ผ์ ์์ผ๋ก ๋ก๋๋ ์ด๋ฏธ์ง์ blur ์ฒ๋ฆฌ๋ ๋ฒ์ ์ผ๋ก UX๋ฅผ ๋์ด๊ณ ์ ํ๋ฒ ๋ค๋ค๋ณด๊ณ ์ ํ๋ค. blur data url์ ํ์ฉํ Nextjs ์ปดํฌ๋ํธ placeholderBlur Data Url ์ด๋ ์ค์ผ๋ ํค UI๋๋จผ์ blur data url์ด ์ค์ผ๋ ํค ui ๋ณด๋ค ๋ ์ ํฉํ๊ฐ ์ฑ์งํผํฐํํ ๋ฌผ์ด๋ณด์๋ค.โ Pros of Blur Da.. polling mechanism์ผ๋ก react ref ํ์ธํ๊ธฐ ํ๋ก์ ํธ ๋ง๋ฌด๋ฆฌ๋ฅผ ํ๊ณ ์๋ ์ค, ์ ๋๋ก ๋ชจ๋ ๋์๊ฐ๊ณ ์๋ ํ์ธํ๋ค๊ฐ์๋ ํ์ ํ๊ณ ์๋ ์ปดํฌ๋ํธ์ธ Globe์ ๋์์ด ์ด์ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.์ค๋์ ๊ฐ๋จํ๊ฒ useRef์ useEffect์ผ๋ก threejs ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํ๋ ์ปดํฌ๋ํธ๊ฐ reload/refresh ๋์ด๋ ์ ๋๋ก ๋์ํ๋๋ก polling์ ํ์ฉํ ๊ฒ์ ๋ค๋ฃจ๊ณ ์ ํ๋ค.๋ฆฌ๋ก๋ํ๋ฉด ๋์๊ฐ์ผํ๋ ์ง๊ตฌ๋ณธ์ด์ ์ฝ๋'use client';import classNames from 'classnames/bind';import COLORS from 'constants/colors';import dynamic from 'next/dynamic';import { useEffect, useRef } from 'react';import { GlobeMetho.. ์ด์ 1 2 3 4 ยทยทยท 6 ๋ค์