이음미디어 크라우니ERP (leum.crowny.org) 구축
개요
크라우니엔터프라이즈
제2호 고객사 이음미디어(Leum Media) 전용 ERP 구축.
aimed.crowny.org(제1호)에 적용된 크라우니ERP 패턴(검증된 한선씨 HTTP/인증/PSV/셀코어/근태/채팅)을 가져와
이음미디어 LED 사업에 맞춰 커스터마이징. 울트라 에이전트 병렬 + 자율주도 진행.
- 도메인: leum.crowny.org (메인 :9940), up.leum.crowny.org (업로드 사이드카 :9941)
- 디렉토리: /Users/ef/crowny-leum
- 로그인: leum01 ~ leum08 / 비번 leum1234 (테스트 시드)
- A레코드: 등록 완료(112.144.147.144, *.crowny.org 와일드카드 해석 확인)
- 주의: 최초 요청 시 도메인을 lium으로 잘못 표기 → leum으로 전면 정정(디렉토리·도메인·아이디·비번·솔트·전 소스)
조직 (data/조직/조직도.psv)
| 사번 | 이름 | 팀 | 직급 | 역할 | 등급 |
|---|
| leum01 | 차기욱 | 경영 | 대표이사 | 경영총괄 | 총괄 |
| leum02 | 주창현 | 기술팀 | 팀장 | 기술총괄·LED시스템·프로세서·수입유통 | 팀장 |
| leum03 | 이성범 | 기술팀 | 팀원 | LED설치·시공·고난이도Walls·현장CS | 실무자 |
| leum04 | 김철호 | 기술팀 | 팀원 | LED설치·시공·인스톨·현장CS | 실무자 |
| leum05 | 최정원 | 기술팀 | 팀원 | LED모듈·프로세서 유지보수·사무CS | 실무자 |
| leum06 | 임영은 | 경제팀 | 팀원 | 회계·구매·총무·수입통관·정산 | 실무자 |
| leum07 | 파트너1 | 외부협력 | 협력사 | 시공·설치 협력(제한열람) | 외부 |
| leum08 | 파트너2 | 외부협력 | 협력사 | 콘서트·렌탈 협력(제한열람) | 외부 |
사업 영역 (프로젝트 분류)
LED 디스플레이 수입/시공/설치/관리 · 콘서트 렌탈 · 최고급 LED프로세서 수입유통(PixelHue 한국수입원)
· LED모듈/프로세서 유지보수 · 고난이도 LED Walls 인스톨 · 사무/현장 CS.
구현 (무엇을 했는지)
1) 한선씨 메인서버 — 통합서버.한선 → 통합서버.toau (:9940)
self-contained 단일 서버. 검증된 패턴(통합동선서버/포털서버/일일업무서버/일톡서버)에서 추출.
- 인증: 토큰 = 사번 + "." + 해시_SHA256(사번+비번+"leum"), data/members/{사번}.json 대조. 최초 시드비번 자동 프로비전.
- API: /api/login, /api/me(Bearer), /api/members, /api/projects, /api/project/{id},
/api/matrix(크라우니매트릭스 집계), /api/chat(POST 저장 + GET 목록), /api/files, /api/search(셀코어), /api/report/weekly
- 크라우니매트릭스: 10프로젝트 × 6단계(수주·설계·수입통관·시공·검수·유지보수), 4상 상태(티 정상/옴 대기/타 완료/음 이슈)
- 채팅: 출근·퇴근·현장도착·현장출발·업무보고·작업·일반 + 사진참조 + 위치 → data/chat/{프로젝트}.psv
- 주간보고: 최근 7일 채팅 집계(유형별/멤버별). 총괄·팀장은 전사/지정멤버, 실무자는 본인만.
2) 업로드 사이드카 — 업로드사이드카.js (:9941) + 업로드사이드카.한선 동반
한선씨 VM은 멀티파트 바이너리/대용량 불가(TCP 8KB·STR 16KB) → Node 부득이(동반 .한선 작성).
- POST /upload: multipart 직접파싱 → data/uploads/files/ 저장 + 텍스트추출(txt/csv/md/json 직접, docx/xlsx/pptx unzip+xml, pdf pdftotext, dxf ASCII)
→ data/cells/{파일ID}.txt + 색인.psv append. "어떤 파일이든 어떤 텍스트든" 셀코어 입력.
- GET /uploads/files/{파일ID} 서빙(경로탐색 방지), /health.
3) 프론트엔드 SPA — public/앱.html (다크 LED/미디어 테마)
로그인 → 5탭(대시보드 크라우니매트릭스 / 프로젝트 / 채팅 / 파일 / 주간보고).
매트릭스 그리드(4상 색상·현재단계 강조·진행률바), 프로젝트 상세(채팅+파일+사진업로드+빠른출결),
셀코어 검색, 주간보고(인쇄). 토큰 localStorage, 401 자동 로그아웃, XSS 방지, 모바일 반응형.
시작.sh build = 분할+컴파일+양서버 기동. 워치독 9940/9941 자가치유(wedge 2회 재기동).
plist 60초 워치독(launchctl load -w 로 사용자가 활성화). HTML >16KB → .pN 파트 스트리밍.
검증 (전부 PASS)
로그인/내정보/조직/프로젝트/매트릭스/채팅저장·목록/파일목록/셀코어검색(PixelHue 추출텍스트 매칭)/주간보고 E2E.
업로드→텍스트추출→색인→검색 풀스택 통과. 사이드카 health OK.
관련 파일
- /Users/ef/crowny-leum/통합서버.한선 (메인서버 소스)
- /Users/ef/crowny-leum/업로드사이드카.js + .한선
- /Users/ef/crowny-leum/public/앱.html
- /Users/ef/crowny-leum/data/조직/조직도.psv, data/projects/프로젝트.psv
- /Users/ef/crowny-leum/시작.sh / 워치독.sh / 분할.sh
- /Users/ef/crowny-gateway/gateway.yaml (crowny-leum, crowny-up.leum 블록)
HTTPS 발급·연결 (완료)
- 전용 cert 발급: certbot --webroot (config-dir /Users/ef/crowny-data/certs/certbot, -w webroot, --cert-name leum.crowny.org -d leum.crowny.org -d up.leum.crowny.org, ecdsa). 만료 2026-09-20. 공유 100도메인 cert 무영향.
- stunnel SNI 결선: stunnel-live.conf(8443, sni=https:) + stunnel-live-443.conf(443공개, sni=https443:) 양쪽에 leum/up.leum 블록 수동추가 → 각 stunnel SIGHUP. (SNI생성기는 기존 라이니지만 인지 → 신규 전용cert는 value.crowny.org 선례대로 수동.)
- 워치독 활성화: com.crowny.leum.plist (one-shot + StartInterval 60s) launchctl load -w. 한선씨 장수서버 산발 크래시 자동복구.
- 검증: https://leum.crowny.org 로그인/페이지/헬스 + https://up.leum.crowny.org 사이드카 전부 PASS. cert CN=leum.crowny.org 확인.
게이트웨이 운영 메모
- gateway.yaml 변경 후 리로드 = gwlive.toau에 SIGHUP (
kill -HUP $(pgrep -f gwlive.toau)). crowny-ports.sh sync만으론 리로드 안 됨.
- 9940 죽으면 게이트웨이가 Ta 마킹→503. 9940 복구 후 30초 헬스 재탐색으로 자동 회복.
후속작업 (2026-06-22 2차 — 4종)
백엔드(통합서버.한선) 검증 PASS, 프론트(앱.html) 확장.
- 파트너 제한열람 RBAC: 외부 등급(파트너1·2)은 본인 담당 프로젝트만 열람. /api/projects·/api/matrix·/api/chat·/api/files·/api/alerts·/api/quotes에 토큰 전달 시 외부면 필터. 비담당 채팅/파일 403. 검증: 대표 10건 / 파트너2 담당 2건(P02,P08).
- 비밀번호 변경: POST /api/password {token,구비번,신비번} → 토큰 재발급(localStorage 갱신, 재로그인 불필요). 검증: 변경→신비번로그인→복구 PASS.
- 견적·발주 모듈: 견적.psv(헤더자동생성) 11필드. POST /api/quote 생성, GET /api/quotes 목록(외부필터), POST /api/quote/status 상태변경(승인/발주/완료=총괄·팀장만). 상태흐름 작성→검토→승인→발주→완료. 검증: 생성→승인 PASS, 파트너 승인 403.
- 현장 알림·대시보드: GET /api/alerts → 이슈(음 상태)·지연(마감경과)·마감임박(10일내), 외부는 본인담당만. 대시보드 상단 알림 배너. 검증: 마감임박/이슈 정확 산출.
잔여(후속)
- 견적 품목을 구조화 JSON으로(현재 품목요약 문자열). 발주서 PDF 출력.
- 알림 마감임박 일수는 의사일수(월=31균등) 기반 — 정확 D-day 필요시 date 연동.