Julie의 Tech 블로그

HTTP - (13) 배포 시스템 본문

Tech

HTTP - (13) 배포 시스템

Julie's tech 2021. 7. 4. 21:35
728x90

개발한 웹페이지를 어떻게 배포할 수 있을까?

과거 1995년에는 텍스트 에디터를 이용하여 HTML 코딩을 하고, FTP를 통해 웹서버에 콘텐츠를 올렸다고 한다.

요즈음은 여러 개발자가 동시에 작업하여 배포하는 편이기 때문에, 배포방식이 생성과 배포 관리 측면에서 좀 더 개선되었다.

HTTP 프로토콜을 확장하여 콘텐츠 원격 배포 지원 기능을 추가하였다.

본 글은 마이크로소프트의 대표 웹 배포 도구인 FP, FPSE에 대해 간략히 살펴보고,

웹 공동작업을 위한 주요 기능들을 제공하는 WebDav와 그가 지원하는 메서드들에 대해 알아볼 것이다.


FP, FPSE

가장 대표적인 마이크로소프트의 웹 개발 및 배포 도구인 FrontPage(FP)는 "어디서든 배포한다"라는 전략으로,

FPSE(FrontPage Server Extentions)라는 서버측 소프트웨어와 함께 사용된다.

FP클라이언트와 FPSE 사이에서 배포 프로토콜이 사용되며, 이 프로토콜의 구현에 대해 좀 더 살펴보자.

FP 배포 프로토콜은 POST request 위에 RPC계층을 추가하였는데, 이 프로토콜 구현을 통해

FP 클라이언트가 서버로 명령을 내려 웹개발자들이 문서를 갱신하거나, 검색하거나 혹은 공동 작업을 가능하게 해주었다.

우선 통신을 시작하기에 앞서 클라이언트는 서버에 있는 FPSE 패키지 일부의 위치와 이름을 알아내야한다.

클라이언트는 GET요청을 보내 이 정보를 서버로부터 얻는다. (FPShtmlScriptUrl, FPAuthorScriptUrl 등과 관련된 값을 저장)

이 정보를 바탕으로 클라이언트는 Request 메시지를 작성할 수 있게 되었다. 아래는 예시 요청문이다.

POST /_vti_bin/_vti_aut/author.dll HTTP/1.1 
Date : Sat, 12 Aug 2000 20:32:54 GMT 
User-Agent : MSFrontPage/4.0 
------------ 
<BODY> method=list+documents%3a4%2e...&service%5fname=&listHiddenDocs=false&listExplorerDocs=false...

본문에는 FPSE로 보내는 RPC명령이 기재되는데, 각 메서드별 문자나 숫자는 모두 ASCII 코드로 인코딩되어 들어간다.

응답 역시 본문에 메서드별 성공여부와 에러를 표기하여 보내주게 된다.

웹을 배포할때는 보안에 신경써야한다. FPSE 보안은 대부분 웹 서버에 의존하게 되는데, 보안 모델은 사용자 단위로 세 가지로 나뉜다.

모든 권한을 가진 관리자와 저작자, 사용자 순인데, 상위 권한을 보유한 역할자로 갈수록 권한이 누적된다.


WebDAV - 공동 작업

WebDAV는 Web Distributed Authoring and Versioning의 줄임말로, 공동 작업과 버저닝 관리에 대한 협업 관리 기술이다.

마찬가지로 HTTP를 확장하는 방식으로 구현되었는데, HTTP에 추가하는 메서드들을 살펴보면 아래와 같다.

- PROPFIND : 리소스의 속성을 읽음

- PROPPATCH : 하나 이상의 리소스에 대해 하나 이상의 속성 설정

- LOCK : 하나 이상의 리소스를 잠금

- UNLOCK : 하나 이상의 리소스를 잠금 해제

HTTP는 요청과 응답 정보를 헤더에 담아 보내게 되는데, 이는 요청 하나에 여러 개의 리소스가 존재할 때 사용하는 데에 있어 한계가 있다.

따라서 구조화(structured)된 데이터를 담을 때 사용하는 XML을 지원하는데, 주로 아래와 같은 용도로 사용된다.

- 데이터 처리 설명 포맷, 서버의 복잡한 응답을 다시 표현하는데 사용 등

공동작업시 가장 중요한 기능은 'Lock'이다.

만약 A와 B가 작업한 내용을 동시에 배포하려고 할 때, 둘 간의 버전 충돌이 있을 수 있다.

WebDAV는 두 가지의 잠금을 지원하는데, 1) 리소스/콜렉션에 대한 배타적 쓰기 잠금. 2) 리소스/콜렉션에 대한 공유 쓰기 잠금

배타적 쓰기 잠금은 잠금자만 쓸 수 있게 보장하는 것인 반면 공유 쓰기 잠금은 여러 사용자가 속한 그룹이 하나의 문서에서 작업이 가능하다.

배타적 쓰기 잠금이 좀 더 폐쇄적인 잠금 단위라고 생각하면된다.

잠금을 위해서는 작성자의 식별이 필요한데, 이 때 다이제스트 인증이 사용된다.

LOCK메서드는 하나의 요청으로도 여러 개의 리소스를 잠글 수 있는데, locktype, lockscope, owner 등의 요소로 함께 표기된다.

잠금이 되는 것에도 timeout시간이 있다. 이 timeout시간 내에 토큰이 발행되는데, 그 토큰이 expire되면 다시 갱신해야한다.

리소스의 정보를 담은 속성에는 작성자 이름, 수정 날짜, 내용 등급 등이 포함된다.

이 속성을 조회하고 수정하기 위해 WebDav는 PROPFIND와 PROPPATCH라는 메서드를 제공한다.

PROPFIND는 property find라는 의미로, 주어진 리소스의 속성을 읽는 역할을 한다.

PROPPATCH는 리소스의 속성들을 변경하는 데에 사용되며, set혹은 remove와 같은 기능을 통해 속성을 변경한다.

콜렉션이란 리소스의 그룹 단위를 지칭하는 것이며, 가장 대표적인 콜렉션의 예는 디렉터리이다.

콜렉션을 생성하는 용도로 MKCOL 메서드를 사용한다. 이를 삭제하려면 DELETE메서드를 사용한다.

특정 디렉터리와 그 하위에 있는 디렉터리들을 모두 포함하여 삭제할 경우 depth 헤더를 함께 사용한다.

리소스를 복사하고 이동하는 COPY와 MOVE메서드도 지원이 된다.

요청 URL에 있는 리소스를 목적지 Destination HTTP 헤더 값으로 복사 혹은 이동과 같은 작업을 수행한다.

Depth가 0이면 해당 리소스만 대상이 되고, infinity일 경우 하위 모든 리소스가 다 포함이 된다.

만약 리소스가 잠겨있으면 이 메서드 모두 금지되어 응답이 에러 메시지로 돌아올 것이다.

WebDAV는 HTTP 대표 메서드인 DELETE, PUT, OPTIONS의 의미를 수정하였는데, GET, HEAD는 그대로 두었다.

PUT은 작성자가 공용 공간에 콘텐츠를 전송할 때 사용하는 방식으로, if헤더를 통해 잠금 토큰을 함께 전송하는 것으로 변경되었다.

OPTIONS메서드는 WebDAV를 사용하는 클라이언트가 처음으로 보내는 요청에 사용되어, 서버가 어떤 것들을 제공하는지 확인할 수 있다.

WebDAV는 현재 많은 브라우저에서 지원되고 있다고 한다.


참고도서

https://book.naver.com/bookdb/book_detail.nhn?bid=8509980

 

HTTP 완벽 가이드

반응형