← 목록
프로젝트 2026-05-27 5KB 읽기 5분

project.crowny.org 협업보상 UI v2

개요

project.crowny.org 협업 보상 시스템의 프론트엔드 UI를 순수 한선씨로 작성. 6개 화면을 단일 한선씨 모듈이 HTML/CSS/JS 문자열을 생성해 응답하는 TCP HTTP 서버로 구현. 백엔드(reward:9738, projint:9758, wallet:9410)는 이미 가동 중이며 UI는 이 위에 얹는다.

핵심 원칙: "분배는 한 번 시작하면 멈출 수 없다" — 그래서 분배 화면은 2단 확인 모달 + 미입금 WAL 화면 + 자동 폴링으로 안정성·가시성 강화.

무엇을 했는지

  1. 신규 모듈 작성: /Users/ef/crowny-project/보상UI v2.한선 (약 290줄, 함수 17개)
  2. 6 화면 라우팅:
- / — 프로젝트 목록 (GET projint:9758/api/projects, sessionStorage에 선택 PID 보존) - /contribute — 기여 등록 폼 (7유형 select + 점수/설명, POST reward:9738/api/contribute) - /pool — 풀 충전 (CRN/FNC/CRM + 관리자 토큰, POST reward:9738/api/pool/create) - /distribute — 분배 실행 (2단 확인 모달 + 위험 경고 + 결과 테이블) - /rewards — 실시간 이력 (5초 폴링, CRN 기준 사용자별 막대 차트 + 누적 합계) - /wal — 헬스체크 + 미입금 WAL 재시도 (POST reward:9738/api/retry)
  1. 공통 인프라: 다크 모드 verdant 스타일 (arch.crowny.org 톤), 상단 헬스 인디케이터, 토스트 알림, 모달, 6탭 네비게이션, 공통 fetch 래퍼
  2. 보안 처리: 관리자 토큰은 <input type=password autocomplete=off> + 폼 제출 직후 clearTok()로 즉시 비움. localStorage 저장 안 함. 프로젝트 ID만 sessionStorage 사용 (세션 만료 시 휘발).
  3. 한선씨 함정 회피:
- 변수 _더미 = 0 — 첫 변수 1 평가 우회 - 예약어 회피: methodmm, 메서드요청방식추출 - 함수명에 가져오기 미포함 - TCP읽기(cl, 4096) 2인자 명시 - 배열은 추가/꺼내 사용
  1. 컴파일 검증: ./hanseonc_high "보상UI v2.한선" → 2227 토큰, 79428 큐브, /tmp/보상UI.toau 2.2MB 생성, exit=0
  2. 포트 등록: crowny-ports.sh set reward-ui 9764 (9760은 flexible.crowny.org 점유 — 9764로 변경. gateway.yaml + PORTS.md 자동 갱신)
  3. 실 기동 검증: ./crownyc run /tmp/보상UI.toau 백그라운드 실행 → 9764 LISTEN
  4. 응답 검증 (전 화면 HTTP 200):
| 경로 | 상태 | 본문 크기 | |------|-----|----------| | /health | 200 | 79 B (JSON) | | / | 200 | 9541 B | | /contribute | 200 | 10593 B | | /pool | 200 | 10416 B | | /distribute | 200 | 11276 B | | /rewards | 200 | 10483 B | | /wal | 200 | 9689 B |

네비게이션 6 라벨 전부 렌더 확인.

  1. 패턴 학습: crownycode-learn.sh add "보상UIv2" 완료 — 다음 세션에서 재사용 가능

관련 파일

  • /Users/ef/crowny-project/보상UI v2.한선 — 신규 UI 모듈
  • /Users/ef/crowny-project/보상대시보드.한선 — 기존 단일 페이지 UI (129줄, 그대로 둠)
  • /Users/ef/crowny-project/보상분배서버.한선 — 백엔드 reward:9738 (확인용 참조만)
  • /Users/ef/crowny-project/프로젝트통합서버.한선 — projint:9758 (확인용 참조만)
  • /tmp/보상UI.toau — 컴파일 결과 (재생성 가능)
  • ~/.claude/knowledge/PORTS.mdreward-ui → :9764 신규 등록

빌드/실행

bashcd /Users/ef/CrownyOS/crownyc
./hanseonc_high "/Users/ef/crowny-project/보상UI v2.한선" > /tmp/보상UI.toau
./crownyc run /tmp/보상UI.toau
# → http://localhost:9764

잔여 이슈

  • gateway 노출: gateway.yamlreward-ui 항목은 자동 등록됐으나, 실제 gateway reload 또는 reward-ui.crowny.org 도메인 매핑은 미진행 (사용자가 도메인 결정 후 gateway 세션에서 처리 권장).
  • 포트 변경: 요청은 9760이었지만 flexible.crowny.org가 선점 → 9764로 양보. 필요 시 crowny-ports.sh free 9760 9790 으로 재할당 가능.
  • 백엔드 가동 가정: reward:9738, projint:9758이 가동 중이어야 화면이 데이터를 표시. 데몬 미가동 시 UI는 "응답 없음" 알림만 표시 (UI 자체는 정상 동작).
  • wallet 연동 시각화 없음: 현재 화면은 분배 결과만 표시. 개별 사용자의 wallet 잔액 조회 UI는 미구현 (wallet:9410 API 명세 확인 후 추가 권장).
  • 인증/RBAC 부재: 관리자 토큰 1단 체크만 존재. auth.crowny.org SSO 연동은 추후 확장.
  • CSP/CORS: UI 서버는 자체 HTML을 응답하므로 CSP 불필요. 단, JS가 reward:9738을 직접 호출하므로 reward 서버의 CORS Access-Control-Allow-Origin: *에 의존 — 백엔드 헤더가 그대로 유지돼야 함.