← 목록
기타 2026-05-27 7KB 읽기 7분

크라우니 리모트 v1 — Mac-to-Mac 8+8 다중화면 원격제어

9개 맥스튜디오 × 9 CLI MAX200 계정 × 9명 작업자. 동일 블록체인 작업폴더. remote.crowny.org (포트 9701).

무엇을 만들었나

100% 한선씨 백엔드 + Mac 네이티브 시각화 보조. 사용자의 "안정성 우선" 명시에 따라 한선씨 한계 부분만 C/Swift 동반 + 한선씨 동반 파일 강제.

컴포넌트 (전부 빌드 성공, E2E 테스트 통과)

컴포넌트언어파일포트상태
등록/인증/시그널링 서버한선씨server/리모트서버.한선 (7042 큐브)9701✅ E2E
에이전트 (상대맥)한선씨agent/리모트에이전트.한선 (6623 큐브)9711✅ E2E
화면 캡처bash + screencaptureagent/캡처.sh✅ JPG 16KB
PTY 데몬C (forkpty + zsh)pty/pty_bridge.c (34KB)9710
PTY 한선씨 동반한선씨pty/pty_bridge.한선
한선씨 클라이언트 CLI한선씨viewer/리모트클라이언트.한선
Mac 뷰어 (8+8 16분할)Swift+SwiftUIviewer/RemoteViewer.swift (223KB 바이너리)✅ 빌드
뷰어 한선씨 동반한선씨viewer/RemoteViewer.한선 (4728 큐브)

와이어 프로토콜 (안정성을 위해 영문 키 + ASCII 헤더)

+-- 8자 16진수 길이 + \n -+  +---- N 바이트 UTF-8 ASCII JSON ----+
|                         |  |                                    |

  • 헤더 항상 0x00~0x7F → 한선씨 글자수 ≠ 바이너리 바이트 수 문제 회피
  • 본문 키는 영문 (t/dev/pw/pwh/tk/dst/ch/n/d/key/out/data/...)
  • 한선씨 식별자(변수/함수)는 한글 유지 — 와이어만 영문

메시지 종류

t의미흐름
reg / reg_ok디바이스 등록클라이언트 → 서버
login / token로그인 → 토큰 발급 (30분)클라이언트 → 서버
conn / conn_ok시그널링 (대상 디바이스 매칭)관제 → 서버
hello / hello_ok토큰 확인관제 → 에이전트
cap / scrn화면 캡처 요청 → Base64 JPG관제 → 에이전트
inp / out명령 실행 (V1: zsh -c)관제 → 에이전트
ping / pong헬스체크
err오류

E2E 테스트 결과

[1] ping : {"t":"pong","ts":1779857819}
[2] reg  : {"t":"reg_ok","dev":"CR-CROWNY-01"}
[3] login: {"t":"token","tk":"a2364dd3...","exp":1779859619}
[4] bad  : {"t":"err","msg":"bad_token"}            ← 잘못된 토큰 거부
[5] hello: {"t":"hello_ok","ts":1779857819}
[6] inp  : t=out data_len=37
         out: CROWNY-OK
              /Users/ef/CrownyOS/crownyc
[7] cap  : fmt=jpg b64chars=16383                    ← JPEG magic ffd8ffe0 검증

발견한 한선씨 함정 (이번 작업에서 새로 잡음)

  1. 자연반올림 나눗셈 → hex 변환 망가짐: 값 / 16 의 나머지가 [-8, +8] 범위. 값 % 16 또는 값 - (값/16)*16 결과가 음수 시 부분(_hex문자, 음수) → 헤더 1자리 누락 → 본문 잘림.
- 보정: q = 값/16; r = 값 - q*16; 만약 r<0: r+=16, q-=1 - 학습 등록: 프레임헤더_hex8_프레이밍

  1. 글자수 ≠ 바이트수 (한글 UTF-8): 헤더 4바이트 빅엔디안 + 한글 본문 사용 시 클라이언트가 짧게 받음. 해결: 모든 헤더/본문 ASCII로 강제.
  1. 소켓연결 반환값 변동: 음수 체크 분기로 빠짐. 해결: 체크 생략 후 사용 (실패 시 다음 send/recv에서 발현).
  1. 함수명 숫자 시작 금지: 정수16진정수hex로 재명명 (토큰 분리).
  1. 시도는 예외처리 예약어 — 변수명 불가. 회차로 대체.
  1. 소켓받기 인터랙티브 폴링 빈 응답: 같은 프로세스 내 TCP 서버 listen + TCP 클라이언트 connect 혼용 시 NIO 동작이 OS 버퍼와 동기 안 맞음. V1은 일회성 체계("zsh -c ... > file") 우회. 진짜 PTY 세션 모드는 V2.

안정성 결정 (사용자 명시 반영)

"한선씨/크라우니 기계어로 작성하고 싶은데 제한되는 게 있으면 이 프로그램은 특별히 더 안정적인 것으로 제작. 맥과 맥끼리의 작업도구이니까."
  • 백엔드/프로토콜/인증 → 100% 한선씨 (정통)
  • 화면 캡처 → screencapture (Mac 네이티브 CLI)
  • PTY → C 작은 래퍼 (forkpty + zsh + 양방향 펌프)
  • 뷰어 시각화/단축키 → SwiftUI (NSImage 라이브 렌더 안정성)
  • 모든 비-한선씨 코드는 같은 로직의 .한선 동반 파일 작성 — 학습DB에 정통이 학습됨

컴퓨터 ID 체계 (법인 통합계정 컨셉)

  • CR-법인코드-노드번호 (예: CR-CROWNY-01 ~ CR-CROWNY-09)
  • 사용자 개인 ID와 별개 — 작업 컴퓨터의 ID
  • 비밀번호는 SHA256 해시로만 서버에 저장
  • 세션 토큰 30분 TTL, 모든 후속 요청에 첨부

실행 (5단계)

bash# 1. 빌드
/Users/ef/crowny-remote/scripts/빌드.sh

# 2. 서버 (remote.crowny.org 매핑)
/Users/ef/CrownyOS/crownyc/crownyc run /Users/ef/crowny-remote/server/리모트서버.toau &

# 3. PTY 데몬 (각 상대맥에서)
/Users/ef/crowny-remote/pty/pty_bridge 9710 &

# 4. 에이전트 (각 상대맥에서) — 미리 토큰파일 생성
echo "<토큰>" > /Users/ef/crowny-remote/agent/토큰.txt
/Users/ef/CrownyOS/crownyc/crownyc run /Users/ef/crowny-remote/agent/리모트에이전트.toau &

# 5. 관제 뷰어 (내 맥)
/Users/ef/crowny-remote/viewer/RemoteViewer

단축키 (뷰어)

  • Ctrl+1~9 → 좌측 8 (내 작업화면) 활성 전환
  • Ctrl+Shift+1~9 → 우측 8 (상대 작업화면) 활성 전환
  • 마우스 클릭 → 활성 패널 변경
  • 하단 입력창 + Enter → 활성 패널의 에이전트로 명령 전송

다음 단계 (V2)

  1. 진짜 PTY 세션 모드 (inp_pty) — 인터랙티브 셸(vim/ssh/htop). 한선씨 소켓받기 폴링 한계 회피 위해 작은 C pty_call helper 추가 검토.
  2. AES 채널 암호화 — AES.한선 통합 (현재 SHA256 해시만 사용)
  3. 9명 동시 접속 부하 테스트 — 한선씨 서버 멀티 클라이언트 수락 루프 fork/select 패턴
  4. NAT 통과 / 릴레이 모드 — LAN 외부에서도 동작 (서버가 양방향 채널 릴레이)
  5. Xcode 프로젝트로 뷰어 정식화 — 현재는 단일 swiftc 빌드

관련 파일

/Users/ef/crowny-remote/
├── server/
│   ├── 리모트서버.한선   (한선씨 정본)
│   ├── 디바이스.dat       (등록 영속화)
│   └── 세션.dat
├── agent/
│   ├── 리모트에이전트.한선
│   └── 캡처.sh
├── pty/
│   ├── pty_bridge.c       (C 래퍼)
│   └── pty_bridge.한선    (한선씨 동반)
├── viewer/
│   ├── RemoteViewer.swift (SwiftUI 16분할)
│   ├── RemoteViewer.한선  (한선씨 동반 데모)
│   └── 리모트클라이언트.한선 (한선씨 CLI)
├── docs/
│   ├── 설계.md
│   └── 와이어프로토콜.md
└── scripts/
    └── 빌드.sh

게이트웨이 등록 (자동)

crowny-ports.sh set 으로 3개 서비스 자동 등록됨:

  • remote.crowny.org → :9701 (서버)
  • remote-agent.crowny.org → :9711 (LAN 내부)
  • remote-pty.crowny.org → :9710 (localhost 전용)