Web Server 에서는 웹 기반 공동 작업의 표준인 WebDAV(Web-based Distributed Authoring and Versioning)를 지원합니다. WebDAV는 클라이언트가 원격 웹 컨텐트 저작 작업을 수행하도록 하는 HTTP/1.1 프로토콜의 확장입니다.
완전한 WebDAV 트랜잭션에는 WebDAV 자원에 대한 요청을 서비스할 수 있는 Web Server 와 같은 WebDAV 사용 가능 서버뿐만 아니라 WebDAV 사용 가능 웹 게시 요청을 지원하는 Adobe® GoLive® 또는 Macromedia® DreamWeaver® 같은 WebDAV가 사용 가능 클라이언트가 포함됩니다.
서버측에서는 WebDAV 요청을 서비스할 수 있도록 Web Server 를 활성화하고 구성해야 합니다.
몇 가지 이유로 인해 WebDAV를 구성할 수 있습니다. 예를 들어, 서버 성능을 조정하고 보안 위험을 제거하고 또는 충돌 없는 원격 저작을 제공할 수 있습니다.
각각의 구성 요구 사항에 맞추기 위해 WebDAV 자원에서 서버가 잠금을 유지하는 최소 시간, 모음의 PROPFIND 요청 수준, 요청 본문에 허용된 XML 내용의 최대 크기 등을 변경할 수 있습니다.
기본 WebDAV 속성은 가상 서버 아래의 모든 모음에 대해 가상 서버 수준에서 구성될 수 있습니다. 여기에서 구성된 값은 server.xml 파일의 DAV 요소에 해당합니다.
WebDAV 속성은 모음 수준에서 구성되어 모음에 대해 구성된 가상 서버 수준 속성을 대체할 수 있습니다. 모음 수준에서 구성된 속성 값은 server.xml 파일의 DAVCOLLECTION 요소에 해당합니다.
WebDAV는 HTTP/1.1 프로토콜의 확장 프로그램으로서 HTTP 및 XML뿐만 아니라 텍스트, 그래픽, 스프레드시트 및 모든 기타 형식을 포함하는 모든 유형의 웹 자원에 대해 저작 지원을 제공하는 새로운 HTML 메소드 및 헤더를 추가합니다. WebDAV를 사용하여 수행할 수 있는 작업은 다음과 같습니다.
등록 정보(meta-data) 조작. WebDAV 메소드 PROPFIND 및 PROPPATCH를 사용하여 저작자 및 작성 날짜와 같은 웹 페이지에 대한 정보를 만들고, 제거하고, 쿼리할 수 있습니다.
모음 및 자원 관리. WebDAV 메소드인 GET, PUT, DELETE 및 MKCOL을 사용하여 문서 세트를 만들고 계층적 구성원 목록(파일 시스템의 디렉토리 목록과 유사)을 검색할 수 있습니다.
잠금. WebDAV를 사용하여 두 사람 이상이 동시에 한 문서에서 작업하지 못하도록 할 수 있습니다. WebDAV 메소드 LOCK 및 UNLOCK을 통해 상호 배타적인 잠금이나 공유 잠금을 사용하면 '업데이트 유실'(변경 사항 덮어쓰기) 문제를 방지할 수 있습니다.
이름 공간 작업. WebDAV를 통해 WebDAV 메소드 COPY 및 MOVE를 사용하여 웹 자원을 복사 및 이동하도록 서버에 지시할 수 있습니다
Web Server 의 WebDAV 지원은 다음 기능을 제공합니다.
RFC 2518 표준 호환 및 RFC 2518 클라이언트와의 상호 운용성
게시를 위한 보안 및 액세스 제어
파일 시스템 기반 WebDAV 모음 및 자원에서의 효율적인 게시 작업
이 절에서는 WebDAV 작업 중에 접할 수 있는 일반 용어에 대해 간략하게 설명합니다.
URI. URI(Uniform Resource Identifier)는 URL 약자를 사용하여 추가 보안 계층을 제공하는 파일 아이디입니다. URL의 첫 부분은 URL 매핑으로 대체되기 때문에 사용자는 파일의 실제 경로 전체를 알 수 없게 됩니다.
소스 URI. 소스 URI라는 용어는 액세스할 수 있는 자원의 소스를 가리킵니다. 소스 URI의 개념을 이해하기 위해 다음 예를 살펴볼 수 있습니다.
JSP 페이지 foo.jsp는 URI /docs/date.jsp에 위치합니다. 이 페이지에는 HTML 마크업과 Java 코드가 들어 있는데, 이것을 실행하면 클라이언트 브라우저에 오늘 날짜가 인쇄됩니다. 서버가 클라이언트로부터 foo.jsp에 대한 GET 요청을 받으면 페이지를 제공하기 전에 Java 코드를 실행합니다. 클라이언트가 받는 것은 서버에 상주하는 foo.jsp가 아니라 동적으로 생성되어 현재 날짜를 표시하는 페이지입니다.
소스 URI, 즉 /publish/docs를 만들고 foo.jsp가 포함된 /docs 디렉토리로 매핑하면 /publish/docs/foo.jsp에 대한 요청은 /docs/foo.jsp JSP 페이지의 소스 코드에 대한 요청이 됩니다. 이 경우 서버는 Java 코드를 실행하지 않고 페이지를 제공합니다. 클라이언트는 디스크에 저장된 것과 정확하게 일치하는, 처리되지 않은 페이지를 받습니다.
따라서 소스 URI에 대한 요청은 자원의 소스에 대한 요청입니다.
모음. WebDAV 모음은 WebDAV 작업에 대해 사용 설정된 자원 또는 자원 집합입니다. 모음에는 구성원 URI라고 하는 일련의 URI가 포함되어 있어 WebDAV를 사용하는 구성원 자원을 나타냅니다.
구성원 URI. 모음에 들어 있는 일련의 URI 구성원에 해당되는 URI입니다.
내부 구성원 URI. 모음의 URI에 직접 관련된 구성원 URI입니다. 예를 들어 URL이 http://info.sun.com/resources/info인 자원에서 WebDAV가 사용 가능하고 URL이 http://info.sun.com/resources/인 자원 역시 WebDAV가 사용 가능한 경우 URL이 http://info.sun.com/resources/인 자원은 모음이고 http://info.sun.com/resources/info를 내부 구성원으로 포함합니다.
등록 정보. 자원에 대한 설명적 정보를 포함하는 이름/값 쌍입니다. 등록 정보는 자원의 효율적인 디스커버리와 관리를 위해 사용됩니다. 예를 들어 ’creationdate’ 등록 정보를 사용하면 자원이 작성된 날짜별로 모든 자원의 색인을 만들 수 있고, ’author’ 등록 정보를 사용하면 작성자 이름별로 색인을 만들 수 있습니다.
라이브 등록 정보. 서버가 집행하는 등록 정보입니다. 예를 들어 라이브 getcontentlength 등록 정보는 GET 요청이 반환하는 엔티티의 길이를 값으로 가지며, 이 값은 서버에서 자동으로 계산됩니다. 라이브 등록 정보는 다음을 포함합니다.
등록 정보 값은 읽기 전용이며 서버에서 유지 관리됩니다.
등록 정보 값은 클라이언트에서 유지 관리되지만 제출된 값의 구문 확인은 서버가 수행합니다.
데드 등록 정보. 서버가 집행하지 않는 등록 정보입니다. 서버는 데드 등록 정보의 값을 기록만 하며 클라이언트에서 일관성을 유지 관리해야 합니다.
다음은 서버에서 지원하는 라이브 등록 정보입니다.
creationdate
displayname
getcontentlanguage
getcontentlength
getcontenttype
gettag
getlastmodified
lockdiscovery
resourcetype
supportedlock
executable
서버는 클라이언트가 자원과 연결된 파일 권한을 변경할 수 있게 하는 라이브 등록 정보 executable을 지원합니다.
executable 라이브 등록 정보에 대한 PROPPATCH 요청의 예:
PROPPATCH /test/index.html HTTP/1.1
Host: sun
Content-type: text/xml
Content-length: XXXX
<?xml version="1.0"?>
<A:propertyupdate xmlns:A="DAV:" xmlns:B="http://apache.org/dav/props/">
<A:set>
<A:prop>
<B:executable>T</B:executable>
</A:prop>
</A:set>
</A:propertyupdate>
잠금. 리소스를 잠그는 기능은 한 사용자가 자원을 편집하는 동안 다른 사용자가 자원을 수정할 수 없게 하는 기법을 제공합니다. 잠금을 사용하면 덮어쓰기 충돌을 방지하고 "업데이트 유실" 문제를 해결할 수 있습니다.
서버에서는 공유 및 전용의 두 가지 잠금 유형을 지원합니다.
새 HTTP 헤더. WebDAV가 HTTP/1.1 프로토콜을 확장하여 작업합니다. 여기서는 클라이언트에서 WebDAV 자원에 대한 요청을 전달할 수 있는 새 HTTP 헤더를 정의합니다. 다음과 같은 헤더가 있습니다.
Destination:
Lock-Token:
Timeout:
DAV:
If:
Depth:
Overwrite:
새로운 HTML 메소드입니다.WebDAV는 WebDAV 사용 가능한 서버에 요청 처리 방법을 지시하는 몇 가지 새로운 HTML 메소드를 소개합니다. 이러한 메소드는 GET, PUT 및 DELETE와 같은 기존 HTTP 메소드에 추가로 사용되며 WebDAV 트랜잭션을 수행합니다. 새 HTTP 메소드에 대한 내용은 아래에서 간략하게 설명합니다.
COPY. 자원을 복사하는 데 사용됩니다. 모음 복사에는 Depth: 헤더가 사용되며 Destination: 헤더는 대상을 지정합니다. COPY 메소드에서는 해당되는 경우 Overwrite: 헤더도 사용합니다.
MOVE. 자원을 이동하는 데 사용됩니다. 모음 이동에는 Depth: 헤더가 사용되며 Destination: 헤더는 대상을 지정합니다. MOVE 메소드에서는 해당되는 경우 Overwrite: 헤더도 사용합니다.
MKCOL. 새 모음을 만드는 데 사용됩니다. 이 메소드를 사용하면 PUT 메소드의 오버로드를 방지할 수 있습니다.
PROPFIND. 하나 이상의 자원에 속한 하나 이상의 등록 정보를 가져오는 데 사용됩니다. 클라이언트에서 모음에 있는 PROPFIND 요청을 서버로 제출하는 경우 요청에는 Depth: 헤더(값은 0, 1 또는 infinity)를 포함할 수 있습니다.
0. 지정된 URI의 모음 등록 정보를 가져오도록 지정합니다.
1. 지정된 URI 바로 아래에 있는 모음 및 자원의 등록 정보를 가져오도록 지정합니다.
infinity. 모음의 등록 정보와 포함되어 있는 모든 구성원 URI를 가져오도록 지정합니다. Depth 값이 infinite인 요청은 전체 모음을 탐색하기 때문에 서버에 큰 부담을 줄 수 있습니다.
Administration Server를 사용하여 전체 서버에 대해 WebDAV를 활성화할 수 있습니다. 이렇게 하면 다음 지시문이 WebDAV 플러그인을 로드하는 magnus.conf 파일에 추가됩니다.
Init fn="load-modules" shlib="/s1ws6.1/lib/libdavplugin.so" funcs="init-dav,ntrans-dav,pcheck-dav,service-dav" shlib_flags="(global|now)" Init fn="init-dav" LateInit=yes
init-dav Init 기능은 WebDAV 하위 시스템을 초기화 및 등록합니다.
WebDAV를 활성화하려면 CLI에서 다음 명령을 실행합니다.
wadm> enable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=test |
CLI 참조 enable-webdav(1)를 참조하십시오.
WebDAV 모음을 활성화하려면 다음 명령을 실행합니다.
wadm> enable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI 참조 enable-dav-collection(1)을 참조하십시오.
WebDAV 모음을 비활성화하려면 다음 명령을 실행합니다.
wadm> disable-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI 참조 disable-dav-collection(1)을 참조하십시오.
WebDAV 모음을 추가하려면 다음 명령을 실행합니다.
wadm> create-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 --source-uri=/dav_config1 |
CLI 참조 create-dav-collection(1)을 참조하십시오.
WebDAV 모음을 모두 나열하려면 다음 명령을 실행합니다.
wadm> list-dav-collections --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 |
CLI 참조 list-dav-collections(1)를 참조하십시오.
WebDAV 모음을 제거하려면 다음 명령을 실행합니다.
wadm> delete-dav-collection --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI 참조 delete-dav-collection(1)을 참조하십시오.
서버 수준에서 WebDAV 등록 정보를 설정하려면 다음 명령을 실행합니다.
wadm> set-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 acl-max-entries=120 |
CLI 참조 set-webdav-prop(1)를 참조하십시오.
서버 수준에서 WebDAV 등록 정보를 보려면 다음 명령을 실행합니다.
wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
CLI 참조 get-webdav-prop(1)를 참조하십시오.
WebDAV 모음 등록 정보를 설정하려면 다음 명령을 실행합니다.
wadm> set-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs=config1_vs_1 --uri=/dav_config1 min-lock-timeout=1 |
CLI 참조 set-dav-collection-prop(1)를 참조하십시오.
WebDAV 모음 등록 정보를 보려면 다음 명령을 실행합니다.
wadm> get-dav-collection-prop --user=admin --password-file=admin.pwd --host=serverhost --port=8989 -config=config1 --vs=config1_vs_1 --uri=/dav_config1 |
CLI 참조 get-dav-collection-prop(1)를 참조하십시오.
다음 표에는 일반적인 WebDAV 등록 정보 중 일부가 나열되어 있습니다.
표 10–1 WebDAV 매개 변수
매개 변수 |
설명 |
---|---|
잠금 데이터베이스 경로 |
잠금 데이터베이스를 유지 관리하는 디렉토리를 지정합니다. |
최소 잠금 시간 초과 |
잠금의 최소 사용 시간을 초 단위로 지정합니다. 값이 -1이면 잠금 시간이 초과되지 않았다는 의미입니다. 이 값은 잠금이 자동으로 제거되기 전에 요소가 잠기는 시간 길이를 나타냅니다. |
최대 요청 크기 |
XML 요청 본문의 최대 크기를 지정합니다. 서비스 거부 공격의 가능성을 예방하려면 이 값을 구성해야 합니다. 기본값은 8192(8K)입니다. |
최대 확장 등록 정보 깊이 |
확장 등록 정보 깊이를 지정합니다. 0은 지정된 자원에만 적용되며 기본값입니다. 1은 지정된 자원과 그 다음 수준에 적용됩니다. 무제한은 지정된 자원과 여기에 포함된 모든 자원에 적용됩니다. 이 매개 변수의 크기를 제한하여 과도한 메모리 소모를 방지합니다. |
기본 소유자 |
모음의 기본 소유자입니다. |
URI |
WebDAV를 활성화할 기존 루트 URI입니다. |
최대 PROPFIND 깊이 |
모음으로 전송되는 PROPFIND 요청의 최대 깊이입니다. |
잠금 데이터베이스 업데이트 간격 |
WebDAV 잠금 데이터베이스를 디스크와 동기화하는 간격입니다. WebDAV 잠금 정보를 캐시하지 않으려면 0을 사용합니다. |
인증 데이터베이스 |
사용할 ACL 인증 데이터베이스입니다. |
인증 방법 |
사용할 인증 방법입니다. 기본 인증 방법은 Basic입니다. |
인증 프롬프트 텍스트 |
인증을 요청할 때 클라이언트에 표시할 프롬프트입니다. |
DAV ACL 데이터베이스 | |
최대 항목 수 |
단일 자원에서 허용할 최대 ACE 수입니다. 0–2147.0483647.0. 제한이 없는 경우 1을 지정합니다. |
최대 크기 |
모음의 WebDAV ACL 데이터베이스 메모리 표현에 허용되는 최대 크기입니다. 0–2147.0483647.0. 제한이 없는 경우 1을 지정합니다. |
업데이트 간격 |
WebDAV ACL 데이터베이스를 디스크와 동기화하는 간격입니다. 0.001–3600초. WebDAV ACL목록을 캐시하지 않으려면 0을 지정합니다. |
DAV 등록 정보 데이터베이스 | |
최대 크기 |
WebDAV 등록 정보 데이터베이스 파일의 최대 크기입니다. 0–2147.0483647.0. 제한이 없는 경우 1을 지정합니다. |
업데이트 간격 |
WebDAV 등록 정보 데이터베이스를 디스크와 동기화하는 간격입니다. 0.01–3600초. WebDAV 등록 정보를 캐시하지 않으려면 0을 지정합니다. |
서버 수준에서 WebDAV를 비활성화하려면 다음 명령을 실행합니다.
wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 |
CLI 참조 disable-webdav(1)를 참조하십시오.
관리 콘솔에서 선택한 구성의 WebDAV 탭을 눌러 WebDAV 인증 데이터베이스 설정을 편집합니다. 다음 표에서는 페이지의 각 필드에 대한 간단한 설명을 제공합니다.
표 10–2 WebDAV 인증 데이터베이스 등록 정보
WebDAV 메소드는 자원 또는 모음의 소스에서 작동합니다. GET 및 PUT 등의 HTTP 메소드는 WebDAV 프로토콜에 의해 오버로드되기 때문에 이런 메소드가 있는 요청은 자원의 소스에 대한 요청이 될 수도 있고 자원의 내용(출력)에 대한 요청이 될 수도 있습니다.
Microsoft 및 기타 많은 WebDAV 공급업체에서 요청과 함께 Translate:f 헤더를 전송하여 요청이 소스에 대한 것임을 서버에 알리는 방법으로 이 문제를 해결했습니다. 자주 사용하는 WebDAV 클라이언트인 Microsoft WebFolders와 상호 작동이 가능하도록 서버는 Translate:f 헤더를 자원 소스에 대한 요청으로 인식합니다. Translate:f 헤더를 보내지 않는 클라이언트를 수용하도록 서버에서 소스 URI를 정의합니다.
WebDAV 사용 모음의 경우 URI에 대한 요청에서는 자원의 내용(출력)을 검색하고 소스 URI에 대한 요청에서는 자원의 소스를 검색합니다. Translate:f 헤더가 있는 URI에 대한 요청은 소스 URI에 대한 요청으로 처리됩니다.
기본적으로 자원의 소스에 대한 모든 액세스는 서버 인스턴스 특정 ACL 파일에 다음 선언이 있는 dav-src ACL에 의해 거부됩니다.
deny (all) user = "anyone";
사용자는 소스 URI에 대한 액세스 권한을 추가하여 사용자가 소스에 액세스할 수 있도록 설정할 수 있습니다.
서버를 통해 서버 관리자는 자원을 잠궈 해당 자원에 대한 액세스를 일련화할 수 있습니다. 잠금을 사용하면 특정 자원에 액세스하는 사용자가 있을 경우 다른 사용자가 같은 자원을 수정할 수 없습니다. 이 방법을 사용하면 여러 사용자가 서버에서 자원을 공유하기 때문에 발생하는 "업데이트 유실" 문제를 해결할 수 있습니다. 서버에서 유지 관리하는 잠금 데이터베이스는 클라이언트에서 발행하고 사용하는 잠금 토큰을 추적합니다.
서버는 항상 모든 자원에 대해 고유하도록 고안된 opaquelocktoken URI 체계를 지원합니다. 여기서는 ISO-1157.08에 기술된 것과 같은 UUID(Universal Unique Identifier) 기법을 사용합니다.
서버는 두 가지 유형의 잠금 메커니즘을 인식합니다.
전용 잠금
공유 잠금
전용 잠금은 단일 사용자에게만 자원 액세스 권한을 부여하는 잠금입니다. 다른 사용자는 자원의 전용 잠금이 제거된 후에만 같은 자원에 액세스할 수 있습니다.
전용 잠금은 자원을 잠글 때 사용하기에 너무 경직되고 비용이 큰 경우가 많습니다. 예를 들어 프로그램이 중단되거나 잠금 소유자가 자원 잠금 해제를 잊어버린 경우 전용 잠금을 제거하려면 잠금 시간이 초과되거나 관리자가 개입해야 합니다.
공유 잠금을 사용하면 여러 사용자가 자원에 대한 잠금을 받을 수 있습니다. 따라서 적절한 액세스 권한이 있는 사용자는 누구나 잠금을 얻을 수 있습니다.
공유 잠금을 사용하는 경우 잠금 소유자는 다른 통신 채널을 사용하여 작업을 조정할 수 있습니다. 공유 잠금의 목적은 공동 작업자가 자원에서 어떤 사람이 작업 중인지 알 수 있게 하는 것입니다.
server.xml 파일에서 DAV 또는 DAVCOLLECTION 객체의 minlocktimeout 속성 값을 구성하여 잠금을 제어할 수 있습니다. minlocktimeout 속성은 잠금의 최소 사용 시간을 초 단위로 지정합니다. 이 값은 잠금이 자동으로 제거되기 전에 요소가 잠기는 시간 길이를 나타냅니다.
이 속성은 선택적인 속성입니다. 값을 -1로 설정하면 잠금이 만료되지 않습니다. 값을 0으로 설정하면 모음의 모든 자원을 요청에 지정된 Timeout 헤더로 잠글 수 있습니다.
Timeout 헤더가 지정되어 있지 않으면 자원은 제한 시간 무한으로 잠깁니다. 요청의 Timeout 헤더가 Infinite 값으로 설정되어 있는 경우에도 자원은 제한 시간 무한으로 잠깁니다.
WebDAV 자원에 대한 요청의 Timeout 헤더 값이 server.xml에 지정된 minlocktimeout 값과 같거나 크면 자원은 요청에 지정된 시간 동안 잠깁니다.
그러나 요청의 Timeout 헤더 값이 server.xml에 지정된 minlocktimeout 값 미만인 경우에는 자원이 server.xml에 지정된 minlocktimeout 값으로 잠깁니다.
다음 표는 서버에서 잠금 요청을 처리하는 방법을 보여줍니다.
표 10–3 Sun Java System Web Server에서 잠금 요청을 처리하는 방법
CLI 사용
CLI를 통해 잠금 만료를 설정하려면 다음 명령을 실행합니다.
wadm> expire-lock --user=admin --password-file=admin.pwd --host=serverhost--port=8989 --config=config1 --vs=config1 --collection-uri=/dav1 --lock-uri=/dav1/file.html --opaque-token=opaquelocktoken |
CLI 참조 expire-lock(1)을 참조하십시오.
위의 예에서 opaque-token은 만료되도록 설정할 잠금의 아이디를 지정합니다.
CLI를 통해 기존 잠금을 표시하려면 다음 명령을 실행합니다.
wadm> list-locks --user=admin --password-file=admin.pwd --host=serverhost --port=8989 --config=config1 --vs config1 --collection-uri=/dav1 |
CLI 참조 list-locks(1)를 참조하십시오.