Skip to content

fix: installer_completed=true 환경에서 테이블 존재 여부 우회 버그 수정#41

Open
GyusoonKim wants to merge 1 commit into
gnuboard:mainfrom
GyusoonKim:fix/installer-completed-table-check
Open

fix: installer_completed=true 환경에서 테이블 존재 여부 우회 버그 수정#41
GyusoonKim wants to merge 1 commit into
gnuboard:mainfrom
GyusoonKim:fix/installer-completed-table-check

Conversation

@GyusoonKim

@GyusoonKim GyusoonKim commented May 21, 2026

Copy link
Copy Markdown

01. 버그 수정: 신규 서버 배포 시 테이블 not found 오류

문제

INSTALLER_COMPLETED=true 상태에서 신규 서버에 배포 시
migrate 실행 전 부팅 단계에서 g7_modules, g7_plugins,
g7_templates, language_packs 테이블이 없다는 오류 발생.

원인

isExtensionTableReady() 메서드가 installer_completed=true이면
Schema::hasTable() 체크를 건너뛰고 바로 true를 반환.
마이그레이션 전 상태에서 테이블이 없어도 쿼리를 실행하여 오류 발생.

수정 내용

  • installer_completed fast-path 제거
  • 항상 Schema::hasTable() 실제 확인
  • static 캐시로 같은 요청 내 중복 조회 방지

영향 범위

CachesModuleStatus, CachesPluginStatus, CachesTemplateStatus,
ModuleRouteServiceProvider, PluginRouteServiceProvider,
LanguagePackServiceProvider

02. 버그 수정: MySQL read/write 분리 설정의 폴백 누락

문제

config/database.php의 MySQL read/write 분리 설정에서
DB_READ_DATABASE, DB_WRITE_DATABASE 환경변수가 없을 때
DB_DATABASE로 폴백되지 않아 DB 연결 실패 발생.

username, password도 동일하게 폴백 누락.

재현 방법

.env에 DB_READ_, DB_WRITE_ 없이 DB_DATABASE만 설정하면
php artisan migrate 실행 시 root/laravel DB로 연결 시도하여
Access denied 오류 발생.

원인 (수정 전)

'read' => [
'host' => [env('DB_READ_HOST', env('DB_HOST', '127.0.0.1'))],
'database' => env('DB_READ_DATABASE', 'laravel'), // ← DB_DATABASE 폴백 없음
'username' => env('DB_READ_USERNAME', 'root'), // ← DB_USERNAME 폴백 없음
'password' => env('DB_READ_PASSWORD', ''), // ← DB_PASSWORD 폴백 없음
],

수정 후

'read' => [
'host' => [env('DB_READ_HOST', env('DB_HOST', '127.0.0.1'))],
'database' => env('DB_READ_DATABASE', env('DB_DATABASE', 'laravel')),
'username' => env('DB_READ_USERNAME', env('DB_USERNAME', 'root')),
'password' => env('DB_READ_PASSWORD', env('DB_PASSWORD', '')),
],
'write' => [
'host' => [env('DB_WRITE_HOST', env('DB_HOST', '127.0.0.1'))],
'database' => env('DB_WRITE_DATABASE', env('DB_DATABASE', 'laravel')),
'username' => env('DB_WRITE_USERNAME', env('DB_USERNAME', 'root')),
'password' => env('DB_WRITE_PASSWORD', env('DB_PASSWORD', '')),
],

영향 범위

  • read/write 분리 전용 환경변수를 설정하지 않은 일반 사용자
    (대부분의 G7 사용자가 해당)
  • DB_DATABASE/DB_USERNAME/DB_PASSWORD만 설정한 환경에서
    DB 연결이 정상 동작하지 않는 치명적 버그

참고

Laravel 공식 문서의 read/write 분리 설정도
공통 값은 폴백 체인을 권장합니다.
https://laravel.com/docs/database#read-write-connections

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant