KR101623223B1 - 하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험 - Google Patents

하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험 Download PDF

Info

Publication number
KR101623223B1
KR101623223B1 KR1020117006598A KR20117006598A KR101623223B1 KR 101623223 B1 KR101623223 B1 KR 101623223B1 KR 1020117006598 A KR1020117006598 A KR 1020117006598A KR 20117006598 A KR20117006598 A KR 20117006598A KR 101623223 B1 KR101623223 B1 KR 101623223B1
Authority
KR
South Korea
Prior art keywords
web application
version
request
subdirectory
pathname
Prior art date
Application number
KR1020117006598A
Other languages
English (en)
Other versions
KR20110063646A (ko
Inventor
바딤 브이. 바르폴로메예브
바니 만다바
마가렛 에이치. 리
맥심 에이. 이바노브
Original Assignee
마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20110063646A publication Critical patent/KR20110063646A/ko
Application granted granted Critical
Publication of KR101623223B1 publication Critical patent/KR101623223B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/161Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • H04L67/306User profiles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)

Abstract

본 개시 내용은 호스팅 장치를 이용하여 단일 웹 응용 프로그램의 다수의 버전을 제공하는 기술을 설명하고 있다. 이하에서 상세히 기술되는 바와 같이, 호스팅 장치는 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스를 서로 다른 하위 디렉토리에 저장한다. 호스팅 장치가 웹 응용 프로그램과 연관된 요청을 수신할 때, 호스팅 장치는 웹 응용 프로그램의 버전들 중 하나를 웹 응용 프로그램의 적용가능한 버전으로서 자동으로 식별한다. 호스팅 장치는 웹 응용 프로그램의 적용가능한 버전을 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청에서의 경로명을 재작성한다. 이어서 호스팅 장치는 재작성된 경로명에 의해 식별되는 리소스를 역참조한다. 이런 방식으로, 호스팅 장치는 웹 응용 프로그램의 적용가능한 버전의 리소스를 사용하여 요청을 처리한다.

Description

하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험{MULTIPLE PARALLEL USER EXPERIENCES PROVIDED BY A SINGLE SET OF INTERNET HOSTING MACHINES}
웹 응용 프로그램은 인터넷 또는 인트라넷과 같은 네트워크를 통해 웹 브라우저를 거쳐 액세스되는 응용 프로그램이다. 웹 응용 프로그램은 오늘날의 비즈니스 세계에서 필수적인 도구이다. 예를 들어, 영업 직원은, 영업 데이터베이스에 매출을 입력하기 위하여, 자신의 개인용 컴퓨터의 웹 브라우저를 사용하여 자신의 회사에서 제공하는 웹 응용 프로그램에 액세스할 수 있다. 다른 일례에서, 대학생은, 강의에 등록하기 위하여, 자신의 개인용 컴퓨터의 웹 브라우저를 사용하여 자신의 대학에서 제공하는 웹 응용 프로그램에 액세스할 수 있다.
많은 상황에서, 웹 응용 프로그램 공급자는 서로 다른 그룹의 사용자에게 서로 다른 버전의 웹 응용 프로그램을 제공하고자 할 수 있다. 예를 들어, 다국적 판매 인력을 가진 회사는 그의 유럽 영업 직원에게는 제1 버전의 매출-입력 웹 응용 프로그램을 제공하고 그의 북미 영업 직원에게는 제2 버전의 매출-입력 웹 응용 프로그램을 제공하고자 할 수 있다. 이 일례에서, 서로 다른 버전의 웹 응용 프로그램이 서로 다른 규정을 준수하기 위해 서로 다른 데이터를 수집할 수 있다. 다른 일례에서, 웹 응용 프로그램 공급자는 일반 대중에게 현재 버전의 웹 응용 프로그램을 계속 제공하면서, 베타 사용자 집합에게는 업데이트된 버전의 웹 응용 프로그램을 제공하고자 할 수 있다.
서로 다른 버전의 웹 응용 프로그램을 구현하기 위하여, 웹 응용 프로그램 공급자는 동등한 리소스(소프트웨어 모듈, 이미지, 비디오, 기타 등등)의 서로 다른 버전을 구현할 필요가 있을 수 있다. 게다가, 웹 응용 프로그램 공급자가 동등한 소프트웨어 모듈의 서로 다른 버전을 구현할 필요가 있을 수 있기 때문에, 웹 응용 프로그램 공급자는 동등한 소프트웨어 모듈의 서로 다른 버전을 서로 다른 실제 호스팅 장치 집합에 설치할 필요가 있을 수 있다. 예를 들어, 웹 응용 프로그램 공급자는 제1 버전의 웹 응용 프로그램이 필요로 하는 소프트웨어 모듈을 제1 실제 호스팅 장치 집합에 설치할 필요가 있을 수 있고, 제2 버전의 웹 응용 프로그램이 필요로 하는 소프트웨어 모듈을 제2 실제 호스팅 장치 집합에 설치할 필요가 있을 수 있다. 서로 다른 버전의 웹 응용 프로그램과 연관된 동등한 리소스가 동일한 파일명을 가질 수 있고, 따라서 파일 시스템 디렉토리 구조 내의 동일한 위치에 저장될 수 없기 때문에, 웹 응용 프로그램 공급자는 동등한 소프트웨어 모듈의 서로 다른 버전을 서로 다른 실제 호스팅 장치 집합에 설치할 필요가 있을 수 있다.
이 요약은 이하에서 상세한 설명에 더 기술되는 일련의 개념들을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징 또는 필수적인 특징을 명시하기 위한 것이 아니며, 청구된 발명 대상의 범위를 제한하는 데 사용되기 위한 것도 아니다.
본 개시 내용은 단일 호스팅 장치를 이용하여 단일 웹 응용 프로그램의 다수의 버전을 제공하는 기술을 설명하고 있다. 이하에서 상세히 기술되는 바와 같이, 호스팅 장치는 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스를 서로 다른 디렉토리에 저장한다. 호스팅 장치가 클라이언트 장치로부터 웹 응용 프로그램과 연관된 요청을 수신할 때, 호스팅 장치는 웹 응용 프로그램의 버전들 중 하나를 웹 응용 프로그램의 적용가능한 버전으로서 자동으로 식별한다. 호스팅 장치는 웹 응용 프로그램의 적용가능한 버전을 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청에서의 경로명을 재작성한다. 이어서 호스팅 장치는 재작성된 경로명에 의해 식별되는 리소스를 역참조(dereference)한다. 이런 방식으로, 호스팅 장치는 웹 응용 프로그램의 적용가능한 버전의 리소스를 사용하여 요청을 처리한다.
도 1은 본 발명의 기술을 구현하는 호스팅 장치를 포함한 예시적인 시스템을 나타낸 블록도.
도 2는 호스팅 장치의 예시적인 논리 구성요소를 나타낸 블록도.
도 3은 호스팅 장치의 논리 구성요소의 예시적인 동작을 나타낸 플로우차트.
도 4는 예시적인 디렉토리 구조를 나타낸 도면.
도 5는 호스팅 장치의 예시적인 하드웨어 구성요소를 나타낸 블록도.
일반적으로, 본 개시 내용은 단일 호스팅 장치를 이용하여 단일 웹 응용 프로그램의 다수의 버전을 제공하는 기술을 설명하고 있다. 웹 응용 프로그램의 각각의 버전은 서로 다른 사용자 경험을 제공할 수 있다. 이하의 설명에서 다양한 일례들이 기술되어 있다. 이들 일례가 청구항의 범위에 관한 명시적이거나 암시적인 제한이 아니라 설명을 위해 제공된 것임을 잘 알 것이다.
도 1은 예시적인 시스템(2)을 나타낸 블록도이다. 도 1의 일례에 예시된 바와 같이, 시스템(2)은 웹 응용 프로그램의 다수의 버전을 호스팅하는 호스팅 장치(4)를 포함하고 있다. 호스팅 장치(4)는, 어떤 경우에, 복수의 개별적인 실제 유닛으로 나눠질 수 있는 실제 전자 컴퓨팅 장치이다. 이 경우에, 이들 실제 유닛은 버스(bus) 기술, 상호연결(interconnect) 기술, 네트워크 기술 및 기타 통신 기술을 포함하는 각종의 통신 기술을 사용하여 서로 통신할 수 있다. 예를 들어, 호스팅 장치(4)는 단일의 독립 실행형 서버 장치, 서버 장치의 클러스터, 서버 블레이드(server blade), 또는 기타 유형의 실제 전자 컴퓨팅 장치일 수 있다.
본 개시 내용에 사용된 바와 같이, "웹 응용 프로그램"이라는 용어는 인터넷 또는 인트라넷과 같은 네트워크를 통해 웹 브라우저를 거쳐 액세스되는 응용 프로그램을 말한다. 호스팅 장치(4)는 아주 다양한 서로 다른 유형의 웹 응용 프로그램을 호스팅할 수 있다. 예를 들어, 호스팅 장치(4)는 비즈니스 프로세스 웹 응용 프로그램, 전자 메일 웹 응용 프로그램, 전자 일정관리 웹 응용 프로그램, 전자 공동작업 웹 응용 프로그램 및 기타 유형의 웹 응용 프로그램을 호스팅할 수 있다. 하나의 특정 일례에서, 호스팅 장치(4)는 Microsoft Office Live Workspace 공동작업 응용 프로그램 도구에 기초하여 웹 응용 프로그램의 다수의 버전을 호스팅한다.
호스팅 장치(4)는 계층적 디렉토리 시스템을 저장하는 컴퓨터-판독가능 저장 매체를 포함하고 있다. 디렉토리 구조는 하위 디렉토리 집합을 포함한다. 각각의 하위 디렉토리는 하위 디렉토리명과 연관되어 있다. 예를 들어, 제1 하위 디렉토리는 "root/version_2008_01/"라는 하위 디렉토리명과 연관될 수 있으며, 제2 하위 디렉토리는 "root/version_2008_02/"라는 하위 디렉토리명과 연관될 수 있다.
동일한 웹 응용 프로그램의 다른 버전과 연관된 다른 리소스 집합은 이 디렉토리 집합의 각각의 하위 디렉토리 내에 저장된다. 달리 말하면, 제1 버전의 웹 응용 프로그램과 연관된 제1 리소스 집합이 디렉토리 시스템의 제1 하위 디렉토리 내에 저장되고, 제2 버전의 웹 응용 프로그램과 연관된 제2 리소스 집합이 디렉토리 시스템의 제2 하위 디렉토리 내에 저장되며, 기타 등등이다.
각각의 하위 디렉토리에 있는 리소스는 아주 다양한 서로 다른 유형의 리소스일 수 있다. 예를 들어, 하위 디렉토리 중 제1 하위 디렉토리에 있는 리소스는 이미지 파일, 오디오 파일, 비디오 파일, HTML(Hypertext Markup Language) 파일, JavaScript 스크립트, VBScript 스크립트, XML(Extensible Markup Language) 문서, DLL(Dynamic Link Library) 파일, ASP.NET 페이지, CSS(Cascading Style Sheet) 파일, 구성 파일, Java 애플릿, ActiveX 개체, CGI(Common Gateway Interface) 스크립트, PHP 스크립트 및 기타 유형의 리소스를 포함할 수 있다.
웹 응용 프로그램의 각각의 버전은 웹 응용 프로그램에 대한 서로 다른 사용자 경험을 제공하도록 설계되어 있다. 달리 말하자면, 제1 버전의 웹 응용 프로그램은 제1 사용자 경험을 제공하도록 설계되어 있고, 제2 버전의 웹 응용 프로그램은 제2 사용자 경험을 제공하도록 설계되어 있으며, 기타 등등이다. 서로 다른 버전의 웹 응용 프로그램에 의해 제공되는 사용자 경험은 많은 점에서 서로 다를 수 있다. 예를 들어, 웹 응용 프로그램의 서로 다른 사용자 경험은 서로 다른 기능, 서로 다른 외관, 서로 다른 사용자 인터페이스 및 기타 다른 기능을 제공할 수 있다. 하나의 특정 일례에서, 매출-입력 웹 응용 프로그램의 제1 사용자 경험은 제1 버전의 웹 응용 프로그램에 의해 제공되는 웹 페이지에 매출 데이터를 입력할 때 사용자에게 특정 데이터를 입력하도록 요구할 수 있고, 제2 버전의 매출-입력 웹 응용 프로그램에 의해 제공되는 제2 사용자 경험은 제2 버전의 웹 응용 프로그램에 의해 제공되는 동등한 웹 페이지에 매출 데이터를 입력할 때 사용자에게 특정 데이터를 입력하도록 요구하지 않을 수 있다.
시스템(2)은 또한 클라이언트 장치(6)를 포함하고 있다. 클라이언트 장치(6)는 아주 다양한 서로 다른 유형의 전자 컴퓨팅 장치일 수 있다. 예를 들어, 클라이언트 장치(6)는 개인용 컴퓨터, 휴대폰, 개인용 미디어 플레이어, 네트워크 기기, 중간 네트워크 장치, 메인프레임 컴퓨터, 차량에 통합된 장치, 랩톱 컴퓨터, 텔레비전 셋톱 박스, 핸드헬드 컴퓨팅 장치, 또는 기타 유형의 컴퓨팅 장치일 수 있다.
그에 부가하여, 시스템(2)은 네트워크(8)를 포함하고 있다. 네트워크(8)는 클라이언트 장치(6)와 호스팅 장치(4) 간의 통신을 용이하게 해주는 전자 통신 네트워크이다. 네트워크(8)는 아주 다양한 서로 다른 유형의 전자 통신 네트워크일 수 있다. 예를 들어, 네트워크(8)는 인터넷, 인트라넷, LAN(local-area network), WAN(wide-area network), 개인 영역 네트워크(personal-area network), 애드혹 네트워크(ad hoc network), 또는 기타 유형의 네트워크일 수 있다. 게다가, 네트워크(8)는 무선 및/또는 유선 통신 링크를 포함할 수 있다. 각종의 통신 프로토콜이, 예를 들어, 이더넷, WiFi, WiMax, 블루투스, CDMA(Code-Division Multiple Access) 및 기타 통신 프로토콜을 포함하는 네트워크(8)내의 링크에서 사용될 수 있다.
클라이언트 장치(6)는 브라우저(10)를 포함하고 있다. 브라우저(10)는 클라이언트 장치(6) 상에서 실행되는 인터넷 브라우징 응용 프로그램이다. 예를 들어, 브라우저(10)는 Microsoft INTERNET EXPLORER® 인터넷 브라우저, Mozilla Firefox 인터넷 브라우저, Google Chrome 인터넷 브라우저, Apple Safari 인터넷 브라우저, Opera 인터넷 브라우저, BlackBerry 인터넷 브라우저, 또는 기타 유형의 인터넷 브라우저의 일례일 수 있다.
클라이언트 장치(6)의 사용자(12)는 브라우저(10)를 사용하여 호스팅 장치(4)에 의해 호스팅되는 웹 응용 프로그램과 상호작용할 수 있다. 호스팅 장치(4)에 의해 호스팅되는 웹 응용 프로그램과의 상호작용을 시작하기 위해서, 브라우저(10)는 네트워크(8)를 통해 호스팅 장치(4)에게 웹 응용 프로그램과 연관된 요청을 송신한다. 예를 들어, 사용자(12)는 브라우저(10)에 의해 생성된 사용자 인터페이스의 주소 표시줄에 URL(Uniform Resource Locator)을 입력할 수 있다. 이 일례에서, URL은 호스팅 장치(4)와 연관된 호스트명 및 웹 응용 프로그램과 연관된 경로명을 지정한다. 예를 들어, 사용자는 브라우저(10)에 의해 생성된 사용자 인터페이스의 주소 표시줄에 URL "http://www.example.com/myWebApp/origin.aspx"을 입력할 수 있다. 이 일례에서, URL의 도메인명 부분은 "www.example.com"이고, 경로명은 "myWebApp/origin.aspx"이다. 게다가, 이 일례에서, 브라우저(10)는, URL 입력에 응답하여, HTTP(Hypertext Transfer Protocol) 요청 메시지를 생성하고 네트워크(8)를 통해 호스팅 장치(4)로 전송할 수 있다. 이 일례에서, HTTP 요청 메시지는 호스팅 장치(4)와 연관된 호스트명 및 웹 응용 프로그램과 연관된 경로명을 지정할 수 있다. 예를 들어, 사용자가 브라우저(10)에 의해 생성된 사용자 인터페이스의 주소 표시줄에 URL "http://www.example.com/myWebApp/origin.aspx"를 입력하면, 브라우저(10)는 다음과 같은 HTTP 요청 메시지
GET /myWebApp/origin.aspx HTTP/1.1
Host: www.example.com
를 생성하여 전송할 수 있다.
호스팅 장치(4)는, 요청에 응답하여, 웹 응용 프로그램 버전의 집합 중에서 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별한다. 이하에서 기술하는 바와 같이, 호스팅 장치(4)는 각종의 방식으로 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별할 수 있다. 예를 들어, 클라이언트 장치(6)의 사용자가 독일어를 사용하도록 브라우저(10)를 설정했을 때, 호스팅 장치(4)는 제1 버전의 웹 응용 프로그램을 적용가능한 버전으로서 자동으로 식별할 수 있고, 클라이언트 장치(6)의 사용자가 러시아어를 사용하도록 브라우저(10)를 설정했을 때, 제2 버전의 웹 응용 프로그램을 적용가능한 버전으로서 자동으로 식별할 수 있다.
웹 응용 프로그램의 적용가능한 버전을 식별한 후에, 호스팅 장치(4)는 요청에서의 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 포함하는 하위 디렉토리의 하위 디렉토리명을 포함하도록 요청을 재작성한다. 예를 들어, 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 포함하는 하위 디렉토리의 하위 디렉토리명이 "root/version_2008_02/"일 수 있으며, 초기 HTTP 요청은
GET /myWebApp/origin.aspx HTTP/1.1
Host: www.example.com
일 수 있다.
이 일례에서, 호스팅 장치(4)는 이 요청을 재작성할 수 있고, 그 결과 다음과 같은 HTTP 요청
GET /root/version_2008_02/myWebApp/origin.aspx HTTP/1.1
Host: www.example.com
이 얻어질 수 있다.
호스팅 장치(4)가 요청을 재작성한 후에, 호스팅 장치(4)는 재작성된 요청에 의해 지정된 경로명에 의해 식별되는 리소스를 역참조한다. 본 발명에서 사용된 바와 같이, "역참조하는"이란 어구는 참조 식별자에 의해 식별된 리소스를 가져오는 것을 의미한다. 리소스를 역참조하는 것은 컴퓨터-판독가능 저장 매체에 저장된 리소스를 검색하는 것만큼 간단할 수 있다. 다른 일례에서, 역참조는 리소스를 가져오기 위해 하나 이상의 스크립트 또는 어셈블리를 실행하는 것을 필요로 할 수 있다.
호스팅 장치(4)가 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록 요청에서의 경로명을 재작성하기 때문에, 그리고 웹 응용 프로그램의 적용가능한 버전이 요청마다 다를 수 있기 때문에, 호스팅 장치(4)가 동일한 경로명을 지정하는 2개의 요청을 수신했을 때 호스팅 장치(4)는 2개의 서로 다른 리소스를 역참조할 수 있다. 예를 들어, 제1 사용자는 제1 사용자의 브라우저의 주소 표시줄에 URL "http://www.example.com/root/myWebApp/origin.aspx"를 입력할 수 있으며, 제2 사용자는 제2 사용자의 브라우저의 주소 표시줄에 동일한 URL을 입력할 수 있다. 2개의 얻어진 요청을 수신할 때, 제1 사용자와 제2 사용자가 웹 응용 프로그램의 서로 다른 적용가능한 버전을 가질 수 있으므로, 호스팅 장치(4)는 2개의 서로 다른 리소스를 역참조할 수 있다.
호스팅 장치(4)가 재작성된 요청에 의해 지정된 경로명에 의해 식별되는 리소스를 역참조한 후에, 호스팅 장치(4)는 클라이언트 장치(6)에게 리소스를 송신할 수 있다. 예를 들어, 호스팅 장치(4)는, 하나 이상의 헤더 필드 및 리소스를 포함하는 본문을 포함하는 HTTP 응답(HTTP response)을 송신할 수 있다. 이 일례에서, HTTP 응답이 네트워크(8)를 통해 전송하기 위해 복수의 데이터 패킷으로 분할될 수 있다.
도 2는 호스팅 장치(4)의 예시적인 논리 구성요소를 나타내는 블록도이다. 도 2의 일례에 예시된 바와 같이, 호스팅 장치(4)는 파일을 정리하기 위한 디렉토리의 계층 구조를 나타내는 디렉토리 구조(30)를 포함하고 있다. 디렉토리 구조(30)는 FAT32, NTFS, HPFS, Google File System, HFS+(Hierarchical File System Plus), 또는 기타 유형의 파일 시스템(이들로 제한되지 않음)을 포함하는 각종의 파일 시스템 아키텍처를 사용하여 구현될 수 있다.
디렉토리 구조(30)는 하위 디렉토리(32A 및 32B)를 포함하고 있다. 하위 디렉토리(32A)는 하위 디렉토리(32B)의 자손 디렉토리(descendant directory)도 조상 디렉토리(ancestor directory)도 아니다. 그러나, 하위 디렉토리(32A) 및 하위 디렉토리(32B)는 단일 직계 부모 디렉토리의 자식 디렉토리일 수 있다. 하위 디렉토리(32A) 및 하위 디렉토리(32B)는 하위 디렉토리명과 연관되어 있다. 예를 들어, 하위 디렉토리(32A)는 "version_2008_01"이라는 하위 디렉토리명과 연관되어 있을 수 있으며, 하위 디렉토리(32B)는 "version_2008_02"이라는 하위 디렉토리명과 연관되어 있을 수 있다. 도 2의 일례에 도시되어 있지는 않지만, 하위 디렉토리(32A) 및 하위 디렉토리(32B)는 하나 이상의 자손 디렉토리를 포함할 수 있으며, 자손 디렉토리는 차례로 하나 이상의 하위 디렉토리를 포함할 수 있고, 이하 마찬가지이다. 하위 디렉토리(32A) 및 하위 디렉토리(32B)가 자손 하위 디렉토리(descendant subdirectory)를 포함하는 경우에, 하위 디렉토리(32A)의 자손 하위 디렉토리 및 하위 디렉토리(32B)의 자손 하위 디렉토리는 동일한 구조를 가질 수 있다.
하위 디렉토리(32A)는 제1 버전의 웹 응용 프로그램과 연관된 리소스(34A)의집합을 저장하고 있다. 하위 디렉토리(32B)는 제2 버전의 웹 응용 프로그램과 연관된 리소스(34B)의 집합을 저장하고 있다. 이상에서 논의된 바와 같이, 리소스(34A) 및 리소스(34B)는 DLL, 스크립트, 이미지 파일, 비디오 파일, 오디오 파일, 기타 등등(이들로 제한되지 않음)을 포함하는 아주 다양한 서로 다른 유형의 리소스일 수 있다. 도 2의 일례에 도시되어 있지는 않지만, 디렉토리 구조(30)는 웹 응용 프로그램의 부가적인 버전과 연관된 리소스를 포함하고 있는 부가적인 하위 디렉토리를 포함할 수 있다.
어떤 경우에, 리소스(34A) 중 하나는 리소스(34B) 중 하나와 동일한 파일명을 가질 수 있지만 다르게 동작할 수 있다. 예를 들어, 리소스(34A)는 "saleEntry.dll"이라는 이름의 파일을 포함할 수 있으며, 리소스(34B)는 "saleEntry.dll"이라는 이름의 파일을 포함할 수 있다. "saleEntry.dll"이라는 이름의 이들 2개의 파일은 서로 다른 기능을 제공할 수 있다. 다른 경우에, 각각의 리소스(34A)는 리소스(34B)에 있는 동등한 이름의 리소스에 대응할 수 있다.
도 2의 일례에서, 호스팅 장치(4)는 웹 응용 프로그램의 버전과 사용자 그룹을 연관시키는 정보를 저장하는 그룹 데이터베이스(36)를 포함하고 있다. 예를 들어, 그룹 데이터베이스(36)는 규칙의 집합(각각의 규칙이 전제조건 및 웹 응용 프로그램의 버전을 지정함)을 저장할 수 있다. 이 경우에, 규칙에 의해 지정된 전제 조건이 참일 때, 그 버전의 웹 응용 프로그램이 웹 응용 프로그램의 적용가능한 버전인 것으로 결정될 수 있다. 그룹 데이터베이스(36)는 각종의 전제 조건에 기초하여 각종의 규칙을 저장할 수 있으며, 그 중 일부는 호스팅 장치(4)에 의해 수신되는 요청의 내용에 의존적일 수 있거나 그렇지 않을 수 있다.
제1 일례에서, HTTP 요청은 HTTP 응답을 위한 하나 이상의 허용가능 언어를 지정하는 "Accept-Language" 헤더를 포함할 수 있다. 이 제1 일례에서, HTTP 요청이 "독일어"를 지정하는 "Accept-Language" 헤더를 포함할 때, 그룹 데이터베이스(36)는 웹 응용 프로그램의 적용가능한 버전이 제1 버전의 웹 응용 프로그램임을 규정하는 규칙을 포함할 수 있다. 이 제1 일례에서, HTTP 요청이 "영어"를 지정하는 "Accept-Language" 헤더를 포함할 때, 그룹 데이터베이스(36)는 또한 웹 응용 프로그램의 적용가능한 버전이 제2 버전의 웹 응용 프로그램임을 규정하는 규칙을 포함할 수 있다. 이 제1 일례에서, 제1 버전 및 제2 버전의 웹 응용 프로그램은 동일한 사용자 경험의 단순한 변환(translation)이 아닌 서로 다른 사용자 경험을 제공할 수 있다.
제2 일례에서, HTTP 요청은 사용자 에이전트(user agent)의 사용자 에이전트 문자열(user agent string)을 지정하는 "User-Agent" 헤더를 포함할 수 있다. 이 경우에, 사용자 에이전트가 Mozilla Firefox 인터넷 브라우저임을 지정하는 "User-Agent" 헤더를 HTTP 요청이 포함할 때, 그룹 데이터베이스(36)는 웹 응용 프로그램의 적용가능한 버전이 제1 버전의 웹 응용 프로그램임을 규정하는 규칙을 포함할 수 있다. 이 경우에, 사용자 에이전트가 Internet Explorer 인터넷 브라우저임을 지정하는 "User-Agent" 헤더를 HTTP 요청이 포함할 때, 그룹 데이터베이스(36)는 웹 응용 프로그램의 적용가능한 버전이 제2 버전의 웹 응용 프로그램임을 규정하는 규칙을 포함할 수 있다.
제3 일례에서, 사용자는 웹 응용 프로그램에 액세스하기 위해 호스팅 장치(4)에 로그인하도록 요청될 수 있다. 이 제3 일례에서, 그룹 데이터베이스(36)는 각각의 사용자의 선호도를 지정하는 선호도 데이터를 포함할 수 있다. 예를 들어, 제1 사용자는 제1 버전의 웹 응용 프로그램을 사용하는 것을 선호할 수 있으며, 제2 사용자는 제2 버전의 웹 응용 프로그램을 사용하는 것을 선호할 수 있다. 어떤 상황에서, 그룹 데이터베이스(36) 내의 하나의 규칙은 사용자에 대한 적용 가능한 버전의 웹 응용 프로그램이 제1 버전의 웹 응용 프로그램인 것으로 규정할 수 있지만, 사용자의 선호도는은 사용자가 제2 버전의 웹 응용 프로그램을 사용하는 것을 선호함을 나타낼 수 있다. 이런 상황에서, 사용자의 선호도가 더 중요할 수 있다. 따라서, 사용자는 제2 버전의 웹 응용 프로그램을 사용하기 위하여 제1 버전의 웹 응용 프로그램을 사실상 사용하지 않거나, 제1 버전의 웹 응용 프로그램의 사용과 제2 버전의 웹 응용 프로그램의 사용 간에 전환할 수 있다. 이런 상황은, 많은 사용자가 현재의 사용자 인터페이스를 좋아할 때, 웹 응용 프로그램 공급자가 새 사용자 인터페이스를 가지는 웹 응용 프로그램 버전을 출시할 때 빈번히 일어날 수 있다.
그룹 데이터베이스(36) 내의 규칙은 다양한 목적을 위해 구조화될 수 있다. 제1 일례에서, 새로운 버전의 웹 응용 프로그램이 제1 지리적 영역에서 사용될 준비가 되어 있을 수 있지만 제2 지리적 영역에서는 사용될 준비가 되어 있지 않을 수 있다. 이 제1 일례에서, 그룹 데이터베이스(36) 내의 규칙은, 제1 지리적 영역에 있는 사용자는 새로운 버전의 웹 응용 프로그램을 사용할 수 있는 반면 제2 지리적 영역에 있는 사용자는 기존 버전의 웹 응용 프로그램을 계속 사용하도록 구조화될 수 있다. 이에 따라, 웹 응용 프로그램의 공급자는, 전세계적인 출시를 기다릴 필요 없이, 제1 지리적 영역에서 새 버전의 웹 응용 프로그램을 신속하게 시장에 내놓을 수 있다. 제2 일례에서, 공급자는 기존 버전의 웹 응용 프로그램을 계속하여 제공하면서, 새 버전의 웹 응용 프로그램에 대한 베타 테스트를 수행할 수 있다. 이 제2 일례에서, 그룹 데이터베이스(36) 내의 규칙은, 자발적으로 베타 테스터가 된 사용자는 새 버전의 웹 응용 프로그램과 상호작용할 수 있는 반면, 다른 사용자는 기존 버전의 웹 응용 프로그램과 계속하여 상호작용할 수 있도록 구조화될 수 있다. 이들 일례가 이전 버전 및 새 버전의 웹 응용 프로그램에 대해 논의하고 있지만, 웹 응용 프로그램의 버전들이 그러한 관계를 가질 필요는 없다.
호스트 장치(4)는 또한 버전 모듈(version module)(38)을 포함하고 있다. 버전 모듈(38)은 웹 응용 프로그램과 연관된 요청을 수신한다. 요청을 수신한 것에 응답하여, 버전 모듈(38)은 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별한다. 도 2의 일례에서, 버전 모듈(38)은 그룹 데이터베이스(36) 내의 정보를 이용하여 클라이언트 장치(6)의 사용자와 연관된 웹 응용 프로그램 버전을 식별한다. 예를 들어, 그룹 데이터베이스(36)가 웹 응용 프로그램의 적용가능한 버전을 규정하는 규칙의 집합을 사용하는 경우, 버전 모듈(38)은 요청에 규칙을 자동으로 적용함으로써 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별할 수 있다.
버전 모듈(38)이 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별한 후에, 호스팅 장치(4)의 요청 재작성 모듈(request rewrite module)(40)은, 요청에 포함된 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청을 재작성할 수 있다. 예를 들어, 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스가 하위 디렉토리(32A)에 저장되어 있는 경우, 요청 재작성 모듈(40)은, 요청에 의해 지정된 경로명이 하위 디렉토리(32A)와 연관된 하위 디렉토리명을 포함하도록, 요청을 재작성할 수 있다.
요청 재작성 모듈(40)이 요청을 재작성한 후에, 요청 처리기 모듈(request handler module)(42)은 재작성된 요청에 의해 지정된 경로명에 의해 식별되는 리소스를 역참조한다. 재작성된 요청에 의해 지정된 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하고 있기 때문에, 요청 처리기 모듈(42)은, 다른 버전의 웹 응용 프로그램과 연관된 리소스를 저장하는 하위 디렉토리에 있는 리소스와 달리, 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리에 있는 리소스를 액세스한다. 예를 들어, 재작성된 요청에 의해 지정된 경로명이 하위 디렉토리(32A)와 연관된 하위 디렉토리명을 포함하는 경우, 요청 처리기 모듈(42)은 하위 디렉토리(32B)에 있는 동등한 이름의 리소스 대신에 하위 디렉토리(32A)에 있는 리소스를 역참조한다.
도 2의 일례에 예시된 바와 같이, 호스팅 장치(4)는 또한 GAC(global assembly cache, 전역 어셈블리 캐시)(44)를 포함할 수 있다. GAC(44)는 .NET 어셈블리에 대한 시스템 전체에서 사용할 수 있는 리포지토리(repository)이다. 각각의 어셈블리는 CIL(Common Intermediate Language)로 포맷팅된 코드 라이브러리이다. 어셈블리는 프로세스 어셈블리 또는 라이브러리 어셈블리일 수 있다. 프로세스 어셈블리는 라이브러리 어셈블리에서 정의된 클래스를 사용하는 프로세스를 나타낸다. 호스팅 장치(4)는 GAC(44)에 설치된 각각의 라이브러리 어셈블리의 단일 사본을 메모리에 로드할 수 있다. 호스팅 장치(4)에서 실행되는 많은 서로 다른 프로그램이 메모리에 로드된 라이브러리 어셈블리의 단일 사본의 메서드(method)를 호출할 수 있다. 이것에 의해, 호스팅 장치(4)가 메모리에 있는 공용 기능 집합(common set of functionality)의 여러 사본을 동시에 저장할 필요가 감소될 수 있다.
하나 이상의 리소스(34A 또는 34B)를 역참조하는 것은 요청 처리기 모듈(42)이 GAC(44)에 설치된 하나 이상의 어셈블리를 사용하는 것을 필요로 할 수 있다. 예를 들어, 하위 디렉토리(32A)에 있는 리소스는 GAC(44)에 저장된 제1 버전의 어셈블리에 의해 제공되는 기능을 사용하는 서버측 스크립트를 포함하는 ASP.NET 페이지일 수 있다. 게다가, 이 일례에서, 하위 디렉토리(32B)에 있는 리소스는 GAC(44)에 있는 제2 버전의 어셈블리에 의해 제공되는 기능을 사용하는 서버측 스크립트를 포함하는 ASP.NET 페이지일 수 있다.
하위 디렉토리(32A)는 하위 디렉토리(32A)에 있는 리소스와 GAC(44)에 있는 어셈블리 버전 간의 바인딩(binding)을 지정하는 웹 구성 파일을 포함할 수 있다. 예를 들어, GAC(44)는 제1 버전 및 제2 버전의 "Webcontrols.dll" 어셈블리를 포함할 수 있다. 이 일례에서, 하위 디렉토리(32A)의 웹 구성 파일은 하위 디렉토리(32A)에 있는 리소스에 의한 "Webcontrols.dll" 어셈블리의 메서드의 호출이 GAC(44)에 있는 제1 버전의 "Webcontrols.dll" 어셈블리로 보내져야 하는 것으로 지정할 수 있다. 하위 디렉토리(32B) 및 웹 응용 프로그램의 버전과 연관된 리소스를 포함하고 있는 기타 하위 디렉토리는 비슷한 웹 구성 파일을 포함할 수 있다. 계속하여 이전의 일례에서, 하위 디렉토리(32B)의 웹 구성 파일은 하위 디렉토리(32B)에 있는 리소스에 의한 "Webcontrols.dll" 어셈블리의 메서드의 호출이 GAC(44)에 있는 제2 버전의 "Webcontrols.dll" 어셈블리로 보내져야 하는 것으로 지정할 수 있다. 이러한 방식으로, 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스는 GAC(44)에 설치된 서로 다른 버전의 어셈블리를 이용할 수 있다.
이상에서 논의된 바와 같이, 각각의 버전의 웹 응용 프로그램은 서로 다른 사용자 경험을 제공할 수 있다. 본 개시 내용에서 사용된 바와 같이, "사용자 경험"은 사용자가 웹 응용 프로그램과 상호작용하는 방식이다. 2명의 사용자가 서로 다른 언어로 되어 있는, 웹 응용 프로그램에 의해 제공된 페이지를 보고 있더라도, 사용자들은 웹 응용 프로그램에서 동일한 사용자 경험을 가질 수 있다. 예를 들어, 웹 응용 프로그램의 한 버전이 제1 사용자에게는 제1 버전의 웹 페이지를 제공하고 제2 사용자에게는 제2 버전의 웹 페이지를 제공할 수 있다. 이 일례에서, 제 1 버전의 웹 페이지 및 제2 버전의 웹 페이지는 정확히 동일한 레이아웃 및 기능을 가질 수 있지만, 텍스트 또는 그래픽과 같은 특정 요소가 서로를 대체할 수 있다는 점에서 다를 수 있다. 예를 들어, 제1 웹 페이지에 있는 텍스트는 포르투갈어로 작성되어 있을 수 있고, 제2 웹 페이지에 있는 텍스트는 프랑스어로 작성되어 있을 수 있다. 이 일례에서, 제1 사용자 및 제2 사용자가 동일한 방식으로 웹 응용 프로그램과 상호작용할 수 있으므로, 제1 사용자 및 제2 사용자는 동일한 사용자 경험을 가질 수 있다. 이와 달리, 페이지의 레이아웃, 페이지의 기능, 사이트의 구성, 기타 등등에서의 차이로 인해 사용자가 페이지와 서로 다르게 상호작용해야만 하는 경우, 서로 다른 버전의 웹 응용 프로그램이 서로 다른 사용자 경험을 제공할 수 있다.
이것을 더 설명하기 위해서, .NET 위성 어셈블리(satellite assembly)가 서로 다른 정적 요소(static element)를 제공하는 데는 사용될 수 있지만 사용자가 웹 응용 프로그램과 상호작용하는 방법을 변경하는 데는 사용될 수 없다고 생각해보자. 예를 들어, ASP.NET 페이지는 라이브러리 어셈블리에 의해 제공되는 메서드를 호출하는 서버측 스크립트를 포함할 수 있다. 기본값으로, 라이브러리 어셈블리의 메서드는 영어로 된 문자열을 반환할 수 있다. 이 일례에서, 위성 어셈블리는 라이브러리 어셈블리와 연관될 수 있다. 위성 어셈블리는 특정의 문화권과 연관되어 있으며, 라이브러리 어셈블리의 동작을 특정의 문화권으로 지역화(localize)하는 정적[즉, 비코드(non-code)] 리소스를 포함한다. 일반적인 사용에서, 위성 어셈블리는 특정의 문화권의 언어로 된 문자열을 포함한다. 예를 들어, 프랑스계 캐나다 문화권과 연관된 위성 어셈블리는 프랑스계 캐나다 언어로 된 문자열을 포함할 수 있다. ASP.NET 페이지 내의 서버측 스크립트가 라이브러리 어셈블리에 의해 제공되는 메서드를 호출하고, 문화권 선호도가 프랑스계 캐나다로 설정되어 있을 때, 메서드는 영어 대신 프랑스계 캐나다 언어로 된 문자열을 반환한다. 문자열은 이미지의 URL, 웹 페이지에 포함할 텍스트, 기타 등등일 수 있다. 이런 방식으로, 위성 어셈블리의 집합을 제공함으로써, 웹 디자이너는 웹 페이지를 생성하는 데 사용되는 라이브러리 어셈블리를 재작성하지 않고 서로 다른 언어로 된 웹 페이지를 제공할 수 있다. 달리 말하면, 위성 어셈블리의 집합이 수반될 때, 단일 라이브러리 어셈블리는 복수의 언어로 된 웹 페이지를 생성할 수 있다. 그러나, 웹 응용 프로그램과 상호작용할 때 모든 사용자가 기본적으로 같은 경험을 가지기 때문에, 웹 응용 프로그램에서 위성 어셈블리를 사용하는 것은 서로 다른 사용자 경험을 제공하지 않는다.
도 3은 도 2의 일례에 예시된 논리 구성요소를 참조하여 호스팅 장치(4)의 예시적인 동작을 나타내는 플로우차트이다. 도 3의 일례에 예시된 바와 같이, 버전 모듈(38)은 네트워크(8)를 통해 클라이언트 장치(6)로부터 웹 응용 프로그램과 연관된 요청을 수신한다(60). 이어서, 버전 모듈(38)은 요청이 웹 응용 프로그램의 버전을 식별해주는 버전 식별자(version identifier)를 포함하는지 여부를 판정한다(62). 예를 들어, 버전 모듈(38)은 요청이 웹 응용 프로그램의 버전을 식별해주는 버전 식별자를 지정하는 쿠키(cookie)를 포함하는지를 판정한다. 요청이 웹 응용 프로그램의 버전을 식별해주는 버전 식별자를 포함하는 것이 판정되면(62의 "예"), 요청 재작성 모듈(40)은, 경로명이 지정된 버전의 웹 응용 프로그램과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청에 의해 지정된 경로명을 재작성한다(64). 요청이 웹 응용 프로그램의 버전을 지정하고 있는 것으로 판정되는 시나리오에서, 지정된 버전의 웹 응용 프로그램은 웹 응용 프로그램의 적용가능한 버전이다.
다른 한편으로, 요청이 웹 응용 프로그램의 버전을 식별해주는 버전 식별자를 포함하지 않는 것으로 판정되는 경우(62의 "아니오"), 버전 모듈(38)은 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별할 수 있다(66). 도 2를 참조하여 이상에서 논의된 바와 같이, 버전 모듈(38)은 그룹 데이터베이스(44)를 사용하여 웹 응용 프로그램의 적용가능한 버전을 식별할 수 있다.
버전 모듈(38)이 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별한 후에, 요청 재작성 모듈(40)은, 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 포함하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청에 의해 지정된 경로명을 재작성한다(68). 요청 재작성 모듈(40)이 호스팅 장치(4)에서 경로명을 재작성하기 때문에, 클라이언트 장치(6)는 경로명이 재작성되었다는 어떤 표시도 수신하지 않을 수 있다.
요청 재작성 모듈(40)이 단계(64) 또는 단계(68)에서 요청에 의해 지정된 경로명을 재작성하면, 요청 처리기 모듈(42)은 재작성된 요청에서의 경로명으로 식별되는 리소스를 역참조한다(70). 예를 들어, 요청 처리기 모듈(42)은, HTML 파일을 생성하는 ASP.NET 페이지에 있는 스크립트를 실행함으로써, 경로명에 의해 지정된 ASP.NET 페이지를 역참조할 수 있다. 다른 경우에, 요청 처리기 모듈(42)은, CGI(common gateway interface) 리소스에 대한 요청에 있는 정보를 제공함으로써, 경로명에 의해 지정된 CGI 리소스를 역참조할 수 있다.
요청 처리기 모듈(42)이 재작성된 요청에 있는 경로명에 의해 식별되는 리소스를 역참조한 후에, 요청 처리기 모듈(42)은 요청에 대한 응답(response)을 생성할 수 있다(72). 응답이 HTTP 응답이면, 응답은 클라이언트 장치(6)에게 웹 응용 프로그램의 적용가능한 버전의 버전 식별자를 포함하는 쿠키를 설정하도록 지시하는 Set-Cookie 헤더를 포함할 수 있다. 따라서, 클라이언트 장치(6)는 웹 응용 프로그램과 연관된 차후의 HTTP 요청에 "Set-Cookie" 헤더의 내용을 포함할 것이다. 다른 일례에서 요청 처리기 모듈(42)는, 웹 응용 프로그램과 연관된 리소스의 위치를 지정하는 응답에서의 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 디렉토리명을 포함하도록, 응답을 재작성할 수 있다. 이 기술에 의해, 호스팅 장치(4)는 웹 응용 프로그램의 적용가능한 버전을 식별하기 위해 그룹 데이터베이스(36)를 사용하는 단계(비용이 들 수 있음)를 피할 수 있다.
요청에 대한 응답을 생성한 후에, 요청 처리기 모듈(42)은 클라이언트 장치(6)에게 응답을 송신할 수 있다(74).
도 3의 일례에 예시된 동작이 단지 호스팅 장치(4)의 예시적인 동작이라는 것을 잘 알 것이다. 예를 들어, 호스팅 장치(4)의 다른 예시적 동작에서, 버전 모듈(38)은, 요청에 의해 지정된 경로명이 웹 응용 프로그램의 한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함할 때, 요청이 버전 식별자를 지정하고 있는 것으로 판정할 수 있다. 이 일례에서, 요청에 의해 지정된 경로명이 웹 응용 프로그램의 한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하는 경우, 요청 재작성 모듈(40)이 요청이 의해 지정된 경로명을 재작성할 필요가 없을 수 있다.
도 4는 웹 응용 프로그램의 2개의 버전과 연관된 리소스를 저장하는 데 사용될 수 있는 디렉토리 구조(90)를 나타낸 도면이다. 도 4의 일례에 예시된 바와 같이, 디렉토리 구조(90)는 "/application_root"라는 디렉토리명과 연관된 디렉토리를 포함하고 있다. "/application_root" 디렉토리는 "version_2008_01" 이라는 디렉토리명과 연관된 제1 하위 디렉토리 및 "version_2008_02" 이라는 디렉토리명과 연관된 제2 하위 디렉토리를 포함하고 있다. 달리 말하면, "version_2008_01" 하위 디렉토리 및 "version_2008_02" 하위 디렉토리는 단일 직계 부모 디렉토리(즉, "/application_root" 디렉토리)의 자식 디렉토리이다. "version_2008_01" 하위 디렉토리는 제1 버전의 웹 응용 프로그램과 연관된 리소스를 저장할 수 있으며, "version_2008_02" 하위 디렉토리는 제2 버전의 웹 응용 프로그램과 연관된 리소스를 저장할 수 있다.
도 4의 일례는 "version_2008_01" 하위 디렉토리가 "Cancelation" 하위 디렉토리, "Intercept Survey" 하위 디렉토리, "Misc" 하위 디렉토리, "Resources" 하위 디렉토리, "RSS" 하위 디렉토리 및 "Services" 하위 디렉토리를 포함하고 있음을 추가로 나타내고 있다. 그에 부가하여, 도 4의 일례는 "Intercept Survey" 하위 디렉토리가 "En-us" 하위 디렉토리를 포함하고 있음을 나타내고 있다. 도 4의 일례는 또한 "Resources" 하위 디렉토리가 "Dialog" 하위 디렉토리, "Editor" 하위 디렉토리, "Images" 하위 디렉토리, "Js" 하위 디렉토리, "Templates" 하위 디렉토리, "RSS" 하위 디렉토리 및 "Services" 하위 디렉토리를 포함하고 있음을 나타내고 있다. 도 4의 일례에 예시되어 있지 않지만, "version_2008_02" 하위 디렉토리는 "version_2008_01" 하위 디렉토리와 동일하거나 유사한 하위 디렉토리를 가지고 있을 수 있다.
디렉토리 구조(90)는 요청 재작성 모듈(40)이 요청을 재작성할 수 있는 방법의 일례를 제공하는 데 사용될 수 있다. 그러한 일례에서, 버전 모듈(38)은 "version_2008_01" 하위 디렉토리에 저장되어 있는 리소스를 가지는 웹 응용 프로그램의 버전을 식별할 수 있다. 이 일례에서, 요청 재작성 모듈(40)은 다음과 같은 경로명 "application_root/Resources/Images/logo.jpg"을 지정하는 요청을 수신할 수 있다. 이 경로명은 디렉토리 구조(90)에 있는 하위 디렉토리의 경로명에 대응되지 않는다. 요청 재작성 모듈(40)이 요청을 수신할때, 요청 재작성 모듈(40)은 요청에 있는 경로명을 재작성하여, 경로명이 다음과 같이 "application_root/version_2008_01/Resources/Images/logo.jpg"로 되도록 할 수 있다.
도 5는 호스팅 장치(4)의 예시적인 하드웨어 구성요소를 나타내는 블록도이다. 도 5의 일례에 예시된 바와 같이, 호스팅 장치(4)는 메모리 장치(100)를 포함하고 있다. 메모리 장치(100)는 데이터 및 명령어를 저장할 수 있는 컴퓨터-판독가능 저장 매체이다. 메모리 장치(100)는 DRAM(dynamic random access memory), DDR SDRAM(double data rate synchronous dynamic random access memory), reduced latency DRAM, DDR2 SDRAM, DDR3 SDRAM, Rambus RAM 및 기타 유형의 컴퓨터-판독가능 저장 매체 등(이들로 제한되지 않음)을 포함하는 각종의 서로 다른 유형의 컴퓨터-판독가능 저장 매체일 수 있다.
그에 부가하여, 호스팅 장치(4)는 명령어를 실행할 수 있는 처리 장치(102)를 포함하고 있다. 처리 장치(102)는 하나 이상의 처리 코어(processing core) 및/또는 하나 이상의 개별 마이크로프로세서로서 구현될 수 있다. 예를 들어, 처리 장치(102)는 하나 이상의 Intel Core 2 마이크로프로세서로서 구현될 수 있다. 처리 장치(102)는 x86 명령어 집합, POWER 명령어 집합, RISC 명령어 집합, SPARC 명령어 집합, IA-64 명령어 집합, MIPS 명령어 집합 또는 기타 명령어 집합과 같은 명령어 집합 내의 명령어를 실행할 수 있다.
호스팅 장치(4)는 또한 호스팅 장치(4)가 비디오 정보를 디스플레이 장치(106)로 출력할 수 있게 해주는 비디오 인터페이스(104)를 포함하고 있다. 디스플레이 장치(106)는 각종의 서로 다른 유형의 디스플레이 장치일 수 있다. 예를 들어, 디스플레이 장치(106)는 음극선관(cathode-ray tube) 디스플레이, LCD 디스플레이 패널, 플라즈마 스크린 디스플레이 패널, 터치-감응(touch-sensitive) 디스플레이 패널, LED 어레이(array), 또는 기타 유형의 디스플레이 장치일 수 있다.
그에 부가하여, 호스팅 장치(4)는 비휘발성 저장 장치(108)를 포함하고 있다. 비휘발성 저장 장치(108)는 데이터 및/또는 명령어를 저장할 수 있는 컴퓨터-판독가능 저장 매체이다. 비휘발성 저장 장치(108)는 각종의 서로 다른 유형의 서로 다른 비휘발성 저장 장치일 수 있다. 예를 들어, 비휘발성 저장 장치(108)는 하나 이상의 하드 디스크 드라이브, 자기 테이프 드라이브, CD-ROM 드라이브, DVD-ROM 드라이브, Blu-Ray 디스크 드라이브, 또는 기타 유형의 비휘발성 저장 장치일 수 있다.
호스팅 장치(4)는 또한 호스팅 장치(4)가 외부 구성요소와 통신할 수 있게 해주는 외부 구성요소 인터페이스(external component interface)(110)를 포함하고 있다. 도 5의 일례에 예시된 바와 같이, 외부 구성요소 인터페이스(110)는 입력 장치(112) 및 외부 저장 장치(114)와 통신을 한다. 호스팅 장치(4)의 일 구현예에서, 외부 구성요소 인터페이스는 USB(Universal Serial Bus) 인터페이스이다. 호스팅 장치(4)의 다른 구현예에서, 호스팅 장치(4)는 호스팅 장치(4)가 입력 장치 및/또는 출력 장치와 통신할 수 있게 해주는 기타 유형의 인터페이스를 포함할 수 있다. 예를 들어, 호스팅 장치(4)는 PS/2 인터페이스를 포함할 수 있다. 입력 장치(112)는 키보드, 마우스, 트랙볼, 스타일러스 입력 장치, 터치 패드, 터치-감응 디스플레이 화면, 또는 기타 유형의 입력 장치(이들로 제한되지 않음)를 포함하는 각종의 서로 다른 유형의 장치일 수 있다. 외부 저장 장치(114)는 자기 테이프, 플래시 메모리 모듈, 자기 디스크 드라이브, 광 디스크 드라이브, 및 기타 컴퓨터-판독가능 저장 매체를 포함하는 각종의 서로 다른 유형의 컴퓨터-판독가능 저장 매체일 수 있다.
그에 부가하여, 호스팅 장치(4)는 호스팅 장치(4)가 네트워크(8)를 통해 데이터를 송신하고 데이터를 수신할 수 있게 해주는 네트워크 인터페이스(116)를 포함하고 있다. 네트워크 인터페이스(116)는 각종의 서로 다른 유형의 네트워크 인터페이스일 수 있다. 예를 들어, 네트워크 인터페이스(116)는 이더넷 인터페이스, 토큰-링 네트워크 인터페이스, 광섬유 네트워크 인터페이스, 무선 네트워크 인터페이스[예를 들어, WiFi, WiMax 등] 또는 기타 유형의 네트워크 인터페이스일 수 있다.
호스팅 장치(4)는 또한 호스팅 장치(4)의 다양한 구성요소들 사이의 통신을 용이하게 해주는 통신 매체(118)를 포함하고 있다. 통신 매체(118)는 PCI 버스, PCI Express 버스, AGP(accelerated graphics port) 버스, Infiniband 상호 연결, 직렬 ATA(Advanced Technology Attachment) 상호 연결, 병렬 ATA 상호 연결, Fibre Channel 상호 연결, USB 버스, SCSI(Small Computer System Interface) 인터페이스, 또는 기타 유형의 통신 매체(이들로 제한되지 않음)를 포함하는 하나 이상의 서로 다른 유형의 통신 매체를 포함할 수 있다.
몇개의 컴퓨터-판독가능 저장 매체[즉, 메모리(100), 비휘발성 저장 장치(108), 및 외부 저장 장치(114)]가 도 5의 일례에 예시되어 있다. 이러한 컴퓨터-판독가능 저장 매체가 모여서 단일의 논리적 컴퓨터-판독가능 저장 매체를 구성할 수 있다. 이 단일의 논리적 컴퓨터-판독가능 저장 매체는 처리 장치(102)에 의해 실행가능한 명령어를 저장할 수 있다. 이상의 설명에서 기술된 동작은 이 단일의 논리적 컴퓨터-판독가능 저장 매체에 저장된 명령어의 실행으로부터 얻어질 수 있다. 그래서, 이 설명에서 특정의 논리적 모듈이 특정의 동작을 수행한다고 할 때, 그러한 표현은 소프트웨어 모듈의 명령어가 처리 장치(102)와 같은 처리 장치로 하여금 동작을 수행하게 한다는 의미로 해석될 수 있다.
본 개시 내용의 기술은 각종의 방식으로 개념화될 수 있다. 예를 들어, 본 개시 내용의 기술은 웹 응용 프로그램의 다수의 버전을 제공하는 방법으로서 개념화될 수 있다. 이 방법은, 컴퓨팅 장치가 액세스할 수 있는 컴퓨터-판독가능 저장 매체 상에, 각각이 하위 디렉토리명을 가지는 하위 디렉토리의 집합을 포함하는 계층적 디렉토리 시스템을 저장하는 단계를 포함한다. 그에 부가하여, 이 방법은 웹 응용 프로그램의 버전들의 집합에서 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스를 컴퓨터-판독가능 저장 매체 상에서 각각의 하위 디렉토리 내에 저장하는 단계를 포함하며, 각각의 버전의 웹 응용 프로그램이 서로 다른 사용자 경험을 제공한다. 이 방법은 또한 전자 통신 네트워크를 통해 클라이언트 장치로부터 웹 응용 프로그램과 연관된 리소스의 경로명을 지정하는 요청을, 컴퓨팅 장치에서, 수신하는 단계를 포함한다. 게다가, 이 방법은, 요청을 수신한 것에 응답하여, 웹 응용 프로그램들의 버전의 집합으로부터 웹 응용 프로그램의 적용가능한 버전을, 컴퓨팅 장치에서, 자동으로 식별하는 단계를 포함한다. 이 방법은 또한, 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 컴퓨팅 장치에서, 요청을 재작성하는 단계를 포함한다. 게다가, 이 방법은, 요청을 재작성한 후에, 재작성된 요청에서의 경로명에 의해 식별된 리소스를, 컴퓨팅 장치에서, 역참조하는 단계를 포함한다.
다른 일례에서, 본 개시 내용의 기술은 명령어를 실행할 수 있는 처리 장치를 포함하는 전자 컴퓨팅 장치로서 개념화될 수 있다. 전자 컴퓨팅 장치는 또한 클라이언트 장치를 포함하는 전자 통신 네트워크를 통해 통신을 용이하게 해주는 네트워크 인터페이스를 포함하고 있다. 게다가, 전자 컴퓨팅 장치는, 단일 부모 디렉토리의 자식 디렉토리인 하위 디렉토리의 집합을 포함하는 계층적 디렉토리 시스템 - 하위 디렉토리의 집합 내의 각각의 하위 디렉토리가 하위 디렉토리명을 가짐 -, 및 각각의 하위 디렉토리 내에, 웹 응용 프로그램의 버전의 집합 내의 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스를 저장하는 비휘발성 저장 장치를 포함하고 있다. 웹 응용 프로그램의 각각의 버전은 서로 다른 사용자 경험을 제공한다. 전자 컴퓨팅 장치는 또한, 전자 통신 네트워크를 통해 클라이언트 장치로부터 웹 응용 프로그램과 연관된 리소스의 경로명을 지정하는 요청을 수신하고, 요청을 수신한 것에 응답하여, 웹 응용 프로그램의 버전의 집합으로부터 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하는 버전 모듈을 포함하고 있다. 그에 부가하여, 전자 컴퓨팅 장치는, 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, 요청을 재작성하는 요청 재작성 모듈을 포함하고 있다. 게다가, 전자 컴퓨팅 장치는, 요청이 재작성된 후에, 재작성된 요청 내의 경로명에 의해 식별되는 리소스를 역참조하고, 재작성된 요청 내의 경로명에 의해 식별된 리소스를 클라이언트 장치로 송신하는 요청 처리기 모듈을 포함하고 있다.
본 개시 내용의 기술은 또한 복수의 하위 디렉토리를 포함하는 계층적 디렉토리 시스템을 포함하고 있는 컴퓨터-판독가능 저장 매체로서 개념화될 수 있다. 각각의 하위 디렉토리는 서로 다른 하위 디렉토리명과 연관되어 있다. 각각의 하위 디렉토리는 웹 응용 프로그램의 버전의 집합 내의 서로 다른 버전의 웹 응용 프로그램과 연관된 리소스를 저장한다. 각각의 하위 디렉토리는 단일 직계 부모 하위 디렉토리의 자식 디렉토리이다. 각각의 하위 디렉토리에 동등한 이름의 리소스가 있다. 각각의 버전의 웹 응용 프로그램은 서로 다른 기능의 집합 및 서로 다른 사용자 인터페이스를 제공함으로써 서로 다른 사용자 경험을 제공한다. 컴퓨터-판독가능 저장 매체는 또한 각각이 조건 및 웹 응용 프로그램의 버전들 중 하나를 지정하는 규칙의 집합을 포함하는 그룹 데이터베이스를 포함하고 있다. 게다가, 컴퓨터-판독가능 저장 매체는, 컴퓨팅 장치에서 실행될 때, 컴퓨팅 장치로 하여금 전자 통신 네트워크를 통해 클라이언트 장치로부터 웹 응용 프로그램과 연관된 리소스의 경로명을 지정하는 HTTP(Hypertext Transfer Protocol) 요청을 수신하게 하는 명령어를 포함하고 있다. 이 명령어는 또한 컴퓨팅 장치로 하여금, HTTP 요청을 수신한 것에 응답하여, HTTP 요청이 웹 응용 프로그램의 적용가능한 버전을 식별해주는 버전 식별자를 포함하는지 여부를 판정하게 하며, 여기서 웹 응용 프로그램의 적용가능한 버전은 웹 응용 프로그램의 버전들 중 하나이다. 게다가, 명령어는, HTTP 요청이 웹 응용 프로그램의 적용가능한 버전을 식별해주는 버전 식별자를 포함하지 않을 때, 컴퓨팅 장치로 하여금 규칙을 사용하여 웹 응용 프로그램의 버전의 집합으로부터 적용가능한 버전의 웹 응용 프로그램을 자동으로 식별하게 한다. 명령어는 또한 컴퓨팅 장치로 하여금, 경로명이 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리의 하위 디렉토리명을 포함하도록, HTTP 요청을 재작성하게 함으로써, 경로명으로 하여금 웹 응용 프로그램의 적용가능한 버전과 연관된 리소스를 저장하는 하위 디렉토리에 있는 리소스를 식별하게 한다. 게다가, 명령어는 컴퓨팅 장치로 하여금, HTTP 요청을 재작성한 후에, 재작성된 HTTP 요청의 경로명에 의해 식별되는 리소스를 역참조하게 한다. 명령어는 또한 컴퓨팅 장치로 하여금 HTTP 요청에 대한 HTTP 응답을 생성하게 하며, HTTP 응답은 재작성된 HTTP 요청에서의 경로명에 의해 식별되는 리소스와, 웹 응용 프로그램과 연관된 차후의 HTTP 요청에서 웹 응용 프로그램의 적용가능한 버전을 식별해주는 버전 식별자를 포함시키도록 클라이언트 장치를 구성하는 데이터를 포함한다.
발명 대상이 구조적 특징 및/또는 방법적 동작과 연관하여 기술되어 있지만, 첨부된 특허청구범위에 정의된 발명 대상이 이상에서 기술한 특정의 특징 또는 동작으로 반드시 제한되는 것은 아니라는 것을 잘 알 것이다. 오히려, 이상에서 기술한 특정의 특징 및 동작은 청구항을 구현하는 예시적인 형태로서 개시되어 있다.

Claims (20)

  1. 웹 응용 프로그램의 복수의 버전을 제공하는 방법으로서,
    컴퓨팅 장치에 액세스가능한 컴퓨터-판독가능 저장 매체 상에, 각각이 하위 디렉토리명을 가지는 하위 디렉토리의 집합을 포함하는 계층적 디렉토리 시스템(hierarchical directory system)을 저장하는 단계,
    상기 컴퓨터-판독가능 저장 매체 상에서 상기 하위 디렉토리 각각에, 웹 응용 프로그램의 버전들의 집합 내의 서로 다른 버전의 웹 응용 프로그램에 연관된 리소스를 저장하는 단계 - 상기 웹 응용 프로그램의 버전들 각각은 서로 다른 사용자 경험을 제공함 -,
    상기 컴퓨팅 장치에서, 전자 통신 네트워크를 통해 클라이언트 장치로부터의 상기 웹 응용 프로그램에 연관된 리소스의 경로명(pathname)을 지정하는 요청을 수신하는 단계,
    상기 요청이 상기 웹 응용 프로그램의 적용가능한 버전(applicable version)을 지정하는지 여부를 판정하는 단계,
    상기 요청이 상기 웹 응용 프로그램의 적용가능한 버전을 지정하지 않는다는 판정에 응답하여, 상기 컴퓨팅 장치에서, 상기 웹 응용 프로그램의 버전들의 집합중에서 상기 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하는 단계,
    상기 컴퓨팅 장치에서, 상기 경로명이 상기 웹 응용 프로그램의 상기 식별된 적용가능한 버전에 연관된 리소스를 저장하는 상기 하위 디렉토리의 이름을 포함하도록 상기 요청을 재작성하는 단계, 및
    상기 요청을 재작성하는 단계 후에, 상기 컴퓨팅 장치에서, 재작성된 상기 요청에서 상기 경로명에 의해 식별되는 리소스를 역참조하는(dereferencing) 단계
    를 포함하는 웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  2. 제1항에 있어서,
    상기 컴퓨터-판독가능 저장 매체에서, 상기 웹 응용 프로그램의 버전을 사용자 그룹에 연관시키는 정보를 저장하는 단계를 더 포함하며,
    상기 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하는 단계는, 상기 웹 응용 프로그램의 버전을 사용자 그룹에 연관시키는 정보를 사용하여 상기 클라이언트 장치의 사용자에 연관된 상기 웹 응용 프로그램의 버전을 식별함으로써, 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  3. 제2항에 있어서,
    상기 웹 응용 프로그램의 버전을 사용자 그룹에 연관시키는 정보를 저장하는 단계는 규칙들의 집합을 저장하는 단계를 포함하고, 각각의 규칙은 조건 및 상기 웹 응용 프로그램의 버전들 중 하나를 지정하고,
    상기 웹 응용 프로그램의 버전을 사용자 그룹에 연관시키는 정보를 사용하여 상기 클라이언트 장치의 사용자에 연관된 상기 웹 응용 프로그램의 버전을 식별하는 것은 상기 규칙들을 평가하는 것을 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  4. 제3항에 있어서,
    상기 요청을 수신하는 단계는 허용가능 언어를 지정하는 "Accept-Language" 헤더를 포함하는 HTTP(Hypertext Transfer Protocol) 요청을 수신하는 단계를 포함하고,
    상기 규칙들의 집합을 저장하는 단계는 상기 HTTP 요청의 "Accept-Language" 헤더의 값에 기초하여 조건을 지정하는 규칙을 저장하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  5. 제1항에 있어서,
    상기 방법은 사용자가 상기 웹 응용 프로그램의 버전들 중 제1 버전을 선호한다는 것을 지정하는 선호도 데이터를 저장하는 단계를 더 포함하고,
    상기 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하는 단계는, 상기 클라이언트 장치가 상기 사용자에 의해 사용되는 경우에, 상기 선호도 데이터를 사용하여 상기 웹 응용 프로그램의 버전들 중 상기 제1 버전을 상기 웹 응용 프로그램의 적용가능한 버전으로서 식별하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  6. 제1항에 있어서,
    상기 재작성된 요청 내의 상기 경로명에 의해 식별된 리소스는 서버측 스크립트를 포함하고,
    상기 재작성된 요청 내의 경로명에 의해 식별된 상기 리소스를 역참조하는 단계는 상기 서버측 스크립트를 실행하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  7. 제1항에 있어서,
    상기 재작성된 요청 내의 상기 경로명에 의해 식별된 상기 리소스를 역참조하는 단계 후에, 상기 컴퓨팅 장치에서, 상기 재작성된 요청 내의 상기 경로명에 의해 식별된 리소스를 포함하는 HTTP 응답을 생성하는 단계, 및
    상기 HTTP 응답을 상기 클라이언트 장치에 송신하는 단계
    를 더 포함하는 웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  8. 제7항에 있어서,
    상기 HTTP 응답을 생성하는 단계는, 상기 웹 응용 프로그램에 연관된 리소스의 위치를 지정하는 상기 HTTP 응답 내의 경로명이 상기 웹 응용 프로그램의 상기 식별된 적용가능한 버전에 연관된 리소스를 저장하는 상기 하위 디렉토리의 이름을 포함하도록, 상기 HTTP 응답을 재작성하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  9. 제7항에 있어서,
    상기 HTTP 응답을 생성하는 단계는, 상기 클라이언트 장치로 하여금 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 버전 식별자를 포함하는 쿠키를 설정하도록 지시하는 헤더를 상기 HTTP 응답이 포함하도록, 상기 HTTP 응답을 생성하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  10. 제1항에 있어서,
    상기 요청이 웹 응용 프로그램의 적용가능한 버전을 지정하는지 여부를 판정하는 단계는, 상기 컴퓨팅 장치에서, 상기 요청이 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 버전 식별자를 포함하는지 여부를 판정하는 단계를 포함하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  11. 제1항에 있어서,
    상기 웹 응용 프로그램의 버전들 중 제1 버전이, 상기 웹 응용 프로그램의 버전들 중 제2 버전에 의해 제시되는 사용자 인터페이스와 다른 사용자 인터페이스를 제시함으로써, 상기 웹 응용 프로그램의 버전들 중 상기 제2 버전과 다른 사용자 경험을 제공하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  12. 제1항에 있어서,
    상기 웹 응용 프로그램의 버전들 중 제1 버전이, 상기 웹 응용 프로그램의 버전들 중 제2 버전에 의해 제시되는 사용자 인터페이스와 다른 기능을 제공함으로써, 상기 웹 응용 프로그램의 버전들 중 상기 제2 버전과 다른 사용자 경험을 제공하는
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  13. 제1항에 있어서,
    적어도 상기 하위 디렉토리들 중 제1 하위 디렉토리 및 상기 하위 디렉토리들 중 제2 하위 디렉토리가 단일 직계 부모 하위 디렉토리(single immediate parent subdirectory)의 자식 디렉토리인
    웹 응용 프로그램의 복수의 버전을 제공하는 방법.
  14. 전자 컴퓨팅 장치로서,
    프로세싱 유닛,
    클라이언트 장치를 포함하는 전자 통신 네트워크 상에서의 통신을 가능하게 하는 네트워크 인터페이스, 및
    하나 이상의 컴퓨터 판독가능 저장 매체
    를 포함하되,
    상기 하나 이상의 컴퓨터 판독가능 저장 매체는,
    단일 부모 디렉토리의 자식 디렉토리인 하위 디렉토리의 집합을 포함하는 계층적 디렉토리 시스템 - 상기 하위 디렉토리의 집합 내의 각각의 하위 디렉토리는 하위 디렉토리명을 가지고, 각각의 상기 하위 디렉토리 내에, 웹 응용 프로그램의 복수의 버전들 중 서로 다른 버전의 웹 응용 프로그램에 연관된 리소스를 가지며, 상기 웹 응용 프로그램의 버전들 각각은 서로 다른 사용자 경험을 제공함 -, 및
    컴퓨터 실행가능 명령어들
    을 저장하고,
    상기 컴퓨터 실행가능 명령어들은 상기 프로세싱 유닛에 의해 실행되는 경우에 상기 전자 컴퓨팅 장치로 하여금,
    상기 전자 통신 네트워크를 통해 상기 클라이언트 장치로부터 수신된 요청이 상기 웹 응용 프로그램의 적용가능한 버전을 지정하는지 여부를 판정하고 - 상기 요청은 상기 웹 응용 프로그램에 연관된 리소스의 경로명을 지정함 -,
    상기 요청이 상기 웹 응용 프로그램의 상기 적용가능한 버전을 지정하지 않는다는 판정에 응답하여, 상기 웹 응용 프로그램의 복수의 버전들 중에서 상기 웹 응용 프로그램의 적용가능한 버전을 식별하며,
    상기 경로명이 상기 웹 응용 프로그램의 상기 식별된 적용가능한 버전에 연관된 리소스를 저장하는 상기 하위 디렉토리의 이름을 포함하도록, 상기 요청을 재작성하고,
    상기 요청이 재작성된 후에, 상기 재작성된 요청에서의 상기 경로명에 의해 식별된 리소스를 역참조하며,
    상기 재작성된 요청에서의 상기 경로명에 의해 식별된 리소스를 상기 클라이언트 장치로 송신하게 하는
    전자 컴퓨팅 장치.
  15. 제14항에 있어서,
    상기 하나 이상의 컴퓨터 판독가능 저장 매체는, 상기 웹 응용 프로그램의 버전을 사용자 그룹에 연관시키는 정보를 포함하는 그룹 데이터베이스를 저장하고,
    상기 컴퓨터 실행가능 명령어들은 상기 프로세싱 유닛에 의해 실행되는 경우에, 상기 전자 컴퓨팅 장치로 하여금, 상기 그룹 데이터베이스를 사용하여 상기 웹 응용 프로그램의 적용가능한 버전을 식별하게 하는
    전자 컴퓨팅 장치.
  16. 제14항에 있어서,
    상기 재작성된 요청 내의 상기 경로명에 의해 식별된 리소스는 서버측 스크립트를 포함하고,
    상기 컴퓨터 실행가능 명령어들은 상기 프로세싱 유닛에 의해 실행되는 경우에, 상기 전자 컴퓨팅 장치로 하여금, 부분적으로 상기 서버측 스크립트를 실행함으로써, 상기 재작성된 요청에서의 상기 경로명에 의해 식별된 상기 리소스를 역참조하게 하는
    전자 컴퓨팅 장치.
  17. 제14항에 있어서,
    상기 하나 이상의 컴퓨터 판독가능 저장 매체는, 사용자가 상기 웹 응용 프로그램의 버전들 중 제1 버전을 선호한다는 것을 지정하는 선호도 데이터를 저장하고,
    상기 컴퓨터 실행가능 명령어들은 상기 프로세싱 유닛에 의해 실행되는 경우에, 상기 전자 컴퓨팅 장치로 하여금, 상기 클라이언트 장치가 상기 사용자에 의해 사용되는 경우에, 상기 선호도 데이터를 사용하여 상기 웹 응용 프로그램의 버전들 중 상기 제1 버전을 상기 웹 응용 프로그램의 적용가능한 버전으로서 식별하게 하는
    전자 컴퓨팅 장치.
  18. 컴퓨터-판독가능 저장 장치로서,
    복수의 하위 디렉토리를 포함하는 계층적 디렉토리 시스템-
    상기 하위 디렉토리 각각은 서로 다른 하위 디렉토리명에 연관되고,
    상기 하위 디렉토리 각각은 웹 응용 프로그램의 버전들의 집합 내의 서로 다른 버전의 웹 응용 프로그램에 연관된 리소스를 저장하며,
    상기 하위 디렉토리 각각에 동등한 이름의 리소스(equivalently-named resource)가 존재하고,
    상기 하위 디렉토리 각각은 단일 직계 부모 하위 디렉토리의 자식 디렉토리이며,
    상기 웹 응용 프로그램의 버전 각각은 서로 다른 기능의 집합 및 서로 다른 사용자 인터페이스를 제공함으로써 서로 다른 사용자 경험을 제공함 - ,
    규칙들의 집합을 포함하는 그룹 데이터베이스 - 상기 규칙들 각각은 조건 및 웹 응용 프로그램의 버전들 중 하나의 버전을 지정함 -, 및
    명령어들
    을 포함하되,
    상기 명령어들은 컴퓨팅 장치에서 실행되는 경우에, 상기 컴퓨팅 장치로 하여금,
    전자 통신 네트워크를 통해 클라이언트 장치로부터의 상기 웹 응용 프로그램에 연관된 리소스의 경로명을 지정하는 HTTP(Hypertext Transfer Protocol) 요청을 수신하고,
    상기 HTTP 요청을 수신한 것에 응답하여, 상기 HTTP 요청이 상기 웹 응용 프로그램의 버전들 중 하나인 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 버전 식별자를 포함하는지 여부를 판정하고,
    상기 HTTP 요청이 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 버전 식별자를 포함하지 않으면, 상기 규칙들을 사용하여 상기 웹 응용 프로그램의 버전들의 집합으로부터 상기 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하고,
    상기 경로명이 상기 웹 응용 프로그램의 상기 식별된 적용가능한 버전에 연관된 리소스를 저장하는 상기 하위 디렉토리의 이름을 포함하도록, 상기 HTTP 요청을 재작성함으로써, 상기 경로명을 통해 상기 웹 응용 프로그램의 상기 식별된 적용가능한 버전에 연관된 리소스를 저장하는 상기 하위 디렉토리 내의 리소스를 식별하게 하고,
    상기 HTTP 요청을 재작성한 후에, 상기 재작성된 HTTP 요청에서의 상기 경로명에 의해 식별된 리소스를 역참조하고,
    상기 HTTP 요청에 대한 HTTP 응답을 생성하게 하는 - 상기 HTTP 응답은 상기 재작성된 HTTP 요청에서의 상기 경로명에 의해 식별된 리소스와, 상기 웹 응용 프로그램에 연관된 후속 HTTP 요청에서 상기 웹 응용 프로그램의 적용가능한 버전을 식별하는 상기 버전 식별자를 포함하도록 상기 클라이언트 장치를 구성하는 데이터를 포함함 -
    컴퓨터-판독가능 저장 장치.
  19. 제18항에 있어서,
    사용자가 상기 웹 응용 프로그램의 버전들 중 제1 버전을 선호한다는 것을 나타내는 선호도 데이터를 더 포함하며,
    상기 명령어들은, 부분적으로 상기 컴퓨팅 장치로 하여금 상기 클라이언트 장치가 사용자에 의해 사용되는 경우에 상기 선호도 데이터를 사용하여 상기 웹 응용 프로그램의 버전들 중 상기 제1 버전을 상기 웹 응용 프로그램의 적용가능한 버전으로서 식별하게 함으로써 상기 컴퓨팅 장치로 하여금 상기 웹 응용 프로그램의 적용가능한 버전을 자동으로 식별하게 하는
    컴퓨터-판독가능 저장 장치.
  20. 삭제
KR1020117006598A 2008-09-29 2009-09-02 하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험 KR101623223B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/240,383 2008-09-29
US12/240,383 US7882174B2 (en) 2008-09-29 2008-09-29 Multiple parallel user experiences provided by a single set of internet hosting machines

Publications (2)

Publication Number Publication Date
KR20110063646A KR20110063646A (ko) 2011-06-13
KR101623223B1 true KR101623223B1 (ko) 2016-05-20

Family

ID=42058760

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117006598A KR101623223B1 (ko) 2008-09-29 2009-09-02 하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험

Country Status (8)

Country Link
US (1) US7882174B2 (ko)
EP (1) EP2350850A2 (ko)
JP (1) JP2012504276A (ko)
KR (1) KR101623223B1 (ko)
CN (1) CN102165430B (ko)
BR (1) BRPI0918043A2 (ko)
RU (1) RU2011111743A (ko)
WO (1) WO2010036491A2 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7882174B2 (en) 2008-09-29 2011-02-01 Microsoft Corporation Multiple parallel user experiences provided by a single set of internet hosting machines
US20100242095A1 (en) * 2009-03-20 2010-09-23 GigaNetworks, Inc. Method and apparatus for multi-user, multi-application internet access authentication and control
US10834167B1 (en) * 2011-06-02 2020-11-10 Amazon Technologies, Inc. Client side navigation compositor
CN102694803A (zh) * 2012-05-25 2012-09-26 华为软件技术有限公司 一种soa服务提供方法及系统
CN102929678A (zh) * 2012-11-26 2013-02-13 中标软件有限公司 一种多版本火狐浏览器的存储方法及装置
TWI614670B (zh) * 2013-02-12 2018-02-11 Lsi公司 連鎖且可擴展之儲存系統及在一連鎖且可擴展之儲存系統中存取資料之方法
US20150215374A1 (en) * 2013-03-13 2015-07-30 Google Inc. Delivering an update for a web application
US9645914B1 (en) * 2013-05-10 2017-05-09 Google Inc. Apps store with integrated test support
US20150100952A1 (en) * 2013-10-09 2015-04-09 Sap Ag Runtime Version Access Infrastructure
WO2015069912A1 (en) * 2013-11-06 2015-05-14 Improvement Interactive, LLC Dynamic application version selection
US9417870B2 (en) * 2014-12-08 2016-08-16 International Business Machines Corporation Managing user access to alternative versions of a particular function of a software product from within a current version of the software product
US9786026B2 (en) * 2015-06-15 2017-10-10 Microsoft Technology Licensing, Llc Asynchronous translation of computer program resources in graphics processing unit emulation
US9881351B2 (en) * 2015-06-15 2018-01-30 Microsoft Technology Licensing, Llc Remote translation, aggregation and distribution of computer program resources in graphics processing unit emulation
US20170034306A1 (en) 2015-07-30 2017-02-02 Nasdaq, Inc. Software application architecture
US9537914B1 (en) * 2015-12-01 2017-01-03 International Business Machines Corporation Vehicle domain multi-level parallel buffering and context-based streaming data pre-processing system
US10560520B2 (en) * 2016-05-20 2020-02-11 Sap Se Compatibility framework for cloud and on-premise application integration
US20180157478A1 (en) * 2016-12-02 2018-06-07 Coursera, Inc. Deployment of immutable web application builds
US11023426B1 (en) * 2017-11-02 2021-06-01 Comodo Security Solutions, Inc. Method and system for detection of open source web application version
US10666706B2 (en) 2017-11-22 2020-05-26 Citrix Systems, Inc. Rendering a web application in a cloud service
US11023259B2 (en) * 2018-06-15 2021-06-01 Microsoft Technology Licensing, Llc Apparatus and method of user or device based application differentiation
US10664266B2 (en) * 2018-09-04 2020-05-26 Salesforce.Com, Inc. Maintaining client version affinity during a server cluster upgrade

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040123285A1 (en) 2002-12-24 2004-06-24 Berg Daniel C Self-healing version and configuration model for an application server
US20040168153A1 (en) 2003-02-26 2004-08-26 Bea Systems, Inc. Systems and methods for dynamic component versioning
US20060075398A1 (en) 2004-10-04 2006-04-06 Bennett David A Controlled deployment of software in a web-based architecture

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6560639B1 (en) * 1998-02-13 2003-05-06 3565 Acquisition Corporation System for web content management based on server-side application
US6643708B1 (en) * 1998-10-29 2003-11-04 International Business Machines Corporation Systems, methods and computer program products for chaining Java servlets across networks
US6157618A (en) * 1999-01-26 2000-12-05 Microsoft Corporation Distributed internet user experience monitoring system
US6345307B1 (en) * 1999-04-30 2002-02-05 General Instrument Corporation Method and apparatus for compressing hypertext transfer protocol (HTTP) messages
EP1109092A1 (en) * 1999-12-14 2001-06-20 Sun Microsystems, Inc. File system navigation
US6658659B2 (en) * 1999-12-16 2003-12-02 Cisco Technology, Inc. Compatible version module loading
US20020013831A1 (en) * 2000-06-30 2002-01-31 Arto Astala System having mobile terminals with wireless access to the internet and method for doing same
JP2002163143A (ja) * 2000-07-28 2002-06-07 Any One Wireless Co Ltd 無線サイトのコンテンツ・リフォーマッティング・システム及びその方法
US6859820B1 (en) * 2000-11-01 2005-02-22 Microsoft Corporation System and method for providing language localization for server-based applications
FI113898B (fi) * 2000-11-21 2004-06-30 Nokia Corp Menetelmä sisällön tuottamiseksi langattomaan viestintälaitteeseen
US20080281969A1 (en) * 2000-12-15 2008-11-13 Horton John C Controlling access to versions of application software by a server, based on site ID
US6996780B2 (en) * 2000-12-29 2006-02-07 International Business Machines Corporation Method and system for creating a place type to be used as a template for other places
US6999912B2 (en) * 2001-03-13 2006-02-14 Microsoft Corporation Provisioning computing services via an on-line networked computing environment
US6768988B2 (en) * 2001-05-29 2004-07-27 Sun Microsystems, Inc. Method and system for incorporating filtered roles in a directory system
US7089319B2 (en) * 2002-12-09 2006-08-08 Anton Lysenko Method and system for instantaneous on-demand delivery of multimedia content over a communication network with aid of content capturing component, delivery-on-demand client and dynamically mapped resource locator server
US7062506B2 (en) * 2003-01-24 2006-06-13 The Cobalt Group, Inc. Staged publication and management of dynamic webpages
US8214398B1 (en) * 2005-02-16 2012-07-03 Emc Corporation Role based access controls
US7913244B2 (en) * 2006-06-12 2011-03-22 Oracle International Corporation Side by side for web services
US8214451B2 (en) * 2007-01-19 2012-07-03 Alcatel Lucent Network service version management
US7882174B2 (en) 2008-09-29 2011-02-01 Microsoft Corporation Multiple parallel user experiences provided by a single set of internet hosting machines

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040123285A1 (en) 2002-12-24 2004-06-24 Berg Daniel C Self-healing version and configuration model for an application server
US20040168153A1 (en) 2003-02-26 2004-08-26 Bea Systems, Inc. Systems and methods for dynamic component versioning
US20060075398A1 (en) 2004-10-04 2006-04-06 Bennett David A Controlled deployment of software in a web-based architecture

