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는 사용자 확인 권장.