활성 모듈/플러그인마다 프론트엔드 IIFE JS·CSS 가 개별 HTTP 요청으로 로드되어
확장 수에 비례해 요청이 늘어나는 오버헤드를, 종류별 1개 번들로 서버 병합해 줄인다.
각 확장 IIFE 자가등록 계약(핸들러/리스너/preblocker)은 priority 순 물리 병합으로
실행 순서가 보존되어 그대로 동작한다.
## 백엔드
- 신규 ExtensionBundleService — 정렬(uasort priority)·필터(global)·concat(\n;\n
구분자로 ASI 경계 보호)·소스맵(prod strip / dev rewrite)·version-in-path 디스크
캐시·확장별 fine-grained try/catch(한 확장 실패가 번들 전체를 붕괴시키지 않음)
- AbstractModule/AbstractPlugin::getBuiltAssetAbsolutePaths — _bundled 경로
정확 해석용 절대경로 게터(getAssetFilePath 하드코딩 복제 회피)
- PublicModule/PluginController::serveBundle{Js,Css} + routes/api.php 4개
(/api/{modules,plugins}/bundle.{js,css}?v={version}, fileResponse ETag/304 재사용)
- config/filesystems.php ext-bundles 디스크 + storage/.gitignore + 루트 .gitignore
- 신규 ext-bundles:cleanup 커맨드 + {module,plugin,template}:cache-clear 번들
정리 통합 + dev-dashboard 버튼
## 프론트엔드 (engine-v1.52.0)
- TemplateApp.loadExtensionAssets — 개별 로딩 → bundleUrls 기반 모듈→플러그인
순 번들 로딩. bundleUrls 부재 시 개별 로딩 폴백(회귀 안전)
- ModuleAssetLoader.loadBundle + parseBundleUrlsFromConfig + ExtensionBundleUrls
- TemplateComposer/UserTemplateComposer bundleUrls 뷰변수 + app/admin.blade.php
- core:build 재빌드 산출물(public/build/core/*)
## 버전
- 코어 7.0.1 → 7.0.2 bump. 7.0.1 이 이미 2026-07-03 공개 릴리스이므로 그 위 신규
기능은 +1 bump(new-bump). config/app.php(SSoT) + .env{.example,.testing.example,
.testing} + README 뱃지 + INSTALL 예시 + 루트 CHANGELOG 신규 [7.0.2] 섹션 동기화.
- 확장 g7_version 상향 안 함(>=7.0.0 유지) — 6개 프론트 에셋 확장이 신규 코어
표면을 자기 코드에서 호출하지 않고 개별 서빙 라우트 존치+프론트 폴백으로 코어
7.0.0 에서도 동작 → 실제 의존 없음( 결정).
- 부수 결함 수정: config/app.php 편집으로 활성화된 core-update-targets-coverage
룰이 v1.51.0 에서 추가된 vite.config.{editor,devtools}.js 가 app.update.targets
에 미등재됨을 검출 → 추가. 코어 업데이트 시 편집기/devtools 빌드 설정 갱신 누락
방지(CHANGELOG [7.0.2] Fixed).
## 규정/audit/문서/테스트
- ("확장 번들 병합" 절+파일유형표+E2E경로) / AGENTS.md /
docs/extension/module-assets.md / docs/cheatsheet.md
- coverage.json 4항목 + codified 룰 4종(url-same-origin, concat-separator,
asset-path-getter, clears-template-caches-no-file-delete)
- 루트 CHANGELOG [7.0.2] Added/Fixed / 엔진 CHANGELOG engine-v1.52.0 Added
- Vitest 11(loadBundle + concat 자가등록) + PHPUnit 17(Service 12 + Feature 5)
+ Playwright spec + 시나리오 매니페스트
- 브라우저 실측(g7.dev): 홈/관리자 번들 각 1건·개별 iife 0건, gdpr 인터셉터
정상, 활성화 토글 반영, 장바구니→체크아웃·게시판 글쓰기 정상. g7_2.dev 미적용
대비 확장 요청 11~12→4건, DOMContentLoaded ~843~957→605~741ms(페이로드 무손실)
## 도구 보완
- pre-commit-review 스킬 에 엔진 경로 감지 게이트(5-pre + 보고 5e행) 신설 —
매핑 표에 엔진 파일이 있으면 엔진 CHANGELOG 판정을 강제(이번 초기 누락 재발 방지)
139 lines
2.5 KiB
Plaintext
139 lines
2.5 KiB
Plaintext
*.log
|
|
.DS_Store
|
|
.env
|
|
.env.backup
|
|
.phpactor.json
|
|
.phpunit.result.cache
|
|
/.fleet
|
|
/.idea
|
|
/.nova
|
|
/.phpunit.cache
|
|
/.vscode
|
|
/.zed
|
|
/auth.json
|
|
/node_modules/public/hot
|
|
/public/storage
|
|
/storage/*.key
|
|
/storage/pail
|
|
/storage/composer
|
|
/vendor/*
|
|
!/vendor/.gitkeep
|
|
/.composer
|
|
Homestead.json
|
|
Homestead.yaml
|
|
Thumbs.db
|
|
|
|
# Logs
|
|
logs
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
dev-debug.log
|
|
# Dependency directories
|
|
node_modules/
|
|
# Environment variables
|
|
# Editor directories and files
|
|
.idea
|
|
.vscode
|
|
*.suo
|
|
*.ntvs*
|
|
*.njsproj
|
|
*.sln
|
|
*.sw?
|
|
# OS specific
|
|
|
|
# Task files
|
|
# tasks.json
|
|
# tasks/
|
|
|
|
# Settings JSON files (환경별 설정)
|
|
/storage/app/settings/
|
|
|
|
# 확장 프론트엔드 병합 번들 캐시 (version-in-path, 런타임 생성)
|
|
/storage/app/ext-bundles/
|
|
|
|
# Bootstrap cache (auto-generated)
|
|
/bootstrap/cache/*
|
|
!/bootstrap/cache/.gitkeep
|
|
|
|
# ===== 확장 시스템 =====
|
|
|
|
# 활성 확장 디렉토리 (설치된 복사본 — Git 제외)
|
|
modules/*/
|
|
!modules/_bundled/
|
|
plugins/*/
|
|
!plugins/_bundled/
|
|
templates/*/
|
|
!templates/_bundled/
|
|
|
|
# _bundled 내부 의존성 디렉토리 제외
|
|
modules/_bundled/*/vendor/
|
|
modules/_bundled/*/node_modules/
|
|
plugins/_bundled/*/vendor/
|
|
plugins/_bundled/*/node_modules/
|
|
templates/_bundled/*/node_modules/
|
|
|
|
# _pending 디렉토리 (외부 다운로드 임시 영역 — 구조만 버전관리)
|
|
!modules/_pending/
|
|
!plugins/_pending/
|
|
!templates/_pending/
|
|
|
|
# ===== 언어팩 시스템 =====
|
|
|
|
# 활성 언어팩 디렉토리 (설치된 복사본 — Git 제외)
|
|
lang-packs/*/
|
|
!lang-packs/_bundled/
|
|
|
|
# _pending 디렉토리 (외부 다운로드 임시 영역)
|
|
lang-packs/_bundled/_pending/
|
|
!lang-packs/_pending/
|
|
|
|
# DevTools debug dump
|
|
storage/debug-dump/
|
|
|
|
# MaxMind GeoLite2 DB (재배포 금지 — 각 환경에서 직접 다운로드)
|
|
storage/app/geoip/
|
|
|
|
# 인스톨러 런타임 산출물 — 각 환경에서 자동 생성/소비
|
|
storage/installer-state.json
|
|
storage/installer/
|
|
|
|
# 개발 전용 파일
|
|
.api-test/
|
|
.serena/
|
|
.claudeignore
|
|
.mcp.json
|
|
boost.json
|
|
cypress/
|
|
cypress.config.js
|
|
.env.testing
|
|
.claude/settings.local.json
|
|
|
|
# ===== 보안: 민감 파일 방어 패턴 =====
|
|
*.pem
|
|
*.p12
|
|
*.pfx
|
|
*.jks
|
|
*.key
|
|
!storage/*.key
|
|
credentials.json
|
|
service-account.json
|
|
id_rsa
|
|
id_ed25519
|
|
.htpasswd
|
|
*.sql
|
|
*.sqlite
|
|
*.db
|
|
|
|
# NHN KCP 결제플러그인 PG 공개키는 예외 처리
|
|
!plugins/_bundled/*/bin/pub.key
|
|
|
|
.claude/tmp/
|
|
|
|
# ===== Playwright E2E =====
|
|
tests/Playwright/.auth/
|
|
playwright-report/
|
|
test-results/
|
|
# Playwright MCP 세션 아티팩트(스냅샷/콘솔 로그) — 커밋 대상 아님
|
|
.playwright-mcp/
|