πŸ“ λΈ”λ‘œκ·Έ ν¬μŠ€νŒ… κ±°λ²„λ„ŒμŠ€

πŸ“ λΈ”λ‘œκ·Έ ν¬μŠ€νŒ… κ±°λ²„λ„ŒμŠ€

이 λ¬Έμ„œλŠ” GitHub Pages + Jekyll 기반 λΈ”λ‘œκ·Έμ—μ„œ 읽기 쉽고 μ „νŒŒλ ₯ μžˆλŠ” 글을 μ“°κΈ° μœ„ν•œ κ°€μ΄λ“œμž…λ‹ˆλ‹€. 개발 쀑 μ•Œκ²Œ 된 것을 λΈ”λ‘œκ·Έ λ°©λ¬Έμžμ—κ²Œ μ‰½κ²Œ μ „λ‹¬ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.


1. κΈ€μ“°κΈ° μ² ν•™ 3원칙

μ›μΉ™μ˜λ―Έλ°˜λ‘€
ν•œ λ¬Έμž₯으둜 말할 수 μžˆλ‚˜?핡심 λ©”μ‹œμ§€κ°€ ν•˜λ‚˜μ˜ λ¬Έμž₯으둜 μš”μ•½λ˜μ–΄μ•Ό ν•œλ‹€β€œCloudflare의 μ—¬λŸ¬ κΈ°λŠ₯에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€β€
λͺ¨λ₯΄λŠ” μ‚¬λžŒλ„ μ΄ν•΄ν•˜λ‚˜?ν•΄λ‹Ή κΈ°μˆ μ„ 처음 μ ‘ν•˜λŠ” λ…μžλ„ λ§₯락을 이해할 수 μžˆμ–΄μ•Ό ν•œλ‹€μ „μ œ 쑰건을 μ„€λͺ… 없이 μƒλž΅
μ‚¬μ§„λ§Œ 봐도 흐름을 μ•„λ‚˜?이미지/λ‹€μ΄μ–΄κ·Έλž¨λ§ŒμœΌλ‘œ κΈ€μ˜ 흐름을 νŒŒμ•…ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€μ½”λ“œμ™€ ν…μŠ€νŠΈλ§Œ μžˆλŠ” κΈ€

2. 포슀트 ꡬ쑰 ν…œν”Œλ¦Ώ

λͺ¨λ“  ν¬μŠ€νŠΈλŠ” μ•„λž˜ 6단 ꡬ쑰λ₯Ό λ”°λ¦…λ‹ˆλ‹€.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🎯 Hook (1~2λ¬Έμž₯)                  β”‚  ← μ™œ 이 글을 μ“°λŠ”κ°€? 무엇을 μ–»λ‚˜?
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ“‹ TL;DR (3~5개 뢈릿)              β”‚  ← λ°”μœ μ‚¬λžŒμ„ μœ„ν•œ 핡심 μš”μ•½
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ” λ°°κ²½ / 문제 상황                 β”‚  ← 무엇을 ν•˜λ € ν–ˆκ³ , 무엇이 λ§‰ν˜”λ‚˜?
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ’‘ ν•΄κ²° κ³Όμ • (메인 λ³Έλ¬Έ)            β”‚  ← 단계별 μ„€λͺ… + κ·Έλ¦Ό/μ½”λ“œ/ν‘œ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  βœ… κ²°κ³Ό / Before & After            β”‚  ← ν•΄κ²° κ²°κ³Όλ₯Ό μ‹œκ°μ μœΌλ‘œ
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ“Œ Takeaway (핡심 κ΅ν›ˆ 3κ°€μ§€)       β”‚  ← ν•œ 쀄씩 κΈ°μ–΅ν•  것
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

각 μ„Ήμ…˜ μž‘μ„± κ°€μ΄λ“œ

🎯 Hook β€” 첫 λ¬Έμž₯이 λͺ¨λ“  것을 κ²°μ •ν•œλ‹€

