한선씨 모듈 배포 체계 설계 — pkg.crowny.org 재정의 (P5)
개요
게이트웨이 한선씨화 P5. pkg.crowny.org를 npm(Verdaccio) 레지스트리에서 한선씨 모듈 배포 체계로 재정의하는 설계 + 프로토타입.
핵심 인식: 한선씨 모듈은 가져오기 파일기반(libs/, CROWNY_STD)이라 npm 레지스트리가 본질적으로 불필요하다. 현 pkg.crowny.org = Verdaccio(127.0.0.1:4873)는 레거시이고 인증이 차단된 상태(토큰 무효 · htpasswd 빈 파일 · @crowny 패키지 0개. 참조: 2026-06-09-pkg-crowny-publish-blocker.md).
관련 파일:
- 프로토타입:
/Users/ef/crowny-gateway/한선게이트웨이/배포.한선(hanseonc_high 컴파일 통과) - 설계: 본 문서
① 한선씨 모듈 배포의 두 안
안 A — 파일기반 CROWNY_STD 동기화 (레지스트리 폐기) ★ 추천
한선씨 런타임은 가져오기 "X.한선" 시 다음 경로를 탐색한다:
- 현재 디렉토리
libs/(컴파일러 인접)$CROWNY_STD(현재/Users/ef/Downloads/CrownyTVM/std)
배포 단위 = 디렉토리(모듈 세트) + 매니페스트(파일 목록 + SHA256 해시 + 바이트수).
배포 흐름:
[생성] 배포.한선 매니페스트생성(디렉토리, 패키지명, 버전) → manifest.json
[전송] crowny-hub 가 디렉토리 + manifest.json 을 peer(mac-studio/macbook-intel)로 복사
[검증] peer 에서 배포.한선 매니페스트검증(디렉토리, manifest.json) → Ti/Om/Ta
[설치] 검증 통과(Ti) 시 CROWNY_STD/libs 로 파일 반영
장점:
- 레지스트리 인프라(Verdaccio/htpasswd/토큰) 전부 불필요 → 현재 차단 문제 자체가 소멸
- 무결성은 SHA256 해시 매니페스트로 보장 (npm tarball sha와 동급, 단 한선씨 네이티브)
- crowny-hub(= GitHub 대체)와 자연 연동 — 이미 커밋/버전추적/인수인계 인프라 존재
- 4상균형3진 검증 결과(Ti/Om/Ta)로 게이트웨이 헬스 체계와 동일 의미론
- 버전 범위 해석(semver range
^1.2.0)·의존성 그래프 해소가 npm만큼 자동화되어 있지 않음 → 매니페스트에requires필드 추가로 보강 가능(후속) - 외부(비-크라우니) 소비자는 npm 기대 → 안 B 이행기 병행 필요
안 B — 한선씨 패키지 레지스트리 (.toau/.한선 + 매니페스트 해시)
pkg.crowny.org를 한선씨 전용 레지스트리로 신규 구현: .한선 소스 + .toau 컴파일본 + 매니페스트(해시) 를 한 단위로 게시/조회. crowny-hub이 백엔드 스토리지·버전 인덱스 담당.
장점:
- 중앙 조회 가능(
배포 목록,배포 받기 <패키지>@<버전>), 버전 히스토리 보존 .toau동봉 시 peer가 재컴파일 없이 즉시 실행- 외부 노출 API를 한선씨 네이티브로 설계 → npm 의존 완전 탈피
- 서버(레지스트리 데몬)를 새로 만들어야 함 — 한선씨 HTTP 서버로 구현 필요(웹서버v2.한선 기반)
- 안 A 대비 인프라 비용↑. 한선씨 import 가 파일기반인 한 "조회 서버"의 한계효용이 낮음
추천
안 A를 1차 채택, 안 B는 안 A의 매니페스트 포맷을 그대로 재사용하는 상위 호환으로 후속 구현.
이유: 한선씨의 import 가 파일기반인 이상 레지스트리 데몬은 잉여 레이어다. 먼저 매니페스트 표준(해시 무결성)을 확정하고 crowny-hub 동기화로 "배포"를 실현한다. 중앙 조회/버전 히스토리가 실제로 필요해지면, 같은 매니페스트 포맷을 노출하는 한선씨 HTTP 레지스트리(안 B)를 pkg.crowny.org 뒤에 붙인다 — 포맷이 동일하므로 클라이언트(배포.한선) 무수정 확장.
② 이행기 레거시 JS 패키지 게시 — 인증 복구 절차
@crowny/gateway 5.0.2 등 기존 JS 패키지는 이행기 동안 Verdaccio 게시가 여전히 필요할 수 있다(peer mac 소비자용). 현재 차단 원인: htpasswd 빈 파일 → 인증 사용자 0명, 토큰 무효.
복구 = 사용자 액션 필요 (대화형 npm adduser는 세션 비대화 컨텍스트에서 실행 불가):
bash# 1) Verdaccio 사용자 생성 (대화형 — 사용자가 직접)
npm adduser --registry http://127.0.0.1:4873
# → username/password/email 입력 → ~/.npmrc 에 //127.0.0.1:4873/:_authToken 기록
# 2) publishConfig 우회 주의: package.json 의 publishConfig.registry 가
# --registry 플래그를 덮어쓴다. 토큰이 4873용만 유효하면 임시로
# publishConfig.registry 를 http://127.0.0.1:4873 로 변경 후 publish.
# 3) 게시
cd /Users/ef/crowny-gateway
npm publish --access public
# 4) 원복
npm config set @crowny:registry https://pkg.crowny.org
대안: htpasswd 백업이 있으면 복원(B), 또는 신규 사용자를 htpasswd에 직접 추가(C, 보안상 사용자 결정). 게이트웨이는 이 소스에서 직접 구동(node bin/cli.js)되므로 5.0.2 수정은 이미 라이브에 반영됨 — publish 차단이 기능을 막지 않는다.
③ pkg.crowny.org 도메인 — 한선씨 배포 호스트 전환 라우팅 변경안
현재 gateway.yaml: pkg.crowny.org → upstream http://127.0.0.1:4873(Verdaccio).
전환 단계 (무중단 · 라이브 :8080/:8443 비건드림)
단계 0 (현재 유지): Verdaccio 4873 그대로. 이행기 JS 게시 경로 보존.
단계 1 (병행 마운트): 한선씨 배포 API를 별도 포트(예: 한선씨 HTTP 서버 미래 안 B)로 띄우고, gateway.yaml 에 경로 분기 추가:
yaml- name: pkg
domain: pkg.crowny.org
upstream: http://127.0.0.1:4873 # 기본: 레거시 npm/Verdaccio
routes: # (게이트웨이 path 라우팅 지원 시)
"/han/*": http://127.0.0.1:<한선포트> # 한선씨 배포 매니페스트 API
경로 라우팅 미지원이면 별도 서브도메인 han-pkg.crowny.org 로 한선씨 호스트 신설 후 포트 등록:
bash~/.claude/scripts/crowny-ports.sh check <후보포트>
~/.claude/scripts/crowny-ports.sh set han-pkg.crowny.org <포트>
단계 2 (주체 전환): 한선씨 배포가 안정화되면 pkg.crowny.org 의 upstream 을 한선씨 배포 호스트로 교체, Verdaccio 는 legacy-pkg.crowny.org 로 강등(이행기 JS 소비자만).
단계 3 (폐기): @crowny/* JS 패키지가 모두 한선씨로 이행되면 Verdaccio 종료, pkg.crowny.org = 순수 한선씨 배포 호스트.
모든 포트 변경은crowny-ports.sh set으로 gateway.yaml(SSOT) 갱신. server.js 하드코딩 전check충돌 확인 필수. 라이브 :8080/:8443/9878/9907 프로세스 절대 종료 금지.
프로토타입 — 배포.한선
/Users/ef/crowny-gateway/한선게이트웨이/배포.한선 (hanseonc_high 컴파일 + 실행 검증 완료).
추천안(A)의 최소 단위 = 매니페스트 생성/쓰기/검증.
인터페이스:
함수 매니페스트생성(디렉토리, 패키지명, 버전) -> JSON 문자열
함수 매니페스트쓰기(디렉토리, 패키지명, 버전, 출력경로) -> Ti(1)/Ta(-1)
함수 매니페스트검증(디렉토리, 매니페스트경로) -> Ti(1 전부일치)/Om(0 불일치)/Ta(-1 읽기실패)
매니페스트 JSON 형식:
json{
"package": "@crowny/gateway-hanseon",
"version": "0.1.0",
"kind": "hanseon-module-set",
"host": "pkg.crowny.org",
"dir": "/Users/ef/crowny-gateway/한선게이트웨이",
"files": [
{"name": "TLS_SNI.한선", "sha256": "0036e25d...", "bytes": 5036},
{"name": "설정.한선", "sha256": "e36d294f...", "bytes": 3284}
],
"count": 5
}
구현 메모:
- 파일 목록 = 내장
파일목록(경로)(opcode 255,ls줄바꿈 문자열 반환) →줄분리→끝나는가(줄,".한선")필터 - 해시 = 내장
SHA256(내용)(opcode 291, 64자 hex). 라이브러리 불필요 - JSON 은 수동 문자열 조립(
JSON.한선미임포트 — 경량)._제이슨이스케이프로 따옴표/역슬래시 처리 - 검증은 매니페스트 줄에서
name/sha256추출 후 디스크 재해시 비교 → 변조/누락 = Om
쓰기: Ti(성공) -> /tmp/배포_매니페스트.json
검증: Ti(전부 해시 일치)
탐지결과: Om(불일치) PASS # 파일 변조/누락 시 정상 탐지
한선씨 함정 회피:
- 글로벌 배열 인덱스 대입 불가 → append-only(
추가)만 사용 파일존재()항상 -1 →매니페스트쓰기검증은 재읽기 글자수 비교로 우회설정()쓰기전용 → 읽기는꺼내- 인라인
;다단어 주석 금지 →//사용
잔여 이슈
- 의존성 그래프(
requires)·semver range 해석 미구현 — 안 A 매니페스트에 필드 추가 후속 - 안 B(한선씨 HTTP 레지스트리 데몬)는 미구현 — 실제 중앙 조회 필요 시 웹서버v2.한선 기반 구현
- crowny-hub ↔ 매니페스트 연동(peer 자동 동기화) 훅 미구현 — 본 프로토타입은 생성/검증까지
- pkg.crowny.org 경로 라우팅(
/han/*) 가능 여부는 게이트웨이 path 라우팅 지원에 의존 — 미지원 시 서브도메인 신설 - 레거시 JS 게시 인증 복구는 사용자 대화형
npm adduser액션 필요 (자동화 불가)