Node js로 WebDav 서버

WebDav는 http로 원격 파일 시스템을 꾸릴때 쓴다. samba 같은 것은 LAN 밖엔 안되고 이상하게 속도가 느려서 답답하다 싶고 뚫리는 트래픽이 http 위주다 싶으면 이걸 이용해서 원격에 파일 시스템을 하나 만들어서 쓸 수 있다.

물론 요새 그냥 트래픽을 뚫지는 않고 VPN과 같은 encrypted tunnel들을 많이 이용한다만. 특별히 트래픽을 encrypt해야 할 필요까진 없다고 보지만 아무나 접속하는 것은 원하지 않으니까 어쩔 수 없이 쓰게 된다. 실제로 일부러 웹서버를 만들어서 열어놓으면 포트스캐닝 같은 것을 했는지 뭐했는지 모르지만 들어갔다 나간 흔적이 남기도 하고 어쩔 땐 더 심한 짓도 하고 나가는 것을 경험하게 된다.

어디에 있는 무슨 호스트인지도 모르는데 찾아와서 이것 저것 다 살피고 간 것을 보면 bot들이 수시로 여기 저기 쑤시고 다니는 가보다 하게 되는 것이다.

본론으로 돌아와서 webdav는 대개 웹서버에 붙여서 설치하게 된다. 그래서 특정 폴더를 찍어주면 그 부분을 외부로 공유할 수 있는데, 설정이 그다지 편하지가 않다. 클라이언트도 특별히 필요한 OS도 있는데, Mac은 Finder에서 그냥 지원해준다. WedDav 접속을 설정하면 외장 파일 시스템처럼 하드 디스크 모양이 아이콘이 생겨난다. 윈도우즈도 정식으로 지원하지 싶다.

그런데 설정이 귀찮고 이 간단한(?) 기능하나 하자고 apache나 nginx 설치하고 설정하고 잘되는지 테스트해보고 하다보면 빨리 잘 되지 않아서 너무 답답한데, node js로 하면 정말 간단하게 할 수 있다.

webdav-server라는 모듈이 npm에 있는데 그걸 가져다놓으면 대충 100줄 안으로 스크립트를 짜넣어서 돌릴 수 있다. 생각보다 잘 된다.

그런데 문제가 하나 있다. 이걸 사용하면 실제 파일 시스템과 연결을 할 수는 없고 일종의 가상 파일 시스템을 만들어내는데, 이게 단일 파일로 존재한다. 잘은 모르겠으나 파일 시스템이 변경이 생길 때마다 압축을 풀고 묶고 하는 것처럼 해서 관리를 하는 것으로 보여진다. 그래서 대용량 파일을 마구 업로드 시키거나 업로드 된 걸 지우거나 하면 시스템 로드가 마구마구 올라가게 되고 심하면 그냥 프로세스가 죽어버린다.

크기가 작은 파일들을 여럿이 공유해서 주고받긴 좋은데, 조금만 큰 파일이 되도 난리가 난다.

아무래도 이 역시 좋은 방법이 되지 못하는 듯 하다.