커스텀 템플릿인데 원본이랑 이름/버전이 겹쳐서 생기는 오작동

php artisan template:install <새이름> 으로 기존 사용자 템플릿(sirsoft-basic)을 복제해서 새 커스텀 템플릿을 만들었어요.
홈페이지 레이아웃도 새로 짜고, 컴포넌트도 하나 추가하고, 브랜딩도 다 바꿨습니다.

복제한 템플릿의 template.json에 있는 github_url이 원본 저장소(g7-template-sirsoft-basic) 그대로 남아있더라고요. 그래서 관리자 화면에서 계속 "업데이트 가능 (1.0.0 → 1.0.3)" 알림이 떴습니다. 근데 이건 진짜 업데이트가 아니라, 완전히 다른 제 커스텀 템플릿인데 원본이랑 이름/버전이 겹쳐서 생기는 오작동이었어요.

별생각 없이 이 "업데이트"를 눌렀더니, 제가 만든 홈페이지 디자인·컴포넌트·브랜딩이 전부 원본 sirsoft-basic 파일로 덮어써졌습니다. 사전에 "로컬 변경사항이 사라질 수 있다"는 경고 문구가 전혀 없었어요. 
추가로, 템플릿 복제 시 vite.config.ts의 IIFE 빌드 설정(컴포넌트 전역변수명)이 새 식별자에 맞게 자동으로 안 바뀌어서, 공식 가이드대로 template:install만 따라 해도 관리자 화면에서 "컴포넌트 번들을 찾을 수 없습니다" 에러가 뜨게 됩니다.
|

답변 6개 / 댓글 1개

2026-08-18 (화) 17:25:15
이 경우는 단순히 디자인 수정 문제가 아니라 복제한 템플릿의 식별자와 원본 템플릿 정보가 그대로 남아서 발생한 문제로 보입니다.
template.json의 이름/식별자 및 github_url, 버전을 새 템플릿에 맞게 변경하고, vite.config.ts의 컴포넌트 전역 식별자도 함께 변경해야 합니다.
특히 커스텀 템플릿인데 원본 GitHub 저장소를 바라보게 되어 있으면 관리자에서 원본 업데이트를 새 버전으로 인식할 수 있으니 주의해야 합니다. 업데이트 전에는 반드시 템플릿 백업도 해두시는 게 좋습니다
2026-07-30 (목) 00:09:06
이건 다음 패치때 검증부분 추가될 예정입니다..
2026-07-29 (수) 22:42:46
그누7
안녕하세요. 기본적으로 제공되는 템플릿 (sirsoft-basic)을 다른 이름으로 통째로 복제한 상태에서 원하는 레이아웃으로 편집후, 템플릿 설치를 진행하여 이용 도중 템플릿 관리 화면에서 업데이트 버튼을 클릭하였는데, 레이아웃이 손/망실된 상황으로 이해 됩니다.

이 경우, 기존 편집 레이아웃을 덮어쓸지 여부를 묻는 모달이 표출되는데, '모두 교체'를 선택하시게 되면 말씀하신대로 기존 레이아웃을 덮어쓰게 됩니다.

1785327001_A5OA4HzYel.webp

이 경우 코드 편집화면이나 레이아웃 편집기 화면에서 버전 기록을 클릭하여 하나씩 복구할 수 있지만,
전체 레이아웃에 대한 복구가 필요한 상황이라면 번거로우실 수 있습니다.

아래 명령어를 이용하시면 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

답변을 작성하려면 로그인이 필요합니다.