Also Published As

Publication number Publication date
RU2011111743A (ru) 2012-10-10
US7882174B2 (en) 2011-02-01
EP2350850A2 (en) 2011-08-03
CN102165430A (zh) 2011-08-24
WO2010036491A2 (en) 2010-04-01
WO2010036491A3 (en) 2010-05-27
JP2012504276A (ja) 2012-02-16
KR20110063646A (ko) 2011-06-13
US20100082813A1 (en) 2010-04-01
CN102165430B (zh) 2014-03-26
BRPI0918043A2 (pt) 2015-12-01

Similar Documents

Publication Publication Date Title
KR101623223B1 (ko) 하나의 인터넷 호스팅 시스템 집합에 의해 제공되는 다수의 병렬 사용자 경험
US11126671B2 (en) Serializing plug-in data in a web page
US9405745B2 (en) Language translation using embeddable component
US8799353B2 (en) Scope-based extensibility for control surfaces
US9152732B2 (en) Browser cache assist for accessing web-based content
US20130212465A1 (en) Postponed rendering of select web page elements
US8074167B2 (en) Cross domain presence of web user interface and logic
US9529648B2 (en) Generic declaration of bindings between events and event handlers regardless of runtime structure
US8037484B2 (en) Building compound extensible AJAX applications
US8930807B2 (en) Web content management based on timeliness metadata
US20160072927A1 (en) Odata enabled mobile software applications
US8839126B1 (en) Secure HTML components for building client-side user interface
JP2017504129A (ja) ウェブブラウザにおいて表わされる状態表現の構築
US20090276425A1 (en) Encoding search results as a search permanent link uniform resource locator
GB2519113A (en) Generation of combined documents from content and layout documents based on semantically neutral elements
US11914700B2 (en) Reducing remote procedure calls for multimedia content delivery
Bojinov RESTful Web API Design with Node. js
US20120310893A1 (en) Systems and methods for manipulating and archiving web content
US20120151313A1 (en) User-specific customization of web pages
Bojinov RESTful Web API Design with Node. js
US20090031287A1 (en) Container-less jsp template
Zochniak et al. Performance comparison of observer design pattern implementations in javascript
Hellerøy A Server-Side Feature Detection System for an Enterprise Web CMS
Northwood et al. Front End
Hertel Aspects of AJAX

Legal Events

Date Code Title Description
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190417

Year of fee payment: 4