❌ "이 κΈ€μ—μ„œλŠ” Cloudflare Workers에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€."
βœ… "무료둜 ν•˜λ£¨ 10만 μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” APIλ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€ β€” Cloudflare Workersλ‘œμš”."
  • λ…μžμ˜ pain pointλ‚˜ ν˜ΈκΈ°μ‹¬μ„ μžκ·Ήν•˜λŠ” ν•œ λ¬Έμž₯으둜 μ‹œμž‘
  • β€œXλ₯Ό ν•΄κ²°ν–ˆλ‹€β€, β€œYλ₯Ό 무료둜 λ§Œλ“€μ—ˆλ‹€β€, β€œZ λ•Œλ¬Έμ— 3일을 날렸닀” νŒ¨ν„΄ ν™œμš©

πŸ“‹ TL;DR β€” λ°”μœ μ‚¬λžŒμ„ λ°°λ €ν•˜λΌ

## TL;DR

- Cloudflare Pages + Workers + D1 μ‘°ν•©μœΌλ‘œ **μ›” $0** μ›Ήμ„œλΉ„μŠ€ ꡬ좕 κ°€λŠ₯
- 핡심은 `@opennextjs/cloudflare` μ–΄λŒ‘ν„°λ‘œ Next.jsλ₯Ό Pages에 μ˜¬λ¦¬λŠ” 것
- D1(SQLite)은 5GBκΉŒμ§€ 무료, R2λŠ” egress μš”κΈˆ μ—†μŒ
  • 3~5개 뢈릿, 각 핡심에 ꡡ은 κΈ€μ”¨λ‘œ ν‚€μ›Œλ“œ κ°•μ‘°
  • μ΄κ²ƒλ§Œ 읽어도 κΈ€μ˜ λͺ©μ μ„ μ•„λŠ” μˆ˜μ€€μœΌλ‘œ

πŸ” λ°°κ²½ β€” β€œμ™œ 이걸 ν•˜κ²Œ λ˜μ—ˆλ‚˜β€λ₯Ό λ¨Όμ € λ§ν•˜λΌ

  • λ…μžκ°€ 곡감할 수 μžˆλŠ” 상황을 λ¨Όμ € μ„€λͺ…
  • 인프라/ν™˜κ²½ μ„€λͺ…은 κ°„λ‹¨ν•œ μ•„ν‚€ν…μ²˜ λ‹€μ΄μ–΄κ·Έλž¨ ν•˜λ‚˜λ‘œ
  • β€œAλ₯Ό ν•˜λ € ν–ˆλŠ”λ° Bκ°€ μ•ˆ λ˜μ—ˆλ‹€β€ β†’ λ…μžλ„ 같은 문제λ₯Ό κ²ͺκ³  μžˆμ„ κ°€λŠ₯μ„±

πŸ’‘ ν•΄κ²° κ³Όμ • β€” Step by Step

  • 큰 단락은 λ²ˆν˜Έκ°€ μžˆλŠ” λ‹¨κ³„λ‘œ λ‚˜λˆ„κΈ° (Step 1, Step 2, …)
  • 2개 μ΄μƒμ˜ 선택지가 μžˆλ‹€λ©΄ λΉ„κ΅ν‘œ μ‚¬μš©
  • μ½”λ“œλŠ” ν•΅μ‹¬λ§Œ β€” 전체 μ½”λ“œλŠ” GitHub λ§ν¬λ‚˜ 접을 수 μžˆλŠ” 블둝(<details>)으둜

βœ… κ²°κ³Ό β€” μ‹œκ°μ μœΌλ‘œ 보여라

  • Before & After 이미지 or ν‘œ
  • μˆ«μžκ°€ μžˆλ‹€λ©΄ κ°œμ„  수치 ν‘œμ‹œ (예: β€œμ‘λ‹΅ μ‹œκ°„ 2.3s β†’ 0.4s”)
  • μŠ€ν¬λ¦°μƒ·, λ‹€μ΄μ–΄κ·Έλž¨, μ•„ν‚€ν…μ²˜ κ·Έλ¦Ό μ΅œμ†Œ 1개 이상

πŸ“Œ Takeaway β€” κΈ°μ–΅ν•  것 3κ°€μ§€

