06. 자주 막히는 문제 해결 가이드

“에러는 적이 아니라 신호다. 어디가 잘못됐는지 알려주는.”


이것을 왜 배우는가?

블로그 셋업·운영 중 99%의 사람이 막히는 패턴이 있습니다. 같은 함정을 미리 알면 1시간 헤맬 일을 5분에 끝낼 수 있습니다.

이 문서는 참고용입니다. 처음부터 끝까지 읽지 말고, 본인이 막힌 상황과 비슷한 항목을 검색하세요.


문제 분류

분류자주 발생 시점
1. 환경 설정 문제처음 설치 시
2. Astro 빌드 에러코드 수정 후
3. Git/GitHub 문제git push 시
4. Cloudflare 배포 실패배포 후
5. 사이트 표시 문제글 추가 후
6. AdSense 문제광고 추가 후

1. 환경 설정 문제

1-1. node: command not found / npm: command not found

증상: 터미널에서 node·npm 명령어 실행 시 “찾을 수 없음” 에러.

원인: Node.js 설치 안 됐거나 PATH 환경변수에 등록 안 됨.

해결 순서:

# (1) Node.js 설치 확인
which node           # Mac/Linux
where node           # Windows
# 경로가 안 나오면 미설치

# (2) Node.js 재설치
# https://nodejs.org에서 LTS 버전 다운로드 → 설치

# (3) 터미널 닫고 새로 열기 (PATH 인식)

# (4) 그래도 안 되면 컴퓨터 재부팅

node --version 으로 v22.x.x 같은 게 출력되면 OK.

1-2. git: command not found

증상: git 명령어 실행 시 “찾을 수 없음”.

Mac:

# Xcode Command Line Tools 설치
xcode-select --install
# 권한 묻는 창 뜨면 "Install" 클릭, 5~10분 대기

Windows:

# https://git-scm.com 에서 Windows용 다운로드
# 설치 시 "Add Git to PATH" 체크 확인

설치 후 터미널 재시작.

1-3. Permission denied (npm install 시)

증상: npm installEACCES: permission denied.

원인: 시스템 npm 폴더에 권한 없음 (보통 Mac).

해결:

# 방법 1 (Mac, 권장): nvm 사용해서 사용자 권한으로 Node.js 관리
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
nvm install --lts

# 방법 2: 권한 변경 (덜 안전)
sudo chown -R $(whoami) ~/.npm

⚠️ sudo npm install은 비권장. 권한 문제 임시방편이지만 보안 약화.


2. Astro 빌드 에러

2-1. Cannot find module 'astro'

증상: npm run dev 실행 시 “astro 모듈을 찾을 수 없음”.

원인: node_modules/ 폴더 없음 (의존 패키지 설치 안 됨).

해결:

cd my-blog
npm install
# 또는
rm -rf node_modules package-lock.json
npm install

2-2. Frontmatter 파싱 에러

증상: 빌드 시 Invalid frontmatter 또는 YAML parsing error.

원인: 글의 Frontmatter 형식 틀림.

자주 발생하는 패턴:

❌ 잘못된 예:

---
title: 글의 제목 : 부제목     ← 콜론(:)이 값 안에 있음
pubDate: 2026-04-29           ← 따옴표 없음 (날짜는 따옴표 권장)
description:짧은 설명         ← 콜론 뒤 공백 없음
---

✅ 올바른 예:

---
title: '글의 제목 : 부제목'
pubDate: '2026-04-29'
description: '짧은 설명'
---

해결 원칙:

  • 콜론(:) 포함 값은 반드시 따옴표로 감싸기
  • 콜론 뒤에 공백 1개
  • 날짜·숫자 값도 따옴표 권장

2-3. [InvalidContentEntryDataError]

증상: 글 빌드 시 “콘텐츠 데이터가 schema와 맞지 않음”.

원인: src/content.config.ts에 정의된 필수 필드가 빠짐.

해결:

src/content.config.ts 열어서 schema 확인:

import { defineCollection, z } from 'astro:content';
import { glob } from 'astro/loaders';

