Nginx로 webDAV 페이지 띄어보기

염겨레·2024년 1월 7일
0
post-thumbnail

어드민 페이지를 개발하는 중에 녹화 영상 파일을 다운로드 받을 수 있는 기능이 필요하게 되었습니다. 따라서 팀 논의에 따라 제가 webDAV라는 생소한 기술을 검토하고 Nginx로 테스트 삼아 활용해 보게 되었습니다. 이 내용을 기술하고자 합니다!

1. WebDAV란?

팀장님으로부터 WebDAV를 검토해 달라는 요청을 받고 머리가 띵했습니다. "잉? WebDAV가 뭐지? 웹개발자의 줄임말인가?" 그래서 먼저 ChatGPT에게 WebDAV가 무엇인지 물어보았습니다.
chat-gpt

WebDAV는 Web Distributed Authoring and Versioning의 약자로서 HTTP를 확장한 프로토콜입니다. 분산된이라는 뜻의 distributed에서 확인할 수 있듯이 여러 사용자가 웹 서버 환경에서 파일을 편집하고 관리할 수 있도록 합니다. 쉽게 이해하자면 여러 사용자가 웹페이지를 통해 윈도우 탐색기와 같은 화면으로 파일 및 디렉토리를 생성, 이동, 삭제 등을 수행할 수 있도록 기능을 제공하는 것입니다.

2. 환경 구성

그래서 Nginx에서 WebDAV 환경을 구축하고자 했습니다. 기존 제가 사용하는 윈도우 PC에 Nginx가 설치되어 있어 이를 활용했습니다. Nginx에서는 단순하게 config 설정만으로도 WebDAV를 활용할 수 있었습니다. 제가 설정한 대략적인 Nginx config 파일은 다음과 같습니다.

worker_processes  auto;
events {
    worker_connections  1024;
}

http {
  charset utf-8;
  server {
      listen 3004;

      location / {
          root C:/Users/duarufp06/Desktop;

          # 보안 설정
          auth_basic off;
          # auth_basic "Restricted";
          # auth_basic_user_file .credentials.list;
          
          # 허용 오퍼레이션: 파일업로드 파일삭제 디렉토리생성 복사 이동 순
          dav_methods PUT DELETE MKCOL COPY MOVE;
          
          # WebDAV의 액세스 권한
          dav_access user:rw group:rw all:r;

          # WebDAV 페이지 설정
          autoindex on;
          autoindex_exact_size on; # 파일 사이즈 표시 여부
          autoindex_localtime on; # 파일이 마지막으로 수정 된 시각
      }
  }
}

한글로 표시하기 위해 charsetutf-8로 설정하였고, Nginx 서버 /3004번 포트로 접속 시 WebDAV 페이지를 볼 수 있게 하였습니다. location의 root 항목에는 WebDAV 접속 시 볼 수 있는 디렉토리 구조를 제 윈도우 계정의 바탕화면으로 설정하였습니다. 보안 설정으로 아이디와 비밀번호를 입력해 WebDAV 페이지로 진입할 수 있도록 할 수 있었지만 저는 테스트용이기 때문에 auth_basic을 off로 설정해 사용자 검증 단계를 건너뛰었습니다.

3. 문제 발생

위 설정으로 Nginx를 가동해 접속했을 때 정상적으로 WebDAV 기능이 동작하는 듯 보였습니다. 하지만 아래 사진처럼 charset을 utf-8로 설정했음에도 한글 형식의 파일/디렉토리 명이 깨져보이는 현상이 있었습니다.

더구나 영문 형식의 파일/디렉토리는 정상적으로 접근이 가능했지만 한글 형식에 접근 시에만 500 에러가 발생하였습니다.

그래서 Nginx의 로그를 확인해 보았습니다. 로그가 말하길

1113: No mapping for the Unicode character exists in the target multi-byte code page

"대상 멀티바이트 코드 페이지에 유니코드 문자에 대한 매핑이 없습니다"라고 합니다. 아무래도 제가 사용하는 Nginx가 utf-8 형식을 받아들이지 못해 한글도 깨져 보이고 접근도 안되는 것으로 해석됩니다.

4. 해결

해당 로그 내용을 바탕으로 저와 같은 문제를 겪는 사람들을 인터넷으로 검색해 보았습니다. 다행히 저와 같은 현상을 겪은 사람이 있었고, 그 질문에 답한 한 댓글에서 해결책을 찾았습니다.

Nginx 커뮤니티에서 제기된 문제 중 autoindex 모듈이 유니코드 이름들을 지원하지 못하는 문제가 있었나 봅니다. 이는 현재 시점으로부터 약 10년 전에 문제 제기가 되었고 8개월 전에 closed 되었습니다. 내용 중에는 Nginx WebDAV 내부적으로 사용하는 ngx_open_dir, ngx_read_dir 등의 함수들이 Nginx 버전 1.23.4 이후에는 정상적으로 utf-8로 변환된다는 희소식을 전해왔습니다.

"아 참! 내가 사용하는 Nginx는 무슨 버전이지? 1.22.0?"

제가 너무 뒤쳐졌었나 봅니다...

바로 stable한 1.24.0으로 재설치해 다시 WebDAV를 띄어 보았습니다.

정상적으로 파일/디렉토리 명이 한글로 표시되고, 디렉토리 이동 및 파일이 다운로드 되는 것을 확인했습니다. 프로그램, 서비스, 라이브러리, 프레임워크 등 무엇이든지 버전을 확인해야 하는 습관의 중요성을 다시 확인할 수 있었습니다.

이번에는 Nginx를 활용해 WebDAV를 테스트 삼아 사용해 보았지만 UI 상에서 굉장히 올드해 보여 실제로 사용하기 위해서는 다른 WebDAV 서비스를 찾는 등의 더 나은 대안이 필요로 함을 느끼게 되었습니다!

<참고자료>

https://www.websiterating.com/ko/cloud-storage/glossary/what-is-webdav/
https://sy34.net
https://serverfault.com/questions/1062035/nginx-unicode-characters-in-local-folder-path-500-internal-server-error
https://trac.nginx.org/nginx/ticket/458

profile
차근차근 나아가는 시나브로 개발자

0개의 댓글