# Webmaker 기존 기능 적용 기록 (Ariweb Suite 0.1.1 → 0.2.0, 개발 지시 §0.1·§0.2·§0.5 · v0.2.0 직접 편집) - 원본: https://source.ibit.kr/OZ-Group/WebHosting_AI_agent — 고정 revision `4b8c4d0de0f69025001a9e0a28a58a94e1a1f088` (Webmaker 1.8.0, 브랜치 `feature/visual-editor-v1.8.0`·main 원격 ref 검증됨; 0.1.1 의 불변 기준 revision `3b10859884ef2fd0f2af11934ab6c16370fd64b8`(v1.7.3) 위의 변경). 개발 중에는 커밋 전 작업 트리에서 나란히 도입했고(`IMPORTED_SOURCES.md` 의 upstream 칸, workingTreeDirty:true), 커밋 뒤 `scripts/import-sources.mjs` 의 pin 을 `4b8c4d0` 으로 올렸다 — 그 pin 으로 다시 만든 도입 기록은 workingTreeDirty:false, 184 파일(수정 8 = Suite 블록 파일). 도입 경로 `modules/webmaker/` - 접근 위치: 포털 사이트 상세 › 제작 탭 › "제작 화면 열기" (`/sso/webmaker?site=`) → Webmaker `/api/auth/sso` → 기존 빌더 화면. 포털 사용자당 Webmaker 계정 `aw-<그룹>-<사용자>` 가 자동으로 생기며 별도 로그인은 없다. - 회귀 테스트: `cd modules/webmaker && CLAUDE_BIN=<즉시 실패하는 가짜 실행 파일> node --test test/*.test.js` (원본 6개 파일 + 신규 `test/ariweb.test.js` + 0.2.0 `test/visual-editor.test.js`·`test/visual-editor-server.test.js`). Suite 쪽 회귀는 `test/webmaker-visual-editor.test.mjs`. 실제 화면 확인 결과는 출시 검증 기록(VERSION_HISTORY.md 검증 절)에 적는다. - 0.2.0 추가 기능 — **직접 편집(시각 편집기)**: 제작 화면(Webmaker 빌더)의 미리보기 도구 줄 "직접 편집". 그대로 도입(Webmaker 1.8.0 기능) + Suite 최소 연결 변경 1건(직접 편집 저장 `PUT /api/sites//visual/<페이지>` 에도 저장본 `rev` 충돌 검사(§9.3) 적용 — 소스 편집기와 같은 409 + 양쪽 요약). 직접 편집은 AI Wallet(캐시)을 쓰지 않으므로 포털 AI Wallet 표시에 영향이 없고, 저장본(버전 `visual-edit`)은 포털 배포 화면의 저장본 선택에 그대로 보인다. | §0.1 기능 | 적용 구분 | 접근 위치 / 비고 | |---|---|---| | `AI에게 맡기기`·`내가 고르기` Site 제작 | 그대로 도입 | 제작 탭 → Webmaker 빌더. 포털에서 사이트를 만들 때 제작 방식(ai·manual·quick)을 골라 프로젝트를 만든다(내부 API `POST /api/internal/ariweb/projects`) | | Site Brief 작성과 확인 | 그대로 도입 | Webmaker 기획 단계 그대로 | | Template과 기존 제작 Module | 그대로 도입 | Webmaker 생성 탭 "템플릿에서 시작"·모듈 관리 그대로 | | Page 생성·편집·미리보기·저장 | 최소 연결 변경 | 저장(PATCH 기본 사항·PUT 소스 편집·0.2.0 PUT 직접 편집)에 `rev` 기반 동시 편집 충돌 감지(409 + 두 버전 요약)를 더함(§9.3). rev 를 보내지 않는 기존 화면은 그대로 동작 | | 직접 편집(시각 편집기, Webmaker 1.8.0) | 그대로 도입 + 최소 연결 변경(rev 충돌) | 제작 화면 미리보기 도구 줄 "직접 편집" — 글 바로 고치기·블록 끌어 옮기기·구성 요소 7종 끌어다 놓기·속성 창·실행 취소/다시 실행·Ctrl+S 저장·저장하지 않은 변경 보호. 페이지 스크립트 비실행 캔버스(sandbox+CSP nonce), 서버 저장 검증(새 스크립트·핸들러·위험 주소·iframe 등 거절). AI 캐시 미사용 | | AI 생성·수정과 Wallet/Cache 차감 | 그대로 도입 | Webmaker 캐시(credits) 그대로. 포털은 `/api/internal/ariweb/credits/` 으로 잔액을 읽어 AI Wallet 으로 표시(호스팅 사용량과 분리 §0.2) | | 이전 저장본과 배포할 저장본 선택 | 최소 연결 변경 | 저장본 목록은 Webmaker 버전 기록(git.changes) 그대로. 배포할 저장본 선택은 포털 배포 탭(`/api/internal/ariweb/projects//export?version=N`)에서 한다 | | Domain·DNS·TLS 관리 기능 | 그대로 도입 | 등록기관(Openprovider·Porkbun·Route 53)·DNS 공급자·네임서버 이전·레코드 관리는 Webmaker 도메인 탭 그대로(포털 도메인 화면의 "도메인 구매·DNS 자동화(Webmaker)" 링크). 포털은 연결 상태·소유 확인·HTTPS 검증만 가진다 | | Gitea Source 연결과 변경 이력 | 그대로 도입 | gitstore·connectors/gitea 그대로. 포털 Source 탭은 `/api/internal/ariweb/projects//source` 로 읽어 표시 | | 관리형 또는 외부 대상 배포에 이미 사용할 수 있는 기능 | 미사용(이번 버전) | Webmaker 의 배포 서버(deploy.js: local/ssh tar-over-ssh)는 포털 연결 프로젝트에서는 쓰지 않는다. 운영 배포는 HAL/Node Agent 가 맡는다(§32). 포털에 연결되지 않은 Webmaker 단독 프로젝트는 기존 기능 그대로 동작 | | 배포 결과 확인과 이전 Version 복구 기능 | 미사용(이번 버전) | 위와 같은 이유로 포털 배포 탭(되돌리기 = HAL site.rollback)이 담당. Webmaker 발행(plan/publish)은 포털 연결 프로젝트에서 409 로 막고 포털 배포 화면으로 안내 | | AriMail Server 연결과 Mail 사용량 표시 | 그대로 도입 | Webmaker 관리자 콘솔 메일 서버 등록부·사용량 연동 그대로. 포털 메일 화면은 별도(메일 영역) | | 사용자·관리자 화면의 설정·상태·통계 기능 | 그대로 도입 | Webmaker 관리자 콘솔·설정 페이지(8795) 그대로 | ## §0.2 수정·개선 항목 | 항목 | 구분 | 구현 | |---|---|---| | 별도 로그인 없이 현재 사용자·그룹으로 이용 | 정책 개선 | `GET /api/auth/sso?ticket=`(server.js) + `lib/auth.ensureSsoUser` + `lib/ariweb.verifyTicket`(60초·1회용·HMAC). 상단 배너(`public/index.html #ariwebBanner`, app.js)에 그룹·사이트 표시 | | Project 와 운영 Site 구분 | 정책 개선 | `lib/ariweb.js` 연결 등록부(data/ariweb-links.json), 배너 문구, 사이트 조회 응답 `ariweb` 필드 | | Draft Site 가 운영 사이트 수를 쓰지 않음 | 정책 개선(포털) | portal/sites: 초안 생성은 예약 없음, 최초 공개 배포 때 예약 | | 관리형/외부 배포의 비용·책임·상태 구분 | 정책 개선(포털) | portal/sites 배포 방식 화면·동의 기록 | | 상품 권리·Site 별 보장량 배포 전 확인 | 정책 개선(포털) | portal/sites precheck | | AI Wallet 과 Hosting·Mail 사용량 분리 | 정책 개선(포털) | 제작 탭 AI Wallet 카드 / 사용량 탭 별도 | | 운영 Version 을 바로 덮어쓰지 않고 Preview 후 배포 | 정책 개선 | Webmaker 발행 차단(연결 프로젝트) + 포털 배포 탭 저장본 선택 | | 진행 상태를 공통 상태·알림에 표시 | 정책 개선(포털) | lib/jobs + lib/notify | | Project 삭제가 운영 Site·Domain·Source 를 자동 삭제하지 않음 | 정책 개선 | `DELETE /api/sites/` 가 포털 `/internal/webmaker/project-impact` 를 서명 호출해 영향을 보이고, 운영 중이면 거부·확인(acknowledgeImpact) 후에만 폐기. 포털 데이터는 건드리지 않음 | | 동시 편집 충돌 표시 | 오류 수정 | `lib/store.js` rev + `server.js revConflict` | | 기존 기능 오류 수정 | — | 이번 도입에서 Webmaker 1.7.3 회귀 테스트 전부 통과, 별도 오류 발견 없음 |