const blog = defineCollection({
	loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
	schema: z.object({
		title: z.string(),         // 필수
		description: z.string(),    // 필수
		pubDate: z.coerce.date(),   // 필수
		updatedDate: z.coerce.date().optional(),
		heroImage: z.string().optional(),
	}),
});

export const collections = { blog };

→ 이 schema에 정의된 필수 필드(title, description, pubDate)가 글 Frontmatter에 다 있어야 함.

2-4. 이미지가 깨짐

증상: 글에 넣은 이미지가 안 보이거나 X 표시.

원인 + 해결:

원인해결
public/ 안에 파일 없음public/images/foo.png 위치에 파일 둠
경로 잘못 씀 (/images/foo.png 대신 images/foo.png)/로 시작 (절대 경로)
파일 이름에 공백/한글영문 + 하이픈만
확장자 대소문자 불일치 (foo.PNG vs foo.png)정확히 일치

✅ 올바른 예:

![캡션](/images/screenshot.png)

파일 위치: public/images/screenshot.png


3. Git/GitHub 문제

3-1. Permission denied (publickey) 또는 fatal: Authentication failed

증상: git push 시 인증 실패.

원인: GitHub이 일반 비밀번호 차단.

해결 (3가지 방법):

방법 A: 브라우저 인증 (가장 쉬움)

# 자동으로 브라우저 열림 → GitHub 로그인 → 권한 허용
git push

만약 자동으로 안 열리면:

# Git Credential Manager 설치 (Mac)
brew install --cask git-credential-manager

# Windows: Git for Windows 설치 시 자동 포함

방법 B: Personal Access Token (PAT)

  1. GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → “Generate new token”
  2. Scopes: repo 전체 체크
  3. 생성된 토큰 복사 (한 번만 보임)
  4. git push 시 비밀번호 자리에 토큰 붙여넣기

방법 C: SSH 키 (고급)

# SSH 키 생성
ssh-keygen -t ed25519 -C "your@email.com"

# 공개 키 복사
cat ~/.ssh/id_ed25519.pub

# GitHub → Settings → SSH and GPG keys → New SSH key → 붙여넣기

# 원격 URL 변경 (https → ssh)
git remote set-url origin git@github.com:본인아이디/my-blog.git

3-2. error: failed to push some refs

증상: git push 시 “Updates were rejected because the remote contains work that you do not have locally”

원인: GitHub에 본인 컴퓨터에 없는 변경사항이 있음 (보통 README 만들 때 GitHub에서 추가했을 때).

해결:

# 원격 변경사항 가져오기 (rebase 방식)
git pull --rebase origin main

# 충돌 없으면 다시 push
git push

3-3. fatal: not a git repository

증상: git 명령어 실행 시 “git 저장소 아님” 에러.

원인: 현재 폴더가 git 저장소가 아님.

해결:

# (1) 올바른 폴더에 있는지 확인
pwd                  # 현재 경로 출력
ls .git              # .git 폴더 있어야 git 저장소

# (2) 없으면 my-blog 폴더로 이동
cd ~/code/my-blog

# (3) 그래도 .git 없으면 다시 초기화
git init
git remote add origin https://github.com/본인아이디/my-blog.git

3-4. commit 안 한 변경사항이 사라짐

증상: 코드 수정했는데 다음 날 보니 사라짐.

원인:

  • VS Code 자동 저장 안 됨
  • git stash 후 잊어버림
  • branch 잘못 갈아탐

예방: 자주 commit + push 습관. 30분~1시간마다 커밋.

git add .
git commit -m "wip: in progress"  # work in progress
git push

4. Cloudflare 배포 실패

4-1. 빌드 실패: Module not found

증상: Cloudflare 빌드 로그에 “Cannot find module” 에러.

원인: 본인 컴퓨터엔 있는 패키지가 GitHub에 안 올라감.

해결:

# package.json에 패키지 추가됐는지 확인
cat package.json

# 없으면 다시 install + commit
npm install 패키지이름
git add .
git commit -m "fix: add missing dependency"
git push

4-2. 빌드 실패: Node.js 버전

