app->environment('testing')) { return; } $runtimePath = base_path(self::RUNTIME_PATH_RELATIVE); if (! is_file($runtimePath)) { return; } $runtime = @include $runtimePath; if (! is_array($runtime)) { return; } $this->applyDatabaseConfig($runtime); $this->applyAppKey($runtime); } /** * runtime 배열의 DB 자격증명을 config('database.connections.mysql.*') 에 주입. * * @param array $runtime */ protected function applyDatabaseConfig(array $runtime): void { $write = $runtime['db']['write'] ?? null; if (! is_array($write)) { return; } $prefix = $runtime['db']['prefix'] ?? ''; // mysql 커넥션의 read/write 구조에 맞춰 주입 // config/database.php:48-65 가 이 키 구조를 사용 if (! empty($write['host'])) { Config::set('database.connections.mysql.write.host', [$write['host']]); Config::set('database.connections.mysql.write.port', $write['port'] ?? '3306'); Config::set('database.connections.mysql.write.database', $write['database'] ?? ''); Config::set('database.connections.mysql.write.username', $write['username'] ?? ''); Config::set('database.connections.mysql.write.password', $write['password'] ?? ''); } $read = $runtime['db']['read'] ?? null; if (is_array($read) && ! empty($read['host'])) { Config::set('database.connections.mysql.read.host', [$read['host']]); Config::set('database.connections.mysql.read.port', $read['port'] ?? '3306'); Config::set('database.connections.mysql.read.database', $read['database'] ?? ''); Config::set('database.connections.mysql.read.username', $read['username'] ?? ''); Config::set('database.connections.mysql.read.password', $read['password'] ?? ''); } else { // read 가 별도 지정되지 않은 경우 write 값으로 동기화 (단일 DB 시나리오) Config::set('database.connections.mysql.read.host', [$write['host']]); Config::set('database.connections.mysql.read.port', $write['port'] ?? '3306'); Config::set('database.connections.mysql.read.database', $write['database'] ?? ''); Config::set('database.connections.mysql.read.username', $write['username'] ?? ''); Config::set('database.connections.mysql.read.password', $write['password'] ?? ''); } Config::set('database.connections.mysql.prefix', $prefix); } /** * runtime 배열의 APP_KEY 를 config('app.key') 에 주입. * * Encrypter 가 lazy resolve 이므로 register 단계 변경으로 충분. * * @param array $runtime */ protected function applyAppKey(array $runtime): void { $key = $runtime['app']['key'] ?? null; if (! is_string($key) || $key === '') { return; } Config::set('app.key', $key); } }