Sun Java System Web Server 7.0 관리자 설명서

10장 WebDAV를 사용하여 웹 게시

Sun Java System Web Server 7.0에서는 웹 기반 공동 작업의 표준인 WebDAV(Web-based Distributed Authoring and Versioning)를 지원합니다. WebDAV는 클라이언트가 원격 웹 컨텐트 저작 작업을 수행하도록 하는 HTTP/1.1 프로토콜의 확장입니다.

완전한 WebDAV 트랜잭션에는 WebDAV 자원에 대한 요청을 서비스할 수 있는 Sun Java System Web Server 7.0과 같은 WebDAV 사용 가능한 서버뿐만 아니라 WebDAV 사용 가능한 웹 게시 요청을 지원하는 Adobe® GoLive® 또는 Macromedia® DreamWeaver®와 같은 WebDAV 사용 가능 클라이언트가 포함됩니다.

서버측에서는 Sun Java System Web Server 7.0에서 WebDAV 요청을 서비스할 수 있도록 활성화하고 구성해야 합니다.

몇 가지 이유로 인해 WebDAV를 구성할 수 있습니다. 예를 들어, 서버 성능을 조정하고 보안 위험을 제거하고 또는 충돌 없는 원격 저작을 제공할 수 있습니다.

각각의 구성 요구 사항에 맞추기 위해 WebDAV 자원에서 서버가 잠금을 유지하는 최소 시간, 모음의 PROPFIND 요청 수준, 요청 본문에 허용된 XML 내용의 최대 크기 등을 변경할 수 있습니다.

기본 WebDAV 속성은 가상 서버 아래의 모든 모음에 대해 가상 서버 수준에서 구성될 수 있습니다. 여기에서 구성된 값은 server.xml 파일의 DAV 요소에 해당합니다.

WebDAV 속성은 모음 수준에서 구성되어 모음에 대해 구성된 가상 서버 수준 속성을 대체할 수 있습니다. 모음 수준에서 구성된 속성 값은 server.xml 파일의 DAVCOLLECTION 요소에 해당합니다.

WebDAV 정보

WebDAV는 HTTP/1.1 프로토콜의 확장 프로그램으로서 HTTP 및 XML뿐만 아니라 텍스트, 그래픽, 스프레드시트 및 모든 기타 형식을 포함하는 모든 유형의 웹 자원에 대해 저작 지원을 제공하는 새로운 HTML 메소드 및 헤더를 추가합니다. WebDAV를 사용하여 수행할 수 있는 작업은 다음과 같습니다.

Sun Java System Web Server 7.0의 WebDAV 지원은 다음과 같은 기능을 제공합니다.

일반 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 요청이 반환하는 엔티티의 길이를 값으로 가지며, 이 값은 서버에서 자동으로 계산됩니다. 라이브 등록 정보는 다음을 포함합니다.

데드 등록 정보.서버가 집행하지 않는 등록 정보입니다. 서버는 데드 등록 정보의 값을 기록만 하며 클라이언트에서 일관성을 유지 관리해야 합니다.

Sun Java System Web Server는 다음과 같은 라이브 등록 정보를 지원합니다.


주 –

Sun Java System Web Server는 클라이언트가 자원과 연결된 파일 권한을 변경할 수 있게 하는 라이브 등록 정보 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>


잠금. 리소스를 잠그는 기능은 한 사용자가 자원을 편집하는 동안 다른 사용자가 자원을 수정할 수 없게 하는 기법을 제공합니다. 잠금을 사용하면 덮어쓰기 충돌을 방지하고 "업데이트 유실" 문제를 해결할 수 있습니다.

Sun Java System Web Server는 공유 잠금과 전용 잠금의 두 가지 잠금 유형을 지원합니다.

새 HTTP 헤더. WebDAV가 HTTP/1.1 프로토콜을 확장하여 작업합니다. 여기서는 클라이언트에서 WebDAV 자원에 대한 요청을 전달할 수 있는 새 HTTP 헤더를 정의합니다. 다음과 같은 헤더가 있습니다.

새 HTTP 메소드.WebDAV는 WebDAV 사용 가능 서버에 요청 처리 방법을 지시하는 몇 가지 새 HTTP 메소드를 도입합니다. 이러한 메소드는 GET, PUTDELETE와 같은 기존 HTTP 메소드에 추가로 사용되며 WebDAV 트랜잭션을 수행합니다. 새 HTTP 메소드에 대한 내용은 아래에서 간략하게 설명합니다.

인스턴스 수준에서 WebDAV 활성화

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 모음 관리

WebDAV 모음 활성화

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 모음 비활성화

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 모음 추가

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 모음 나열

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 모음 제거

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 등록 정보 구성

WebDAV 등록 정보 설정

서버 수준에서 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 등록 정보 보기

서버 수준에서 WebDAV 등록 정보를 보려면 다음 명령을 실행합니다.


wadm> get-webdav-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

CLI 참조 get-webdav-prop(1)를 참조하십시오.

