Skip to content

Repository files navigation

WeWrite

κ΅­λ‚΄ 500만 μ΄μƒμ˜ μ΄μš©μžκ°€ μ¦κΈ°λŠ” μ›Ήμ†Œμ„€!
재밌게 글을 읽닀 보면 "μ•„! μ΄λ•Œ μ΄λ ‡κ²Œ μ§„ν–‰λ˜λ©΄ μž¬λ°Œμ„ 것 같은데!" 이런 생각 ν•œ 번쯀 해본적 μ—†μœΌμ‹ κ°€μš”?

β€œμ°½μž‘μ€ μ–΄λ ΅κ³  λΆ€λ‹΄μŠ€λŸ½λ‹€β€λŠ” νŽΈκ²¬μ„ κΉ¨κ³ ,
λˆ„κ΅¬λ‚˜ μ‰½κ²Œ μ’‹μ•„ν•˜λŠ” 이야기λ₯Ό λ§Œλ“€μ–΄κ°ˆ 수 μžˆλŠ” 창ꡬλ₯Ό λ§Œλ“€μžλŠ” μ•„μ΄λ””μ–΄μ—μ„œ 이 ν”„λ‘œμ νŠΈλŠ” μ‹œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

WeWriteλŠ” λˆ„κ΅¬λ‚˜ μž‘κ°€κ°€ λ˜μ–΄, λ‹€λ₯Έ μ‚¬λžŒλ“€κ³Ό ν•¨κ»˜ 이야기λ₯Ό 이어 μ“°λ©° λ§Œλ“€μ–΄κ°€λŠ” μ°Έμ—¬ν˜• μŠ€ν† λ¦¬ν…”λ§ ν”Œλž«νΌμž…λ‹ˆλ‹€.

πŸ“„ λͺ©μ°¨

  1. πŸ“’ 배포 μ£Όμ†Œ
  2. βš™ 기술 μŠ€νƒ
  3. 🚩 νŒ€μ›
  4. πŸ’¬ ν™œλ°œν•œ μ†Œν†΅κ³Ό ν† λ‘  λ¬Έν™”
  5. πŸš€ Front End에 λ”ν•΄μ„œ λ°±μ—”λ“œμ™€ λ””μžμΈκΉŒμ§€
  6. πŸ’„ 라이브러리λ₯Ό μ΅œμ†Œν™”ν•˜κ³  UI μ»΄ν¬λ„ŒνŠΈλ₯Ό 섀계
  7. πŸ™‹β€β™€οΈ μ‚¬μš©μž ν”Όλ“œλ°± 반영
  8. πŸ‘¨β€πŸ’» ν–₯ν›„ μ—…λ°μ΄νŠΈ κ³„νš
  9. βš– λΌμ΄μ„ μŠ€

πŸ“’ 배포 μ£Όμ†Œ

@we-write.netlify.app

βš™ 기술 μŠ€νƒ

μ–Έμ–΄ TypeScript
ν”„λ ˆμž„μ›Œν¬ Next.js15
라이브러리 React19, TailWindCSS, TipTap, etc.
μƒνƒœκ΄€λ¦¬ Context API, Tanstack Query, React Hook Form, Zustand
λ°μ΄ν„°λ² μ΄μŠ€ Codeit API, Supabase
ν˜‘μ—… 도ꡬ Notion, StoryBook, Husky
ν…ŒμŠ€νŠΈ Jest

🚩 νŒ€μ›

홍λͺ…ν—Œ(myeongheonhong)

κ°•μˆ˜μ˜(swimmingRiver)

κΉ€μ§€ν˜(juyesu)

μž₯ν•œμ˜₯(hoxey2Front)

