Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

208 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

Next Portfolio๋Š” ๊ธฐ์กด์— React๋กœ ๊ฐœ๋ฐœ๋œ New Portfolio(https://github.com/umsungjun/new_portfolio)๋ฅผ Next.js๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

2๋…„๊ฐ„์˜ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ํ†ตํ•ด ์Šต๋“ํ•œ ๊ธฐ์ˆ ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๋ Œ๋”๋ง ์ตœ์ ํ™”์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ ์ ‘ํ•  ์ˆ˜ ์—†์—ˆ๋˜ Next.js๋ฅผ ํ•™์Šตํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด React ํ”„๋กœ์ ํŠธ์™€์˜ ์ฐจ์ด์  ๋ฐ ๊ฐœ์„ ์ 

1. ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์‹ ๊ฐœ์„ 

๊ธฐ์กด์—๋Š” Google Cloud Sheet๋ฅผ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ฒ˜๋Ÿผ ํ™œ์šฉํ•˜์˜€์œผ๋‚˜, ์‹ค๋ฌด ๊ฒฝํ—˜์„ ์Œ“์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋” ํšจ์œจ์ ์ด๋ผ๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด Supabase๋ฅผ ๋„์ž…ํ•˜์—ฌ Question, Answer ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  Prisma ORM์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

2. CSR๊ณผ SSR์˜ ์ ์ ˆํ•œ ์กฐํ•ฉ

SSR(Server-Side Rendering): ์›น ํ™”๋ฉด์˜ ์ขŒ์ธก ์†Œ๊ฐœ ์˜์—ญ์€ SSR์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

CSR(Client-Side Rendering): ์šฐ์ธก ์งˆ๋ฌธ-๋‹ต๋ณ€ UI(์ฑ„ํŒ… ์˜์—ญ)์€ CSR ๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์›ํ™œํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

3. Next.js ํ™œ์šฉ ๊ทน๋Œ€ํ™”

๊ธฐ์กด React ํ”„๋กœ์ ํŠธ๋Š” CSR ์ค‘์‹ฌ์ด์—ˆ์ง€๋งŒ, Next.js์˜ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ SEO๋ฅผ ์ตœ์ ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Next.js์˜ Metadata API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์–ธ์–ด๋ณ„ title, description, keywords๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ SEO๋ฅผ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

4. ๋ชจ๋ฐ”์ผ ๋ฐ˜์‘ํ˜• ๋Œ€์‘

๋ฐ์Šคํฌํƒ‘์—์„œ๋Š” ์ขŒ์ธก ์†Œ๊ฐœ ์˜์—ญ(@side)๊ณผ ์šฐ์ธก ์ฑ„ํŒ…(@chat)์„ 2๋‹จ์œผ๋กœ ๋ฐฐ์น˜ํ•˜์ง€๋งŒ, ๋ชจ๋ฐ”์ผ(1055px ๋ฏธ๋งŒ)์—์„œ๋Š” ์†Œ๊ฐœ ์˜์—ญ์ด ์ˆจ๊ฒจ์ ธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ฑ„ํŒ… ์ƒ๋‹จ์— ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ยท์†Œ๊ฐœยท์—ฐ๋ฝ์ฒ˜ยท์†Œ์…œ ๋งํฌ์™€ "๋Œ€ํ™” ์‹œ์ž‘ํ•˜๊ธฐ" CTA๋ฅผ ๋‹ด์€ ๋ชจ๋ฐ”์ผ ์ „์šฉ ํžˆ์–ด๋กœ ์ธํŠธ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ณ ์ • ๋„ˆ๋น„์˜€๋˜ ์ฑ„ํŒ… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™”๋ฉด์— ๋งž๊ฒŒ ๋ฐ˜์‘ํ˜•์œผ๋กœ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ ๊ธฐ์ˆ 

Next.js(15.1.4), TypeScript, Tailwind CSS, Zustand, next-intl, Prisma, Supabase

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

Featย : ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ
Fixย : ๋ฒ„๊ทธ๋ฅผ ๊ณ ์นœ๊ฒฝ์šฐ
Docsย : ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
Styleย : ์ฝ”๋“œ ํฌ๋งท ๋ณ€๊ฒฝ, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ˆ˜์ •์ด ์—†๋Š”๊ฒฝ์šฐ
Refactorย : ์ฝ”๋“œ ๋ฆฌํŽ™ํ† ๋ง
Test : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ ๋ฆฌํŒฉํ† ๋ง
Choreย : ๋นŒ๋“œ ์—…๋ฌด ์ˆ˜์ •, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •
Designย : CSS ๋“ฑ UI ๋””์ž์ธ ๋ณ€๊ฒฝ
Renameย : ํŒŒ์ผ๋ช…(or ํด๋”๋ช…) ์ˆ˜์ •
Removeย : ์ฝ”๋“œ(ํŒŒ์ผ) ์‚ญ์ œ

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ๊ธฐ๋ก

1. Hydration failed ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๋ฌธ์ œ์ : .env ํŒŒ์ผ์—์„œ PUBLIC_PHONE_NUMBER๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ Hydration ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
- ๊ธฐ์กด `.env` ํŒŒ์ผ์— ์žˆ์—ˆ๋˜ ์ƒ์ˆ˜ `PUBLIC_PHONE_NUMBER`๋ฅผ `NEXT_PUBLIC_PHONE_NUMBER`๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ
- `NEXT_PUBLIC_PHONE_NUMBER`๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ, `PHONE_NUMBER`๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

๐Ÿ“Œ ์ฐธ๊ณ  ๋ฌธ์„œ: [Next.js Hydration Error] (https://nextjs.org/docs/messages/react-hydration-error)

2. next-intl์˜ getTranslations ์ž‘๋™ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๋ฌธ์ œ์ : ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ getTranslations() ์ž‘๋™ ์˜ค๋ฅ˜

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
- getTranslations()์— locale ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ์ „๋‹ฌ

export default async function Side({ params }: SideProps) {
  const { locale } = await params;
  const t = await getTranslations({ locale });
}

3. Next.js 15.2.3์—์„œ generateMetadata ํ•จ์ˆ˜ ์ž‘๋™ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

๋ฌธ์ œ์ : Next.js 15.2.3์—์„œ generateMetadata ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
- Next.js ๋ฒ„์ „์„ 15.1.4๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ •์ƒ ๋™์ž‘ ํ™•์ธ
- Next.js์˜ Metadata API๋ฅผ ํ™œ์šฉํ•˜์—ฌ SEO ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋„๋ก ์ˆ˜์ •
- ๋‹ค๊ตญ์–ด ์ง€์›์„ ์œ„ํ•ด locale์— ๋”ฐ๋ผ title, description, keywords ๋“ฑ์„ ์„ค์ •

About

๐Ÿ˜— Next Portfolio๋Š” ๊ธฐ์กด์— React๋กœ ๊ฐœ๋ฐœ๋œ New Portfolio(https://github.com/umsungjun/new-portfolio-react) ๋ฅผ Next.js๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ์•ฝ 3๋…„๊ฐ„์˜ ์‹ค๋ฌด ๊ฒฝํ—˜์„ ํ†ตํ•ด ์Šต๋“ํ•œ ๊ธฐ์ˆ ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๋ Œ๋”๋ง ์ตœ์ ํ™”์— ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค๋ฌด์—์„œ ์ ‘ํ•  ์ˆ˜ ์—†์—ˆ๋˜ Next.js๋ฅผ ํ•™์Šตํ•˜๊ณ  ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages