커스텀 템플릿인데 원본이랑 이름/버전이 겹쳐서 생기는 오작동
홈페이지 레이아웃도 새로 짜고, 컴포넌트도 하나 추가하고, 브랜딩도 다 바꿨습니다.
복제한 템플릿의 template.json에 있는 github_url이 원본 저장소(g7-template-sirsoft-basic) 그대로 남아있더라고요. 그래서 관리자 화면에서 계속 "업데이트 가능 (1.0.0 → 1.0.3)" 알림이 떴습니다. 근데 이건 진짜 업데이트가 아니라, 완전히 다른 제 커스텀 템플릿인데 원본이랑 이름/버전이 겹쳐서 생기는 오작동이었어요.
별생각 없이 이 "업데이트"를 눌렀더니, 제가 만든 홈페이지 디자인·컴포넌트·브랜딩이 전부 원본 sirsoft-basic 파일로 덮어써졌습니다. 사전에 "로컬 변경사항이 사라질 수 있다"는 경고 문구가 전혀 없었어요.
추가로, 템플릿 복제 시 vite.config.ts의 IIFE 빌드 설정(컴포넌트 전역변수명)이 새 식별자에 맞게 자동으로 안 바뀌어서, 공식 가이드대로 template:install만 따라 해도 관리자 화면에서 "컴포넌트 번들을 찾을 수 없습니다" 에러가 뜨게 됩니다.
답변 6개 / 댓글 1개
template.json의 이름/식별자 및 github_url, 버전을 새 템플릿에 맞게 변경하고, vite.config.ts의 컴포넌트 전역 식별자도 함께 변경해야 합니다.특히 커스텀 템플릿인데 원본 GitHub 저장소를 바라보게 되어 있으면 관리자에서 원본 업데이트를 새 버전으로 인식할 수 있으니 주의해야 합니다. 업데이트 전에는 반드시 템플릿 백업도 해두시는 게 좋습니다
이 경우, 기존 편집 레이아웃을 덮어쓸지 여부를 묻는 모달이 표출되는데, '모두 교체'를 선택하시게 되면 말씀하신대로 기존 레이아웃을 덮어쓰게 됩니다.

이 경우 코드 편집화면이나 레이아웃 편집기 화면에서 버전 기록을 클릭하여 하나씩 복구할 수 있지만,
전체 레이아웃에 대한 복구가 필요한 상황이라면 번거로우실 수 있습니다.
아래 명령어를 이용하시면 github이 아닌 번들 디렉토리 기준으로 덮어쓰게 됩니다.
(단, 번들(templates/_bunded) 디렉토리가 아닌 활성(templates) 디렉토리에서 작업하셨다면 사용할 수 없는 방법입니다)
php artisan template:update {id} --force --source=bundled
다만 template.json 에 있는 템플릿 이름이 디렉토리명과 불일치한데도 별도의 예외처리가 없었던 부분은 미흡했던 점을 인정합니다.
다음 릴리즈나, 다다음 릴리즈에서 이러한 불편함이 없도록 개선 하도록 하겠습니다,
감사합니다.
답변에 대한 댓글 1개
template:install <새이름>로 생성되는 커스텀 템플릿은 원본 sirsoft-basic과 분리된 독립 확장 <새이름>으로 생성되어야 하며,
vendor-template 형식의 고유 식별자를 가져야 합니다.
복제 시 template.json의 identifier, name, version, github_url뿐 아니라
vite.config.ts의 IIFE 전역 변수명과 빌드 산출물 식별 정보까지 새 템플릿 기준으로 함께 치환되어야 하는데,
현재 상황은 단순 복사만 이루어지고 관련 식별 정보는 치환되지 않은 것으로 보입니다.
또한 원본 GitHub URL은 제거하거나 새 저장소(사용자 레포지)를 명시적으로 지정하여 독립적인 업데이트 소스를 갖도록 관리해야 합니다.
현재처럼 원본 GitHub URL이 남아 있으면,
GitHub 저장소가 지정된 경우 GitHub를 먼저 조회하고 실패 시 _bundled로 폴백하는 구조이므로,
커스텀 템플릿이 공식 템플릿의 후속 버전으로 잘못 판단될 수 있고,
template:update 실행 시 독립적인 레이아웃/컴포넌트/브랜딩이 원본 파일로 덮어써질 위험이 있습니다.
또한 공식 가이드대로 template:install만 수행해도 바로 빌드/활성화할 수 있도록 IIFE 이름과 관련 설정이 자동으로 동기화되어야 하며,
이는 단순히 github_url만 수정할 문제가 아니라,
템플릿 복제 작업 과정에서 식별자와 빌드 설정 등이 함께 변경되었는지 설치/빌드/활성화 흐름 전체를 기준으로 확인할 필요가 있습니다.
결국 모든 템플릿은 고유한 식별자와 업데이트 정보를 갖는 독립적인 템플릿으로 관리 되어야 합니다
※ 위 내용은 동일한 G7 인스턴스(동일 호스트/동일 런타임)를 전제로 합니다.
요약하자면 :
1. 업데이트 시스템 문제 - 업데이트 계보를 독립시키지 않은 -
원본의 업데이트 메타데이터(identifier, version, github_url 등)가 그대로 복제되어
커스텀 템플릿을 공식 템플릿의 후속 버전으로 잘못 판단하고,
template:update 시 원본 파일로 덮어쓸 수 있습니다.
2. 빌드 시스템 문제 - 빌드 식별자를 독립시키지 않은 -
vite.config.ts의 IIFE 전역 변수명과 빌드 식별 정보가 새 템플릿에 맞게 변경되지 않아
런타임에서 컴포넌트 번들을 찾지 못하는 문제가 발생합니다.
※ 참고 :
docs/extension/template-workflow.md
docs/frontend/template-development.md
docs/extension/extension-update-system.md
docs/extension/template-commands.md
답변을 작성하려면 로그인이 필요합니다.
다만, 뭔가가 핵심에서 조금 벗어난 느낌입니다. ㅠㅠ