πŸ’¬ ν™œλ°œν•œ μ†Œν†΅κ³Ό ν† λ‘  λ¬Έν™”

ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜λ©΄μ„œ 각자의 λͺ©ν‘œκ°€ μžˆμ—ˆμ§€λ§Œ, κ³΅ν†΅μ μœΌλ‘œ 곡감을 ν˜•μ„±ν•œ λͺ©ν‘œλŠ”
"적극적으둜 μ†Œν†΅ν•˜κ³  νŒ€ ν”„λ‘œμ νŠΈμ—μ„œλ§Œ κ²½ν—˜ν•  수 μžˆλŠ” 것듀을 많이 μ–»μ–΄κ°€μž" μ˜€μŠ΅λ‹ˆλ‹€.

이λ₯Ό μ§€ν‚€κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 κ·œμΉ™λ“€μ„ μ‹œν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

  1. 맀일 μ΅œμ†Œ 1회의 데일리 μŠ€ν¬λŸΌμ„ λ°˜λ“œμ‹œ μ§„ν–‰ν•˜λ©΄μ„œ 개인의 μ§„ν–‰ 사항과 κ³„νš, 이슈λ₯Ό κ³΅μœ ν•˜κΈ°
  2. κ·Όκ±° μžˆλŠ” μ»¨λ²€μ…˜μ„ λ§Œλ“€κΈ°. 그리고 μƒˆλ‘œμš΄ νŒ€μ˜ 룰이 ν•„μš”ν•˜λ‹€λ©΄ 자유둭게 μ œμ•ˆν•˜κΈ°
  3. λ‹€λ₯Έ μ‚¬λžŒμ΄ μž‘μ„±ν•œ μ½”λ“œλ„ λ‚΄κ°€ μ“΄ μ½”λ“œμ²˜λŸΌ. κΌΌκΌΌν•œ PR리뷰 μž‘μ„±ν•˜κΈ°

ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ κ²ͺλŠ” μ–΄μ°Œλ³΄λ©΄ μ‚¬μ†Œν•  수 μžˆλŠ” 고민도 κ°€λ³κ²Œ λ„˜μ–΄κ°€μ§€ μ•Šκ³ 
ν™œλ°œν•˜κ²Œ ν† λ‘ ν•˜λ©° μ˜λ―ΈμžˆλŠ” 결정을 λ‚΄λ¦¬λŠ” λ¬Έν™”λ₯Ό μ‘°μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

ν”„λ‘œμ νŠΈ μ§„ν–‰ 쀑 토둠이 이루어진 μ˜μ œλ‘œλŠ” λ‹€μŒκ³Ό 같은 μ˜ˆμ‹œλ“€μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  • 미래의 ν™•μž₯성을 κ³ λ €ν•œ 개발 vs ν˜„μž¬μ˜ μš”κ΅¬μ‚¬ν•­μ— λΆ€ν•©ν•˜λŠ” 개발
  • μ „μ—­ μƒνƒœλ₯Ό ν†΅ν•œ 인증 정보 관리 vs useQuery의 캐싱을 ν†΅ν•œ 인증 정보 관리
  • ν•¨μˆ˜μ˜ 단일 μ±…μž„ 원칙(SRP) μ€€μˆ˜ vs μž¬μ‚¬μš©λ³΄λ‹€λŠ” μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜κΈ° μœ„ν•œ ν•¨μˆ˜ μ„ μ–Έμ˜ μ΅œμ†Œν™”
  • TypeScript의 νƒ€μž… μžλ™ 좔둠이 μ΄λ£¨μ–΄μ§ˆ λ•Œμ˜ νƒ€μž… λͺ…μ‹œλŠ” λͺ…ν™•μ„±μ˜ 증가 vs λΆˆν•„μš”ν•œ 쀑볡

이처럼 정닡이 μ •ν•΄μ Έ μžˆμ§€ μ•Šμ€ μ£Όμ œλΌλ„, λ‹¨μˆœνžˆ λ„˜μ–΄κ°€μ§€ μ•Šκ³ 
각 선택에 κ·Όκ±°λ₯Ό κ°€μ§€κ³  νŒλ‹¨ν•˜λ € λ…Έλ ₯ν–ˆμŠ΅λ‹ˆλ‹€.