WebDAV 모음 등록 정보 설정

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 모음 등록 정보 보기

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 매개 변수 수정

다음 표에는 일반적인 WebDAV 등록 정보 중 일부가 나열되어 있습니다.

표 10–1 WebDAV 매개 변수

매개 변수

설명

잠금 데이터베이스 경로

잠금 데이터베이스를 유지 관리하는 디렉토리를 지정합니다. 

최소 잠금 시간 초과

잠금의 최소 사용 시간을 초 단위로 지정합니다. -1 값은 잠금 시간이 초과되지 않음을 나타냅니다. 이 값은 잠금이 자동으로 제거되기 전에 요소가 잠기는 시간 길이를 나타냅니다.

최대 요청 크기

XML 요청 본문의 최대 크기를 지정합니다. 서비스 거부 공격의 가능성을 예방하려면 이 값을 구성해야 합니다. 기본값은 8192(8K)입니다.

최대 확장 등록 정보 깊이

PROPFIND 요청의 깊이를 지정합니다. 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 비활성화

서버 수준에서 WebDAV를 비활성화하려면 다음 명령을 실행합니다.


wadm> disable-webdav --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1

CLI 참조 disable-webdav(1)를 참조하십시오.

WebDAV 인증 데이터베이스 관리

관리 콘솔에서 선택한 구성의 WebDAV 탭을 눌러 WebDAV 인증 데이터베이스 설정을 편집합니다. 다음 표에서는 페이지의 각 필드에 대한 간단한 설명을 제공합니다.

표 10–2 WebDAV 인증 데이터베이스 등록 정보

등록 정보

설명

인증 데이터베이스

인증 데이터베이스를 사용하여 서버가 사용자를 인증하는 데 사용할 데이터베이스를 선택할 수 있습니다.

기본값은 keyfile입니다.

인증 방법

  • Basic — HTTP 기본 메소드를 사용하여 클라이언트에서 인증 정보를 가져옵니다. 서버에 대해 SSL을 사용하는 경우 사용자 이름 및 암호는 네트워크를 통해서만 암호화됩니다.

  • SSL — 클라이언트 인증서를 사용하여 사용자를 인증합니다. 이 방법을 사용하려면 반드시 서버에 SSL을 사용해야 합니다. 암호화를 사용하는 경우 Basic과 SSL 메소드를 조합할 수 있습니다.

  • Digest — 사용자 이름과 비밀번호를 일반 텍스트로 보내지 않고 브라우저가 사용자 이름과 비밀번호를 기준으로 인증하는 방법을 제공하는 인증 기법을 사용합니다. 브라우저는 MD5 알고리즘을 사용하여 웹 서버에서 제공하는 사용자 비밀번호 및 일부 정보를 사용하는 Digest 값을 만듭니다. Digest를 사용하려면 배후의 auth-db에서도 digest를 지원해야 합니다. 즉, digestfile을 사용하는 파일 auth-db 또는 Digest 인증 플러그인이 설치된 LDAP auth-db를 의미합니다.

  • 기타 — 액세스 제어 API를 사용하여 만들어진 사용자 정의 메소드를 사용합니다.

인증 프롬프트 텍스트

인증 확인 프롬프트 옵션을 사용하여 인증 대화 상자에 표시되는 메시지 텍스트를 입력할 수 있습니다. 이 텍스트를 사용하여 사용자가 입력해야 하는 내용을 설명할 수 있습니다. 브라우저에 따라 사용자는 프롬프트의 처음 40자 정도만 볼 수 있습니다.

웹 브라우저는 일반적으로 사용자 이름과 비밀번호를 캐시하고 프롬프트 텍스트에 연결합니다. 사용자가 동일한 프롬프트를 가지는 서버의 파일 및 디렉토리에 액세스하는 경우에는 사용자 이름과 비밀번호를 다시 입력하지 않아도 됩니다. 특정 파일 및 디렉토리에 대해 사용자 인증을 원하는 경우 간단히 해당 자원에 대한 ACL용 프롬프트를 변경하면 됩니다. 

WebDAV 사용 가능 서버에서 소스 URI 및 Translate:f 헤더 사용

WebDAV 메소드는 자원 또는 모음의 소스에서 작동합니다. GET 및 PUT 등의 HTTP 메소드는 WebDAV 프로토콜에 의해 오버로드되기 때문에 이런 메소드가 있는 요청은 자원의 소스에 대한 요청이 될 수도 있고 자원의 내용(출력)에 대한 요청이 될 수도 있습니다.

Microsoft 및 기타 많은 WebDAV 공급업체에서 요청과 함께 Translate:f 헤더를 전송하여 요청이 소스에 대한 것임을 서버에 알리는 방법으로 이 문제를 해결했습니다. 흔히 사용되는 WebDAV 클라이언트인 Microsoft WebFolders와의 상호 운용성을 위해, Sun Java System Web Server 7.0은 Translate:f 헤더를 자원의 소스에 대한 요청으로 인식합니다. Translate:f 헤더를 보내지 않는 클라이언트를 수용하기 위해 Sun Java System Web Server는 소스 URI를 정의합니다.

