yyezzzy 2025. 1. 13. 19:55

 

์›Œํฌ๋ฃจํŠธ | ๊ตฌ์ธ๊ตฌ์ง ํ”Œ๋žซํผ

๊ฐ„ํŽธํ•œ ์•Œ๋ฐ” ๊ตฌ์ธ๊ตฌ์ง ํ”Œ๋žซํผ, ์›Œํฌ๋ฃจํŠธ์—์„œ ์‹œ์ž‘ํ•˜์„ธ์š”.

www.workroot.life

 

1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

ํ•œ ๋‹ฌ์„ ๋น ๋“ฏํ•˜๊ฒŒ ๋ณด๋‚ธ 2024๋…„์˜ ๋งˆ์ง€๋ง‰ โœจ ๋“œ๋””์–ด ์‹ฌํ™” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํšŒ๊ณ ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚˜๊ณ  2์ฃผ ํ›„์— ์ž‘์„ฑ ์ค‘..

์‹ฌํ™”ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๊ตฌํ˜„ํ–ˆ๋˜ ๊ฒƒ๋“ค๊ณผ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋Š”์ง€, ๋ฐฐ์šด ๊ฒƒ๋“ค์€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ํšŒ๊ณ ๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด๋ ค ํ•œ๋‹ค.

- ํ”„๋กœ์ ํŠธ๋ช…: WorkRoot (์›Œํฌ๋ฃจํŠธ)
- ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„: 2024.11.22 ~ 2024.12.30
- ํŒ€ ๊ตฌ์„ฑ: ํ”„๋ก ํŠธ์—”๋“œ 4๋ช…
- GitHub ํŒ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋งํฌ

 

GitHub - FE9-2/workroot: FE9-2ํŒ€) ๐ŸŒณ "์ผ"์„ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฟŒ๋ฆฌ๋ฅผ ๋‚ด๋ฆฌ๋ฉฐ "์„ฑ์žฅ"ํ•˜๋Š” ๊ตฌ์ธ๊ตฌ์ง ์‚ฌ์ดํŠธ

FE9-2ํŒ€) ๐ŸŒณ "์ผ"์„ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฟŒ๋ฆฌ๋ฅผ ๋‚ด๋ฆฌ๋ฉฐ "์„ฑ์žฅ"ํ•˜๋Š” ๊ตฌ์ธ๊ตฌ์ง ์‚ฌ์ดํŠธ. Contribute to FE9-2/workroot development by creating an account on GitHub.

github.com

 

2. ๊ธฐ์ˆ ์Šคํƒ ์„ ์ • ์ด์œ ์™€ ๊ณ ๋ฏผ

  • Next.js App Router
    • Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)๊ณผ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ(SSG)์„ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. Workroot ํ”„๋กœ์ ํŠธ๋Š” ๋น ๋ฅธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์™€ SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)๊ฐ€ ์ค‘์š”ํ•œ ๋งŒํผ Next.js๋ฅผ ์„ ํƒํ•˜์—ฌ ํผํฌ๋จผ์Šค์™€ SEO๋ฅผ ๋ชจ๋‘ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๋˜ํ•œ, ๋‚ด์žฅ๋œ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ๊ณผ API ๋ผ์šฐํŠธ๋ฅผ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • TypeScript
    • TypeScript๋Š” JavaScript์˜ ์ •์  ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์ œ๊ณตํ•˜์—ฌ ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด TypeScript๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํŠนํžˆ, ํ˜‘์—… ์‹œ ํƒ€์ž… ์ •์˜๋ฅผ ํ†ตํ•ด ํŒ€์›๋“ค ๊ฐ„ ์˜์‚ฌ์†Œํ†ต ๋น„์šฉ์„ ์ค„์ด๋Š” ๋ฐ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค.
  • ReactQuery
    • React Query๋Š” ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๋ฐ์ดํ„ฐ ํŽ˜์นญ๊ณผ ์บ์‹ฑ, ๋ฆฌํŽ˜์นญ ๋“ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. Workroot ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ API ์š”์ฒญ์ด ๋งŽ์•˜๊ธฐ ๋•Œ๋ฌธ์— React Query๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • React Hook Form
    • React Hook Form์€ ํผ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋ฆฌ๋ Œ๋”๋ง๊ณผ ๊ฐ„๊ฒฐํ•œ API ๋•๋ถ„์— ํผํฌ๋จผ์Šค๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ๋ณต์žกํ•œ ํผ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ๊ณผ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ ๋„ ํฐ ์žฅ์ ์œผ๋กœ ์ž‘์šฉํ–ˆ๋‹ค.
  • Tailwind CSS
    • Tailwind CSS๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ CSS ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๋น ๋ฅด๊ณ  ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. CSS-in-JS ๋ฐฉ์‹๋ณด๋‹ค ๊ฐ€๋ฒผ์šด ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ด ์œ ์—ฐํ•ด์„œ Workroot์˜ ๋ธŒ๋žœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ์— ๋งž๋Š” UI/UX๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • Supabase
    • Supabase๋Š” Firebase์˜ ์˜คํ”ˆ์†Œ์Šค ๋Œ€์•ˆ์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์™€ ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” Backend-as-a-Service ํ”Œ๋žซํผ์ด๋‹ค. PostgreSQL ๊ธฐ๋ฐ˜์œผ๋กœ ๋†’์€ ํ™•์žฅ์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋น„์šฉ๊ณผ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค. ํŠนํžˆ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์™€ ๊ฐ„๋‹จํ•œ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์œ ์šฉํ–ˆ๋‹ค.
  •  Framer Motion
    • Framer Motion์€ React ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ์„ธ๋ จ๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํŽ˜์ด์ง€ ์ „ํ™˜, ๋“œ๋กญ๋‹ค์šด, ๋ฒ„ํŠผ ์ธํ„ฐ๋ž™์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ UI ์š”์†Œ์— ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๋ถ€๋“œ๋Ÿฝ๊ณ  ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ ํƒํ–ˆ๋‹ค. 

 