πŸš€ Front End에 λ”ν•΄μ„œ λ°±μ—”λ“œμ™€ λ””μžμΈκΉŒμ§€

ν”„λ‘œμ νŠΈ 초기 섀계 κ³Όμ •μ—μ„œ λ‹€μ–‘ν•˜κ³  μž¬λ°ŒλŠ” 아이디어듀이 μ œμ‹œλ˜μ—ˆμ§€λ§Œ
이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” UI λ””μžμΈκ³Ό 데이터 λ² μ΄μŠ€κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

νŒ€μ— λ””μžμ΄λ„ˆλ„ μ—†κ³ , λ°±μ—”λ“œ κ°œλ°œμžλ„ μ—†μœΌλ‹ˆ 기본으둜 μ œκ³΅λ˜λŠ” λͺ…μ„Έλ§Œ λ”°λΌκ°ˆ μˆ˜λ„ μžˆμ—ˆμ§€λ§Œ
μš°λ¦¬κ°€ ν•˜κ³  싢은걸 ν•΄μ•Ό 더 즐겁고, λͺ¨λ‘κ°€ 적극적으둜 κ°œλ°œμ— μ°Έμ—¬ν•  수 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.

이에 ν•œμ •λœ μ‹œκ°„μ΄μ§€λ§Œ 일과 후와 주말을 ν‹ˆν‹ˆνžˆ ν™œμš©ν•˜μ—¬ Figma와 Supabaseλ₯Ό κ³΅λΆ€ν•˜κ³ 
이번 ν”„λ‘œμ νŠΈμ— λ„μž…ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

데이터 베이슀

μŠ€ν† λ¦¬λ₯Ό νŒ€μ›λ“€κ³Ό 이어쓰기 μœ„ν•΄, κΈ€μ˜ λŒ€κΈ° μƒνƒœ, 승인 마감 μ‹œκ°„, 승인자 정보λ₯Ό
유기적으둜 관리할 수 μžˆλŠ” μŠ€ν‚€λ§ˆ 섀계에 곡을 λ“€μ˜€μŠ΅λ‹ˆλ‹€.
잘λͺ»λœ μŠ€ν‚€λ§ˆλŠ” 전체 μš”μ²­ ꡬ쑰 μˆ˜μ •μœΌλ‘œ 이어져 개발 μžμ›μ„ λ‚­λΉ„ν•  수 있기 λ•Œλ¬Έμ—,
νŒ€μ›λ“€κ³Ό μΆ©λΆ„νžˆ λ…Όμ˜ν•˜κ³  ν˜„μ—… λ©˜ν† λ‹˜μ˜ 쑰언도 λ°›μœΌλ©° μ‹ μ€‘νžˆ μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ DB둜 λΆ€ν„° 데이터λ₯Ό μš”μ²­ 및 μˆ˜μ •ν•˜λŠ” 과정을 효율적으둜 μ§„ν–‰ν•˜κΈ° μœ„ν•΄μ„œ
μ—λŸ¬ 핸듀링을 μœ„ν•œ 곡톡 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆκ³ , CLI둜 ν…Œμ΄λΈ” 기반 νƒ€μž… μžλ™ 생성 κΈ°λŠ₯을 ν™œμš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μŠ€ν‚€λ§ˆ νŒ€μ›λ“€μ—κ²Œ 지식 곡유
DBμŠ€ν‚€λ§ˆ νŒ€μ›λ“€μ—κ²Œ DB 지식 곡유

Figma UI