## Takeaway

1. **302 + Set-CookieλŠ” Cloudflare Pagesμ—μ„œ λΆˆμ•ˆμ •ν•˜λ‹€** β€” 200 HTML + JS λ¦¬λ‹€μ΄λ ‰νŠΈλ‘œ λŒ€μ²΄
2. **닀쀑 μΏ ν‚€λŠ” `Headers.append()`둜** β€” μƒμ„±μžλŠ” μ‰Όν‘œλ‘œ 병합함
3. **ν”„λ‘ νŠΈμ—”λ“œμ™€ APIλŠ” 같은 도메인에** β€” Pages Functionsκ°€ CORS 없이 깔끔

3. μ‹œκ° 자료 κ°€μ΄λ“œ β€” β€œκΈ€λ§Œ μžˆλŠ” 글은 λ¬Έμ„œλ‹€β€

3.1 μ–Έμ œ μ–΄λ–€ μ‹œκ° 자료λ₯Ό μ“ΈκΉŒ

μƒν™©μΆ”μ²œ μ‹œκ° μžλ£Œμ˜ˆμ‹œ
μ•„ν‚€ν…μ²˜/ꡬ쑰 μ„€λͺ…λ‹€μ΄μ–΄κ·Έλž¨ (Mermaid, Draw.io)β€œμΈμ¦ 흐름: λΈŒλΌμš°μ € β†’ Worker β†’ D1”
선택지 λΉ„κ΅λΉ„κ΅ν‘œ (Markdown ν‘œ)β€œVercel vs Netlify vs Cloudflare”
단계별 κ³Όμ •λ²ˆν˜Έκ°€ μžˆλŠ” λͺ©λ‘ + μ½”λ“œβ€œStep 1: μ„€μΉ˜, Step 2: 섀정”
κ²°κ³Ό/λ³€ν™”Before & After 이미지/ν‘œβ€œμˆ˜μ • μ „ ν™”λ©΄ β†’ μˆ˜μ • ν›„ 화면”
데이터/μˆ˜μΉ˜ν‘œβ€œλ¬΄λ£Œ ν‹°μ–΄ ν•œλ„ 비ꡐ”
μ—λŸ¬/νŠΈλŸ¬λΈ”μŠˆνŒ…μ—λŸ¬ λ©”μ‹œμ§€ + 원인 + ν•΄κ²° μΉ΄λ“œβ€œβŒ 429 β†’ 원인: 잘λͺ»λœ μ—”λ“œν¬μΈνŠΈβ€
흐름/μ‹œκ°„μˆœνƒ€μž„λΌμΈβ€œDay 1: X 발견 β†’ Day 3: Y μ‹œλ„ β†’ Day 4: 해결”

3.2 λ‹€μ΄μ–΄κ·Έλž¨ μž‘μ„±