๐Ÿค” App Router + React Query ์กฐํ•ฉ์„ ์„ ํƒํ•œ ์ด์œ 

1. ํŒ€์˜ ๊ธฐ์ˆ  ์—ญ๋Ÿ‰๊ณผ ์•ˆ์ •์„ฑ ๊ณ ๋ ค

Workroot ํ”„๋กœ์ ํŠธ๋Š” ํŒ€์›๋“ค์ด ์ต์ˆ™ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ํ™œ์šฉํ•ด ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ–ˆ๋‹ค. App Router์˜ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(Server Components)๋Š” Next.js 13๋ถ€ํ„ฐ ๋„์ž…๋œ ์ตœ์‹  ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋™์  ๊ฒฝ๋กœ์™€ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ƒํƒœ ๊ด€๋ฆฌ ๋“ฑ์˜ ๋ณต์žก์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ–ˆ๋‹ค.

์ด ๋‚ด์šฉ์ด ๊ธฐ์กด ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•ด ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ํ•™์Šต ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ์กด์žฌํ•  ๊ฑฐ๋ผ ํŒ๋‹จํ–ˆ๊ณ  ํ•œ์ •๋œ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ๋‚ด์—์„œ ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ์ฆ๊ฐ€๋กœ ์ด์–ด์งˆ ๊ฑฐ๋ผ ํŒ๋‹จํ–ˆ๋‹ค.

์ด์— ๋ฐ˜ํ•ด React Query๋Š” ํŒ€์ด ์ด๋ฏธ ์ˆ™๋ จ๋˜์–ด ์žˆ๋Š” ๊ธฐ์ˆ ๋กœ, ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ณต์žกํ•œ ํ•™์Šต ๊ณผ์ •์„ ์ƒ๋žตํ•˜์˜€๋‹ค.

2. React Query์˜ ๊ฒ€์ฆ๋œ ์ƒํƒœ ๊ด€๋ฆฌ

React Query๋Š” ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์บ์‹ฑ, ๋ฆฌํŽ˜์นญ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด, ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ์— ์ ํ•ฉํ–ˆ๋‹ค. App Router์˜ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™œ์šฉํ•  ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ์˜ ๊ฒฝ๊ณ„๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, React Query๋Š” ์ด๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•ด ์ค€๋‹ค.

 

์•„์‰ฌ์šด ์ 

์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ ๋Ÿฌ๋‹์ปค๋ธŒ ๋•Œ๋ฌธ์— App Router + React Query ์กฐํ•ฉ์„ ์„ ํƒํ•œ ๊ฒƒ.

Next.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ค‘์— ํŒ€ ๋‚ด ์„œ๋ฒ„์ปดํฌ๋„ŒํŠธ์˜ ํ•™์Šต ๊ฒฝํ—˜ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์˜ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์ตํžˆ๊ธฐ ์œ„ํ•ด์„œ ํ•™์Šตํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.

๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ๊ทน ๋„์ž…ํ•˜๊ณ , ์ง€์†์ ์ธ ๊ณต๋ถ€๋ฅผ ํ†ตํ•ด ๋Ÿฌ๋‹ ์ปค๋ธŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.

์ž˜ํ•œ ์ 

1. CI/CD ๋„์ž…

 

์ด์ „์—๋Š” ์‚ฌ์šฉํ•ด๋ณด์ง€ ๋ชปํ•œ github action CI/CD, storybook ๊ฒฝํ—˜์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

GitHub Actions๋กœ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•œ ๊ฒฐ๊ณผ, ์ฝ”๋“œ ๋ณ‘ํ•ฉ ํ›„ ๋ฐฐํฌ ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ณ , ๋ฐฐํฌ ์•ˆ์ •์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ๋‹ค.

 