μƒˆλ‘œμš΄ νŽ˜μ΄μ§€μ™€ ν”„λ‘œμ νŠΈ λͺ…세에 λ§žλŠ” μ»΄ν¬λ„ŒνŠΈ UIλ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•΄ Figmaλ₯Ό ν™œμš©ν–ˆμŠ΅λ‹ˆλ‹€.
μ •κ΅ν•œ λ ˆμ΄μ•„μ›ƒμ΄λ‚˜ λ””μžμΈκΉŒμ§€λŠ” μ œμž‘ν•˜κΈ° μ–΄λ €μ› μ§€λ§Œ,
λŸ¬ν”„ν•œ μ‹œμ•ˆμ„ λ°”νƒ•μœΌλ‘œλ„ νŒ€μ›λ“€κ³Ό λ°©ν–₯성을 λ…Όμ˜ν•˜κ³  μ˜λ„λ₯Ό κ³΅μœ ν•˜λŠ” 데 도움이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

νŒ€μ› κ°μžκ°€ Figmaλ₯Ό κ³΅λΆ€ν•˜κΈ° λ³΄λ‹€λŠ” 기쑴에 μ‚¬μš©ν•΄λ³Έ κ²½ν—˜μ΄ μžˆκ±°λ‚˜,
이번 κΈ°νšŒμ— 곡뢀λ₯Ό μ§„ν–‰ν•œ νŒ€μ›μ΄ ν•„μš”ν•œ λ‹¨μΆ•ν‚€λ‚˜ κΈ°λŠ₯을 κ³΅μœ ν•΄μ£ΌλŠ” 방식을 μ±„νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€.

UI μ‹œμ•ˆ νŒ€μ›λ“€μ—κ²Œ 지식 곡유
UI μ‹œμ•ˆ νŒ€μ›λ“€μ—κ²Œ DB 지식 곡유

πŸ’„ 라이브러리λ₯Ό μ΅œμ†Œν™”ν•˜κ³  UI μ»΄ν¬λ„ŒνŠΈλ₯Ό 섀계

개발 초기, 곡톡 μ»΄ν¬λ„ŒνŠΈ κ΅¬ν˜„μ„ μœ„ν•΄ headlessUIλ‚˜ shadcnκ³Ό 같은 라이브러리 λ„μž…μ„ κ³ λ―Όν–ˆμŠ΅λ‹ˆλ‹€.
라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ 개발 μ‹œκ°„μ΄ λ‹¨μΆ•λ˜κ³  완성도λ₯Ό 높일 수 μžˆλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ,
μ£Όλ‹ˆμ–΄ κ°œλ°œμžλ‘œμ„œ 직접 κ΅¬ν˜„ν•˜λ©° λ°œμƒν•˜λŠ” λ¬Έμ œλ“€μ„ κ²½ν—˜ν•˜λŠ” 것도 κ°€μΉ˜ μžˆλŠ” ν•™μŠ΅ κΈ°νšŒκ°€ 될 것이라
νŒλ‹¨ν•΄ 직접 κ°œλ°œν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

라이브러리 없이 κ΅¬ν˜„ν•œ μ»΄ν¬λ„ŒνŠΈ μ˜ˆμ‹œ 직접 κ΅¬ν˜„ν•œ μ»΄ν¬λ„ŒνŠΈ

μ»΄ν¬λ„ŒνŠΈλ“€μ„ 섀계 ν•˜λ©΄μ„œ ν™•μž₯μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ κ³ λ €ν•˜λ©° μƒˆλ‘œμš΄ 기획이 μΆ”κ°€λ˜λ”λΌλ„ μ‰½κ²Œ λŒ€μ‘λ  수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
λ˜ν•œ 곡톡 μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬ν˜„ ν›„μ—λŠ” λ‹€λ₯Έ νŒ€μ›λ“€μ΄ μ‰½κ²Œ UIλ₯Ό ν™•μΈν•˜κ³  λ™μž‘μ„ ν…ŒμŠ€νŠΈν•΄λ³Ό 수 μžˆλ„λ‘ StoryBook νŒŒμΌμ„ ν•¨κ»˜
μƒμ„±ν•˜μ—¬ κ³΅μœ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

TipTap을 μ‚¬μš©ν•œ ν…μŠ€νŠΈ 에디터 κ΅¬ν˜„