증상: Node version mismatch 또는 Unsupported engine.

원인: Cloudflare 기본 Node 버전이 낮거나 안 맞음.

해결:

Cloudflare 대시보드 → 프로젝트 → Settings → Environment variables → 추가:

이름
NODE_VERSION22 (또는 본인이 로컬에서 쓰는 버전)

저장 후 다시 배포 시도 (Deployments → “Retry deployment”).

4-3. 빌드 성공했는데 사이트가 빈 화면

증상: 배포는 성공했지만 사이트 접속 시 빈 페이지.

원인: Build output directory 잘못됨.

해결:

  • Cloudflare Settings → Builds & deployments → Build output directory: dist (Astro 표준)
  • 다른 값으로 돼있으면 dist로 수정

4-4. 사이트 변경이 반영 안 됨 (캐시)

증상: git push 했는데 사이트가 옛날 상태.

원인: 브라우저·Cloudflare CDN 캐시.

해결:

1. 브라우저에서 강제 새로고침
   Mac: Cmd + Shift + R
   Windows: Ctrl + Shift + R

2. 그래도 안 되면 시크릿 창에서 접속

3. 그래도 안 되면 Cloudflare에서 캐시 비우기:
   Cloudflare 대시보드 → 프로젝트 → Deployments에서 빌드 완료됐는지 확인
   Caching → Configuration → "Purge Everything"

5. 사이트 표시 문제

5-1. 새 글이 메인 페이지에 안 보임

증상: 글을 추가했는데 메인 페이지 글 목록에 안 나타남.

원인 + 해결:

원인해결
Frontmatter pubDate 형식 틀림'2026-04-29' (따옴표 + ISO 형식)
pubDate가 미래 날짜현재 또는 과거 날짜로
파일 위치 잘못 (src/content/blog/ 밖)정확한 경로에 두기
파일 확장자 .md 아님.md 또는 .mdx
빌드 캐시 문제npm run dev 끄고 다시 켜기

5-2. 한국어 깨짐

증상: 글의 한글이 ?로 표시되거나 깨짐.

원인: 파일 인코딩 UTF-8 아님.

해결:

  • VS Code: 우측 하단 UTF-8 표시 클릭 → “Save with Encoding” → “UTF-8”
  • 다른 에디터: 인코딩 UTF-8로 변경 후 재저장

5-3. 마크다운 표가 깨짐

증상: 표 작성했는데 일반 텍스트로 표시.

원인: 표 문법 정확하지 않음.

❌ 잘못:

|항목|설명|
|셀A|셀B|        ← 헤더 구분선 없음

✅ 올바름:

| 항목 | 설명 |
|------|------|
| 셀A  | 셀B  |

→ 헤더 행과 본문 사이에 |---|---| 구분선 필수.

5-4. 코드 블록 색깔(syntax highlighting) 안 나옴

증상: ```js 로 감쌌는데 색깔이 안 입혀짐.

원인: 언어 이름 잘못 또는 누락.

✅ 올바름:

```javascript
// 코드 (색깔 적용됨)
```

```python
# 파이썬
```

```bash
# 셸 명령어
```

``` 뒤에 언어 이름. 흔한 이름: javascript, typescript, python, bash, html, css, json, markdown.


6. AdSense 문제

6-1. 신청 거절: “콘텐츠가 충분하지 않음”

원인: 글 수·길이 부족.

해결:

  • 글 30편 이상 누적
  • 각 글 1,500자 이상
  • About·Privacy Policy 페이지 명확히
  • 1~2개월 후 재신청

6-2. 신청 거절: “Privacy Policy 없음”

해결: 05-monetize.md 참고해서 Privacy Policy 페이지 추가 후 재신청.

6-3. 광고가 안 보임

원인 + 해결:

원인해결
ca-pub-XXX 자리에 인증 코드 안 바꿈본인 받은 코드로 교체
광고 차단 프로그램(AdBlock) 작동 중시크릿 창에서 확인
AdSense 신청 후 며칠 내 (광고 매칭 시간)1주일 대기
광고 코드 위치 이상본문 영역(<article> 안)에 배치

