← 목록
기타 2026-06-21 3KB 읽기 4분

crowny.org 클라우드 고도화 — 폴더업로드·접근IP·모바일

개요

crowny.org(:9852) 클라우드 탭을 고도화: 폴더째 업로드, 업로드/다운로드 시점+IP 기록, 직관 UI, 크로스플랫폼(윈도/맥/리눅스 브라우저), 핸드폰 사진 업로드. 전부 E2E 검증.

무엇을 했는지

백엔드 (crowny-services/서비스서버.js — 라이브 :9611)

  • 접근로그: data/access/<owner>.jsonl(append) 한 줄당 {a:'up'|'down', id, ts, ip}. 헬퍼 clientIp/logAccess/readAccess.
  • /api/blob POST 성공 → logAccess('up'), GET(다운로드: dl=1 또는 전체GET, 스트리밍 range·썸네일 제외) → logAccess('down').
  • 신규 GET /api/access?o=&id={up:[{ts,ip}], down:[{ts,ip}], upCount, downCount} (최근 50).
  • IP = X-Forwarded-For 첫 홉(프록시 전달) → 없으면 소켓주소. ::ffff: 제거.

프록시 (crowny-ai/server.js — :9852 /api/cloud/*)

  • 프록시가 실제 클라이언트 IP를 X-Forwarded-For로 :9611에 전달 → crowny.org 경유 접근도 실IP 기록.

프론트엔드 (cloud 셸 — crowny-services public/cloud/index.html → crowny-ai 재동기화)

  • 폴더 올리기 버튼: <input webkitdirectory>webkitRelativePath로 폴더 구조 복원(ensureFolderPath 중복폴더 재사용) 후 각 파일을 해당 폴더에 업로드.
  • 드래그앤드롭 폴더: webkitGetAsEntry 재귀(readDropEntry)로 폴더 통째 드롭 지원.
  • 사진 버튼: <input accept="image/*"> → 모바일서 카메라/사진 라이브러리 선택.
  • 접근정보 표시: 미리보기에 loadAccess로 "⬆ 올림: 시각·IP / ⬇ 내려받음: N회·최근 시각·IP".
  • 모바일 반응형: viewport 기존 + @media(max-width:600px) 터치타겟 44px·검색 100%.
  • 공통 업로드 uploadJobs([{f,parent}])로 파일/폴더/사진/드롭 일원화.

한선씨 동반

  • 접근로그.한선 — IP정규화 + 업/다운 집계(최근시각·IP). 컴파일+실행 5/5 통과. 학습 등록.

검증 (E2E)

  • 백엔드 직접: 업로드 IP 203.0.113.7 / 다운로드 IP 198.51.100.22 각 기록, /api/access 조회 정상.
  • 프록시 체인(crowny.org 흐름): :9852/api/cloud/blob 업로드(XFF 211.45.67.89)·다운로드(175.223.10.5) → 접근로그에 실IP 정확 기록.
  • 게이트웨이: https://crowny.org/cloud/ = 200, /api/health = 200.
  • 셸: :9611 루트 + :9852 /cloud/ 양쪽 새 기능(폴더올리기·onFolderFiles·loadAccess·/api/cloud/access) 서빙. script 태그 2/2 균형, 6 신규함수 존재.
  • 크로스플랫폼: 순수 웹앱(브라우저) → 윈도/맥/리눅스 동일. 모바일=viewport+accept image.

관련 파일

  • crowny-services/서비스서버.js (clientIp/logAccess/readAccess, /api/access, blob 로그)
  • crowny-ai/server.js (프록시 X-Forwarded-For 전달)
  • crowny-services/public/cloud/index.html → crowny-ai/public/cloud/index.html (sed /api/→/api/cloud/)
  • crowny-services/접근로그.한선

잔여

  • 라이트박스(이미지)에는 접근정보 미표시(미리보기 모달에만) — 필요시 추가.
  • access jsonl 무회전(개인 클라우드 규모라 허용). 대량시 회전 고려.
  • 브라우저 실제 폴더 드롭/모바일 카메라는 코드·API 검증 완료, 실기 UX는 사용자 확인 권장.