자주 발생하는 문제
Multi-SaaS Kit 사용 시 자주 발생하는 문제와 해결 방법입니다.
설치 문제
Composer 의존성 오류
증상:
Your requirements could not be resolved to an installable set of packages.
원인:
- PHP 버전 불일치
- 패키지 버전 충돌
해결 방법:
-
PHP 버전 확인
php -v
# 필요 버전: PHP 8.2+ -
Composer 캐시 정리
composer clear-cache
composer install --no-cache -
Lock 파일 삭제 후 재설치
rm composer.lock
composer install
npm 패키지 설치 실패
증상:
npm ERR! ERESOLVE unable to resolve dependency tree
해결 방법:
# node_modules 삭제 후 재설치
rm -rf node_modules package-lock.json
npm install
# 또는 legacy 모드 사용
npm install --legacy-peer-deps
실행 오류
500 Internal Server Error
증상:
- 페이지 로딩 시 500 에러
- 아무런 내용 없이 빈 화면
원인 파악:
-
로그 확인
# Laravel 로그
tail -f storage/logs/laravel.log
# 또는 Docker 로그
docker logs myapp-web -f -
상세 에러 보기
# .env에서 디버그 활성화 (개발 환경만)
APP_DEBUG=true
일반적인 원인:
| 원인 | 해결 방법 |
|---|---|
| 캐시 문제 | php artisan cache:clear |
| 설정 캐시 | php artisan config:clear |
| 뷰 캐시 | php artisan view:clear |
| 권한 문제 | chmod -R 775 storage bootstrap/cache |
| .env 미설정 | cp .env.example .env && php artisan key:generate |
Class Not Found
증상:
Class "App\Some\Class" not found
해결 방법:
# Composer autoload 재생성
composer dump-autoload
# 또는 전체 캐시 정리
php artisan optimize:clear
Route Not Found (404)
증상:
404 | NOT FOUND
확인 사항:
-
라우트 목록 확인
php artisan route:list | grep "경로명" -
라우트 캐시 정리
php artisan route:clear -
미들웨어 확인
// routes/web.php 또는 api.php에서 미들웨어 확인
Route::middleware(['tenant'])->group(...)
환경 설정 문제
APP_KEY 미설정
증상:
No application encryption key has been specified.
해결 방법:
php artisan key:generate
.env 파일 누락
증상:
- 환경변수가 null로 나옴
- 설정값이 적용되지 않음
해결 방법:
# .env 파일 생성
cp .env.example .env
# 설정 수정
vi .env
# 캐시 정리 (설정 캐시된 경우)
php artisan config:clear
환경변수가 적용되지 않음
증상:
.env수정 후에도 이전 값 사용
해결 방법:
# 설정 캐시 정리
php artisan config:clear
# Docker 환경이면 컨테이너 재시작
docker restart myapp-web
tip
php artisan config:cache를 사용하면 .env 변경 후 반드시 config:clear가 필요합니다.
성능 문제
페이지 로딩이 느림
원인 파악:
-
Laravel Debugbar 설치 (개발 환경)
composer require barryvdh/laravel-debugbar --dev -
쿼리 확인
- Debugbar에서 Queries 탭 확인
- N+1 문제 확인
일반적인 해결 방법:
// 1. Eager Loading 사용
$users = User::with('tenant', 'roles')->get();
// 2. 캐싱 활용
Cache::remember('key', 3600, function () {
return DB::table('expensive_query')->get();
});
// 3. 인덱스 추가
Schema::table('users', function (Blueprint $table) {
$table->index(['tenant_id', 'email']);
});
메모리 부족
증상:
Allowed memory size of XXX bytes exhausted
해결 방법:
-
PHP 메모리 증가
# php.ini 또는 Docker 환경변수
memory_limit = 512M -
대량 데이터 처리 시 chunk 사용
User::chunk(1000, function ($users) {
foreach ($users as $user) {
// 처리
}
});
인증 문제
로그인이 안 됨
확인 사항:
-
세션 드라이버 확인
# .env
SESSION_DRIVER=redis # 또는 database -
Redis/Database 연결 확인
php artisan tinker
>>> Redis::ping()
>>> DB::connection()->getPdo() -
CSRF 토큰 확인
<form method="POST">
@csrf <!-- 반드시 포함 -->
</form>
세션이 유지되지 않음
원인:
- 쿠키 도메인 설정 문제
- SESSION_DOMAIN 불일치
해결 방법:
# .env
SESSION_DOMAIN=.example.com # 서브도메인 공유 시
SESSION_SECURE_COOKIE=false # HTTPS가 아닌 경우
빠른 진단 명령어
전체 캐시 정리
php artisan optimize:clear