Jekyllμ—μ„œ Mermaidλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 경우, ν…μŠ€νŠΈ λ‹€μ΄μ–΄κ·Έλž¨μ„ μ‚¬μš©:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    OAuth     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   SQL    β”Œβ”€β”€β”€β”€β”€β”
β”‚  SPA     β”‚ ──────────→  β”‚  Worker  β”‚ ──────→  β”‚ D1  β”‚
β”‚ (Pages)  β”‚ ←──────────  β”‚ (/api/*) β”‚ ←──────  β”‚     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   JWT/JSON   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   rows   β””β”€β”€β”€β”€β”€β”˜

λ˜λŠ” μ½”λ“œ 블둝 μ•ˆμ— ASCII μ•„νŠΈλ‘œ κ°„λ‹¨ν•œ 흐름도λ₯Ό κ·Έλ¦°λ‹€.

3.3 이미지 μ‚¬μš© κ·œμΉ™

  • 이미지 μœ„μΉ˜: /assets/images/posts/{포슀트슬러그}/ μ•„λž˜μ— μ €μž₯
  • 파일λͺ…: 01-problem-overview.png, 02-architecture.png (숫자 μ ‘λ‘μ‚¬λ‘œ μˆœμ„œ ν‘œμ‹œ)
  • 크기: κ°€λ‘œ 800px μ΄ν•˜ (λͺ¨λ°”일 가독성)
  • λŒ€μ²΄ ν…μŠ€νŠΈ: λͺ¨λ“  이미지에 ![μ„€λͺ…](경둜) ν˜•μ‹μœΌλ‘œ μ„€λͺ… ν•„μˆ˜
<!-- βœ… 쒋은 예 -->
![OAuth 둜그인 흐름: SPA β†’ Pages Functions β†’ Google β†’ 콜백](/assets/images/posts/oauth-toubleshooting/01-oauth-flow.png)

<!-- ❌ λ‚˜μœ 예 -->
![이미지](image.png)

4. μ½”λ“œ μž‘μ„± κ·œμΉ™

4.1 μ½”λ“œλŠ” μ΅œμ†Œν™”ν•˜λΌ

<!-- ❌ λ‚˜μœ 예: 100쀄 전체 μ½”λ“œλ₯Ό κ·ΈλŒ€λ‘œ λΆ™μ—¬λ„£μŒ -->

<!-- βœ… 쒋은 예: ν•΅μ‹¬λ§Œ 보여주고, μ „μ²΄λŠ” 링크둜 -->

핡심 둜직만 10~20쀄 μ΄λ‚΄λ‘œ 보여쀀닀. 전체 μ½”λ“œκ°€ ν•„μš”ν•œ 경우:

<details>
<summary>πŸ“– 전체 μ½”λ“œ 보기</summary>

```typescript
// 전체 μ½”λ“œλ₯Ό 여기에

</details>


### 4.2 μ½”λ“œμ—λŠ” λ°˜λ“œμ‹œ μ„€λͺ…을

```typescript
// βœ… 쒋은 예: 각 단계에 주석
const token = await generateJWT(user.id);     // 1. JWT 생성
res.cookies.set('token', token, {             // 2. HttpOnly μΏ ν‚€λ‘œ μ„€μ •
  httpOnly: true,
  secure: true,
  sameSite: 'lax'
});

4.3 μ—λŸ¬ μ½”λ“œλŠ” 원인과 ν•¨κ»˜

### ❌ μ—λŸ¬

429 Too Many Requests β€” {β€œerror”:{β€œcode”:”1113”,”message”:”余钝不袳”}}


**원인**: `/api/paas/v4/` κ²½λ‘œλŠ” 일반 λ¦¬μ†ŒμŠ€ 풀을 μ‚¬μš©ν•˜μ—¬ μ‰½κ²Œ 고갈됨
**ν•΄κ²°**: `/api/coding/paas/v4/` 경둜 μ‚¬μš© (별도 λ¦¬μ†ŒμŠ€ ν’€)

5. κΈ€μ“°κΈ° μŠ€νƒ€μΌ κ·œμΉ™

5.1 λ¬Έμž₯ κ·œμΉ™

κ·œμΉ™μ„€λͺ…μ˜ˆμ‹œ
ν•œ λ¬Έμž₯ ν•œ ideaν•œ λ¬Έμž₯에 ν•˜λ‚˜μ˜ μ˜λ―Έλ§Œβ€œWorkersλŠ” λΉ λ₯΄λ‹€. μ™œλƒν•˜λ©΄ μ—£μ§€μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.”
단문 μš°μ„ 30자 이내 λ¬Έμž₯을 κΈ°λ³ΈμœΌλ‘œβ€œμ„€μ •μ€ κ°„λ‹¨ν•˜λ‹€.”
λŠ₯λ™νƒœ μ‚¬μš©β€œλ©λ‹ˆλ‹€β€λ³΄λ‹€ β€œν•©λ‹ˆλ‹€β€β€œμ—λŸ¬κ°€ λ°œμƒλ©λ‹ˆλ‹€β€ β†’ β€œμ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€β€
μ „λ¬Έ μš©μ–΄λŠ” κ°„μ£Όν•΄μ„€μ²˜μŒ λ‚˜μ˜¬ λ•Œ ν•œ 쀄 μ„€λͺ…β€œD1(Cloudflare의 SQLite 기반 μ„œλ²„λ¦¬μŠ€ DB)”
이유λ₯Ό λ¨Όμ € λ§ν•˜κΈ°β€œλ¬΄μ—‡β€λ³΄λ‹€ β€œμ™œβ€λ₯Ό λ¨Όμ €βŒ β€œμ„€μ •μ„ λ³€κ²½ν•©λ‹ˆλ‹€β€ β†’ βœ… β€œμ†λ„ ν–₯상을 μœ„ν•΄ 섀정을 λ³€κ²½ν•©λ‹ˆλ‹€β€

5.2 톀 & λ§€λ„ˆ

  • 격식 있되 λ”±λ”±ν•˜μ§€ μ•Šκ²Œ: β€œ~ν•©λ‹ˆλ‹€β€ 체 (μ‘΄λŒ“λ§)
  • λ…μžμ—κ²Œ 직접 λ§ν•˜λ“―: β€œμ„€μ •ν•˜μ„Έμš”β€, β€œν™•μΈν•΄λ³΄μ„Έμš”β€
  • μ†”μ§ν•˜κ²Œ: β€œμ—¬κΈ°μ„œ 3일을 날렸닀”, β€œκ³΅μ‹ λ¬Έμ„œμ— μ•ˆ μ ν˜€ μžˆμ—ˆλ‹€β€
  • κ³Όμž₯ κΈˆμ§€: β€œμ™„λ²½ν•œβ€, β€œμ΅œκ³ μ˜β€ β†’ ꡬ체적인 μˆ˜μΉ˜λ‚˜ μ‚¬μ‹€λ‘œ λŒ€μ²΄

5.3 κΈ€ 길이 κ°€μ΄λ“œ

μœ ν˜•κΆŒμž₯ κΈΈμ΄μ˜ˆμ‹œ
How-to / κ°€μ΄λ“œ2,000~4,000μžβ€œCloudflare D1 μ„€μ • 방법”
νŠΈλŸ¬λΈ”μŠˆνŒ…1,500~3,000μžβ€œOAuth 429 μ—λŸ¬ 해결”
κ°œλ… μ„€λͺ…1,000~2,000μžβ€œJWTλž€ 무엇인가”
μ’…ν•© κ°€μ΄λ“œ5,000~8,000μžβ€œCloudflare μŠ€νƒ 전체 κ°€μ΄λ“œβ€

글이 κΈΈμ–΄μ§€λ©΄ μ—¬λŸ¬ 포슀트둜 λ‚˜λˆˆλ‹€. ν•˜λ‚˜μ˜ 포슀트 = ν•˜λ‚˜μ˜ 핡심 λ©”μ‹œμ§€.


6. Jekyll ν”„λ‘ νŠΈλ§€ν„° 규격

---
layout: post
title: 제λͺ©μ€ 검색에 잘 걸리게 (ν•œκΈ€ κ°€λŠ₯)
categories: [μΉ΄ν…Œκ³ λ¦¬1, μΉ΄ν…Œκ³ λ¦¬2]      # 2~3개, λŒ€λΆ„λ₯˜ β†’ μ†ŒλΆ„λ₯˜
description: 검색결과에 ν‘œμ‹œλ  ν•œ 쀄 μš”μ•½  # 80자 이내
keywords: [ν‚€μ›Œλ“œ1, ν‚€μ›Œλ“œ2, ν‚€μ›Œλ“œ3]    # 3~7개
toc: true
toc_sticky: true
---

제λͺ© μž‘μ„± κ·œμΉ™

❌ "Cloudflare에 λŒ€ν•΄ μ•Œμ•„λ³΄μž"              β†’ λ„ˆλ¬΄ λͺ¨ν˜Έ
❌ "Cloudflare Pages + Workers + D1 + R2 μ™„λ²½ κ°€μ΄λ“œ" β†’ κ³Όμž₯
βœ… "Cloudflare μŠ€νƒμœΌλ‘œ μ›” $0 μ›Ήμ„œλΉ„μŠ€ λ§Œλ“€κΈ°"         β†’ ꡬ체적, 효용 λͺ…ν™•
βœ… "GLM-5 API 429 μ—λŸ¬ β€” 3μΌκ°„μ˜ μ‚½μ§ˆκ³Ό ν•΄κ²°"          β†’ κ²½ν—˜ 기반, ν˜ΈκΈ°μ‹¬ 유발

7. μΆœκ°„ μ „ 체크리슀트

λ‚΄μš© 체크

  • Hook: 첫 λ¬Έμž₯이 ν˜ΈκΈ°μ‹¬μ„ μžκ·Ήν•˜λŠ”κ°€?
  • TL;DR: λ°”μœ λ…μžλ„ μš”μ•½λ§Œ 읽고 갈 수 μžˆλŠ”κ°€?
  • μ‹œκ° 자료: λ‹€μ΄μ–΄κ·Έλž¨, ν‘œ, μŠ€ν¬λ¦°μƒ· 쀑 μ΅œμ†Œ 1개 μžˆλŠ”κ°€?
  • Before & After: κ²°κ³Όλ₯Ό μ‹œκ°μ μœΌλ‘œ λ³΄μ—¬μ£ΌλŠ”κ°€?
  • Takeaway: κΈ°μ–΅ν•  핡심 3κ°€μ§€κ°€ λͺ…ν™•ν•œκ°€?
  • κ°œμΈμ •λ³΄: ν”„λ‘œμ νŠΈλͺ…, 이메일, API ν‚€, 도메인이 μ œκ±°λ˜μ—ˆλŠ”κ°€?

가독성 체크

  • 단락 λ‚˜λˆ”: 3λ¬Έμž₯ 이상 연속 λΆ™μ–΄μžˆλŠ” 단락이 μ—†λŠ”κ°€?
  • ꡡ은 글씨: 각 μ„Ήμ…˜μ— ν‚€μ›Œλ“œκ°€ κ°•μ‘°λ˜μ–΄ μžˆλŠ”κ°€?
  • ν‘œ ν™œμš©: λ‚˜μ—΄ν˜• 정보가 ν‘œλ‘œ μ •λ¦¬λ˜μ–΄ μžˆλŠ”κ°€?
  • μ½”λ“œ μ΅œμ†Œν™”: 20쀄 μ΄μƒμ˜ μ½”λ“œλŠ” μ ‘κΈ° λΈ”λ‘μœΌλ‘œ κ°μΆ”μ—ˆλŠ”κ°€?
  • ν—€λ”© ꡬ쑰: H2(##)λŠ” 5~8개, H3(###)λŠ” κ·Έ μ•„λž˜ 2~4κ°œμΈκ°€?

기술 체크

  • ν”„λ‘ νŠΈλ§€ν„°: layout, title, categories, description, keywordsκ°€ μžˆλŠ”κ°€?
  • 이미지 경둜: /assets/images/posts/{슬러그}/ μ•„λž˜μ— μžˆλŠ”κ°€?
  • 링크: μ™ΈλΆ€ 링크가 정상 μž‘λ™ν•˜λŠ”κ°€?
  • 둜컬 λΉŒλ“œ: bundle exec jekyll serve둜 λ Œλ”λ§μ΄ 정상인가?

8. 포슀트 μœ ν˜•λ³„ ν…œν”Œλ¦Ώ

Type A: How-To κ°€μ΄λ“œ

---
layout: post
title: "___ν•˜λŠ” 방법 β€” ___λΆ€ν„° ___κΉŒμ§€"
categories: [λŒ€λΆ„λ₯˜, μ†ŒλΆ„λ₯˜]
description: "___"
keywords: [...]
toc: true
toc_sticky: true
---

{Hook: μ™œ 이걸 ν•΄μ•Ό ν•˜λ‚˜? ν•œ λ¬Έμž₯}

## TL;DR
- 핡심 μš”μ•½ 3~5개

## 사전 μ€€λΉ„
- ν•„μš” 쑰건 뢈릿

## Step 1: ___
μ„€λͺ… + μ½”λ“œ/이미지

## Step 2: ___
μ„€λͺ… + μ½”λ“œ/이미지

## κ²°κ³Ό
Before & After 이미지 or ν‘œ

## Takeaway
1. **핡심 1**
2. **핡심 2**
3. **핡심 3**

Type B: νŠΈλŸ¬λΈ”μŠˆνŒ…

---
layout: post
title: "___ μ—λŸ¬ ν•΄κ²° β€” ___ν–ˆλ”λ‹ˆ 고쳐짐"
---

{Hook: μ–΄λ–€ μƒν™©μ—μ„œ μ–΄λ–€ μ—λŸ¬κ°€ 났닀}

## TL;DR
- μ—λŸ¬ 원인 ν•œ 쀄
- ν•΄κ²° 방법 ν•œ 쀄

## μ—λŸ¬ λ‚΄μš©

μ—λŸ¬ 둜그


## 원인 뢄석
λ‹€μ΄μ–΄κ·Έλž¨ or μ„€λͺ…

## ν•΄κ²° κ³Όμ •
### μ‹œλ„ 1: ___ β†’ ❌ μ‹€νŒ¨ (이유)
### μ‹œλ„ 2: ___ β†’ ❌ μ‹€νŒ¨ (이유)
### μ‹œλ„ 3: ___ β†’ βœ… 성곡

## Takeaway
1. **핡심 κ΅ν›ˆ**

Type C: 비ꡐ / 리뷰

---
layout: post
title: "___ vs ___ β€” ___κΈ°μ€€μœΌλ‘œ 비ꡐ해봀닀"
---

{Hook: μ™œ 이 비ꡐ가 ν•„μš”ν•œκ°€}

## 비ꡐ ν‘œ
| ν•­λͺ© | A | B |
|------|---|---|
| ... | ... | ... |

## A의 μž₯단점
## B의 μž₯단점
## κ²°λ‘ 
## Takeaway

Type D: κ°œλ… μ„€λͺ…

---
layout: post
title: "___λž€? β€” ___κ΄€μ μ—μ„œ μ΄ν•΄ν•˜κΈ°"
---

{Hook: 이 κ°œλ…μ„ μ™œ μ•Œμ•„μ•Ό ν•˜λ‚˜}

## ν•œ 쀄 μ •μ˜
___λž€ ___이닀.

## μ™œ ν•„μš”ν•œκ°€
μ‹€μ œ 사둀

## 핡심 원리
λ‹€μ΄μ–΄κ·Έλž¨ + μ„€λͺ…

## μ‹€μ „ μ˜ˆμ‹œ
μ½”λ“œ

## Takeaway

9. λ©€ν‹°μ†ŒμŠ€ 톡합 포슀트 μž‘μ„±λ²•

μ—¬λŸ¬ 개발 λ…ΈνŠΈλ₯Ό ν•˜λ‚˜μ˜ 포슀트둜 ν•©μΉ  λ•Œ:

1. μ†ŒμŠ€λ³„ 핡심 λ©”μ‹œμ§€λ₯Ό ν•œ μ€„λ‘œ μΆ”μΆœ
2. 곡톡 주제둜 κ·Έλ£Ήν•‘
3. μ„œμ‚¬ 흐름 ꡬ성: 문제 β†’ 원인 β†’ ν•΄κ²° β†’ κ΅ν›ˆ
4. 각 μ†ŒμŠ€μ˜ 쀑볡 λ‚΄μš© 제거
5. 톡합 ν›„ κΈ€ 길이가 8,000자 초과 β†’ 포슀트 뢄리

이 κ±°λ²„λ„ŒμŠ€λŠ” μ§€μ†μ μœΌλ‘œ κ°œμ„ λ©λ‹ˆλ‹€. 포슀트λ₯Ό μž‘μ„±ν•˜λ©° λ°œκ²¬ν•œ κ°œμ„ μ μ€ 이 λ¬Έμ„œμ— λ°˜μ˜ν•©λ‹ˆλ‹€.