λŒ€λΆ€λΆ„μ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό λΌμ΄λΈŒλŸ¬λ¦¬μ—†μ΄ κ΅¬ν˜„ν–ˆμ§€λ§Œ, ν•œ κ°€μ§€ 리치 ν…μŠ€νŠΈ 에디터(WYSIWYG)의 경우
μ‚¬μ΄νŠΈμ˜ νŠΉμ§•μƒ μ‚¬μš©μžκ°€ 글을 μž‘μ„±ν•˜λŠ” 뢀뢄이 높은 μ€‘μš”λ„λ₯Ό 가지기도 ν•˜κ³ , 라이브러리 없이 κ΅¬ν˜„ν•˜λŠ”
데에 높은 개발 μžμ›μ΄ μ†Œλͺ¨λ  것이라고 νŒλ‹¨ν•˜μ—¬ TipTap 라이브러리λ₯Ό λ„μž…ν•˜κ³  ν•΄λ‹Ή 라이브러리의
μ»€μŠ€ν…€ Extension 을 ν™œμš©ν•˜μ—¬ 에디터에 ν•„μš”ν•œ κΈ°λŠ₯을 직접 κ΅¬ν˜„ν•˜λŠ” 방식을 μ±„νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€.

직접 κ΅¬ν˜„ν•œ μ»΄ν¬λ„ŒνŠΈ κ°œλ°œμ„ μ§„ν–‰ν•˜λŠ” μ‚¬λžŒμ΄ νŒ€μ›λ“€μ—κ²Œ νŠΉμ • 라이브러리λ₯Ό λ„μž…ν•˜λŠ” λ°°κ²½κ³Ό κ·Όκ±°λ₯Ό μ„€λͺ…ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό κ±°μ³μ„œ
λͺ¨λ‘κ°€ ν”„λ‘œμ νŠΈ 내에 μ–΄λ–€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€, μ™œ μ‚¬μš©λ˜μ—ˆλŠ”μ§€λ₯Ό μ΄ν•΄ν•˜κ³  λ„˜μ–΄κ°ˆ 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™€οΈ μ‚¬μš©μž ν”Όλ“œλ°± 반영

⏳ λ‘œλ”© μ„±λŠ₯ κ°œμ„  μ§„ν–‰

κ°€μž₯ λ§Žμ€ ν”Όλ“œλ°±μ„ 받은 λΆ€λΆ„μ΄μž, κ°œλ°œν•˜λŠ” κ³Όμ •μ—μ„œλ„ νŒ€μ› λͺ¨λ‘κ°€ μ²΄κ°ν•˜λ˜ λ¬Έμ œλŠ” λ°”λ‘œ 느린 λ‘œλ”© μ†λ„μ˜€μŠ΅λ‹ˆλ‹€.
μ €ν¬λŠ” 이 문제의 원인을 λ‹€μŒ 2κ°€μ§€λ‘œ μΆ”μΈ‘ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

  1. 첫 νŽ˜μ΄μ§€ λ Œλ”λ§ μ‹œμ— λ„ˆλ¬΄ λ§Žμ€ API 호좜이 λ°œμƒν•œλ‹€.
  2. μŠ€ν† λ¦¬κ·Έλ£Ή, 곡개된 μŠ€ν† λ¦¬ νŽ˜μ΄μ§€μ—μ„œ λ§Žμ€ 이미지λ₯Ό μ„œλ²„μ—μ„œ λΆˆλŸ¬μ˜€λŠ” κ³Όμ •μ—μ„œ 지연이 λ°œμƒν•œλ‹€.

λ¨Όμ € 첫 번째 원인은 μ„œλ‘œ λ‹€λ₯Έ 2개의 APIλ₯Ό ν˜Όμš©ν•΄μ„œ μ‚¬μš©ν•˜λŠ” κ΅¬μ‘°μ—μ„œ λΉ„λ‘―λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μœ μ € μ •λ³΄λŠ” Dallaem APIμ—μ„œ, μŠ€ν† λ¦¬ μ„€μ • μ •λ³΄λŠ” Supabase DBμ—μ„œ 각각 가져와야 ν•˜κ³ 
ν•œ 호좜 κ²°κ³Όλ₯Ό λ‹€λ₯Έ 호좜의 νŒŒλΌλ―Έν„°λ‘œ μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ μ—¬λŸ¬κ°œμ˜ 호좜이 끝날 λ•ŒκΉŒμ§€ 화면이 ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€.