2. Storybook ํ™œ์šฉ

์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœํ•  ๋•Œ /test/1 ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค. storybook์„ ์‚ฌ์šฉํ•œ ํ›„์—๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ํŽธ๋ฆฌํ–ˆ๋‹ค.

 

3. React Query์˜ ์žฅ์  ํ™œ์šฉ

React Query๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์บ์‹ฑ๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ฐ„์†Œํ™”ํ•จ์œผ๋กœ์จ API ํ˜ธ์ถœ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๐Ÿ“Ž ํšจ์œจ์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์บ์‹ฑ

  • React Query๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • ๋กœ๊ทธ์ธ ํ›„ useLogin ํ›…์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์— ์ €์žฅํ•˜๊ณ , ์ดํ›„ ํŽ˜์ด์ง€์—์„œ ๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ ์—†์ด ํ™œ์šฉํ•จ
  • queryClient.invalidateQueries์™€ queryClient.setQueryData๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•ด API ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‹œ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”(๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€)ํ•˜๊ฑฐ๋‚˜, ์บ์‹œ๋ฅผ ์ง์ ‘ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”

๐Ÿ“Ž ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ

  • Axios ์—๋Ÿฌ๋ฅผ onError์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ ์ ˆํ•œ ํ† ์ŠคํŠธ ๋ฉ”์„ธ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํ•œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

๐Ÿ“Ž ๋ฌดํ•œ ์Šคํฌ๋กค ๊ตฌํ˜„

  • useInfiniteQuery๋ฅผ ํ™œ์šฉํ•ด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์— ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„
  • getNextPageParam์„ ์‚ฌ์šฉํ•ด ๋‹ค์Œ ํŽ˜์ด์ง€์˜ ์ปค์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กคํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”

๐Ÿ“Ž ์บ์‹œ ์„ค์ •์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • staleTime๊ณผ gcTime ์„ค์ •์œผ๋กœ ์„œ๋ฒ„ ์š”์ฒญ์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์žฌ๋กœ๋”ฉ ๋ฐฉ์ง€
  • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์ฒ˜๋Ÿผ ์ž์ฃผ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด 5๋ถ„์˜ ์œ ํšจ ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด UX๋ฅผ ํ–ฅ์ƒ

๐Ÿ“Ž OAuth ๋ฐ ์ธ์ฆ ํ›…์˜ ํ™•์žฅ์„ฑ

 

  • ๋กœ๊ทธ์ธ ๋ฐ OAuth ํ›…์„ ์ž‘์„ฑํ•˜์—ฌ ์ธ์ฆ ๊ด€๋ จ ๋กœ์ง์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌ
  • ์ธ์ฆ ์„ฑ๊ณต ํ›„ ํ™ˆ ํ™”๋ฉด์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ฑฐ๋‚˜, ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ฆ‰์‹œ ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„

 

4. Sitemap์œผ๋กœ ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”(SEO) 100% ๋‹ฌ์„ฑ

๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ 1๋“ฑ !!

 

Next.js์˜ next-sitemap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ๋™์  ๊ฒฝ๋กœ์™€ ์ •์  ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ Sitemap์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์˜€๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋Ÿฌ๊ฐ€ ์‚ฌ์ดํŠธ ๊ตฌ์กฐ๋ฅผ ์ •ํ™•ํžˆ ์ธ์‹ํ•˜๋„๋ก ์ตœ์ ํ™”ํ–ˆ๋‹ค.

์ดˆ๊ธฐ์—๋Š” ์ผ๋ถ€ ๋™์  ํŽ˜์ด์ง€๊ฐ€ ๊ฒ€์ƒ‰์—”์ง„์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ Sitemap ์ƒ์„ฑ ์ดํ›„ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์ƒ‰์ธ๋˜์—ˆ๋‹ค.

robots.txt์— Sitemap ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•˜๊ณ  ์ค‘์š”๋„๊ฐ€ ๋‚ฎ์€ ํŽ˜์ด์ง€๋Š” ํฌ๋กค๋Ÿฌ๊ฐ€ ์ ‘๊ทผํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด, ๊ฒ€์ƒ‰์—”์ง„ ํฌ๋กค๋ง ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ–ˆ๋‹ค.

์‚ฌ์šฉ์ž 21๋ช… ์ฆ๊ฐ€

Sitemap ์ ์šฉ ํ›„ Google Search Console์—์„œ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ์ƒ‰์ธ๋˜์—ˆ๊ณ , ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ์ดํ›„ ์‚ฌ์ดํŠธ ํŠธ๋ž˜ํ”ฝ์ด ์ฆ๊ฐ€ํ•˜๋Š” ์„ฑ๊ณผ๋ฅผ ์ด๋ฃจ์—ˆ๋‹ค ๐ŸŽ‰