# 자주 만나는 에러 해결 모음

Laravel + AI 바이브코딩을 하면서 초보자가 가장 많이 만나는 에러와 해결 순서를 정리했어요.
당황하지 말고 아래 순서대로 확인해보세요.

## 1. 419 Page Expired / CSRF token mismatch

**언제 발생하나요?** 로그인, 글쓰기 등 폼을 제출할 때.

**원인**: 세션이 만료됐거나, 폼에 CSRF 토큰(`@csrf`)이 빠졌을 때 발생해요.

**해결 순서**
1. 폼 태그(`<form>`) 안에 `@csrf`가 들어있는지 확인하세요.
2. 페이지를 오래 열어두고 있었다면 새로고침 후 다시 시도하세요.
3. 로컬 개발 중이라면 `.env`의 `SESSION_DRIVER`, `APP_URL` 설정을 확인하세요.

## 2. Vite manifest not found

**언제 발생하나요?** 화면에 접속했는데 500 에러와 함께 이 메시지가 뜰 때.

**원인**: `npm run dev`(Vite 개발 서버)가 꺼져 있거나, 운영 배포 전인데 `npm run build`를 안 한 경우예요.

**해결 순서**
1. 개발 중이라면 터미널에서 프로젝트 폴더로 이동해 `npm run dev`를 다시 실행하세요.
2. 운영 서버라면 `npm run build`를 실행해서 `public/build` 폴더를 만들어주세요.

## 3. 500 Internal Server Error

**언제 발생하나요?** 화면이 하얗게 뜨거나 에러 페이지만 나올 때.

**해결 순서**
1. `storage/logs/laravel.log` 파일의 가장 최근 에러를 확인하세요.
2. 방금 수정한 파일이 있다면 그 파일부터 의심하세요.
3. `.env` 설정, DB 연결 정보가 맞는지 확인하세요.
4. 운영 환경의 `APP_DEBUG`는 `false`로 유지하고, 로그로 원인을 확인하는 습관을 들이세요.

## 4. SQLSTATE[HY000] [1045] Access denied / 데이터베이스 연결 오류

**해결 순서**
1. `.env`의 `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`가 실제 DB 설정과 일치하는지 확인하세요.
2. XAMPP를 쓴다면 MySQL(또는 MariaDB)이 켜져 있는지 확인하세요.
3. 설정을 바꿨다면 `php artisan config:clear`로 캐시를 지워보세요.

## 5. Class "App\Models\XXX" not found

**해결 순서**
1. 모델 파일명과 클래스명이 정확히 일치하는지 확인하세요(대소문자 포함).
2. `namespace App\Models;`가 파일 맨 위에 있는지 확인하세요.
3. `composer dump-autoload`를 실행해보세요.

## 6. 404 Not Found (분명 만든 페이지인데)

**해결 순서**
1. `routes/web.php`에 라우트가 실제로 등록되어 있는지 확인하세요.
2. 라우트 등록 순서를 확인하세요. Laravel은 위에서부터 순서대로 매칭하기 때문에,
   와일드카드 라우트(`{id}`)가 구체적인 라우트(`/save`)보다 먼저 있으면 문제가 생겨요.
3. `php artisan route:list`로 실제 등록된 라우트를 확인하세요.

## 7. 이미지가 안 보여요 (404 또는 깨진 아이콘)

**해결 순서**
1. `public/storage`가 `storage/app/public`으로 연결(symlink)되어 있는지 확인하세요. 안 되어 있다면 `php artisan storage:link`를 실행하세요.
2. 이미지 경로에 오타가 없는지 확인하세요.

---

## AI에게 에러를 물어볼 때 함께 주면 좋은 정보

- 정확한 에러 메시지 전체(앞뒤 다 포함)
- 방금 무슨 작업을 했는지
- 사용 중인 환경(Laravel/PHP 버전, 로컬/운영 여부)

> "이 에러가 났어: [에러 메시지]. 방금 [작업 내용]을 했어. 원인이 뭔지, 어떻게 고치는지 초보자도 이해할 수 있게 설명해줘."