이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ μ œμ•ˆλœ λ°©μ•ˆμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. Dallaem API μ˜μ‘΄λ„λ₯Ό 쀄이고, 자체 Supabase ν…Œμ΄λΈ”λ‘œ 데이터λ₯Ό 이전&κ΄€λ¦¬ν•˜μ—¬ 호좜 횟수λ₯Ό κ°μ†Œ (μ§„ν–‰ 쀑)
  2. Server Side Rendering μ‹œμ— 초기 화면에 그렀질 데이터λ₯Ό prefetchν•˜μ—¬ 첫 λ Œλ”λ§ 속도λ₯Ό ν–₯상 (μ§„ν–‰ 쀑)
  3. μŠ€μΌˆλ ˆν†€ UI, Spinner, loading.tsx 등을 μ‘°ν•©ν•˜μ—¬ λ‘œλ”© μ‹œμ— μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„  (μ§„ν–‰ 쀑)
  4. ν•„μš”ν•œ μ—¬λŸ¬κ°œμ˜ μš”μ²­μ„ ν•˜λ‚˜μ˜ λ„€νŠΈμ›Œν¬ μš”μ²­μ„ λ¬ΆλŠ” 닀쀑 쿼리, RPC 등을 λ„μž… (μ‹œμž‘ μ „)

두 번째둜 λ§Žμ€ 이미지λ₯Ό λΆˆλŸ¬μ˜€λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μ§€μ—° 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ μ œμ•ˆλœ λ°©μ•ˆμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. next/image의 priority 속성을 ν™œμš©ν•˜μ—¬ 첫 화면에 λ³΄μ΄λŠ” 이미지λ₯Ό μš°μ„ μœΌλ‘œ κ°€μ Έμ˜€κ³ , 슀크둀 μ•„λž˜μ˜ μ΄λ―Έμ§€λŠ” lazy-loading등을 적용 (μ™„λ£Œ)
  2. next/image의 sizes, quality, placeholder 속성 등을 ν™œμš©ν•˜μ—¬ 이미지λ₯Ό μ΅œμ ν™”ν•˜κ±°λ‚˜ UXκ°œμ„  (μ§„ν–‰ 쀑)
  3. sharp 라이브러리 등을 λ„μž…ν•˜μ—¬ μ„œλ²„μ—μ„œ λ“€μ–΄μ˜€λŠ” 이미지 크기λ₯Ό μ••μΆ•ν•œ 후에 ν΄λΌμ΄μ–ΈνŠΈ λ Œλ”λ§ (μ‹œμž‘ μ „)

next/image둜 sizes, priority속성을 μ μš©ν•œ 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ
lightHouse ν…ŒμŠ€νŠΈ κ²°κ³Ό FCP, LCP 등이 μ†Œν­ κ°œμ„ λœ κ²ƒμœΌλ‘œ ν™•μΈν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κΈ°μ‘΄ next/image κ°œμ„  ν›„
Performace(DeskTop) 점수 평균 79.5 84
Performace(Mobile) 점수 평균 63 71
First Contentful Paint (FCP) 평균 0.35s 0.2s
Largest Contentful Paint (LCP) 점수 평균 3.95s 2.95s
Speed Index 평균 0.45s 0.4s

