YWS 문서
YWS 콘솔로 이동
스토리지/파일탐색

파일탐색

저장소 탭의 "파일탐색" 버튼은 사용자에게 안 보이는 전용 EC2를 하나 띄워서 그 위에 저장소를 붙이고, Windows 탐색기처럼 생긴 별도 페이지로 연결하는 기능입니다. 사용자는 이게 EC2라는 걸 전혀 모릅니다.

  • 사용자별로 하나씩만 존재 (FileExplorerEC2 모델), 유휴 10분이면 자동 정지
  • Resource.hidden 플래그로 표시되고, EC2/네트워크/저장소 화면 어디에도 노출되지 않음 (여러 군데서 필터링 필요 — 실제로 이 필터링이 빠져서 "저장소 삭제가 안 되는" 버그가 났던 적 있음)
  • 파일 업로드/다운로드는 kubectl exec의 stdin/stdout으로 주고받음 — 새 포트나 프로토콜(SFTP 등) 없이 터미널 기능과 완전히 같은 권한 경계를 재사용
  • 다운로드는 스트리밍: 파일 하나는 cat으로 원본 그대로(크기를 알려줘서 브라우저 진행률 표시), 폴더는 EC2 안에서 zip을 만들면서 바로 stdout으로 흘려보냄. exec 채널을 바이너리 모드로 한 프레임씩 읽어 곧바로 브라우저로 넘기므로 포털 메모리가 파일 크기와 무관하고, /tmp에 임시 zip도 만들지 않아 용량 제한이 없음 (150MB 파일로 무결성·메모리 검증). 받는 동안 1분마다 활동 시각을 갱신해서 파일탐색 EC2가 도중에 자동 정지되지 않음
  • 업로드는 조각 업로드: 브라우저가 파일을 8MB 조각으로 잘라 차례로 보냄 (static/chunked-upload.js, 파일탐색과 VS Code 공용). 요청 하나가 Cloudflare 무료 플랜의 요청 본문 한도(100MB)보다 훨씬 작고 포털 메모리에도 조각 하나만 올라가서, 전체 크기 제한 없음 (EC2 디스크 용량이 한계, Cloudflare 경유 120MB 업로드로 검증)
    • 조각은 같은 폴더의 .<파일명>.yws-upload에 이어 붙이고, 마지막 조각이 들어오면 원래 이름으로 바꿈 — 업로드 도중에는 기존 파일이 덮어써지지 않음
    • 서버가 임시 파일의 현재 크기로 조각 위치를 확인해서, 응답을 놓친 조각을 다시 보내도 중복되지 않고 어긋난 조각은 거부. 실패한 조각은 최대 3번 재시도, 끝내 실패하면 임시 파일 삭제
    • 여러 파일은 하나씩 차례로 올림
  • 큰 파일은 WebSocket 프레임을 64KB 단위로 쪼개서 보냄 — 한 프레임으로 통째로 보내면 커널/프록시가 연결을 끊어버려서 대용량 파일이 0바이트로 잘리는 버그가 실제로 있었음