WebDAV 사용 모음의 경우 URI에 대한 요청에서는 자원의 내용(출력)을 검색하고 소스 URI에 대한 요청에서는 자원의 소스를 검색합니다. Translate:f 헤더가 있는 URI에 대한 요청은 소스 URI에 대한 요청으로 처리됩니다.

기본적으로 자원의 소스에 대한 모든 액세스는 서버 인스턴스 특정 ACL 파일에 다음 선언이 있는 dav-src ACL에 의해 거부됩니다.

deny (all) user = "anyone";

사용자는 소스 URI에 대한 액세스 권한을 추가하여 사용자가 소스에 액세스할 수 있도록 설정할 수 있습니다.

자원 잠금 및 잠금 해제

Sun Java System Web Server를 사용하면 서버 관리자가 자원을 잠궈 해당 자원에 대한 액세스를 일련화할 수 있습니다. 잠금을 사용하면 특정 자원에 액세스하는 사용자가 있을 경우 다른 사용자가 같은 자원을 수정할 수 없습니다. 이 방법을 사용하면 여러 사용자가 서버에서 자원을 공유하기 때문에 발생하는 "업데이트 유실" 문제를 해결할 수 있습니다. 서버에서 유지 관리하는 잠금 데이터베이스는 클라이언트에서 발행하고 사용하는 잠금 토큰을 추적합니다.

Sun Java System Web Server는 항상 모든 자원에 대해 고유하도록 고안된 opaquelocktoken URI 체계를 지원합니다. 여기서는 ISO-1157.08에 기술된 것과 같은 UUID(Universal Unique Identifier) 기법을 사용합니다.

Sun Java System Web Server에서는 두 가지 유형의 잠금 기법을 인식합니다.

전용 잠금

전용 잠금은 단일 사용자에게만 자원 액세스 권한을 부여하는 잠금입니다. 다른 사용자는 자원의 전용 잠금이 제거된 후에만 같은 자원에 액세스할 수 있습니다.

전용 잠금은 자원을 잠글 때 사용하기에 너무 경직되고 비용이 큰 경우가 많습니다. 예를 들어 프로그램이 중단되거나 잠금 소유자가 자원 잠금 해제를 잊어버린 경우 전용 잠금을 제거하려면 잠금 시간이 초과되거나 관리자가 개입해야 합니다.

공유 잠금

공유 잠금을 사용하면 여러 사용자가 자원에 대한 잠금을 받을 수 있습니다. 따라서 적절한 액세스 권한이 있는 사용자는 누구나 잠금을 얻을 수 있습니다.

공유 잠금을 사용하는 경우 잠금 소유자는 다른 통신 채널을 사용하여 작업을 조정할 수 있습니다. 공유 잠금의 목적은 공동 작업자가 자원에서 어떤 사람이 작업 중인지 알 수 있게 하는 것입니다.

최소 잠금 시간 초과

server.xml 파일에서 DAV 또는 DAVCOLLECTION 객체의 minlocktimeout 속성 값을 구성하여 잠금을 제어할 수 있습니다. minlocktimeout 속성은 잠금의 최소 사용 시간을 초 단위로 지정합니다. 이 값은 잠금이 자동으로 제거되기 전에 요소가 잠기는 시간 길이를 나타냅니다.

이 속성은 선택적인 속성입니다. 값을 -1로 설정하면 잠금이 만료되지 않습니다. 값을 0으로 설정하면 모음의 모든 자원을 요청에 지정된 Timeout 헤더로 잠글 수 있습니다.

Timeout 헤더가 지정되어 있지 않으면 자원은 제한 시간 무한으로 잠깁니다. 요청의 Timeout 헤더가 Infinite 값으로 설정되어 있는 경우에도 자원은 제한 시간 무한으로 잠깁니다.

WebDAV 자원에 대한 요청의 Timeout 헤더 값이 server.xml에 지정된 minlocktimeout 값과 같거나 크면 자원은 요청에 지정된 시간 동안 잠깁니다.

그러나 자원의 Timeout 헤더 값이 server.xml에 지정된 minlocktimeout 값 미만인 경우에는 자원이 server.xml에 지정된 minlocktimeout 값으로 잠깁니다.

다음 표에서는 Sun Java System Web Server로 잠금 요청을 처리하는 방법을 보여줍니다.

표 10–3 Sun Java System Web Server에서 잠금 요청을 처리하는 방법

요청의 Timeout 헤더 값 설정 

리소스 

Infinite

시간 초과가 -1(무한)로 설정되어 잠김 

None 

시간 초과가 -1(무한)로 설정되어 잠김 

Second-xxx

  • xxx 값으로 잠김, xxxserver.xml에 설정된 minlocktimeout 값과 같거나 클 경우

    또는

  • server.xml에 지정된 minlocktimeout 값으로 잠김, xxxserver.xml에 설정된 minlocktimeout 값보다 작을 경우.


주 –

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)를 참조하십시오.