단, Lighthouse 기반의 μ„±λŠ₯ 츑정은 μ™ΈλΆ€ ν™˜κ²½μ— 영ν–₯을 λ°›μœΌλ©°, μ—¬μ „νžˆ λ Œλ”λ§ 속도가 느리기 λ•Œλ¬Έμ— 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄μ„œ
λ‹€μ–‘ν•œ μ„±λŠ₯ μΈ‘μ • 방법을 λ„μž…ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. λ˜ν•œ 이미지 μ΅œμ ν™” λ°©μ•ˆμ— λŒ€ν•΄μ„œλ„ μΆ”κ°€ λ…Όμ˜ μ€‘μž…λ‹ˆλ‹€.

πŸ”¨ 'λͺ¨μž„'κ³Ό 'μŠ€ν† λ¦¬'의 κ°œλ… μž¬μ •λ¦½

λ‘œλ”© 속도 외에 κ°€μž₯ λ§Žμ€ ν”Όλ“œλ°±μ„ 받은 뢀뢄은 'λͺ¨μž„'κ³Ό 'μŠ€ν† λ¦¬'의 κ°œλ…μ„ κ΅¬λΆ„ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ ν”Όλ“œλ°±μ„ 받은 λ°μ—λŠ” μ—¬λŸ¬κ°€μ§€ μ΄μœ κ°€ μžˆμ„ 것이라 λΆ„μ„ν•˜κ³  μžˆμ§€λ§Œ,
κ·Έ 쀑 ν•˜λ‚˜λŠ” 'λͺ¨μž„ μ°ΎκΈ°'와 'μŠ€ν† λ¦¬ μ°ΎκΈ°' λΌλŠ” νŽ˜μ΄μ§€λͺ…이 직관적이지 μ•Šλ‹€κ³  νŒλ‹¨ν•˜μ—¬ κ°œμ„ μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

넀이밍은 μž₯기적으둜 κ³ λ―Όν•˜μ—¬ 더 κ°œμ„ ν•  κ³„νšμ΄μ§€λ§Œ, 일단 'λͺ¨μž„ μ°ΎκΈ°'λŠ” 'μŠ€ν† λ¦¬κ·Έλ£Ή' 으둜,
'μŠ€ν† λ¦¬ μ°ΎκΈ°'λŠ” '곡개된 μŠ€ν† λ¦¬' 둜 λ³€κ²½ν•˜κ³  μ•„μ΄μ½˜μ„ μΆ”κ°€ν•˜μ—¬ μ‚¬μš©μžκ°€ 의미λ₯Ό νŒŒμ•…ν•˜κΈ°μ— 보닀 μš©μ΄ν•˜λ„λ‘ κ°œμ„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ°œμ„  μ „

κ°œμ„  ν›„

🌊 νšŒμ›κ°€μž…, 둜그인 후에 μžμ—°μŠ€λŸ¬μš΄ νŽ˜μ΄μ§€ μ „ν™˜

μ΄ˆκΈ°μ—λŠ” νšŒμ›κ°€μž…μ΄λ‚˜ 둜그인 성곡 μ‹œ λͺ¨λ‘ ν™ˆ ν™”λ©΄μœΌλ‘œ μ΄λ™ν•˜λ„λ‘ κ΅¬ν˜„ν–ˆμœΌλ‚˜,
μ‚¬μš©μž ν”Όλ“œλ°±μ„ 톡해 μ΄λŸ¬ν•œ μ „ν™˜μ΄ λ‹€μ†Œ λΆ€μžμ—°μŠ€λŸ½κ²Œ λŠκ»΄μ§„λ‹€λŠ” 점을 μΈμ§€ν•˜κ³ 
κ°œμ„ μ„ μ§„ν–‰ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ¨Όμ €, νšŒμ›κ°€μž… ν›„ μ•„λ¬΄λŸ° ν”Όλ“œλ°± 없이 ν™ˆ ν™”λ©΄μœΌλ‘œ μ΄λ™λ˜λ˜ 흐름을 κ°œμ„ ν•˜μ—¬,
κ°€μž… 성곡 λ©”μ‹œμ§€λ₯Ό ν† μŠ€νŠΈλ‘œ 보여쀀 λ’€ 둜그인 ν™”λ©΄μœΌλ‘œ μ „ν™˜λ˜λ„λ‘ λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, 둜그인 성곡 μ‹œμ—λŠ” μ‚¬μš©μžκ°€ 둜그인 μ „ λ¨Έλ¬Όλ €λ˜ νŽ˜μ΄μ§€λ‘œ λ˜λŒμ•„κ°ˆ 수 μžˆλ„λ‘
λ¦¬λ””λ ‰μ…˜ λ‘œμ§μ„ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ useReferer μ»€μŠ€ν…€ 훅을 λ§Œλ“€μ–΄, 이전 νŽ˜μ΄μ§€μ˜ URL을 인코딩해
referer둜 μ €μž₯ν•˜κ³ , 둜그인 성곡 μ‹œ 이λ₯Ό λ””μ½”λ”©ν•˜μ—¬ ν•΄λ‹Ή νŽ˜μ΄μ§€λ‘œ μ΄λ™μ‹œν‚€λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

