저자: 켄달 그랜트 클라크(Kendall Grant Clark), 역 전순재
요점
W3C의 테크니컬 아키텍처 그룹(
TAG, Technical Architecture Group)의 회원들은 "웹 아키텍처의 원칙(APW, Architectural Principles of the World Wide Web)"이라는 문서를 준비하고 있다. 이 문서는 웹을 작동시키는 요인들에 관하여 TAG가 그동안 발견하고 정의한 것들을 명확하게 서술하는데 도움을 주는 데 목적이 있다. 지난 칼럼에서 언급했듯이, APW에는 다음과 같은 4개의 실질적인 섹션으로 이루어져 있다. 즉,
서론,
식별자(identifiers)와 자원(resources)에 관한 섹션,
형식(formats)에 관한 섹션,
통신규약(protocols)에 관한 섹션으로 이루어져 있는 것이다. 문서의 구조는 웹의 아키텍처(architecture)를 반영하고 있다. 그리고 그 구조는 APW에 의하면 식별자(identifiers), 형식(formats), 통신규약(protocols)으로 이루어져 있다고 한다.
지난 칼럼에서 필자는 APW을 소개하고 일반적인 전문용어의 문제 몇 가지를 다루었다(특히 원칙(principle)과 관례(practice)의 혼동을 살펴 봄). 이번 칼럼에서는 APW 섹션 2에 있는, 식별자(Identifiers)와 자원(Resources)에 대해 구체적으로 알아보겠다.
자원의 신원(Identity)
APW의 관점에서 보면, 웹은 "자원으로 이루어진 우주"이다. 뭐 지금까지는 그런 대로 괜찮다. 그러나 자원(resource)이란 무엇인가? APW는 자원에 대한 정의를 RFC 2396에서 채택하였는데, 이 정의는 항상 필자의 심기를 건드려왔다. 필자가 프로그래머나 소프트웨어 시스템 아키텍처 전문가가 아니라 철학자처럼 생각하는 경향이 있어 그런 건지도 모르겠지만 말이다.
RFC 2396에 의하면 자원이란 "신원을 가지기만 하면 어느 것이라도 될 수 있다"고 한다. 그리고 여기에서 신원이 어떤 의미를 갖고 있는지 더 이상 설명되어 있지 않고, 포인터 하나도 없다. RFC 2396의 정의대로라면 어떤 것도 자원이 될 수 있다는 말과 구별할 방법이 없다. 모든 개별적인 것들도 다른 어떤 것에 속하기도 하고 아니기도 하다. 모든 것은 (객관적 개념이) 자기 자신에게 일치하는 것으로부터 기원하는 신원을 가진다. 따라서 RFC 2396은 "자원(resource)"에 대한 정의로서는 장렬히 실패했다고 볼 수 있다. 사람들이 그
정의된 것(definiendum) 사이를 구별하는데 어떤 유인(특성이나, 조건, 또는 상태)도 제공하지 않는 정의에 의존하는 것은 잘못된 것이다. 이 경우에는 자원이고, 다른 어떤 것이라도 마찬가지이다.
만약 그 의도가 적절한 조건 하에서 어느 것이라도 자원이 될 수 있다는 것을 주장하는데 있다면, 그것은 상당히 논리 정연한 아이디어이기 때문에 "신원을 가지는" 것에 의지하지 않고서도 표현될 수 있다. 그렇지만 신원을 가진다는 것이 (RFC 2369과 APW의 관점에서) 어떤 의미인지 자세하게 설명하고 있지 않기 때문에 필자는 여전히 신원이 없는 것의 예를 기다리고 있다. 우주에서 어떤 부분은 (RFC 2369와 APW의 의미에서) 사물이 아니며 (어쩌면) 신원을 가지고 있지 않을 수도 있다. 예를 들든다면 주먹, 주름, 마디 등은 단순히 팔과, 카페트, 줄의 변형에 지나지 않을 수 있다. 그러나 모든 개별적인 사물들은 적어도 스스로 자기-동일적인
[*] 것으로부터 기원하는 신원을 가지고 있다.
이런 비판에는 적어도 두 가지가 따른다. 첫째, RFC 2396와 APW가 "자원(resource)"의 괴이한 정의에 의존하는 데는 실질적 차이가 별로 없는 듯하다. 둘째, 웹 규격과 표준의 문제 영역(problem domain)에서, "자원(resource)", "신원(identity)", "식별자(identifier)", "표현(representation)"사이의 개념적인 경계선은 기껏해야 작위적이고, 항상 변화하며, 그리고 잠정적일 뿐이라는 것이다. APW는 다음의 자원 목록을 예로 제공한다: "문서(documents), 파일(files), 메뉴 항목(menu items), 머신(machines), 그리고 서비스(services), 뿐만 아니라 사람(people), 조직(organizations), 그리고 개념(concepts)도 포함된다. 이렇게 본질적으로 서로 다른 모든 것들은 "신원을 가지기" 때문에 자원인데, 그럼에도 불구하고 각 사물은 그 자체로 객관적 개념에 일치한다는 그 이상의 어떤 것을 의미하기 위해서는 당면한 종류의 사물들에 대하여 어떤 신원의 기준(criterion), 어떤 개별화의 원리(principle)가 틀림없이 있을 것이다. 나는 파일, 문서, 메뉴 항목, 머신 그리고 서비스에 대하여 훌륭한 개별화 원리가 있다고 생각한다. 필자는 "파일(file)", "메뉴 항목(menu item)", "머신(machine)"에 대해서는 개별화 원리가 있다는데 확신하지만 "서비스(service)"와 "문서(document)"에 대해서는 약간 의심스럽다.
그러나 실제로 우리가 사람들, 조직체, 그리고 개념에 대해 개별화 원칙을 가지는가? 그렇다면 더욱 중요할지도 모르는데, 그것들은 무엇인가? 개인적 신원 이론에 의해서 제기되는 질문들은 인간이 알고 있는 질문 중에 가장 첨예한 종류의 질문이다. 그리고 이 사실은 조직체와 단체에도 대략 마찬가지로 적용된다. 다음의 URI를 연구해 보자.
mailto:kendall@monkeyfist.com
http://clark.dallas.tx.us/kendall
http://monkeyfist.com/KendallClark
자원, 신원, 그리고 식별자의 어두운 측면은 앞서 언급한 끊이지 않는 논쟁에 부분적으로 책임이 있다. 전술한 URI는, 자연인, 자연인 자원, 자연인의 "홈 페이지" 중 어떤 것으로 식별되는가? 그렇지 않으면 어떤 자연인이 (어느 정도) 통제하는 컴퓨터 자원으로 식별되는 것인가, 등등. 이런 근본적인 문제들에 접근하는 웹 규격의 방식이 나는 점점 더 불편하다. 피상적으로 접근하려면 차라리 접근하지 않는 편이 더 좋겠다. 최소한 신원을 가지는 자원들에 관한 토론은 생략하거나 명확하게 설명되어야 한다. 왜냐하면 그 자체로도 또다른 혼란의 근원이 되기 때문이다.
링크하는 것과 링크되는 것의 중요성
절대적인 URI 참조를 사용하라! 중요한 모든 자원들은 반드시 절대적인 URI 참조로 구별되어야 한다 (APW 2.1).
APW는 다음과 같이 말한다. "웹의 가치는 절대적인 URI 참조로 접근이 가능한 자원들의 개수에 따라 증가한다. 따라서, 웹에서 접근이 가능할 때라야 자원은 더욱 그 가치가 있다." 나는 더 이상 동의할 수 없다. 이것은 웹 골격구조 REST 이론의 기본 개념 중의 하나이다. 이 이론은 웹 애플리케이션을 디자인하는데 있어서, 임시적이고 간접적인 자원을 비롯하여 의미있는 어떤 자원도 반드시 자신만의 식별자, 즉, URI를 가져야 한다고 제안한다. URI를 확보하는 것은 한 사물이 웹 자원 집합의 구성원이 되기위한 필요 충분적인 조건이다. URI가 없으면, Web도 없다. 이 점을 조금 더 확대하면, 한 자원(의 상태의 열람가능한 표현)안에 링크들을 더 많이 확보할 수록, 그 자원은 더 가치가 있다고 주장할 수 있다. 링크하는 것과 링크되는 것이 바로 웹(Web)의 모든 것이기 때문이다.
URI로 하는 일
절대적인 URI 참조는 모호성이 없다! 각각의 절대적인 URI 참조는 명확하게 한 자원을 구별한다 (APW 2.2.2).
영속성을 지원하라! 자원과 그의 식별자를 반드시 영속성을 확보하도록 디자인해야 한다. (APW 2.3).
APW가 지적한 바에 의하면 "절대적인 URI 참조"로 할 수 있는 중요한 일이 두 가지가 있다. 하나는 또다른 절대적인 URI 참조와 동등한지를 비교(접근 체계에 의존하는 연산처리)하는 것이다. 그리고 다른 하나는 그 자원과 상호작용하거나, 좀 더 세밀하게 말해, 어디서나 사용하는 GET의 결과인, 자원의 상태의 열람된 표현과 상호작용하는 것이다.
이제 명확하게 밝혀져야 할 것은, 개념적 우아함의 수준에서, 자원이 가진 신원의 어두운 측면 때문에 URI의 명확성에 개념적인 문제들이 발생한다는 것이다. URI는 당연히 한 자원에 하나씩 식별하지만, 어느 자원을 식별하는가? 또는 다르게 질문하면, 상황이 이럼에도 불구하고, 왜 개발자들은 자원들을 혼동하고 합쳐서 생각하는 경향이 있는가? 다음과 같은 URI를 살펴보자.
http://clark.dallas.tx.us/kendall
APW를 신중하게 고려한다면, "켄달 클라크(Kendall Clark)의 홈 페이지"라고 부르는 자원과 "자연인 켄달 클라크(Kendall Clark)"라고 부르는 자원을 구별할 수 없다. 그렇기 때문에 개발 공동체에서 아직도 계속해서 논쟁이 되고 있는 것이다. 어느 자원을 사람들의 홈페이지가 식별하는지에 대해서, 사람과 그 사람의 홈페이지 모두를 식별하기 위해 홈페이지의 URI를 오버로딩하는 데 대해서 등등 논쟁이 계속된다.
여러 종류의 모호성이 있기 때문에, APW가 여기에서 비록 그 유형이 비유적일지라도 좋으니까 어느 유형을 의도하고 있는지 지정하여 준다면 도움이 될 것이다. 식별자(identifier)와 자원(resource) 사이에는 어떤 종류의 모호성이 존재할 수 있을까? 예를 들어, 자원에 대한 URI의 관계가 (일종의) 행위-대상(act-object) 모호성에 취약하다고 말할 수도 있다. 이 용어는 행위 그 자체와 그 행위로 인한 결과 사이의 혼란을 가리키는 말이다. "관찰(observation)"이라는 단어는 관찰 행위의 결과를 일컫는 것일 수도 있고, 관찰 행위 그 자체를 지칭하는 것일 수도 있다. "오늘 현장 관찰은 놀라웠어"라는 말은 오늘 현장작업의 결과를 보고 자신이 늘 주장하는 지론에 의문이 생겼다는 것을 의미할 수도 있지만 현장에서 작업하는 동안, 개미 둔덕 위에 앉아 있는 자신을 발견하고는 깜짝 놀랐다는 것을 뜻할 수도 있다.
필자가 APW와 REST 아키텍처(architecture)를 이해한 바에 의하면, URI는 자원의 (상태의 표현)을 열람한 결과를 식별하지 않는다. 그 보다는 오히려 자원 그 자체를 식별한다. 같은 문제들이
APW 2.5 조각 식별자(Fragment Identifiers)에 등장하는 것 같은데, APW 2.5에 의하면 조각 식별자는 다음과 같아야 한다.
조각 식별자는 표현을 열람한 다음에만 통역된다. [RFC2396]의 섹션 4.1에 의하면 "조각 식별자의 형식과 통역은 열람 결과의 미디어 유형[RFC2046]에", 즉, 그 표현에 의존한다.
웹을 규격화하여 이해하려면 행위-대상 모호성과 같은 것이 필요한 것처럼 보인다. URI는 자원을 식별하지만, "절대적인 URI 참조"에서 선택적인 조각 식별자는 URI가 식별하는 자원의 표현 중 일부를 식별한다. 이 일부분은 표현의 유형에 따라 달라진다.
APW에 의하면 (엄밀히 말해, APW 초안을 읽어 본바에 의하면), URI는 확실하게 한 개를 구별하며, 오직 한 개의 자원(resource)만을 식별한다. 그리고 절대적인 URI 참조에서 (선택적인) 조각 식별자 부분은 그 자원의 표현(representation) 중 일부를 식별한다. 사실상 URI에는 두 개의 네임스페이스(namespaces)가 있다. 하나는 웹이라는 공유된 정보 공간 안에 존재하는 개체들을 가리키며, 다른 하나는 한 웹 자원의 상태 중 표현적 공간 내부를 가리키는 말이다. 만약 URI가 오직 하나의 자원만을 식별한다면, 조각 식별자가 한 표현에서 오직 하나의 일부(딱히 더 좋은 일반적인 단어가 없으므로 일부라고 표현함)만을 식별한다고 똑같이 예상해도 좋은가? URI 영속성 관례를 조각 식별자에도 역시 확장해야 하는가? "쓸모있는(cool)" 조각 식별자는 변경되어야 하는가?
나는 위에 언급한 URI-자원의 명료성이 지닌 금전적 가치를 다음과 같이 간주한다. 예를 들어 그 상태가 어떻게 다른가에 상관없이 동일한(same) URI에 대하여 연속적인 HTTP GET으로 열람된 자원의 상태의 표현이 동일한(same) 자원의 상태의 표현이라는 것을 의미한다. 이것은 URI의 영속성에 대하여 관련된 여러 좋은 관례를 암시한다. 즉 귀중하거나 중요한 자원들의 URI는 제멋대로 (이상적으로는 절대로) 변경되어서는 안된다는 것을 뜻하며, 한 식별자의 가치는 어떤 의미에서 제일 처음에 사용된 것과 똑같이 소비되는 데 있다는 것을 의미하는 것이다. 다시 말해 한 자원(resource)을 웹 안으로 다음의 URI로 구별해서 넣었다면
http://monkeyfist.com/WeeklyReview
이 식별자의 가치는 이렇게 식별된 자원("The Weekly Review")과 관련하여 소비되거나 사용된다. 이 식별자는 계속해서 확실하게 그 자원을 구별하는 한에서만 식별자로서의 가치가 있다. GET의 요청에 대한 응답으로 그 자원의 상태의 표현을 반환하는 한에서만 계속해서 가치가 있다는 것이다. 그렇지만 만약 내가 그 자원을 변경해서 그 URI 식별자가 예를 들어 "Harper"s Weekly Review"라고 식별하도록 만든다면 이 식별자의 가치는 0에 도달한다. 간단히 말해, 적어도 2가지 유형의 URI 영속성이 존재한다. 첫째, 한 자원의 식별자는 시간을 따라 영속한다. 둘째, URI는 항상 같은 자원을 가리키는 식별자이다. URI는 비용이 적게 든다. 어찌 되었건 엄청나게 많은 URI가 있다.
결론
본 기사에서 필자가 APW에 대해 언급한 사항은 각 개인이 알아서 잘 생각해 보아야 할 사항이다. 필자가 던진 질문과 관심은 주로 웹 규격에 대한 개념적인 우아함이나 깔끔함에 관련된 것이며, 웹 그 자체의 실제적인 운영에 관한 것은 아니기 때문이다. 그렇지만 우리가 솔직히 의미구조 웹(Semantic Web)이라고 부를 수 있는 영역으로 손을 뻗으면, 이런 개념적 문제들 중에 어떤 것은 더욱 긴박하고 더욱 현실적인 문제로 대두될 것이다. 그렇지 않으면, 최소한, 그런 개념적 이슈들은 기사화 되거나 사람들의 머릿속에서 이런 저런 생각들을 불러 일으키기 안성맞춤일 것이다.
주석
[*] 사물의 존재를 주관적 개념과 일치시키는 것을 "식별(identify)"이라고 한다. 일단 인지구조에 들어온 이상, 그 사물은 식별에 실패했다고 하더라도 그에 상관없이 어쨌든 간에 객관적 개념에는 일치해야 한다. 이를 자기-동일적(self-identical)이라고 한다. (열대 지방에 사는 사람들이 "눈"을 본다고 상상해보자. 이 때 "눈"이라는 개념은 자신만의 객관적 개념에 스스로 일치하고 있다(self-identical)고 할 수 있다.)