모듈 플랫폼 문서 묶음
작성 2026-10-04 · 표준 버전 1 한 번 만든 기능(라이센스 보호·설치기·업데이트 도우미·메신저·SaaS/단독 뼈대 …)을 여러 프로그램이 가져다 쓰고, 어느 프로그램에서든 고친 것을 다시 올려 모두 함께 좋아지게 하려는 문서입니다.
이 폴더의 문서
| 문서 | 누가 읽나 | 내용 |
|---|---|---|
| 01_모듈_표준.md | 모두 (모듈 사이트와 모든 프로그램이 함께 지키는 약속) | 모듈의 3종류, 이름표(module.json), 폴더 모양, 연결부, 버전 규칙, 보안·검사 규칙, 서명 |
| 02_모듈사이트_구축.md | 모듈 사이트를 만드는 사람 (lic.isolo.co.kr 저장소 작업) | 화면·DB 표·API·발행 흐름·서명·묶음·모듈 도구(modctl)·검사 항목 |
| 03_프로그램_모듈화.md | 각 프로그램을 작업하는 사람 | 기능 빼내기 · 새 기능을 모듈로 만들기 · 가져오기 · 고친 것 올리기 · 새 버전 받기 |
| 04_모듈_화면_표준.md | 모듈 화면을 만들거나 붙이는 사람 | 모듈 기본 화면(UI) — 붙이는 법 · 놓는 곳 · 색·크기 |
| 05_패키지_목록_확인_붙이기.md | 패키지 목록을 받는 프로그램(나혼자워크 등) | 서명·라이센스 짝·기한 확인 — 나혼자워크 고칠 곳(파일:줄)과 코드, Node·Python 예 |
| design/모듈센터_시안.html · design/screens/ | 모듈 사이트 화면을 만드는 사람 | 매뉴얼 센터·버그개선 사이트와 같은 디자인의 「모듈 센터」 시안(예시 데이터) + 화면 캡처 10장 |
다른 프로그램에서 쓸 때는 이 폴더(docs/module-platform/)를 그 저장소에 통째로 복사한 뒤, 03 문서 끝의 「Claude 요청문」을 붙여 넣으면 됩니다.
한 장 요약
모듈 사이트 (lic.isolo.co.kr 「모듈」 메뉴)
이름표·버전·사용처·검사 결과·서명을 관리 — 소스는 보관하지 않음
▲ 등록(CI) │ 발행 알림 ▲ 사용 보고
│ ▼ │
원본 저장소 hnbbos/isolo_modules ──► 부품: npm(GitHub Packages)·pip(git 태그)
(모듈 소스는 여기 한 곳) 서비스: ghcr.io 이미지 + 화면 끼워 넣기
시작 틀: 새 프로그램 만들 때 복사
│ 가져오기 / 새 버전 받기 (modctl add · update)
▼
나혼자워크 · 제로라벨 · 바코드 WMS · PadCAD · 라이센스 서버 …
(각자 modules.lock.json 에 「어떤 모듈 몇 번」을 적어 둔다)
│ 묶음(서명) → 업데이트 도우미
▼
고객 서버(단독 설치)
기본 모듈 — 모든 프로그램이 같은 것을 씀
라이센스 보호 장치(license-guard) · 설치기(installer) · 업데이트 도우미(update-agent) 는 모듈 사이트에 올라가는 기본 모듈입니다. 단독 설치로 파는 제품은 이 셋이 반드시 들어가야 하고, 빠지면 모듈 사이트가 고객용 묶음을 만들지 않습니다(01 §2.5, 02 §8).
모듈 사이트에 올라가지 않는 것은 두 가지입니다.
- 라이센스 서버 자체(발급·검증·서명 키): 모듈 사이트가 들어 있는 「본부」
- 각 프로그램의 고유 업무 기능
지켜야 할 규칙 3가지
- 원본은 한 곳. 프로그램 안의 사본은 고치지 않습니다. 고칠 일이 생기면 원본을 고치고 번호를 올립니다.
- 변경의 크기는 번호로 알립니다. 고침
1.4.1, 기능 추가1.5.0, 크게 바뀜2.0.0. - 올리기 전에 그 모듈을 쓰는 모든 프로그램에서 검사합니다. 한 곳에서 좋아진 변경이 다른 곳을 망가뜨리면 안 됩니다.
왜 필요한가 — 지금 실제로 생긴 일 (2026-10-04 저장소 확인)
| 사실 | 문제 |
|---|---|
라이센스 보호 장치가 두 벌: 제로라벨 lib/license-guard.js(268줄) / 라이센스 서버 lib/vendor/license-guard.js(181줄). 내장 공개키 구성, 키 추가 함수 이름(setTrustedKeys/addTrustedKey)이 이미 다름 | 서명하는 쪽과 확인하는 쪽이 갈라지면 정품이 거절되거나 위조가 통과할 수 있음. 「공개키·강제 여부를 환경변수로 바꿀 수 있는」 구멍도 함께 복사됨 |
메신저가 두 벌: 나혼자워크 메신저(Node) / 바코드 WMS messenger_module/(Python) | 같은 기능을 두 번 만들고 두 번 고쳐야 함 |
| 바코드 메신저는 이식 묶음이 잘 정리돼 있음(연결부 3개 + 끼워 넣기 위젯 + 파일별 sha256 MANIFEST) | 다만 복사형 스냅샷이라, 가져간 곳에 이후 개선이 전해지지 않음 |
| 프로그램마다 만든 방식이 다름: Node+TS+Prisma+MariaDB / Node+EJS / Python+FastAPI+PostgreSQL / Node+SQLite | 소스를 그대로 붙이는 방식으로는 통일할 수 없음 → 모듈 종류를 나눠야 함 |
이미 있어서 그대로 쓰는 것
- 라이센스 서버: 제품 표, 연동 키(
api_keys), 관리자 인증(requireAdmin/requireRoleAdmin), 감사 기록(auditLicense), Ed25519 서명(vendor-sign.js의signPayload,canonical), 업데이트 패키지 표, 알림 설정 - 나혼자워크: 패키지 센터(외부 카탈로그
{ programs: [...] }수신), OAuth 2.1 인가 서버·MCP 창구(서비스 모듈의 로그인 연결에 사용) - 제로라벨: ghcr.io 이미지 배포 경험(
docker-compose.watchtower.yml) - 바코드 WMS: 연결부 방식의 메신저 이식 묶음, Claude용 이식 요청서 형식
권하는 진행 순서
| 순서 | 할 일 | 문서 |
|---|---|---|
| 1 | GitHub에 원본 저장소 hnbbos/isolo_modules 만들기 (대표님) | 01 §3 |
| 2 | 첫 모듈 = 라이센스 보호 장치(기본 모듈). 두 벌을 하나로 합치고 구멍을 막아 1.0.0 | 03 작업 A·B |
| 3 | 모듈 사이트 1단계: 등록·목록·사용처·발행(서명) + modctl 기본 명령 | 02 §13 |
| 4 | 나혼자워크·제로라벨이 1.0.0을 가져와 쓰고, 한쪽에서 고쳐 1.0.1을 만든 뒤 다른 쪽이 받기 — 한 바퀴 확인 | 03 작업 C·D·E |
| 5 | 나머지 기본 모듈: 설치기(run.sh를 빼냄) · 업데이트 도우미(새로 만듦) | 03 §2.2 |
| 6 | 표준 메신저 하나 정하기 → 서비스 모듈로 | 03 §2 |
| 7 | 시작 틀(SaaS/단독 뼈대): 나혼자워크 「설치 형태 전환」 작업이 끝난 뒤 그것을 원본으로 | 01 §2.3 |