/auths/signin?referer=...

πŸ‘¨β€πŸ’» ν–₯ν›„ μ—…λ°μ΄νŠΈ κ³„νš

μ±„νŒ… κΈ°λŠ₯

  • νŒ€μ›λ“€κ°„ 자유둭게 μ†Œν†΅ν•˜κ³ , κΈ€ ν”Όλ“œλ°±μ„ 주고받을 수 μžˆλŠ” μ±„νŒ… μ‹œμŠ€ν…œμ„ μΆ”κ°€ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

AI 이미지 생성, λ§žμΆ€λ²• 검사 κΈ°λŠ₯

  • μ±… ν‘œμ§€λ₯Ό λ§Œλ“€ λ•Œ μ–΄λ– ν•œ 이야기λ₯Ό λ§Œλ“€ μ˜ˆμ •μΈμ§€ λΆ„μœ„κΈ°λ‚˜ ν‚€μ›Œλ“œλ₯Ό λ„£μœΌλ©΄
    AIλ₯Ό 톡해 ν‘œμ§€ 이미지λ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” κΈ°λŠ₯을 μΆ”κ°€ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.
  • λ§žμΆ€λ²•μ΄ ν‹€λ¦° 글이 이야기에 ν¬ν•¨λ˜μ§€ μ•Šλ„λ‘ AIλ₯Ό 톡해 λ§žμΆ€λ²•μ„ κ²€μ‚¬ν•΄μ£ΌλŠ” κΈ°λŠ₯을
    μΆ”κ°€ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

νŒ€μ›μ˜ ν”„λ‘œν•„λ³΄κΈ° κΈ°λŠ₯

  • νŒ€μ›λ“€μ˜ 상세 ν”„λ‘œν•„μ„ 확인할 수 μžˆλŠ” κΈ°λŠ₯을 λ§Œλ“€μ–΄μ„œ μ„œλ‘œμ˜ κ΄€μ‹¬μ‚¬λ‚˜ μ„±ν–₯을 νŒŒμ•…ν•  수 μžˆλ„λ‘
    νŒ€μ› ν”„λ‘œν•„ 보기 κΈ°λŠ₯을 μΆ”κ°€ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

κΈ€ 이어쓰기 κ°œμ„ 

  • λ§Œμ•½μ— λͺ¨μž„μž₯이 λͺ¨μž„μ—μ„œ νƒˆν‡΄ν•œλ‹€λ©΄? λˆ„κ΅°κ°€ μ•…μ˜μ μœΌλ‘œ 글을 계속 μ˜¬λ¦°λ‹€λ©΄?
    μ΄λŸ¬ν•œ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λΆˆνŽΈμ„ ν•΄κ²°ν•  수 μžˆλ„λ‘ μ§€κΈˆμ˜ 이어쓰기 μ‹œμŠ€ν…œμ„
    λ”μš± κ°œμ„ ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

βš– λΌμ΄μ„ μŠ€

Β© 2025 WeWrite. Licensed under the MIT License.

Releases

Packages

Used by

Contributors

Languages