6-4. 광고 떠도 클릭이 안 됨

원인: AdSense는 무효 클릭 방지를 위해 본인이 본인 광고 클릭하면 차단.

⚠️ 본인 광고 절대 클릭 금지. 친구한테 부탁하는 것도 금지. 무효 클릭 패턴 감지되면 계정 정지.


7. 일반 디버깅 방법

7-1. 에러 메시지를 그대로 검색

가장 강력한 방법. 에러 메시지를 Google에 그대로 붙여넣기 → Stack Overflow·GitHub Issue에서 답 발견.

7-2. AI에 질문 (가장 빠름)

Cursor·Claude·ChatGPT에 다음 정보를 함께 전달:

[배경]
Astro 5.x로 블로그 만들고 있는 중.
Cloudflare Pages에 배포.

[문제]
git push는 됐는데 사이트가 업데이트 안 됨.

[에러 메시지]
(에러 그대로 붙여넣기)

[이미 시도한 것]
- 브라우저 강제 새로고침
- Cloudflare Deployments에서 빌드 성공 확인

이 문제 어떻게 해결?

→ 보통 정확한 답 줌.

7-3. 문제를 격리 (Minimal Reproduction)

복잡한 문제일 때:

  1. 새 폴더에 새 Astro 프로젝트 만들기
  2. 같은 문제 발생하는지 확인
  3. 발생하면 → 환경 문제. 안 발생하면 → 본인 코드 문제
  4. 본인 코드 문제면 한 줄씩 빼면서 어디가 원인인지 좁히기

7-4. 공식 docs 확인

도구공식 문서
Astrohttps://docs.astro.build
Cloudflare Pageshttps://developers.cloudflare.com/pages/
GitHubhttps://docs.github.com
npmhttps://docs.npmjs.com

→ 영문이지만 가장 정확. AI보다 신뢰 가능.


도움 받을 수 있는 곳

채널언제
AI (Cursor/Claude/ChatGPT)일반 코드/설정 문제
Stack Overflow구체적 에러 메시지 검색
GitHub Issues (Astro repo)Astro 자체 버그 의심
Astro Discord실시간 도움 (영문)
Cloudflare CommunityCloudflare 특화 문제
디스콰이엇한국어 인디 개발자 도움

💡 핵심 원칙

문제 해결의 3원칙:

  1. 에러 메시지를 정확히 읽기 — 화나서 닫지 말고 진짜 무슨 말인지 파악
  2. 변수 하나만 바꾸기 — 한 번에 여러 개 고치면 어디가 원인인지 모름
  3. 막히면 30분 안에 도움 청하기 — 1시간+ 헤매지 말고 AI·검색·커뮤니티

⚠️ 블로그 셋업에 며칠씩 막히면 안 됩니다. 막히는 게 정상이지만 1~2시간 안에 풀어야 합니다. 못 풀면 AI에 질문 + 사람한테 물어보세요.


끝맺으며

이 문서는 시작일 뿐입니다. 셋업이 끝나면 진짜 어려운 건 따로입니다:

  • 꾸준히 글 쓰기 (가장 어려움)
  • 검색 의도에 맞는 키워드 발견
  • 사용자가 진짜 원하는 걸 만들기
  • 광고가 아닌 다른 수익 모델 찾기

블로그는 도구입니다. 도구가 작동하면 이제부터가 진짜 시작입니다.


다음 단계

전체 가이드 끝. 아래 행동 순서로 시작하세요:

  1. README.md 다시 한 번 정리해서 읽기
  2. 01-prerequisites.md부터 순서대로 진행
  3. 첫 글 작성 + git push
  4. 1주일 후 두 번째 글
  5. 1개월 후 5편 누적되면 일관성 자축
  6. 글 30편 누적 시 05-monetize.md로 수익화 검토

한 줄 요약: 셋업은 2~3시간, 그 후 매주 1편씩 1년. 1년 후의 본인이 가장 큰 수혜자.


🔗 관련 자료:

main ⚠ 0 ✕ 0 Ln 1, Col 1 Spaces: 2 UTF-8 LF Markdown