KR20120005490A - 지속적인 웹 어플리케이션 설계를 위한 구조적 패턴 - Google Patents

지속적인 웹 어플리케이션 설계를 위한 구조적 패턴 Download PDF

Info

Publication number
KR20120005490A
KR20120005490A KR1020117026251A KR20117026251A KR20120005490A KR 20120005490 A KR20120005490 A KR 20120005490A KR 1020117026251 A KR1020117026251 A KR 1020117026251A KR 20117026251 A KR20117026251 A KR 20117026251A KR 20120005490 A KR20120005490 A KR 20120005490A
Authority
KR
South Korea
Prior art keywords
data item
web
web application
server system
local database
Prior art date
Application number
KR1020117026251A
Other languages
English (en)
Other versions
KR101647071B1 (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 KR20120005490A publication Critical patent/KR20120005490A/ko
Application granted granted Critical
Publication of KR101647071B1 publication Critical patent/KR101647071B1/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/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/59Providing operational support to end devices by off-loading in the network or by emulation, e.g. when they are unavailable
    • 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
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9574Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/216Handling conversation history, e.g. grouping of messages in sessions or threads
    • 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]
    • 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/289Intermediate processing functionally located close to the data consumer application, e.g. in same machine, in same home or in same sub-network

Abstract

웹 브라우저, 로컬 웹 어플리케이션, 로컬 메모리에 유지되는 기록 큐 및 지속적인 로컬 데이터베이스를 포함한 오프라인 성능들을 갖는 웹 어플리케이션을 운영하는 컴퓨터 시스템이 설명된다. 웹 어플리케이션이 데이터 아이템에 대해 동작을 수행할 필요가 있을 때, 웹 어플리케이션은 데이터 아이템이 로컬 데이터베이스에 있는지를 결정하기 위해서 데이터베이스 요청을 발행한다. 만약 데이터 아이템이 로컬 데이터베이스에 있지 않다면, 웹 어플리케이션은 서버 시스템에 데이터 요청을 발행한다. 만약 데이터 아이템이 로컬 데이터베이스에 있다면, 웹 어플리케이션은 그 데이터베이스에 저장된 데이터 아이템에 대해 동작을 수행하고, 데이터 아이템의 식별자와 함께 기록 큐에 대한 동작을 기록한다. 클라이언트 장치와 서버 시스템 간에 네트워크 접속이 존재할 때, 웹 인터페이스는 서버 시스템으로 기록 큐를 드레인(drain)한다.

Description

지속적인 웹 어플리케이션 설계를 위한 구조적 패턴{ARCHITECTURAL PATTERN FOR PERSISTENT WEB APPLICATION DESIGN}
본 명세서에 개시된 실시예들은 일반적으로 클라이언트-서버 컴퓨터 네트워크 시스템들의 분야에 관한 것으로, 특히 오프라인 성능들을 갖는 웹 어플리케이션들을 개발하기 위한 시스템 및 방법들에 관한 것이다.
웹 어플리케이션(예컨대, 주로 웹 브라우저를 통해 액세스되고 원격 서버로부터 데이터를 수신하는 어플리케이션들)이 증가적으로 대중화되고 있다. 웹 어플리케이션들은 이메일, 달력, 금융, 워드 프로세싱, 및 이미지 편집 어플리케이션들을 포함하는 여러 용도들을 위해 사용된다. 그러나, 웹 어플리케이션들의 광범위한 사용은 많은 문제들을 야기하였다. 예컨대, 요청이 네트워크를 통해 전송될 때 및 응답이 수신될 때는 네트워크 레이턴시로도 알려져 있는 지연이 존재한다. 이러한 네트워크 레이턴시는 웹 어플리케이션들의 반응성을 감소시키는데, 그 이유는 웹 어플리케이션이 유저에 의해 지시된 동작들을 수행하라는 요청들에 응답하기 이전에 원격 서버로부터의 데이터를 기다려야 하기 때문이다. 이러한 추가적인 대기 시간은 유저에게 불만을 일으킬 수 있다. 또한, 네트워크 접속이 이용가능하지 않을 때는, 웹 어플리케이션이 원격 서버로부터 데이터를 수신할 수 없고, 따라서 웹 어플리케이션의 기능이 제한된다. 마찬가지로, 네트워크 접속의 실패로 인해 어플리케이션을 사용할 수 없다는 것은 유저에게 불만을 일으킬 수 있다.
따라서, 여기서 설명된 방법 및 시스템은 웹 어플리케이션에 의해 사용하기 위한 데이터 아이템들을 저장하기 위한 로컬 데이터 구조들을 제공함으로써 위에서 설명된 문제들을 감소시키거나 제거한다. 설명되는 방 및 시스템을 사용함으로써, 네트워크 레이턴시의 부정적인 효과 및 유저가 경험하는 네트워크 접속의 실패가 감소된다. 일부 실시예들에 있어서는, 로컬 데이터베이스에 저장된 데이터 아이템들이 오프라인 모드에서 웹 어플리케이션에 의해 사용된다. 이러한 실시예들에 이어서, 웹 어플리케이션들은 네트워크 접속이 존재할 때 웹 어플리케이션에 의해 공통적으로 제공되는 기능들 중 적어도 일부(예컨대, 이메일 메시지들을 디스플레이하는 것)를 제공하기 위해서 국부적으로 저장된 데이터 아이템들을 사용한다. 일부 실시예들에 있어서, 로컬 데이터베이스에 저장된 이러한 데이터 아이템들은 그 데이터 아이템들에 대해 동작들(예컨대, 디스플레이 동작들)을 수행하라는 유저 요청들에 대한 웹 어플리케이션의 반응성을 향상시키기 위해 온라인 모드에서 웹 어플리케이션에 의해 사용된다. 예컨대, 로컬 데이터베이스에서 캐시되는(cached) 이메일 메시지들의 경우, 그 캐시된 이메일 메시지들은 원격 서버로부터 요청에 대한 응답을 기다리지 않고도, 유저가 디스플레이하기 위해 그 캐시된 메시지들 중 하나를 선택할 때 즉시 디스플레이될 수 있다.
본 발명의 제 1 양상에 따르면, 컴퓨터 시스템은 컴퓨터 프로세서 및 컴퓨터 메모리를 구비하는 클라이언트 장치; 상기 클라이언트 장치 상에서 실행하도록 구성된 웹 브라우저; 상기 웹 브라우저 내에서 동작하도록 구성된 로컬 웹 어플리케이션; 상기 로컬 웹 어플리케이션 및 상기 로컬 웹 어플리케이션과 연관된 서버 시스템 간의 통신들을 관리하도록 구성된 웹 인터페이스; 상기 컴퓨터 메모리에 유지되는 기록 큐(write queue); 및 다수의 데이터 아이템들을 포함하고 있는, 상기 컴퓨터 메모리에 유지되는 지속적인 로컬 데이터베이스를 포함하는데, 상기 다수의 데이터 아이템들 각각은 각각의 개별적인 데이터 아이템이 상기 클라이언트 장치 상에서 및 상기 서버 시스템 상에서 고유하게 식별될 수 있게 하는 식별자와 연관된다. 상기 클라이언트 장치 상의 웹 어플리케이션이 데이터 아이템 상에서 동작을 수행할 필요가 있을 때, 상기 웹 어플리케이션은 데이터 아이템이 로컬 데이터베이스에 있는지를 결정하기 위해서 데이터베이스 요청을 발행한다. 만약 데이터 아이템이 로컬 데이터베이스에 있지 않다면, 웹 어플리케이션은 웹 인터페이스를 통해 상기 서버 시스템으로 데이터 요청을 발행한다. 만약 데이터 아이템이 로컬 데이터베이스에 있고 동작이 상기 데이터 아이템을 업데이팅하는 것을 수반한다면, 상기 웹 어플리케이션은 데이터베이스에 저장된 데이터 아이템에 대해 동작을 수행하고, 상기 데이터 아이템의 식별자와 함께 기록 큐에 대한 동작을 특징짓는 정보를 기록한다. 클라이언트 장치 및 서버 시스템 간에 네트워크 접속이 존재할 때, 웹 인터페이스는 서버 시스템으로 기록 큐를 드레인(drain)하고, 그 서버 시스템은 클라이언트 동작들에 의해 변경되어진 자신의 데이터베이스 내의 엔트리들을 업데이팅하기 위해서 이러한 정보를 사용할 수 있다. 본 발명의 실시예는 LRU(least recently used) 캐시 대체 정책을 또한 구현하는데, 그 정책에서는 최근에 가장 적게 사용된 엔트리를 삭제함으로써 로컬 데이터베이스 내에 새로운 엔트리를 위한 공간을 비워둔다.
일부 실시예들에 있어서, 이러한 소프트웨어 캐싱은 하드웨어 캐싱과 유사하다. 하드웨어 캐싱 전략들을 소프트웨어 캐싱 전략들과 유사하게 함으로써, 소프트웨어 캐싱을 사용하는 웹 어플리케이션들의 성능은 하드웨어 캐싱의 성능을 향상시키기 위해 사용되는 것들과 유사한 기술들을 사용하여 향상될 수 있다. 이러한 캐싱 기술들은 종종 널리 공지되어 있으며 충분히 테스팅된다. 예컨대, 캐시 액세스의 속도는 프로세서(CPU) 및 더 크지만 더 느린 L2 캐시 사이에 고속 L1 캐시를 삽입함으로써 향상될 수 있다. 마찬가지로, 웹 어플리케이션을 위한 데이터 아이템으로 액세스 속도는 웹 어플리케이션 및 지속적인 데이터베이스 사이에 인-메모리 데이터베이스(in-memory database)를 삽입함으로써 향상될 수 있다. 다른 실시예들은 웹 브라우저의 다큐먼트 오브젝트 모델(document object model)을 L1 캐시로서 사용할 수 있다. 하드웨어에서 발견되는 여러 종류들의 캐시들에 의해 제안될 때, 다큐먼트 오브젝트 모델을 L1 캐시로서 사용하는 소프트웨어는 라이트-백(wrtie-back) 또는 라이트-스루(write-through)될 수 있다. L1 캐시로서 다큐먼트 오브젝트 모델 프래그먼트들의 라이트-백 캐시는 만약 일부 웹 어플리케이션이 다큐먼트 오브젝트 모델을 직접 변경함으로써 일부 유저 액션들을 구현하였다면 적합할 것이다. 하드웨어 캐싱과의 이러한 유사성에 의해 제안되는 실시예들의 다른 특징들은 데이터 아이템들 및 로드 포워딩을 프리페칭(prefeching)하는 것이다.
도 1은 일부 실시예들에 따른 클라이언트-서버 분산 시스템(client-server distributed system)의 인프라스트럭처(infrastructure)를 예시한 블록도;
도 2는 일부 실시예들에 따른 예시적인 클라이언트 장치의 구조를 예시한 블록도;
도 3은 일부 실시예들에 따른 예시적인 클라이언트 시스템의 구조를 예시한 블록도;
도 4는 일부 실시예들에 따른 클라이언트-서버 분산 시스템의 구성요소들 간의 상호관계(interrelation)를 예시한 블록도;
도 5a 내지 도 5c는 일부 실시예들에 따라 클라이언트-서버 분산 시스템에서 멀티-스레드 소프트웨어 어플리케이션의 스타트업 프로세스를 예시한 블록도;
도 6a는 일부 실시예들에 따른 웹 어플리케이션과 연관된 서버 시스템에 있어서의 데이터 구조들을 예시한 블록도;
도 6b는 일부 실시예들에 따른 지속적인(persistent) 웹 어플리케이션과 연관된 클라이언트 장치에 있어서의 데이터 구조들을 예시한 블록도;
도 7a 내지 도 7b는 일부 실시예들에 따른 클라이언트 장치 및 서버 시스템 상에서 지속적인 웹 어플리케이션 간의 데이터 전송을 위한 프로세스에 있어서 클라이언트 및 서버 규칙들을 예시한 흐름도를 도시한 도면; 및
도 8a 내지 도 8d는 일부 실시예들에 따른 체크섬 교환(checksum exchange)을 이용하여 데이터베이스들 간의 데이터 동기화를 위한 프로세스에 있어서 클라이언트 및 서버 규칙들을 예시한 흐름도를 도시한 도면이다.
동일한 도면 번호들은 도면들 전반에 걸쳐 대응하는 부분들을 나타낸다.
도 1은 일부 실시예들에 따른 클라이언트-서버 분산 시스템의 인프라스트럭처를 예시한 블록도이다. 상기 분산 시스템은 복수의 클라이언트 장치(102)들과 복수의 서버 시스템(106)들을 포함한다. 이들 구성요소들은 하나 이상의 통신 네트워크(104)들(예컨대, 인터넷, 기타 WAN, LAN 등)을 통해 함께 링크되어, 각종 구성요소들이 서로 통신할 수 있도록 한다. 일부 실시예들에 있어서, 각각의 서버 시스템(106)들은 단일 서버이다. 다른 실시예들에 있어서는, 서버 시스템(106)이 웹 인터페이스(프론트 엔드 서버(front end server))와 같은 복수의 서버들(108), 하나 이상의 서버 어플리케이션들(110)(이는 하나 이상의 서버들 상에서 구현될 수도 있음) 및 공통 인터페이스(예컨대, 하나 이상의 서버 시스템들, 프론트 엔드 서버들이라고도 함)를 통해 상기 클라이언트 장치들(102)과 정보를 교환하고 LAN(local area network)을 통해 서로 접속되는 하나 이상의 중앙 데이터베이스들(120)을 포함한다. 복수의 서버 시스템들(106)을 구비한 실시예들에 있어서, 상기 서버 시스템들(106)은 LAN 또는 기타 통신 네트워크를 통해 서로 접속될 수도 있다.
클라이언트 장치(102)는 웹 브라우저(112)와 같은 클라이언트 어플리케이션을 포함한다. 유저는 상기 서버 시스템들(106)로부터 하나 이상의 웹 어플리케이션들(114)을 액세스하기 위해 웹 브라우저(112)를 사용할 수 있다. 웹 브라우저(112) 및 상기 웹 브라우저(112) 내의 웹 어플리케이션(114)은 상기 클라이언트(102) 상에서 로컬 데이터베이스(116)에 저장된 데이터 아이템들에 대한 액세스를 구비한다. 일부 실시예들에 있어서, 웹 어플리케이션(114)을 액세스하는 것은 서버 시스템(106)으로부터 프로그램을 다운로딩하는 것과 상기 웹 어플리케이션(114)에 의해 사용하기 위한 로컬 데이터베이스(116)에 데이터를 저장하는 것을 포함한다. 상기 클라이언트 장치(102)(때때로 "클라이언트 장치" 또는 "클라이언트 컴퓨터"라고도 함)는 상기 서버 시스템(106)으로부터 데이터를 수신하거나 상기 서버 시스템(106)으로 요청들(예컨대, 웹 어플리케이션 데이터 요청들, 서치 쿼리(search query)들, 정보 요청들, 로그인 요청들 등)을 전송할 수 있는 여하한의 컴퓨터 또는 유사 장치일 수도 있다. 클라이언트 장치들의 예로는, 데스크탑 컴퓨터들, 노트북 컴퓨터들, 태블릿 컴퓨터들, 이동전화 및 PDA와 같은 이동기기들 및 셋톱 박스들을 들 수 있는데, 이것으로 제한되는 것은 아니다. 본 어플리케이션에 있어서, "웹 어플리케이션"이란 용어는 사실상 서버 시스템(106)으로부터 수신되는 컨텐트에 대한 액세스를 유저에게 제공하는 인터랙티브 어플리케이션(interactive application)을 의미한다. 클라이언트 장치(102)로부터의 요청들은, 통신 인터페이스(118) 또는 기타 유사한 네트워크 통신 프로토콜들을 통해 http 요청들을 이용하는 HTTP 프로토콜을 이용하여 각각의 서버 시스템(106)에 운반된다.
서버 시스템(106)은 웹 인터페이스(프론트 엔드 서버)(108), 서버 어플리케이션(110) 및 중앙 데이터베이스(120) 중 적어도 하나를 포함한다. 상기 웹 인터페이스(108)는 상기 클라이언트 장치들(102)로부터 요청들을 파싱(parse)하고, 상기 서버 어플리케이션(110)에 의해 제공되는 대응하는 웹 어플리케이션들을 페칭(fetch)하고, 상기 웹 어플리케이션들을 상기 요청하는 클라이언트 장치(들)(102)로 리턴시킨다. 상기 클라이언트-서버 시스템의 토폴로지에 있어서 그 각각의 위치들에 따라, 상기 웹 인터페이스는 세퍼레이트(separate)("프론트 엔드 서버")(108) 상에 구현되고, 상기 서버 어플리케이션은 세퍼레이트("백 엔드 서버("back end server")(110) 상에 구현된다. 본 어플리케이션에 있어서, 상기 "웹 인터페이스" 및 "프론트 엔드 서버"란 용어들은 상호치환가능하게 사용된다. 일부 기타 실시예들에 있어서, 상기 프론트 엔드 서버(108) 및 백 엔드 서버(110)는 하나의 소프트웨어 어플리케이션 또는 하나의 서버 시스템(106)으로 머징(merge)된다.
일부 실시예들에 있어서, 상기 서버 시스템들(106)은, 이메일 서비스들, 서치 엔진 서비스들, 맵 서비스들, 소셜 네트워킹 서비스들 등과 같은 상이한 타입의 서비스들을 제공하기 위하여 (도 1의 N 어플리케이션 서버들과 N 중앙 데이터베이스들로 표현된) 다수의 컴퓨터들 상에 배치된다. 일부 기타 실시예들에 있어서, 하나의 개별적인 타입의 서비스 또한 다수의 서버들 가운데 분산될 수도 있다. 예를 들어, 서버 어플리케이션(110-1)이 웹-기반 이메일 서비스(예컨대, Gmail 이메일 어플리케이션)인 시스템을 고려해보자. 이메일 메시지들, 대화들(예컨대, 이메일 메시지들의 리스트들), 스레드 리스트들(예컨대, 대화들의 리스트들) 및 계정 정보(예컨대, 유저 프로파일들, 유저 선호도들, 및 계정 이력)와 같은 데이터 아이템들은, 상기 서버 어플리케이션(110)에 대하여 액세스가능한 하나 이상의 중앙 데이터베이스(들)(120)에 저장될 수도 있다. 서버 어플리케이션들(110)은 하나 이상의 중앙 데이터베이스들(120)에 접속될 수도 있다. 일부 실시예들에 있어서, 단 하나의 서버 어플리케이션(110)은 (중앙 데이터베이스에 저장된 정보가 단일 서버 어플리케이션들에 의해서만 요구되는 경우와 같은) 단 하나의 중앙 데이터베이스(120)에 대한 액세스를 가질 수도 있는 한편, 다른 실시예들에 있어서, 다수의 서버 어플리케이션들(110)은 (소량의 정보가 다수의 서버 어플리케이션들(110)에 의해 사용되고 상기 정보가 빈번하게 업데이트되는 경우와 같은) 단일 중앙 데이터베이스(120)에 대한 액세스를 가지며, 기타 실시예들에 있어서는, 다수의 서버 어플리케이션들(110)이 (대량의 데이터가 다수의 서버 어플리케이션들(110)에 의해 저장 및 요구되는 경우와 같은) 다수의 중앙 데이터베이스들(120)에 접속될 수도 있다.
이하, 본 발명의 일 실시예에 따른 컴퓨터 시스템(예컨대, 클라이언트 장치(102))을 예시한 블록도인 도 2에 주목해보자. 상기 클라이언트 장치(102)는 통상적으로 하나 이상의 처리유닛들(CPUs)(202), 하나 이상의 네트워크 또는 기타 통신 인터페이스들(204), 메모리(212), 및 이들 구성요소들을 상호접속하기 위한 하나 이상의 통신 버스들(214)을 포함한다. 상기 클라이언트 장치(102)는 표시장치(206) 및 키보드/마우스(208)(또는, 일부 실시예들에 있어서는 터치-감응면(209))를 포함하여 이루어지는 유저 인터페이스(205)를 선택적으로 포함할 수도 있다. 메모리(212)는 DRAM, SRAM, DDR RAM 또는 기타 랜덤 액세스 솔리드 상태 메모리 장치들과 같은 고속 랜덤 액세스 메모리를 포함하고; 하나 이상의 자기 디스크 저장장치들, 광학 디스크 저장장치들, 플래시 메모리 장치들, 또는 기타 비휘발성 솔리드 상태 저장장치들과 같은 비휘발성 메모리를 포함할 수도 있다. 메모리(212)는 상기 CPU(들)(202)로부터 원격으로 위치한 하나 이상의 저장장치들을 선택적으로 포함할 수도 있다. 메모리(212), 또는 대안적으로는 메모리(212) 내의 비휘발성 메모리 장치(들)은 컴퓨터로 판독가능한 기록매체를 포함하여 이루어진다. 일부 실시예들에 있어서, 메모리(212) 또는 메모리(212)의 컴퓨터로 판독가능한 기록매체는 하기 프로그램들, 모듈들 및 데이터 구조들, 또는 그 서브셋:
● 각종 기본 시스템 서비스들을 취급하기 위한 그리고 하드웨어 의존 태스크들을 수행하기 위한 프로시저들을 포함하는 오퍼레이팅 시스템(216);
● 인터넷, 기타 WAN, LAN, MAN 등과 같은 하나 이상의 통신 네트워크들 및 하나 이상의 통신 인터페이스들(204)(유선 또는 무선)을 통해 기타 컴퓨터들에 클라이언트 장치(102)를 접속하기 위하여 사용되는 통신 모듈(218);
● 웹 어플리케이션(114)에 대한 유저 요청을 수신하고, 상기 표시장치(206) 또는 유저 인터페이스 모듈(228)을 이용하는 기타 유저 인터페이스 장치 상에서 상기 요청된 웹 어플리케이션(114)을 렌더링(rendering)하며, 로컬 데이터베이스(116)에 데이터 아이템들을 저장하기 위한 웹 브라우저(112); 일부 실시예들에 있어서, 웹 어플리케이션(114), 로컬 데이터베이스(116) 및 유저 인터페이스 모듈은 상기 웹 브라우저 내에서 실행함.
○ 상기 하나 이상의 웹 어플리케이션들(114)은 상기 웹 어플리케이션(114) 내에서 오퍼레이션들을 코디네이션(coordinating)하기 위한 웹 어플리케이션 매니저(219), 상기 웹 어플리케이션 매니저(219)로부터 오퍼레이션들을 큐잉(queuing)하기 위한 기록 큐(write queue)(220), 로컬 데이터베이스(116)에 기록하기 위한 액션 디스패처(action dispatcher; 222) 및 (선택적으로는) 데이터 아이템들 상에서 체크섬들을 계산하기 위한 체크섬 계산부(224)를 포함할 수도 있음;
○ 상기 로컬 데이터베이스(116)는 각종 서버 시스템들(106)로부터 상기 웹 어플리케이션(114)에서 수신된 데이터 아이템들(예컨대, 226-1. 226-2)을 저장함;
○ 상기 유저 인터페이스 모듈(228)은 상기 유저 인터페이스를 렌더링하기 위한 뷰 모듈(view module; 230) 및 유저 인터랙션 이벤트들을 검출하여 유저 인터랙션 이벤트들을 따라 다른 모듈들로 패싱(passing)하기 위한 컨트롤러 모듈(232)을 포함함; 및
● 상기 로컬 데이터베이스(116)에 데이터 아이템들을 저장하고 상기 웹 어플리케이션(114)에 정보를 통신하여 서버 시스템으로부터 통신들에 응답하기 위한 응답 핸들러 모듈(response handler module; 234)을 저장한다.
도 2는 "클라이언트 장치(102)"를 도시하고 있지만, 도 2를 참조하여 기재된 클라이언트 장치는 본 명세서에 기재된 실시예들의 구조적인 스키매틱(structural schematic)으로서 보다는 클라이언트 장치(102)에 존재할 수도 있는 각종 특징들의 기능적인 설명으로서 더욱 의도되어 있다. 실제적으로는, 그리고 당업계가 인식하는 바와 같이, 별도로 도시된 아이템들이 조합될 수도 있고, 일부 아이템들은 분리될 수도 있다. 예를 들어, 상기 클라이언트 어플리케이션(예컨대, 웹 브라우저(112))은 일부 실시예들에 있어서 상기 오퍼레이팅 시스템(216)과 통합될 수도 있다. 일부 실시예들에 있어서, 클라이언트 어플리케이션(예컨대, 웹 브라우저(112))의 각종 기능들은 2이상의 별도의 어플리케이션들에 의해 수행될 수도 있다. 일부 실시예들에 있어서, 상기 웹 브라우저(112)의 일부로 도시된 로컬 데이터베이스(116)는 상기 클라이언트 장치 상에서 복수의 클라이언트 어플리케이션들에 대하여 액세스가능한 로컬 데이터베이스일 수도 있다.
상기 식별된 요소들 각각은 하나 이상의 앞서 언급된 메모리 장치들에 저장될 수도 있고, 상술된 기능을 수행하기 위한 한 세트의 명령들에 대응한다. 상기 식별된 모듈들 또는 프로그램들(즉, 명령 세트들)은 별도의 소프트웨어 프로그램들, 프로시저들 또는 모듈들로서 구현될 필요가 없고, 따라서 이들 모듈들의 각종 서브셋들이 조합될 수도 있거나 그렇지 않으면 각종 실시예들에 있어서 재배치될 수도 있다. 일부 실시예들에 있어서, 메모리(212)는 상기 식별된 데이터 구조들 및 모듈들의 서브셋을 저장할 수도 있다. 나아가, 메모리(212)는 상술되지 않은 추가적인 모듈들 및 데이터 구조들을 저장할 수도 있다.
이하, 본 발명의 일 실시예에 따른 서버 시스템(106)을 예시한 블록도인 도 3에 주목해보자. 상기 서버 시스템(106)은 통상적으로 하나 이상의 처리유닛들(CPUs)(302), 하나 이상의 네트워크 또는 기타 통신 인터페이스들(304), 메모리(312), 및 이들 구성요소들을 상호접속하기 위한 하나 이상의 통신 버스들(314)을 포함한다. 메모리(312)는 DRAM, SRAM, DDR RAM 또는 기타 랜덤 액세스 솔리드 상태 메모리 장치들과 같은 고속 랜덤 액세스 메모리를 포함하고; 하나 이상의 자기 디스크 저장장치들, 광학 디스크 저장장치들, 플래시 메모리 장치들, 또는 기타 비휘발성 솔리드 상태 저장장치들과 같은 비휘발성 메모리를 포함할 수도 있다. 메모리(312)는 상기 CPU(들)(302)로부터 원격으로 위치한 하나 이상의 저장장치들을 선택적으로 포함할 수도 있다. 메모리(312), 또는 대안적으로는 메모리(312) 내의 비휘발성 메모리 장치(들)은 컴퓨터로 판독가능한 기록매체를 포함하여 이루어진다. 일부 실시예들에 있어서, 메모리(312) 또는 메모리(312)의 컴퓨터로 판독가능한 기록매체는 하기 프로그램들, 모듈들 및 데이터 구조들, 또는 그 서브셋:
● 각종 기본 시스템 서비스들을 취급하기 위한 그리고 하드웨어 의존 태스크들을 수행하기 위한 프로시저들을 포함하는 오퍼레이팅 시스템(316);
● 인터넷, 기타 WAN, LAN, MAN 등과 같은 하나 이상의 통신 네트워크들 및 하나 이상의 통신 인터페이스들(304)(유선 또는 무선)을 통해 기타 컴퓨터들에 서버 시스템(106)을 접속하기 위하여 사용되는 통신 모듈(318);
● 상기 서버 시스템(106)과 클라이언트 장치들(102) 간의 통신들을 패싱하는 응답 핸들러 모듈(320), 상기 응답 핸들러 모듈은 별도의 프론트 엔드 서버(도 1의 108)와 연계하여 또는 그 대신에 사용될 수도 있음;
● 상기 클라이언트 장치(102)로부터 수신되는 요청들에 대한 응답들을 준비하는 서버 어플리케이션(110), 일부 실시예들에 있어서는 상기 서버 어플리케이션(110)이 상기 웹 어플리케이션(114)을 상기 클라이언트 장치(102)에 전송함;
● 상기 서버 어플리케이션(110) 및/또는 상기 웹 어플리케이션(114)과 연관된 데이터 아이템들(예컨대, 226-1, 226-2)을 저장하기 위한 중앙 데이터베이스(120);
● 데이터 아이템 상에서 체크섬을 계산하기 위한 체크섬 계산부(선택적)(328); 및
● 상기 서버 시스템(106)에 의해 계산된 체크섬과 웹 어플리케이션으로부터 수신된 체크섬을 비교하기 위한 체크섬 비교부(선택적)(330)를 저장한다.
도 3은 단 하나의 서버 시스템(106)을 도시하고 있지만, 도 3을 참조하여 기재된 서버는 본 명세서에 기재된 실시예들의 구조적인 스키매틱으로서 보다는 서버 시스템에 존재할 수도 있는 각종 특징들의 기능적인 설명으로서 더욱 의도되어 있다. 실제적으로는, 그리고 당업계가 인식하는 바와 같이, 별도로 도시된 아이템들이 조합될 수도 있고, 일부 아이템들은 분리될 수도 있다. 예를 들어, 도 3에 별도로 도시된 일부 아이템들은 단일 서버 상에 구현될 수도 있고, 단일 아이템들은 하나 이상의 서버들에 의해 구현될 수도 있다. 서버 시스템(106)(도 1)을 구현하는데 사용되는 서버들의 실제 수와 타입들 및 어떤 특징들이 그들 가운데 할당되는 지가 하나의 구현으로부터 다른 것으로 변경될 것이고, 평균 사용 주기들 동안 뿐만 아니라 피크 사용 주기들 동안 상기 시스템이 취급하여야만 하는 데이터 트래픽량에 있어서 일부분 의존할 수도 있다.
상기 식별된 요소들 각각은 하나 이상의 앞서 언급된 메모리 장치들에 저장될 수도 있고, 상술된 기능을 수행하기 위한 한 세트의 명령들에 대응한다. 상기 식별된 모듈들 또는 프로그램들(즉, 명령 세트들)은 별도의 소프트웨어 프로그램들, 프로시저들 또는 모듈들로서 구현될 필요가 없고, 따라서 이들 모듈들의 각종 서브셋들이 조합될 수도 있거나 그렇지 않으면 각종 실시예들에 있어서 재배치될 수도 있다. 일부 실시예들에 있어서, 메모리(312)는 상기 식별된 데이터 구조들 및 모듈들의 서브셋을 저장할 수도 있다. 나아가, 메모리(312)는 상술되지 않은 추가적인 모듈들 및 데이터 구조들을 저장할 수도 있다.
이하, 일부 실시예들에 따른 클라이언트-서버 분산 시스템의 구성요소들 간의 상호관계를 예시한 도 4에 주목해보자. 도 4에 도시된 바와 같이, 상기 유저 인터페이스 모듈(228)은 유저 인터페이스(예컨대, 도 2의 디스플레이(206) 상에서)를 렌더링하기 위한 뷰 모듈(230), 및 유저 인터랙션 이벤트들(예컨대, 도 2의 키보드/마우스(208) 또는 터치감응면(209)으로부터의 마우스 클릭들 또는 키보드 입력들)을 검출하기 위한 그리고 상기 유저 인터랙션 이벤트들을 상기 웹 어플리케이션 매니저(219)에 패싱하기 위한 컨트롤러 모듈(232)을 포함한다. 일부 실시예들에 있어서, 상기 컨트롤러 모듈(232)은, 클릭들, 터치들 및 기타 유저 입력을 취급하는 한 세트의 이벤트 핸들러들(402)(예컨대, 클릭/터치 이벤트 핸들러들)로서 구현된다. 일부 실시예들에 있어서, 초기에는 모든 이벤트 핸들러들이 액티비티(activity)를 표시하고, 상기 웹 어플리케이션 매니저(219)(예컨대, 일부 실시예들에 있어서, 자바스크립트(JavaScript) 인-메모리 모듈)에 요청을 전송하는데, 이는 모델 이벤트를 상기 뷰 모듈(230)에 다시 전송한다. 상기 뷰 모듈(230)에 있어서, 모델 이벤트 핸들러(406)는 상기 이벤트를 유저 인터페이스 렌더러(renderer; 408)(예컨대, HTML 렌더러) 및 다큐먼트 오브젝트 모델(document object model; 410) 또는 다큐먼트들을 조작(manipulating)하기 위한 기타 어플리케이션 프로그래머 인터페이스에 패싱 오프한다. 상기 유저 인터페이스 렌더러(408)는 렌더링된 유저 인터페이스 요소들을 상기 다큐먼트 오브젝트 모델(410)에 전송하는데, 이는 신규 모델을 구성하고, 상기 모델(예컨대, 유저에)을 표시하며, 상기 신규 모델을 상기 컨트롤러 모듈(232)에 패싱 오프시켜, 상기 이벤트 핸들러들(402)에 의해 검출된 추가적인 이벤트들을 기다리게 된다.
일부 실시예들에 있어서, 상기 웹 어플리케이션 매니저(219)가 상기 로컬 데이터베이스(116)에서 하나 이상의 데이터 아이템들 상에서 수행될 오퍼레이션을 나타내는 상기 이벤트 핸들러(402)로부터 이벤트를 검출하도록 구성되는 경우, 상기 웹 어플리케이션 매니저(219)는 상기 오퍼레이션을 상기 기록 큐(220)에 전송한다. 일부 실시예들에 있어서, 오퍼레이션들(412-1, 412-2, 412-3, 412-4, 412-5, 412-6)은, 그들이 상기 기록 큐(220)에 도달한 순서로 상기 기록 큐(220)에 저장된다(즉, 이들 실시예들에 있어서, 상기 기록 큐는 상기 웹 어플리케이션 매니저(219)로부터의 요청들의 연대순 레코드(chronological record)임). 상기 웹 어플리케이션 매니저는 상기 유저 인터페이스 모듈(228) 안으로 콜백(callback)들의 리스트, 상기 기록 큐에서의 각각의 오퍼레이션(예컨대, "Operation 1" 412-1)에 대한 것, 상기 콜백이 호출되었는 지의 여부를 나타내는 플래그, 및 상기 오퍼레이션을 충족시키기 위한 실패된 시도(failed attempt)들에 대한 카운터를 유지한다. 일부 실시예들에 있어서, 상기 액션 디스패처(222)는 상기 기록 큐(220)로부터 상기 로컬 데이터베이스(116)에, 그리고 상기 통신 모듈(218)에 오퍼레이션들(예컨대, "Operation 1" 412-1)을 전송하도록 구성된다.
일부 실시예들에 있어서, 상기 액션 디스패처(222)는 체크섬 계산부에 오퍼레이션들을 전송하도록 구성된다. 상기 체크섬 계산부는 상기 로컬 데이터베이스(116)에 저장된 하나 이상의 데이터 아이템들의 체크섬을 계산한다. 일부 실시예들에 있어서, 상기 체크섬은 상기 데이터 아이템과 함께 상기 로컬 데이터베이스(116)에 저장된다. 상기 로컬 데이터베이스(116)에 저장된 데이터 아이템에 대한 앞선 체크섬이 있었던 경우에는, 상기 계산된 체크섬이 상기 저장된 체크섬을 교체한다. 일부 실시예들에 있어서는, 체크섬들이 전체 데이터 아이템을 이용하여 계산된다. 체크섬은 당업계에 공지된 여하한의 표준 메커니즘들에서 계산될 수 있다(예컨대, MD5 체크섬 알고리즘(IETF RFC 1321) 또는 SHA-1(FIPS PUB 180-1) 알고리즘). 일부 실시예들에 있어서는, 도 8a 내지 도 8d를 참조하여 하기 보다 상세히 논의된 바와 같이, 데이터 아이템에 대한 체크섬들이 상기 데이터 아이템이 업데이트되었는 지의 여부를 판정하는데 사용된다.
일부 실시예들에 있어서, 상기 통신 모듈(218)은 상기 서버 시스템에서 상기 액션 디스패처(222)로부터 수신되는 오퍼레이션들(예컨대, "Operation 1" 412-1)을 상기 응답 핸들러 모듈(320)에 송신하도록 구성된다. 일부 실시예들에 있어서, 상기 응답 핸들러 모듈(320)은 상기 오퍼레이션을 상기 서버 어플리케이션(110)에 패싱 오프(pass off)하도록 구성된다. 상기 서버 어플리케이션(110)은, 일부 실시예들에 있어서, (예컨대, 상기 요청에 포함된 데이터 아이템과 연관된 유니크 식별자(unique identifier)를 이용하여) 상기 오퍼레이션을 수행하기 위한 요청을 수신하는 것에 응답하여 중앙 데이터베이스(120)로부터 하나 이상의 데이터 아이템들을 검색하도록 구성된다. 일부 실시예들에 있어서, 상기 서버 어플리케이션(110)은 상기 오퍼레이션의 결과들(예컨대, 데이터 아이템 및/또는 데이터 아이템의 체크섬)을 상기 응답 핸들러(320)에 대하여 리턴하도록 구성되는데, 이는 상기 결과들을 상기 클라이언트 장치(102)에 송신하도록 구성된다. 일부 실시예들에 있어서, 상기 로컬 데이터베이스(116)가 상기 중앙 데이터베이스(120)와 동기화되지 않는(즉, 일관성이 없는(not coherent)) 경우, 상기 응답은 상기 로컬 데이터베이스(116)를 다시 상기 중앙 데이터베이스(116)와 일관성 있게 하도록 필요한 데이터 아이템의 구성요소 또는 교체 데이터 아이템을 포함한다. 일부 실시예들에 있어서, 상기 로컬 데이터베이스(116)가 상기 중앙 데이터베이스(120)와 동기화되는(즉, 일관성이 있는) 경우, 상기 응답은 상기 로컬 데이터베이스(116) 내의 데이터 아이템들이 최신식이라는 것을 나타낸다(예컨대, 상기 응답은 여하한의 데이터 아이템들 또는 데이터 아이템들의 구성요소들을 포함하지 않는다).
일부 실시예들에 있어서, 상기 클라이언트 장치(102) 상의 통신 모듈(218)은 상기 클라이언트 장치 상에서 응답 핸들러 모듈(234)에 대하여 상기 서버 어플리케이션(110)으로부터의 결과들을 패싱 오프한다. 일부 실시예들에 있어서, 상기 오퍼레이션의 결과들은 상기 로컬 데이터베이스(116)에 저장되고 및/또는 상기 웹 어플리케이션 매니저(219)로 리턴된다. 일부 실시예들에 있어서, 상기 오퍼레이션은 디스플레이 오퍼레이션이고, 상기 데이터 아이템이 상기 유저에 표시된다.
예를 들어, 유저가 이동장치 상에 이메일 어플리케이션을 뷰잉하고, 상기 이메일의 헤더를 선택하여 상기 이메일을 뷰잉하는 시나리오를 고려해보자. 상기 예시에서는, 이동장치 상에서의 이메일 메시지를 뷰잉하기 위한 요청이 상기 웹 어플리케이션 매니저(219)에 의해 상기 기록 큐(220)에 전송된다. 상기 액션 디스패처(222)가 상기 로컬 데이터베이스(116)에서 이메일을 발견하는 경우, 상기 이메일은 상기 유저에 표시하기 위한 웹 어플리케이션 매니저(219)에 전송된다. 상기 액션 디스패처(222)가 상기 로컬 데이터베이스(116)에서 이메일을 발견하지 않는 경우, 상기 메시지에 대한 요청은 상기 클라이언트 장치(102)로 리턴된 상기 중앙 데이터베이스(120)로부터 이메일 및 이메일 데이터베이스(120)와 함께 서버 시스템(106)으로 전송된다. 상기 실시예에 있어서, 상기 이메일 메시지는 상기 응답 핸들러(234)로 리턴되는데, 이는 상기 로컬 데이터베이스(116)에 상기 이메일을 저장하고, 그것을 상기 유저에 표시하기 위한 웹 어플리케이션 매니저(219)에 패싱 오프시킨다.
이하, 일부 실시예들에 따른 클라이언트-서버 분산 시스템에 있어서 멀티-스레드 소프트웨어 어플리케이션의 스타트업 프로세스를 예시한 도 5a 내지 도 5c를 주목해보자.
상기 클라이언트(102)에서 스타트업 비용을 저감하기 위해서는, 상기 멀티-스레드 소프트웨어 어플리케이션은 상기 프로세스를 도 5a 내지 도 5c에 도시된 바와 같이 다수의 스테이지들로 각각 분할한다. 상기 초기화 스테이지(510)에서, 상기 소프트웨어 어플리케이션은 우선 메인 스레드(502) 상에서 메인 어플리케이션을 론칭(launch)한다. 일부 실시예들에 있어서, 상기 소프트웨어 어플리케이션은 이동전화와 같은 휴대장치 상의 웹-기반 이메일 서비스이다. 상기 메인 스레드 상의 메인 어플리케이션은 상기 서비스의 유저 인터페이스와 함께 유저 인터랙션들을 취급하는 것을 담당한다. 일부 실시예들에 있어서, 상기 메인 어플리케이션은 싱글-스레딩된다(single-threaded). 일부 기타 실시예들에 있어서, 상기 메인 어플리케이션은 멀티-스레딩된다.
도 5a에 도시된 바와 같이, 상기 초기화 후, 상기 어플리케이션 스레드(502)와 로컬 데이터베이스(116) 간의 동기 접속(506)이 있다. 상기 로컬 데이터베이스(116)는 상기 이메일 서비스와 연관된 소정량의 데이터를 캐싱(caches)한다. 상기 로컬 데이터베이스의 보다 상세한 설명은 도 6b와 연계하여 하기에 제공된다. 상기 동기 접속(506)을 통하여, 상기 메인 스레드(502)에서의 메인 어플리케이션은 상기 로컬 데이터베이스(116)로부터의 데이터 레코드들을 검색하고 상기 로컬 데이터베이스(116)에서 데이터 레코드들을 업데이트하는 것과 같은 동기적 방식으로 상기 로컬 데이터베이스(116) 상에서 오퍼레이션들을 수행할 수 있다.
또한, 원격 서버 시스템(106)에서는 상기 메인 스레드(502)와 상기 서버 어플리케이션(322) 간의 비동기 접속(514)도 있다. 웹-기반 소프트웨어 어플리케이션의 일부로서, 상기 클라이언트(102)에서 상기 메인 어플리케이션에 의해 렌더링되는 이메일 메시지들 모두는 궁극적으로 상기 서버 어플리케이션(322)으로부터 나오는데, 이는 상기 서버측에 있는 중앙 데이터베이스(120)에서 이메일 메시지들을 관리한다. 상기 중앙 데이터베이스(120) 및 서버 어플리케이션(322)의 보다 상세한 설명은 도 6a 및 도 7a 내지 도 7b와 연계하여 하기 제공된다. 하기 설명되는 바와 같이, 상기 메인 어플리케이션은 상기 데이터가 상기 로컬 데이터베이스(116)에 존재하지 않는 경우에 상기 중앙 데이터베이스(120)로부터 데이터를 검색하도록 비동기 접속(514)을 사용한다.
일부 실시예들에 있어서, 상기 메인 스레드(502)에서의 메인 어플리케이션의 초기화는 상기 클라이언트(102)에서 유저 인터페이스를 표시하고, 소정량의 데이터를 상기 로컬 데이터베이스(116)로부터 검색하며, 상기 검색된 데이터를 상기 유저 인터페이스에 채우는(populating) 것을 포함한다. 예를 들어, 웹-기반 이메일 서비스의 초기화 동안, 상기 메인 스레드(502) 상에서의 메인 어플리케이션은 상기 로컬 데이터베이스(116)로부터 유저의 이메일 계정의 인박스(inbox) 폴더와 연관된 이메일 메시지들을 검색하도록 동기 접속(506)을 사용하는데, 그 이유는 상기 이메일 서비스의 평균 유저가 상기 유저에 관한 인박스 폴더에서 읽지 않은 메시지들을 먼저 뷰잉하는 것에 가장 흥미가 있다고 전제되기 때문이다. 상기 로컬 데이터베이스(116)로부터 상기 동기 접속(506)을 통하여 메시지들을 검색한 후, 상기 메인 어플리케이션은 상기 검색된 메시지들을 이용하여, 상기 이메일 서비스와 연관된 유저 인터페이스를 채움으로써, 상기 클라이언트(102)의 유저가 상기 인박스 폴더 내의 적어도 메시지들과 인터랙션하도록 하게 된다. 도 5a에 도시된 바와 같이 메인 어플리케이션의 초기화는 전체 이메일 서비스의 스타트업을 끝내지 못할 수도 있지만, 상기 인박스 폴더에서 읽지 않은 메시지들을 가능한 한 신속하게 액세스할 수 있는 것이 상기 이메일 서비스와 함께 평균 유저의 경험을 현저하게 개선시킬 수 있다.
상기 인박스 폴더를 채우는는 것 이외에, 상기 이메일 서비스의 스타트업 프로세스는 상기 로컬 데이터베이스(116)로부터 다른 폴더들과 연관된 이메일 메시지들을 페칭하고 상기 중앙 데이터베이스(120)와 상기 로컬 데이터베이스(116)를 동기화하는 것과 같은 다른 태스크들을 포함할 수도 있다. 그 결과, 상기 전체 스타트업 프로세스의 완료는 상기 클라이언트(102)에서의 상이한 구성요소들 간의 그리고 상기 클라이언트(102)와 상기 서버(106) 간의 데이터 전송의 상당량을 수반할 수도 있다. 상기 메인 스레드(502)가 이들 태스크들을 취급하는 것을 또한 담당하는 경우에는, 상기 유저 인터페이스를 가져오고 적절한 형태로 유저 명령들을 수신할 준비를 하지 못할 수도 있다.
따라서, 일부 실시예들에 있어서는, 유저에게 이메일 서비스가 준비된 인상을 제공하는 초기화 스테이지(510)에 이어 제2스테이지(520)가 뒤따르는데, 즉, 보조 프로세스를 2차 스레드(504) 상에서 초기화하는 스테이지가 뒤따른다. 2차 스레드(504)의 개시를 연기시킴으로써, 전체 스타트업 프로세스를 담당하는 상기 메인 스레드(502)를 구비하여 야기되는 반응시간(latency)이 회피되거나 또는 적어도 현저하게 저감된다.
도 5b에 도시된 바와 같이, 상기 메인 스레드(502)는, 상기 메인 스레드(502)에서의 메인 어플리케이션이 예컨대 이메일 서비스의 인박스 폴더를 채우는 메인 스레드(502)와 로컬 데이터베이스(116) 간의 트랜잭션(transaction)을 결론지은 후에 상기 2차 스레드(504)를 스포닝(spawns)한다. 상기 2차 스레드(504)에서의 보조 프로세스는 상기 로컬 데이터베이스(116)와 통신하여 상기 웹-기반 이메일 서비스 어플리케이션을 개시하는 나머지 태스크들을 완료하기 위하여 상기 메인 스레드(502)에서의 메인 어플리케이션을 대체하도록 생성된다는 점에 유의한다. 또한, 상기 2차 스레드(504)와 로컬 데이터베이스(116) 간의 동기적 접속(512)도 있다. 이러한 접속(512)을 통하여, 상기 보조 프로세스는 상기 접속(506)을 통해 상기 메인 어플리케이션이 수행할 수 있는 상기 로컬 데이터베이스(116) 상에서의 동일한 오퍼레이션들을 수행할 수 있다. 일부 실시예들에 있어서, 상기 보조 프로세스는 상기 메인 어플리케이션에 의해 남겨진 웹-기반 어플리케이션을 초기화하는 나머지 태스크들을 완료하도록 구성된다. 일부 기타 실시예들에 있어서, 상기 메인 어플리케이션은 상기 웹-기반 어플리케이션을 초기화하는 것과 연관된 모든 태스크들을 완료한다. 따라서, 상기 보조 프로세스는 상기 메인 스레드(502)에 의해 플레잉된 상기 로컬 데이터베이스(116)와 인터랙션하는 규칙을 교체하는 것을 주로 담당한다.
도 5c에 도시된 바와 같이, 상기 메인 스레드(502)와 상기 2차 스레드(504) 간의 비동기적 접속(508)이 있다. 상기 동기적 접속(512)의 수립에 의하면, 상기 메인 어플리케이션은 더 이상 상기 초기화 스테이지(510) 동안에 행해진 바와 같이, 상기 동기적 접속(506)을 통해 직접 상기 로컬 데이터베이스(116) 상에서 오퍼레이션들을 수행할 필요가 없다. 오히려, 이제는 전체 어플리케이션이 스테디 오퍼레이션(steady operation)의 스테이지(530)로 트랜짓(transits)된다. 상기 스테디 오퍼레이션 시, 상기 메인 어플리케이션은 상기 비동기적 접속(508)을 통하여 상기 2차 스레드(504)에서 상기 보조 프로세스와 통신한다. 그 결과, 일부 실시예들에 있어서는, 상기 메인 스레드(502)와 상기 로컬 데이터베이스(116) 간의 동기적 접속(506)이 (도 5c의 점선으로 표시된 바와 같이) 종료되거나 파괴된다. 일부 기타 실시예들에 있어서는, 상기 동기적 접속(506)이 여전히 존재하지만 비활성화(deactivated)된다.
이하, 일부 실시예들에 따라 웹 어플리케이션과 연관된 서버 시스템에서의 데이터 구조들을 예시한 도 6a를 주목해보자. 일부 실시예들에 있어서, 상기 중앙 데이터베이스(120)는 서버 디렉토리(602)를 포함한다. 상기 서버 디렉토리(602)는 상기 데이터 아이템에 대한 레퍼런스(예컨대, "Reference 1"(608-1)) 및 데이터 아이템(예컨대, Data Item 1(226-1))의 상태(예컨대, "Status"(606-1))와 유니크 식별자(예컨대, "Unique ID"(604-1))를 연관시키는 룩업 테이블(lookup table)이다.
일부 실시예들에 있어서, 상기 유니크 식별자(예컨대, "Unique ID"(604-N))는 데이터 아이템 타입(609) 및 데이터 아이템 식별자(610)를 포함한다. 일부 실시예들에 있어서, 상기 데이터 아이템 타입(609)은 상기 유니크 식별자에 의해 참조된 데이터 아이템의 타입을 나타낸다. 예를 들어, 데이터 아이템이 대화(예컨대, 메시지들의 리스트)인 경우, 상기 데이터 아이템 타입(609)은 "대화" 또는 대응하는 알파뉴메릭 태그(alphanumeric tag)를 포함하고, 상기 데이터 아이템이 스레드 리스트(예컨대, 대화의 리스트)인 경우에는, 상기 데이터 아이템 타입(609)이 "스레드 리스트" 또는 대응하는 알파뉴메릭 태그를 포함한다. 대안적으로는, 데이터 아이템이 스레드 리스트(예컨대, 대화들의 리스트)인 경우, 상기 데이터 아이템 타입(609)은 상기 스레드 리스트의 명칭을 포함한다. 예를 들어, 상기 스레드 리스트가 이메일 인박스인 경우에는, 상기 데이터 아이템 타입이 알파뉴메릭 태그 "인박스"를 포함하고, 상기 스레드 리스트가 상기 레이블 "워크(work)"와 연관된 복수의 대화들을 포함하는 경우에는, 상기 데이터 아이템 타입이 알파뉴메릭 태그 "워크"를 포함한다. 일부 실시예들에 있어서, 상기 데이터 아이템 타입 식별자는 데이터 아이템 타입 식별자들의 조합일 수도 있다.
일부 실시예들에 있어서, 상기 데이터 아이템 식별자는 특정 타입인 데이터 아이템들의 서브셋 내의 데이터 아이템을 유니크하게 식별하는 식별자이다(예컨대, 데이터 아이템 타입 609는 "대화"인 경우 또는 데이터 아이템 타입 609는 "메시지"인 경우). 예를 들어, 일부 실시예들에 있어서, 상기 데이터 아이템 식별자는 대화 ID(예컨대, 620)이거나 또는 메시지 ID이다. 상기 데이터 아이템이 대화(예컨대, 메시지 리스트)인 실시예에 있어서, 상기 데이터 아이템 식별자는 상기 메시지 리스트 내의 제1메시지의 메시지 식별자이다.
일부 실시예들에 있어서, 데이터 아이템(예컨대, 226-1)의 상태(예컨대, 606-1)는 상기 데이터 아이템이 업데이트된(예컨대, 신규 데이터 아이템으로 교체된), 수정되거나 또는 액세스된(예컨대, 뷰잉된, 카피된, 전송된 등) 마지막 시간을 나타낸다. 상기 상태는 상기 데이터 아이템 상에서 오퍼레이션이 수행될 때 업데이트된다.
일부 실시예들에 있어서, 데이터 아이템에 대한 레퍼런스(reference)는 상기 데이터 아이템의 각각의 구성요소에 대한 상기 데이터 아이템으로부터의 레퍼런스를 포함하는 관계 테이블(611)에 대한 레퍼런스이다. 일부 실시예들에 있어서, 상기 데이터 아이템은 다수의 구성요소들을 구비한다. 예를 들어, 상기 서버 디렉토리(602) 내의 레퍼런스 1(608-1)은 데이터 아이템 1(226-1)에 대한 관계 테이블(611)에 2개의 엔트리들을 참조한다: 스레드 1(612-1) 및 스레드 2(612-2). (이러한 상황은 이들 두 대화/스레드들이 각각 상기 레퍼런스(608-1)에 의해 식별된 스레드 리스트와 연관되기 때문에 발생한다). 일부 실시예들에 있어서, 상기 데이터 아이템은 단일 구성요소를 구비한다. 예를 들어, 레퍼런스 2(608-2)는 데이터 아이템 2(226-2)에 대한 관계 테이블(611)에서 단일 엔트리를 참조한다: 스레드 2(612-2). 일부 실시예들에 있어서, 복수의 구별된(distinct) 데이터 아이템들은 공유된 구성요소를 포함한다. 예를 들어, 데이터 아이템 1(226-1) 및 데이터 아이템 2(226-2)는 각각 상기 관계 테이블(611)에서 스레드 2(612-2)에 관련된다. 다시 말해, 단일 대화(예컨대, 메시지 리스트)는 다수의 스레드 리스트들에 포함될 수도 있다. 예를 들어, 상기 웹 어플리케이션이 웹-기반 이메일 어플리케이션이고, 이메일 메시지들이 대화들(예컨대, 이메일 메시지들의 오더링된 리스트)에 배치되는 일 실시예에 있어서, 하나 이상의 대화들은 복수의 레이블들을 포함할 수도 있는데, 여기서 각각의 레이블은 스레드 리스트와 연관된다(예컨대, "인박스" 레이블 및 "워크" 레이블을 포함하는 대화는 "인박스" 스레드 리스트와 "워크" 스레드 리스트 양자 모두와 연관될 수도 있음).
일부 실시예들에 있어서, 상기 구성요소들은 메시지들이다. 상술된 바와 같이, 상기 데이터 아이템은 단일 구성요소 또는 다수의 구성요소들을 포함할 수도 있다. 예를 들어, 레퍼런스 3(608-3)(이는 대화용 레퍼런스임)은 데이터 아이템 3(226-3)에 대한 관계 테이블(611)에서 3개의 엔트리들: 메시지 1(614-1), 메시지 2(614-2) 및 메시지 3(614-3)을 참조하는 한편, 레퍼런스 N(608-N)은 관계 테이블의 데이터 아이템-N(226-N)(예컨대, 메시지 Q(614-Q))에서 단일 엔트리를 참조한다.
일부 실시예들에 있어서, 상기 관계 테이블에서의 관계가 스레드(예컨대, 스레드 1(612-1))인 경우, 상기 관계는 복수의 스레드들(예컨대, 스레드 1(612-1), 스레드 2(612-2), 스레드 P(612-P))을 포함하는 스레드들(616)의 테이블을 참조한다. 상기 스레드 테이블(616)에 있어서, 각각의 스레드는 상기 스레드에 관한 대화 식별자(620) 및 대화 정보(622)와 연관된다. 상기 대화 식별자(620)는 상기 대화와 연관되는 메시지들을 식별하도록 상기 서버 시스템에 의해 사용되는 식별자이다. 일부 실시예들에 있어서, 상기 대화 정보(622)는 상기 대화에 포함된 메시지들의 주제, 상기 대화에서 가장 최근의 메시지를 요약하는 짧은 "스니핏(snippet)" 및/또는 메시지들의 리스트를 포함한다.
일부 실시예들에 있어서, 상기 관계 테이블에서의 관계가 메시지(예컨대, 메시지 1(614-1))인 경우, 상기 관계는 복수의 메시지들(예컨대, 메시지 1(614-1), 메시지 2(614-2), 메시지 3(614-3), 메시지 Q(614-Q))을 포함하는 메시지들(618)의 테이블을 참조한다. 메시지들(618)들의 테이블에 있어서, 각각의 메시지는 상기 메시지에 관한 메시지 정보(624)와 연관된다. 일부 실시예들에 있어서, 상기 메시지 정보(624)는 여하한의 어태치먼트(attachment)들을 포함하는 메시지의 텍스트를 포함한다.
이하, 일부 실시예들에 따른 클라이언트 장치에서 웹 어플리케이션과 연관된 데이터를 예시한 도 6b에 주목해보자. 일부 실시예들에 있어서, 상기 로컬 데이터베이스(116)는 클라이언트 디렉토리(652)를 포함한다. 상기 클라이언트 디렉토리(652)는 상기 데이터 아이템에 대한 레퍼런스(예컨대, "Reference 1"(660-1)) 및 데이터 아이템(예컨대, Data Item 1(226-1))의 상태(예컨대, "Status"(656-1))와 유니크 식별자(예컨대, "Unique ID"(604-1))를 연관시키는 룩업 테이블이다. 일부 실시예들에 있어서, 체크섬들(예컨대, 658-1, 658-2, 658-3, 658-M)은 각각의 데이터 아이템(예컨대, 226-1)에 대한 체크섬, 캐시 코히런스(cache coherence)를 유지하는데 사용되는 경우, 체크섬(예컨대, 658-1)은 상기 로컬 데이터베이스(116)에 저장되고 상기 데이터 아이템과 연관된다. 도 6b에 예시된 실시예에 있어서, 상기 체크섬(예컨대, 658-1)은 상기 클라이언트 디렉토리(652)에 저장된다. 하지만, 상기 체크섬들은 상기 로컬 데이터베이스(116)의 또다른 부분에 저장될 수도 있다는 점을 이해하여야 한다.
일부 실시예들에 있어서, 상기 유니크 식별자(예컨대, "Unique ID"(604-N))는, 도 6a를 참조하여 상기 보다 상세히 논의된 바와 같이, 데이터 아이템 타입(609) 및 데이터 아이템 식별자(610)를 포함한다. 일부 실시예들에 있어서, 상기 서버(예컨대, 도 6a의 "Unique ID"(604-1)) 상의 유니크 식별자는 상기 클라이언트(예컨대, 도 6b의 "Unique ID"(604-1)) 상의 유니크 식별자와 동일하고, 유니크 식별자들 양자 모두가 동일 데이터 아이템과 연관되는 것을 나타낸다.
일부 실시예들에 있어서, 데이터 아이템(예컨대, 226-1)의 상태(예컨대, 656-1)는 상기 데이터 아이템이 업데이트된(예컨대, 신규 데이터 아이템으로 교체된), 수정된 또는 액세스된(예컨대, 뷰잉된, 카피된, 전송된 등) 마지막 시간을 나타낸다. 상기 상태는 상기 데이터 아이템 상에서 오퍼레이션이 수행될 때 업데이트된다. 일부 실시예들에 있어서, 상기 서버(예컨대, 도 6a의 606-2) 상의 데이터 아이템의 상태 및 상기 클라이언트(예컨대, 도 6b의 656-2) 상의 동일 데이터 아이템의 상태가 동일하다(예컨대, 상기 로컬 데이터베이스와 중앙 데이터베이스가 동기화되는 경우). 일부 실시예들에 있어서, 상기 서버(예컨대, 도 6a의 606-3) 상의 데이터 아이템의 상태 및 상기 클라이언트(예컨대, 도 6b의 656-3) 상의 동일 데이터 아이템의 상태는 상이하다(예컨대, 상기 로컬 데이터베이스와 중앙 데이터베이스가 동기화되지 않은 경우).
일부 실시예들에 있어서, 데이터 아이템에 대한 레퍼런스는 데이터 아이템과 상기 데이터 아이템의 각각의 구성요소 간의 관계를 포함하는 관계 테이블(666)에 대한 레퍼런스이다. 일부 실시예들에 있어서, 상기 데이터 아이템은 다수의 구성요소들을 구비한다. 예를 들어, 상기 클라이언트 디렉토리(652)에서의 레퍼런스 1(660-1)은 데이터 아이템 1(226-1): 스레드 1(668-1) 및 스레드 2(668-2)에 대한 관계 테이블(666)에 있는 2개의 엔트리들을 참조한다. (이러한 상황은 이들 2개의 대화들/스레드들이 각각 레퍼런스(608-1)에 의해 식별된 스레드 리스트와 연관되기 때문에 발생한다). 일부 실시예들에 있어서, 상기 데이터 아이템은 단일 구성요소를 구비한다(예컨대, 상기 레퍼런스 2(660-2)는 데이터 아이템 2(226-2): 스레드 2(668-2)에 대한 관계 테이블(666)에 있는 단일 엔트리를 참조한다). 일부 실시예들에 있어서, 복수의 구별된 데이터 아이템들은 공유된 구성요소를 포함한다. 예를 들어, 데이터 아이템 1 및 데이터 아이템 2는 각각 스레드 2(668-2)에 대한 관계를 포함한다. 다시 말해, 단일 대화(예컨대, 메시지 리스트)는 다수의 스레드 리스트들에 포함될 수도 있다. 예를 들어, 웹 어플리케이션이 모바일 이메일 어플리케이션이고 이메일 메시지들은 대화들에 배치되는 실시예에 있어서, 하나 이상의 대화들은 복수의 레이블들을 포함할 수도 있는데, 여기서 각각의 레이블은 스레드 리스트와 연관된다(예컨대, "인박스" 레이블 및 "워크" 레이블을 포함하는 대화는 "인박스" 스레드 리스트 및 "워크" 스레드 리스트와 모두 연관될 수도 있다).
일부 실시예들에 있어서, 상기 구성요소들은 메시지들이다. 상술된 바와 같이, 상기 데이터 아이템은 단일 구성요소 또는 다수의 구성요소들을 포함할 수도 있다. 예를 들어, 레퍼런스 3(660-3)(이는 대화에 대한 레퍼런스임)은 데이터 아이템 3(226-3): 메시지 1(670-1), 및 메시지 2(670-2)에 대한 관계 테이블(666)에 있는 2개의 엔트리들을 참조하는 한편, 레퍼런스 M(660-M)은 관계 테이블의 데이터 아이템 M(226-M)(예컨대, "Message S"(670-S))에 있는 단일 엔트리를 참조한다.
일부 실시예들에 있어서, 상기 참조 테이블에서의 레퍼런스가 스레드(예컨대, 스레드 1(668-1))인 경우, 상기 레퍼런스는 복수의 스레드(예컨대, 스레드 1(668-1), 스레드 2(668-2), 스레드 R(668-R))를 포함하는 스레드들(672)의 테이블을 참조한다. 상기 스레드들(672)의 테이블에 있어서, 각각의 스레드는 상기 스레드에 관한 대화 식별자(676) 및 대화 정보(678)와 연관된다. 상기 대화 식별자(676)는 상기 대화(예컨대, 메시지 리스트)와 연관되는 메시지들을 식별하기 위하여 클라이언트 장치에 의해 사용되는 식별자이다. 일부 실시예들에 있어서, 상기 대화 정보(678)는 상기 대화에 포함된 메시지들의 주제, 상기 대화에서 가장 최근의 메시지를 요약하는 짧은 "스니핏" 및/또는 메시지들의 리스트를 포함한다.
일부 실시예들에 있어서, 상기 참조 테이블에서의 레퍼런스가 메시지(예컨대, 메시지 1(670-1))인 경우, 상기 레퍼런스는 복수의 메시지들(예컨대, 메시지 1(670-1), 메시지 2(670-2), 메시지 S(670-S))을 포함하는 메시지들(674)의 테이블을 참조한다. 메시지들(674)들의 테이블에 있어서, 각각의 메시지는 상기 메시지에 관한 메시지 정보(680)와 연관된다. 일부 실시예들에 있어서, 상기 메시지 정보(680)는 여하한의 어태치먼트들을 포함하는 메시지의 텍스트를 포함한다.
일부 실시예들에 있어서, 도 6a 및 도 6b에 예시된 바와 같이, 도 6a의 중앙 데이터베이스(120) 및 도 6b의 로컬 데이터베이스(116)는 유사한 데이터 구조들을 구비한다. 하지만, 이들 데이터 구조들에 저장된 데이터는 항상 동일하지는 않다. 일부 실시예들에 있어서, 도 6a의 중앙 데이터베이스(120) 및 도 6b의 로컬 데이터베이스(116)는 상이한 데이터 아이템들, 메시지들 및 그들 각각의 데이터 구조들에 저장된 스레들을 구비한다. 일부 실시예들에 있어서, 도 6b의 로컬 데이터베이스(116) 내의 데이터 아이템들, 메시지들 및 스레드들과 도 6a의 중앙 데이터베이스(120)는 동기화되어(예컨대, 코히런트가 이루어졌고) 동일하다. 일부 실시예들에 따르면, 도 8a 내지 도 8d를 참조하여 보다 상세히 후술하는 바와 같이, 도 6b의 로컬 데이터베이스(116) 및 도 6a의 중앙 데이터베이스(120)가 동기화되지 않는 경우에 검출하기 위한 그리고 상기 데이터베이스들을 동기화하기 위한 방법들이 개시된다.
예를 들어, 도 6a에서, 상기 중앙 데이터베이스는 N 데이터 아이템들, P 스레드들 및 Q 메시지들을 구비하는 한편(여기서, N, P 및 Q는 모두 0 보다 큰 정수를 나타냄), 도 6b에서, 상기 로컬 데이터베이스(116)는 M 데이터 아이템들, R 스레드들 및 S 메시지들을 구비한다(여기서, M, R 및 S는 모두 0 보다 큰 정수를 나타냄). 일부 실시예들에 있어서, N=M, P=R, Q=S, 및 도 6a의 중앙 데이터베이스(120)에서의 데이터 구조들은 도 6b의 로컬 데이터베이스(116)에서의 데이터 구조들에 동일한 정보를 저장한다. 하지만, 일부 실시예들에 있어서, 도 6a의 중앙 데이터베이스(120)는 도 6b의 로컬 데이터베이스(116)에 포함되지 않은 추가 데이터를 포함하고 및/또는 도 6b의 로컬 데이터베이스(116)는 도 6a의 중앙 데이터베이스(120)에 포함되지 않은 추가 데이터를 포함한다(예컨대, 상기 중앙 데이터베이스는 웹-기반 이메일 서버와 연관되는데, 이는 하나 이상의 신규 이메일 메시지들을 수신하는 한편, 상기 클라이언트 장치가 상기 이메일 서버에 접속되지 않으므로, 상기 중앙 데이터베이스는 상기 로컬 데이터베이스에 포함되지 않은 하나 이상의 신규 이메일 메시지들을 포함한다).
추가적으로, 일부 실시예들에 있어서는, 체크섬들(658-1)이 도 6b의 로컬 데이터베이스(116)에 저장되는 한편, 도 6a의 중앙 데이터베이스(120)에는 저장되지 않는다. 오히려, 도 8a 내지 도 8d를 참조하여 보다 상세히 후술하는 바와 같이, 체크섬들은 상기 서버 시스템에 의해 온-더-플라이(on-the-fly)(예컨대, "필요에 따라" 기초로)로 계산되므로, 도 6a의 중앙 데이터베이스(120)에 저장되지 않게 된다.
예시적인 데이터 구조들은 설명을 목적으로 본 명세서에 기재되어 있지만, 대안적인 데이터 구조들은 상술된 데이터 아이템들에 관한 연관된 정보 및 상기 데이터 아이템들을 저장하도록 그들 장소에 사용될 수도 있다는 것을 이해하여야 한다. 일부 실시예들에 있어서, 다수의 데이터베이스들을 포함하는 다수의 서버들은 상기 서버 시스템 상의 데이터 아이템들을 저장하는데 사용되고, 이러한 분산 시스템들에 특별하게 적응된 상이한 데이터 구조들이 사용될 수도 있다. 이러한 하나의 대안적인 실시예에 있어서, U.S. 특허 공보 제2005/0222985 A1(이는 그 전문이 본 명세서에 인용참조됨)에 기재된 것과 같은 데이터 구조들은 중앙 데이터베이스(120)에 저장되는 것이 기재되는 데이터 아이템들, 대화들 및 관련 정보를 저장하는데 사용된다. 예를 들어, 웹-기반 이메일 어플리케이션에 있어서, 이메일들, 대화들 및 기타 관련된 정보는 액세스 속도 및 폴트 톨러런스(fault tolerance)를 개선하기 위하여 복수의 서버들과 데이터베이스들 가운데 분산될 특별하게 적응되는 데이터 구조들에 저장될 수도 있다.
이하, 일부 실시예들에 따라 클라이언트 및 서버 시스템 상의 지속적인 웹 어플리케이션 간의 데이터 전송을 위한 프로세스에서 클라이언트 및 서버 규칙들을 예시한 도 7a 내지 도 7b에 주목해보자. 상기 클라이언트(도 2의 102)는 로컬 웹 어플리케이션(예컨대, 도 2의 114)을 포함하는 클라이언트 어플리케이션(예컨대, 도 2의 웹 브라우저(112))을 구비한다. 일부 실시예들에 있어서, 상기 로컬 웹 어플리케이션(예컨대, 도 2의 114)은 온라인 및 오프라인 모드들 양자 모두를 구비한다. 예를 들어, 상기 웹 어플리케이션이 웹-기반 이메일 프로그램인 경우, 상기 프로그램은 로컬 데이터베이스(예컨대, 도 2의 116)에서 빈번하게 사용된 이메일 메시지들(예컨대, 도 2의 데이터 아이템(226-1))의 일부를 저장할 수도 있다.
상기 프로세스는 상기 웹 어플리케이션이 전자 메시지(예컨대, 이메일), 대화(예컨대, 전자 메시지들의 리스트), 또는 스레드 리스트(예컨대, 대화들의 리스트)와 같은 데이터 아이템에 대한 액세스를 요구할 때(702) 시작한다. 일 예시에 있어서, 상기 웹 어플리케이션은 유저로부터의 요청을 수신하여, 데이터 아이템을 표시하고, 데이터 아이템을 전송하며, 데이터 아이템을 편집하거나 또는 상기 데이터 아이템 상에서 기타 오퍼레이션 일부를 수행하게 된다. 상기 클라이언트는 데이터 아이템이 로컬 데이터베이스에 있는 경우를 체크한다. 데이터 아이템이 로컬 데이터베이스에서 발견하는 경우(704), 상기 데이터 아이템은 상기 로컬 데이터베이스로부터 검색하고(706) 상기 웹 어플리케이션이 상기 데이터 아이템을 수신한다(708).
일부 실시예들에 있어서, 상기 웹 어플리케이션은 오프라인 능력(offline capability)들을 갖는 웹-기반 이메일 어플리케이션(예컨대, GMail)이다(예컨대, 지속적인 웹-기반 어플리케이션이다). 예를 들어, 클라이언트가 네트워크 접속에 대한 액세스를 갖는 경우, 상기 웹 어플리케이션은 통상적인 웹-기반 이메일 인터페이스와 같이 행하는데, 여기서 유저는 웹 페이지에 로그인하고 이메일 메시지들을 체크하며 기타 오퍼레이션들을 행한다. 하지만, 일부 실시예들에 있어서, 상기 웹-기반 이메일 프로그램은 오프라인 능력들을 가지는데, 이는 상기 웹 어플리케이션 및 기타 로컬 어플리케이션 데이터에 의해 액세스되기 가장 쉬운 이메일 메시지들 중 일부를 저장하는데 사용되는 로컬 데이터베이스에 대한 액세스를 가지기 때문이다. 그리고, 상기 클라이언트가 네트워크 접속에 대한 액세스를 가지지 못하고, 유저가 웹 브라우저를 통해 웹-기반 이메일 프로그램을 액세스하기 위한 시도를 하는 경우, 상기 웹 어플리케이션은 여전히 유저가 상기 로컬 데이터베이스에 저장된 이메일들을 액세스하도록 하고, 상기 로컬 데이터베이스에 저장된 이메일들 상에서 오퍼레이션들을 행하도록 한다.
일부 실시예들에 있어서(예컨대, 네트워크 반응시간이 큰 경우), 하나 이상의 데이터 아이템들 상의 입력에 의해 표시된 오퍼레이션을 수행하는 것(예컨대, 표시하는 것)과 유저로부터 입력을 수신하는 것 간의 딜레이를 저감시키기 위하여 로컬 데이터베이스에 일부 데이터 아이템들을 저장하는 것이 바람직하다. 따라서, 로컬 데이터베이스가 데이터 아이템들에 대한 캐시로서 작용할 수 있어, 상기 웹 어플리케이션으로부터의 명령들이 상기 서버 시스템으로부터의 답신을 수신하기 전에 상기 로컬 데이터베이스 내의 데이터 아이템들 상에서 수행될 수 있도록 한다. 이러한 구조는 프로세서에 의해 사용을 위하여 데이터를 캐싱하여 하드웨어 시스템에서의 처리 오퍼레이션들을 스피드업하는데 사용되는 마이크로프로세서와 연관된 하드웨어 캐시와 유사하므로, 상기 마이크로프로세서에 의해 상기 요청된 데이터의 수신과 데이터에 대한 요청들 간의 통신 반응시간의 영향들을 저감시키게 된다.
일부 실시예들에 있어서, 상기 웹 브라우저의 다큐먼트 오브젝트 모델은 L1 캐시로서 사용된다. 하드웨어에서 발견된 캐시들의 종류들로 제시된 바와 같이, L1 캐시로서 상기 다큐먼트 오브젝트 모델을 이용하는 소프트웨어는 라이트-백(write-back) 또는 라이트-스루(write-through)일 수도 있다. 일부 실시예들에 있어서, L1 캐시로서 다큐먼트 오브젝트 모델 프래그먼트들의 라이트-백 캐시는, 상기 웹 어플리케이션이 상기 다큐먼트 오브젝트 모델을 직접 수정하여 일부 유저 액션들을 구현하는 경우에 적절하다. 일부 실시예들에 따른 하드웨어 캐싱과의 그 유사성으로 제시된 실시예에 있어서의 다른 특징들은, 로드 포워딩(load forwarding) 및 데이터 아이템들의 프리페칭(prefetching)이다(즉, 상기 서버로부터의 응답들이 로컬 데이터베이스(116)에 기록되기 전에 디스플레이(206) 상에 표시하기 위한 상기 웹 브라우저(112)에 직접 포워딩되는 경우).
일부 실시예들에 있어서, 상기 기록 큐(220)는 비휘발성 메모리에 저장되어, 상기 웹 어플리케이션이 크래시(crash)되거나 또는 상기 웹 어플리케이션을 실행하는 웹 브라우저가 크래시되는 경우에도, 그 지점까지 상기 웹 어플리케이션에 의해 상기 기록 큐에 기록된 여하한의 오퍼레이션들이 보존되게 된다.
일부 실시예들에 있어서, 요청된 데이터 아이템은 상기 로컬 데이터베이스에 있지 않을 수도 있는데, 그 이유는 상기 클라이언트에 의해 요청되지 않았기 때문이고, 또는 상기 로컬 데이터베이스에 있지 않을 수도 있는데, 그 이유는 캐시 교체 정책(cache replacement policy)으로 인하여 상기 로컬 데이터베이스로부터 제거되지 않았기 때문이다. 일부 실시예들에 있어서, 상기 로컬 데이터베이스(예컨대, 캐시)가 풀(full)인 것으로 상기 시스템이 검출하는 경우, 상기 로컬 데이터베이스(예컨대, 캐시)에 있는 데이터 아이템들의 적어도 일부는 다수의 옵션들 중 하나일 수 있는 캐시 교체 정책에 따라 삭제를 위하여 마킹된다.
일부 실시예들에 있어서, 상기 캐시 교체 정책은, 최근에 가장 적게 사용된 데이터 아이템들이 상기 로컬 데이터베이스로부터 먼저 삭제되는 LRU(a least recently used) 정책이다. 일부 실시예들에 있어서, 상기 캐시 교체 정책은, 최소 빈번하게 액세스되는 데이터 아이템들이 상기 로컬 데이터베이스로부터 우선 삭제되는 LFU(a least frequently used) 정책이다. 일부 실시예들에 있어서, 상기 캐시 교체 정책은 어떤 데이터 아이템들이 가장 오래되거나 또는 가장 큰 파일 사이즈를 갖는 지를 포함하는 일부 기타 요인에 의해 결정된다. 일부 실시예들에 있어서, 상기 캐시 교체 정책은 랜덤인데, 여기서 데이터 아이템들은 상기 캐시로부터 랜덤으로(즉, 데이터 아이템과 연관된 어떠한 기준(criteria)에도 관계없이) 삭제된다. 일부 실시예들에 있어서, 상기 캐시 교체 정책은, 어떤 데이터 아이템들이 상기 웹 어플리케이션에 의해 요구될 필요가 없는 지(예컨대, 소정의 특성들을 갖는 이메일이 한 번 보다 많이 판독되지 못할 수도 있다는 것을 아는 것)를 가장 쉽게 판정하는 요인들의 조합을 기초로 한다. 일 실시예에 있어서, 교체 우선순위는 각각의 데이터 아이템에 대하여 서버에서 계산되어 상기 로컬 데이터베이스에 저장되고, 상기 로컬 데이터베이스 내의 데이터 아이템들은 교체 우선순위에 의해 하향 순서로 삭제하기 위하여 마킹된다. 추가적으로는, 하드웨어 캐시들에서 사용되는 여하한의 캐시 교체 전략이 상기 로컬 데이터베이스 내의 어떤 데이터 아이템들이 삭제를 위하여 마킹되는 지를 판정하는데 사용될 수도 있다는 것을 이해하여야 한다. 일부 실시예들에 있어서, 상기 클라이언트는 상기 로컬 데이터베이스로부터 삭제를 위하여 마킹되는 모든 데이터 아이템들을 주기적으로 제거한다. 이들 교체 전략들의 어플리케이션에 관한 선행 기술은 본 발명의 상이한 실시예들에 관련되어 있다.
상기 데이터 아이템이 상기 로컬 데이터베이스에서 발견되지 않고(710) 상기 클라이언트가 네트워크 접속을 검출하지 못한다면(712), 에러가 상기 웹 어플리케이션으로 리턴된다(714). 일부 실시예들에 있어서는, 에러가 상기 웹 어플리케이션의 유저에게도 리턴된다(예컨대, 표시된다).
네트워크 접속이 검출된다면(716), 통신 인터페이스(예컨대, 웹 인터페이스)를 이용하여 유니크 식별자(예컨대, 도 6b의 604-1)를 포함하는 서버 시스템으로 요청이 전송된다. 상기 서버 시스템은 상기 요청을 수신하고(718), 일부 실시예들에 있어서는, (예컨대, 서버 디렉토리(예컨대, 도 6a의 602)에서의 유니크 식별자(예컨대, 도 6a의 604-1)와 함께) 상기 수신된 유니크 식별자를 매칭하여 중앙 데이터베이스(예컨대, 도 6a의 120)에서 데이터 아이템을 룩업(look up)하기 위하여 유니크 식별자(예컨대, 도 6b의 604-1)를 사용한다. 상기 서버 시스템은 상기 중앙 데이터베이스로부터 데이터 아이템(및 일부 실시예들에 있어서는, 상기 데이터 아이템과 연관된 추가 정보)을 검색하고(719), 상기 데이터 아이템(및 여하한의 연관된 정보)을 상기 클라이언트에 전송한다.
일부 실시예들에 있어서, 상기 요청은 상기 데이터 아이템의 압축된 표현(compressed representation)의 선택을 검출한 후, 상기 데이터 아이템의 압축되지 않은 표현(때론 확장된 표현이라고 함)을 표시하기 위한 요청과 같이 상기 유저에 의해 특정된다. 일 예시에 있어서, 이메일 인박스가 표시되는데, 상기 이메일 인박스는 복수의 이메일 메시지들 또는 이메일 메시지들의 그룹들에 대한 헤더 정보(예컨대, 전송자 및 주제)를 포함한다(예컨대, 하나 이상의 관련된 이메일 메시지들은 단일 대화로서 하나의 헤더 하에 함께 그룹핑될 수도 있다). 상기 예시에서는, 유저가 하나의 이메일 메시지 또는 대화의 헤더를 선택하면, 상기 웹 어플리케이션은 전체 이메일 메시지(상기 헤더가 단일 메시지에 대한 헤더인 경우) 또는 상기 대화에서의 이메일 메시지들 중 적어도 일부의 리스트(상기 헤더가 이메일 메시지들의 대화에 대한 헤더인 경우)를 표시한다.
일부 실시예들에 있어서, 상기 요청은 상기 웹 어플리케이션에 의해 자동으로 생성된다. 일부 실시예들에 있어서, 상기 자동으로 생성된 요청은 상기 유저에 의해 가장 쉽게 액세스되는 데이터 아이템들을 프리로딩(preload)하는 것이다. 일 예시에서는, 복수의 이메일 메시지들 또는 이메일 메시지들의 그룹들에 대한 헤더 정보(예컨대, 전송자 및 주제)를 포함하는 인박스가 표시된다(예컨대, 하나 이상의 관련된 이메일 메시지들이 단일 대화로서 하나의 헤더 하에 함께 그룹핑될 수도 있다). 상기 예시에서는, 상기 웹 어플리케이션이 상기 인박스의 현재 뷰(current view)에서 헤더들 각각과 연관된 데이터 아이템에 대한 요청을 자동으로 생성한다. 상기 인박스의 현재 뷰는 상기 인박스 내의 모든 헤더들(예컨대, 상기 인박스 내의 모든 메시지들/대화들이 요청됨), 상기 인박스의 현재 페이지 상에 포함되는 모든 헤더들(예컨대, 상기 유저가 스크린 상으로 스크롤링될 수 있는 모든 메시지들/대화들이 요청됨), 및 상기 디스플레이 상에 현재 표시되는 모든 헤더들(예컨대, 스크롤링없이 유저에 의해 현재 볼 수 있는 헤더들과 연관된 메시지들/대화들만이 요청됨) 중 여하한의 것일 수도 있다는 것을 이해하여야 한다.
상기 클라이언트는 데이터 아이템을 수신하고(708) 상기 데이터 아이템 상에서 오퍼레이션을 수행한다(720). 일부 실시예들에 있어서, 상기 오퍼레이션은 데이터 아이템을 업데이트하지 않는다(예컨대, 이메일은 유저에 표시된다). 일부 실시예들에 있어서, 상기 오퍼레이션은 상기 데이터 아이템을 업데이트한다(예컨대, 상기 오퍼레이션은 이메일 메시지들의 대화로부터 이메일 메시지에 추가하거나 삭제하는 것과 같은 수정 오퍼레이션이다). 상기 오퍼레이션이 상기 데이터 아이템을 업데이트하지 않는다면(722), 상기 웹 어플리케이션 처리가 종료된다(723). 상기 오퍼레이션이 상기 데이터 아이템을 업데이트한다면(724), 상기 웹 어플리케이션은 상기 기록 큐(예컨대, 도 4의 220)에서의 오퍼레이션을 수행하기 위한 요청을 배치한다(726). 일부 실시예들에 있어서, 상기 기록 큐에서의 오퍼레이션들은 상기 오퍼레이션과 연관된 여하한의 데이터 아이템들의 유니크 식별자들을 포함한다(예컨대, 상기 오퍼레이션이 한 메시지를 각각의 대화에 추가하는 것이라면, 상기 오퍼레이션은 상기 각각의 대화의 유니크 식별자를 포함한다). 일부 실시예들에 있어서, 상기 서버 시스템은 상기 오퍼레이션이 수행되어야 하는 중앙 데이터베이스에 저장된 데이터 아이템을 식별하도록 상기 유니크 식별자를 이용한다(예컨대, 상기 서버 시스템은 상기 중앙 데이터베이스에 저장된 각각의 대화를 식별하고 상기 메시지를 그것에 추가한다).
일부 실시예들에 있어서, 상기 기록 큐에 한 오퍼레이션을 배치시킨 후, 상기 웹 어플리케이션은 네트워크 접속 상태를 체크한다(728). 상기 클라이언트가 네트워크에 접속되지 않는다면(732), 상기 클라이언트 장치는 타임아웃(734) 주기를 대기하고, 상기 네트워크 접속 상태를 리체크(rechecks)한다(728). 일부 실시예들에 있어서, 상기 웹 어플리케이션은 오퍼레이션이 상기 기록 큐에 추가되었는 지의 여부를 토대로 네트워크 접속 상태를 주기적으로 체크한다(예컨대, 매 5 분).
상기 클라이언트 장치가 네트워크에 접속된 것으로(736) 상기 웹 어플리케이션이 검출하는 경우, 클라이언트 메모리에 유지된 기록 큐는 상기 접속된 서버에 대하여 드레인(drain)된다. 일부 실시예들에 있어서, 상기 기록 큐는 비휘발성 메모리에 유지되어, 만들어져는 있지만 서버 시스템으로 아직 전송되지 않은(예컨대, 네트워크 접속이 전혀 없기 때문에) 유저 액션들이 상기 웹 브라우저가 크래시되는 경우에 세이브(save)되도록 한다는 것이 중요하다. 일부 실시예들에 있어서, 상기 기록 큐는 오퍼레이션들이 상기 기록 큐에 추가된 순서로 드레인된다(예컨대, 가장 오래된 오퍼레이션은 두번째로 가장 오래된 것 등에 따라 서버 시스템으로 우선 전송된다). 일부 실시예들에 있어서, 동일한 데이터 아이템을 수정하는 다수의 오퍼레이션들이 있는 경우, 상기 오퍼레이션들이 정확한 순서로 수행된다는 것을 보장하기 위하여, 상기 기록 큐에서의 액션들이 상기 큐에 추가된 순서로 구현된다는 것이 중요하다(예컨대, 제1오퍼레이션은 레이블 "워크"를 각각의 메시지/대화에 적용하고, 제2오퍼레이션은 상기 메시지/대화가 유저에 의해 판독된 것을 나타내는 플래그(flag)와 함께 상기 "워크" 레이블과 연관된 모든 메시지들/대화들을 마킹한다).
일부 실시예들에 있어서, 상기 서버 시스템은 상기 웹 어플리케이션으로부터 요청을 수신하고(740), (예컨대, 상기 요청과 연관된 유니크 식별자(들)로 표시된 하나 이상의 데이터 아이템들 상에서 상기 요청에 표시된 오퍼레이션을 수행함으로써) 상기 요청에 응답한다(742). 일부 실시예들에 있어서, 상기 오퍼레이션에 의해 수정된 여하한의 데이터 아이템들은 상기 서버 시스템 상의 중앙 데이터베이스에 저장된다(744). 일부 실시예들에 있어서, 상기 요청에 대한 응답은 여하한의 수정된 데이터 아이템들을 포함하는 클라이언트 상에서 상기 웹 어플리케이션에 대한 응답을 전송하는 것을 포함한다. 상기 클라이언트는 상기 응답을 수신하고(746), 상기 로컬 데이터베이스에 여하한의 수정된 데이터 아이템들을 저장한다(748). 일부 실시예들에 있어서, 상기 오퍼레이션들을 수행하기 위한 요청에 대하여 상기 서버로부터의 여하한의 응답을 수신하는 대신에(또는 수신하기 전에) 상기 기록 큐로부터 오퍼레이션들이 드레인되므로, 상기 클라이언트가 상기 로컬 데이터베이스에 있는 데이터 아이템들에 대한 수정들을 하게 된다.
이하, 일부 실시예들에 따라 체크섬 교환을 이용하여 데이터베이스들 간의 데이터 동기화를 위한 프로세스에 있어서 클라이언트 및 서버 규칙들을 예시한 도 8a 내지 도 8d에 주목해보자. 일부 실시예들에 있어서, 상기 클라이언트는 서버 시스템 상의 중앙 데이터베이스와 동기화될 필요가 있는(예컨대, 코히런트가 이루어지는) 로컬 데이터베이스 또는 상기 클라이언트 장치와 구별되는 다른 구별된 연산장치를 포함한다. 일 예시에 있어서, 상기 웹 어플리케이션은 이메일 메시지들, 관련된 이메일 메시지들의 리스트들(예컨대, 대화들), 및 관련된 대화들의 리스트들(예컨대, 스레드 리스트들)을 저장하는 웹-기반 이메일 어플리케이션이다. 이러한 예시에 있어서, 상기 웹-기반 이메일 어플리케이션은 이메일 계정 내의 메시지들/대화들에 대한 액세스를 유저에게 제공하고, 서버 어플리케이션(예컨대, 상기 이메일 계정과 연관된 이메일들/대화들 모두를 관리하는 이메일 서버)과 동기화된 웹 어플리케이션(예컨대, 웹-기반 이메일을 액세스하기 위한 어플리케이션)을 유지하는 것이 바람직하다.
상기 프로세스는 상기 웹 어플리케이션이 전자 메시지(예컨대, 이메일), 대화(예컨대, 전자 메시지들의 리스트), 또는 스레드 리스트(예컨대, 대화들의 리스트)와 같은 데이터 아이템에 대한 액세스를 요구할 때(802) 시작한다. 일 예시에 있어서, 상기 웹 어플리케이션은 유저로부터의 요청을 수신하여, 데이터 아이템을 표시하고, 데이터 아이템을 전송하며, 데이터 아이템을 편집하거나 또는 상기 데이터 아이템 상에서 기타 오퍼레이션 일부를 수행하게 된다. 상기 클라이언트는 데이터 아이템이 로컬 데이터베이스에 있는 경우를 체크한다. 데이터 아이템이 로컬 데이터베이스에서 발견하는 경우(804), 상기 데이터 아이템은 상기 로컬 데이터베이스로부터 검색하고(806), 상기 웹 어플리케이션이 상기 데이터 아이템을 수신한다(808). 일부 실시예들에 있어서, 상기 로컬 데이터베이스로부터 검색된 데이터 아이템은, 보다 상세히 후술하는 바와 같이, 앞서 상기 로컬 데이터베이스에 저장된 제1체크섬을 포함한다.
일부 실시예들에 있어서, 상기 웹 어플리케이션은 오프라인 능력들을 갖는 웹-기반 이메일 어플리케이션(예컨대, Gmail)이다. 예를 들어, 클라이언트가 네트워크 접속에 대한 액세스를 갖는 경우, 상기 웹 어플리케이션은 통상적인 웹-기반 이메일 인터페이스와 같이 행하는데, 여기서 유저는 웹 페이지에 로그인하고 이메일 메시지들을 체크하며 기타 오퍼레이션들을 행한다. 하지만, 일부 실시예들에 있어서, 상기 웹-기반 이메일 어플리케이션은, 로컬 데이터베이스에 대한 액세스를 어플리케이션에 제공하여 인에이블되는(enabled) 오프라인 능력들을 가지는데, 이는 상기 웹 어플리케이션에 의해 액세스되기 가장 쉬운 이메일 메시지들 중 일부를 저장한다. 그리고, 상기 클라이언트가 네트워크 접속에 대한 액세스를 가지지 못하고, 유저가 웹 브라우저를 통해 웹-기반 이메일 프로그램을 액세스하기 위한 시도를 하는 경우, 상기 웹 어플리케이션(예컨대, 웹-기반 이메일 어플리케이션)은 여전히 유저가 상기 로컬 데이터베이스에 저장된 이메일들을 액세스하도록 하고, 상기 로컬 데이터베이스에 저장된 이메일들 상에서 오퍼레이션들을 행하도록 한다.
일부 실시예들에 있어서, 상기 클라이언트는, 도 7a 내지 도 7b를 참조하여 보다 상세히 후술하는 바와 같이, 상기 로컬 데이터베이스에 저장된 데이터 아이템을 액세스하고, 상기 데이터 아이템 상에서 수행되는 오퍼레이션을 검출하고, 상기 데이터 아이템의 식별자와 함께 상기 기록 큐에 대하여 상기 오퍼레이션을 특징짓는 정보를 기록하고, 상기 업데이트된 데이터 아이템의 체크섬을 계산하고, 상기 로컬 데이터베이스에 상기 계산된 체크섬을 저장하는 것을 포함하는 오프라인 모드로 동작한다. 일부 실시예들에 있어서, 네트워크 접속이 웹 어플리케이션과 서버 시스템 간에 검출되는 경우, 상기 클라이언트는 상기 기록 큐를 상기 서버 시스템에 대하여 드레인하는데(예컨대, 웹-기반 이메일 서버 또는 서버 시스템), 여기서 상기 서버 시스템으로 전송되는 각각의 요청은 오퍼레이션, 상기 오퍼레이션에 의해 수정된 하나 이상의 데이터 아이템들의 유니크 식별자, 및 하나 이상의 데이터 아이템들 각각에 대한 체크섬을 포함한다.
상기 로컬 데이터베이스는 비휘발성 메모리에 저장되어, 상기 웹 어플리케이션이 크래시되는 경우에도, 그 시점까지 상기 웹 어플리케이션에 의해 상기 기록 큐에 기록된 여하한의 오퍼레이션들이 보존되도록 한다.
데이터 아이템은 로컬 데이터베이스에 있지 않을 수도 있는데, 그 이유는 상기 클라이언트에 의해 요청되지 않았기 때문이고, 또는 상기 로컬 데이터베이스에 있지 않을 수도 있는데, 그 이유는 캐시 교체 정책의 구현을 통하여 상기 로컬 데이터베이스로부터 제거되지 않았기 때문이다. 일부 실시예들에 있어서, 상기 로컬 데이터베이스(예컨대, 캐시)가 풀인 것으로 상기 시스템이 검출하는 경우, 상기 로컬 데이터베이스(예컨대, 캐시)에 있는 데이터 아이템들의 적어도 일부는, 도 7a 내지 도 7b를 참조하여 보다 상세히 상술된 바와 같이, 캐시 교체 정책에 따라 삭제를 위하여 마킹된다.
상기 데이터 아이템이 상기 로컬 데이터베이스에서 발견되지 않고(810) 상기 클라이언트가 네트워크 접속을 검출하지 못한다면(812), 에러가 상기 웹 어플리케이션으로 리턴된다(814). 일부 실시예들에 있어서는, 에러가 상기 웹 어플리케이션의 유저에게도 리턴된다(예컨대, 표시된다).
네트워크 접속이 검출된다면(816), 통신 인터페이스(예컨대, 웹 인터페이스)를 이용하여 유니크 식별자(예컨대, 도 6b의 604-1)를 포함하는 서버 시스템으로 요청이 전송된다. 상기 서버 시스템은 상기 요청을 수신하고(718), 일부 실시예들에 있어서는, (예컨대, 서버 디렉토리(예컨대, 도 6a의 602)에서의 유니크 식별자(예컨대, 도 6a의 604-1)와 함께) 상기 수신된 유니크 식별자를 매칭하여 중앙 데이터베이스(예컨대, 도 6a의 120)에서 데이터 아이템을 룩업하기 위하여 유니크 식별자(예컨대, 도 6b의 604-1)를 사용한다. 상기 서버 시스템은 상기 중앙 데이터베이스로부터 데이터 아이템(및 일부 실시예들에 있어서는, 상기 데이터 아이템과 연관된 추가 정보)을 검색하고(820), 상기 데이터 아이템(및 여하한의 연관된 정보)을 상기 클라이언트에 전송한다.
일부 실시예들에 있어서, 상기 서버 시스템은 상기 데이터 아이템 상에서 제1체크섬을 계산하고(820), 상기 데이터 아이템과 상기 데이터 아이템과 연관된 제1체크섬을 상기 클라이언트에 전송한다. 상기 클라이언트는 상기 로컬 데이터베이스에서의 상기 제1체크섬 및 상기 데이터 아이템을 수신하고(808), 상기 데이터 아이템 상에서 오퍼레이션을 수행한다(826). 일부 실시예들에 있어서, 상기 데이터 아이템 상에서 오퍼레이션을 수행하는 것은 데이터 아이템을 수정하는 것을 포함하고, 상기 클라이언트는 상기 수정된 데이터 아이템에 대한 체크섬을 계산하며, 상기 로컬 데이터베이스에 저장되는 제1체크섬을 클라이언트-계산된 체크섬으로 교체한다.
일부 실시예들에 있어서, 시간상 보다 늦은 시점에, 상기 웹 어플리케이션은 두번째로 데이터 아이템에 대한 액세스를 필요로 한다(828). 상기 클라이언트는 상기 데이터 아이템이 상기 로컬 데이터베이스에 있는 지의 여부를 판정하도록 체크한다. 상기 데이터 아이템이 상기 서버 시스템으로부터 앞서 요청되어 상기 로컬 데이터베이스에 저장되었을 지라도, 상기 데이터 아이템은 더 이상 상기 로컬 데이터베이스에 저장되지 못할 수도 있다. 예를 들어, 상기 데이터 아이템이 캐시 교체 정책의 구현을 통해 상기 로컬 데이터베이스로부터 제거되었다면, 상기 클라이언트는 상기 로컬 데이터베이스에서 상기 데이터 아이템을 발견하지 못할 것이다. 상기 데이터 아이템이 상기 로컬 데이터베이스에서 발견되지 않는다면(830), 상기 클라이언트는 네트워크 접속이 있는 지를 확인하도록 체크한다. 네트워크 접속이 있는 경우(816), 상기 클라이언트는 상기 데이터 아이템에 대한 서버 시스템으로 요청을 전송하고, 상기 보다 상세히 기재된 바와 같이 응답들을 수신한다. 예를 들어, 웹 어플리케이션이 웹-기반 이메일 어플리케이션인 경우, 상기 웹 어플리케이션이 이메일 대화를 필요로 하는 처음에, 상기 웹-기반 이메일 서버로부터 대화를 요청하여야 한다(예컨대, 대화를 표시하기 위하여). 상기 예시에 있어서, 상기 웹-기반 이메일 서버는 상기 대화 상에서 체크섬을 게산하고, 로컬 데이터베이스에 저장되는, 상기 대화 및 체크섬과 연관된 유니크 식별자를 상기 클라이언트에 전송한다. 그리고, 상기 웹 어플리케이션이 대화를 필요로 하는 두번째로, 상기 대화 및 체크섬과 연관된 유니크 식별자를 상기 서버에 간단히 전송할 수 있다.
상기 데이터 아이템이 상기 로컬 데이터베이스에서 발견되는 경우(832), 상기 클라이언트는 상기 제1체크섬(또는 클라이언트-계산 체크섬)을 포함하는 상기 로컬 데이터베이스로부터의 데이터 아이템 및 상기 데이터 아이템과 연관된 유니크 식별자를 검색한다. 상기 클라이언트는 상기 서버 시스템에 요청을 전송한다(836). 일부 실시예들에 있어서, 이러한 요청은 제1체크섬(또는 클라이언트-계산 체크섬)을 포함한다. 일부 실시예들에 있어서, 상기 클라이언트 장치는 상기 제1체크섬 및 유니크 식별자를 상기 서버 시스템에 주기적으로 전송하되, 여기서 상기 서버 상에서 상기 데이터 아이템에 대한 체크섬과 비교된다. 예를 들어, 웹-기반 이메일 어플리케이션은, 상기 대화의 체크섬을 상기 웹-기반 이메일 서버에 전송하여 특정 대화가 최신식인 지를 주기적으로 확인할 수 있다. 이러한 예시에 있어서, 상기 서버는 (상기 서버 시스템에 저장된) 대화의 체크섬을 계산하고, 상기 체크섬들이 일치하지 않는다면, (상기 서버 시스템에 저장된) 대화를 상기 웹-기반 이메일 어플리케이션에 전송한다.
일부 실시예들에 있어서, 상기 데이터 아이템은 복수의 이산 구성요소(discrete component)들을 구비하고(예컨대, 상기 데이터 아이템은 대화이고, 상기 이산 구성요소들은 메시지들임), 상기 요청은 구성요소들의 식별자들을 포함한다(838)(예컨대, 상기 요청은 상기 데이터 아이템이 메시지들의 리스트인 대화인 경우에 메시지 식별자들을 포함한다). 일부 실시예들에 있어서, 상기 구성요소들의 식별자들은 상기 클라이언트 상에서 상기 데이터 아이템과 연관된 구성요소들 모두를 포함한다(예컨대, 상기 클라이언트 상에 저장된, 상기 대화에서 모든 메시지들에 대한 메시지 식별자들).
일부 실시예들에 있어서, 상기 서버 시스템으로 클라이언트에 의해 전송된 요청(예컨대, 836)은 상기 웹 어플리케이션에 의해 자동으로 생성된다. 일부 실시예들에 있어서, 상기 자동으로 생성된 요청은 유저에 의해 액세스되기 가장 쉬운 데이터 아이템들을 프리로딩하는 것이다. 일 예시에 있어서, 애트리뷰트 "인박스"와 연관되는 복수의 이메일 메시지들 또는 이메일 메시지들의 그룹들(예컨대, 하나 이상의 관련된 이메일 메시지들은 단 하나의 대화로서 하나의 헤더 하에 함께 그룹핑될 수도 있음)에 대한 헤더 정보(예컨대, 전송자 및 주제)를 포함하는 인박스가 표시된다. 상기 예시에 있어서, 상기 웹 어플리케이션은 상기 인박스의 현재 뷰에서 헤더들 각각과 연관된 데이터 아이템에 대한 요청을 자동으로 생성한다. 상기 인박스의 현재 뷰는, 상기 인박스 내의 모든 헤더들(예컨대, 상기 인박스 내의 모든 메시지들/대화들이 요청됨), 상기 인박스의 현재 페이지 상에 포함되는 모든 헤더들(예컨대, 상기 유저가 스크린 상으로 스크롤링될 수 있는 모든 메시지들/대화들이 요청됨), 및 상기 디스플레이 상에 현재 표시되는 모든 헤더들(예컨대, 스크롤링없이 유저에 의해 현재 볼 수 있는 헤더들과 연관된 메시지들/대화들만이 요청됨) 중 여하한의 것일 수도 있다는 것을 이해하여야 한다.
일부 실시예들에 있어서, 데이터 아이템들은 압축된 표현(예컨대, 압축된 형태로) 또는 압축되지 않은 표현(예컨대, 압축되지 않은 형태로)으로서 표시될 수도 있다. 압축된 형태로 표시된 데이터 아이템들은 압축되지 않은 형태로 표시된 데이터 아이템들보다 덜한 정보를 포함한다. 일부 실시예들에 있어서, 압축된 형태로 표시된 데이터 아이템은 상기 데이터 아이템에 관한 헤더 정보(예컨대, 주제, 전송자 및 데이터/시간)만을 포함한다(예컨대, 스레드 리스트에서의 제1대화 또는 대화에서의 제1메시지에 관한 헤더 정보). 일부 실시예들에 있어서, 압축된 형태로 표시된 데이터 아이템은 상기 데이터 아이템의 복수의 구성요소들에 대한 헤더 정보를 표시하는 것을 포함한다. 예를 들어, 데이터 아이템이 스레드 리스트(예컨대, 인박스)인 경우, 압축 형태로 상기 스레드 리스트를 표시하는 것은 상기 스레드 리스트의 하나 이상의 구성요소들(예컨대, 대화들)에 대한 헤더들을 표시하는 것을 포함한다. 예를 들어, 상기 데이터 아이템이 대화(예컨대, 대화)인 경우, 압축된 형태로 대화를 표시하는 것은 상기 대화의 하나 이상의 구성요소들(예컨대, 메시지들)에 대한 헤더들을 표시하는 것을 포함한다.
일부 실시예들에 있어서, 상기 웹 어플리케이션은 초기에는 상기 데이터 아이템의 압축된 형태를 표시하도록 데이터 아이템에 관한 충분한 정보만을 구비한다(예컨대, 초기에는 가장 최근의 대화들 모두의 헤더들이 서버로부터 다운로딩됨). 상기 웹 어플리케이션이 특정 데이터 아이템에 대한 액세스를 요청하는 경우에는(예컨대, 하나 이상의 대화들을 포함하는 이메일 인박스와 같은 스레드 리스트), 상기 압축된 형태의 데이터 아이템이 표시된다(예컨대, 상기 인박스 내의 모든 대화들의 헤더들이 표시됨). 또한, 상기 웹 어플리케이션이 특정 데이터 아이템(예컨대, 웹 이메일 인박스)에 대한 액세스를 요청하는 경우, 상기 웹 어플리케이션이 상기 압축되지 않은 형태의 데이터 아이템을 표시할 수 있도록 풀 데이터 아이템이 다운로딩된다(예컨대, 각각의 대화들에서의 모든 메시지들의 컨텐트 또는 헤더들). 또다른 예시에 있어서, 상기 웹 어플리케이션은 초기에는 상기 압축되지 않은 형태의 대화를 표시하도록 유저로부터 요청(예컨대, 대화에서의 메시지들 중 하나의 풀 텍스트를 뷰잉하기 위한 요청)을 수신할 때에는, 압축된 형태로 대화를 표시할 수도 있고(예컨대, 상기 대화에서의 하나 이상의 이메일 메시지들의 헤더들을 표시하는 것만), 압축되지 않은 형태로 상기 대화를 표시할 수도 있다(예컨대, 상기 대화에서의 하나 이상의 추가적인 이메일 메시지들의 풀 텍스트를 표시하는 것).
일부 실시예들에 있어서, 상기 요청이 상기 서버 시스템으로 전송된 후, 상기 클라이언트는 상기 로컬 데이터베이스에 저장되는 데이터 아이템 상에서 오퍼레이션(예컨대, 데이터 아이템을 표시하는 것)을 수행한다(840). 일부 실시예들에 있어서, 이러한 오퍼레이션은 상기 서버 시스템으로부터 응답을 기다리는 동안에 수행된다.
일부 실시예들에 있어서, 상기 서버 시스템은 상기 웹 어플리케이션으로부터 데이터 아이템에 대한 제2요청을 수신하되(842), 상기 제2요청은 상기 제1체크섬 및 상기 데이터 아이템의 식별자를 포함한다. 일부 실시예들에 있어서, 상기 데이터 아이템은 복수의 이산 구성요소들을 구비하고(예컨대, 상기 데이터 아이템은 대화이고, 상기 이산 구성요소들은 메시지들임), 상기 요청은 구성요소들의 식별자들을 포함한다(843)(예컨대, 상기 요청은 상기 데이터 아이템이 메시지들의 리스트인 대화인 경우에 메시지 식별자들을 포함한다). 응답 시, 상기 서버 시스템은 상기 중앙 데이터베이스로부터 데이터 아이템을 검색한다(844). 일부 실시예들에 있어서, 상기 서버 시스템은 상기 데이터 아이템 상에서 수행하기 위한 오퍼레이션들(예컨대, 기록 큐에 저장되어 상기 요청과 함께 전송된 오퍼레이션들)을 구비한다. 상기 서버 시스템은 상기 데이터 아이템을 수정하는 여하한의 오퍼레이션들을 수행한 다음(846)(예컨대, 도 7a 내지 도 7b를 참조하여 보다 상세히 상술된 바와 같이, 상기 기록 큐로부터의 모든 오퍼레이션들을 수행하고), 상기 데이터 아이템의 제2체크섬을 계산한다(848).
일부 실시예들에 있어서, 상기 서버 시스템은 상기 제1체크섬(또는 클라이언트-계산 체크섬)을 상기 제2체크섬에 비교한다. 상기 체크섬들이 일치한다면(850), 상기 서버 시스템은 상기 데이터 아이템이 업데이트되지 않은 것으로 판정하고, 상기 데이터 아이템이 업데이트되지 않은 것을 나타내는 클라이언트 장치에 답신을 전송한다(852). 일부 실시예들에 있어서, 상기 데이터 아이템이 업데이트되지 않은 것을 나타내는 답신은 엠프티 답신(empty reply)이다(이는 상기 데이터 아이템에 추가하기 위한 어떠한 데이터도 포함하지 않거나 또는 상기 로컬 데이터베이스에서 데이터 아이템을 교체하는 것을 제외하고는, 상기 데이터 아이템이 업데이트된 것을 나타내는 답신과 실질적으로 유사하다). 상기 클라이언트는 상기 서버로부터 응답을 수신하는데(854), 교체 데이터가 없기 때문이며(856), 상기 처리가 종료된다(857).
상기 체크섬들이 일치하지 않는다면(858), 상기 서버 시스템은 상기 데이터 아이템이 업데이트된 것으로 판정하고, 상기 데이터 아이템이 업데이트된 것을 나타내는 클라이언트에 답신을 전송한다(860). 상기 로컬 데이터베이스에서 데이터 아이템을 업데이트하기 위한 다수의 전략들: 일부 실시예들에 따르면, 1) 데이터 아이템과 연관된 데이터 모두가 교체되는 것, 또는 2) 교체되었거나 신규인 데이터 아이템의 구성요소들만이 데이터 아이템으로 교체/추가되는 것이 있다는 것을 이해하여야 한다.
일부 실시예들에 있어서, 상기 답신은 업데이트된 데이터 아이템(862) 및 제2체크섬을 포함한다(예컨대, 전체 업데이트된 데이터 아이템이 클라이언트로 전송됨). 상기 클라이언트는 상기 서버로부터 응답을 수신하는데(854), 교체 데이터(예컨대, 교체 대화)가 있기 때문이며(864), 상기 서버 시스템으로부터 수신되는 제2체크섬 및 데이터 아이템은 상기 로컬 데이터베이스에 저장되고(866), 오래된 데이터 아이템(예컨대, 앞서 저장된 대화) 및 상기 제1체크섬(또는 클라이언트-계산 체크섬)을 교체한다. 이러한 실시예는 네트워크 반응시간이 높은 경우(예컨대, 통신이 장시간 걸리는 경우)에 특히 이점이 있고, 상기 네트워크 접속은 고대역폭을 가진다(예컨대, 대량의 데이터가 용이하게 전송될 수 있다).
일부 실시예들에 있어서는, 상기 업데이트된 데이터 아이템(또는 데이터 아이템 구성요소들)이 상기 서버 시스템으로부터 수신된 후, 상기 데이터 아이템이 상기 웹 어플리케이션에서 재표시된다(867). 예를 들어, 유저는 이메일 인박스에서 대화(예컨대, 이메일 메시지들의 리스트)를 뷰잉하기 위하여 요청을 제출할 수도 있다. 상기 예시에 있어서, 상기 웹 어플리케이션은 초기에 상기 로컬 데이터베이스에 저장되는 대화의 카피를 표시한다. 로컬-저장된 대화를 표시하는 것과 연계하여, 상기 웹 어플리케이션은 체크섬 로컬-저장 대화를 포함하는 서버 시스템에 요청을 동시에(또는 거의 동시에) 전송한다. 상기 예시에 있어서, 상기 서버 시스템이 교체 대화(업데이트 데이터 아이템) 또는 상기 대화를 위한 추가적인 이메일 메시지들(신규/업데이트된 구성요소들)을 전송한다면, 상기 웹 어플리케이션은 상기 업데이트된 대화(또는 상기 대화에서의 신규 이메일들)를 재표시한다. 일부 실시예들에 있어서, 상기 데이터 아이템은 자동으로 업데이트된다(예컨대, 자동으로 재표시된다). 일부 실시예들에 있어서는, 현재 표시된 데이터 아이템이 최신의 것이 아니라는 것(예컨대, 이용가능한 업데이트된 데이터 아이템이 있다는 것)을 나타내는 메시지가 표시된다. 예를 들어, 상기 메시지는 "상기 대화에 대하여 신규 메시지들이 수신되었는데, 그들을 표시하겠는가?" 등의 메시지일 수도 있다. 일부 실시예들에 있어서, 업데이트된 데이터 아이템은, (예컨대, "릴로드(reload)" 버튼을 선택하거나 또는 "신규 메시지들 표시(display new messages)" 버튼을 선택함으로써) 상기 업데이트된 데이터 아이템이 표시된 것을 유저가 요청하는 경우에 표시된다(예컨대, 데이터 아이템이 재표시된다).
일부 실시예들에 있어서, 상기 클라이언트로부터의 요청이 구성요소 식별자들(예컨대, 메시지 식별자들)을 포함한 경우, 상기 답신은 하나 이상의 신규 구성요소들을 포함한다(868). 일부 실시예들에 있어서, 데이터 아이템의 신규 구성요소는 오래된 데이터 아이템의 여하한의 구성요소 식별자들을 일치하지 않는 구성요소 식별자를 갖는 구성요소이다(예컨대, 신규 이메일이 상기 대화에 추가됨). 일부 실시예들에 있어서, 신규 구성요소는 동일한 구성요소 식별자를 갖는 오래된 구성요소보다 상이한 체크섬을 구비한 업데이트된 구성요소이다(예컨대, 상기 대화에서의 이메일이 수정됨). 신규 구성요소들은 상기 데이터 아이템과 연관되는 구성요소들이지만, 상기 요청에 포함된 여하한의 구성요소 식별자들과 연관되지 않는다.
예를 들어, 상기 데이터 아이템이 대화이고 상기 구성요소들이 대화에서의 이메일 메시지들인 경우, 상기 클라이언트는 상기 대화의 구성요소들인 이메일 메시지들의 리스트(예컨대, 제1이메일, 제2이메일, 및 제3이메일) 및 상기 대화의 식별자를 포함하는 요청을 상기 서버에 전송한다. 상기 예시에 있어서, 상기 서버는 상기 중앙 데이터베이스로부터 대화를 검색하고, 상기 대화에 포함된 메시지 식별자들(예컨대, 제1이메일, 제2이메일, 및 제3이메일, 제4이메일과 제5이메일)을 주목하여, 답신 시 상기 클라이언트 장치에 신규 이메일 메시지들(예컨대, 제4이메일과 제5이메일)만 전송한다. 상기 클라이언트는 상기 서버로부터 응답을 수신하는데(854), 교체 데이터가 있기 때문이며(864), 상기 데이터 아이템의 신규 구성요소들은 상기 로컬 데이터베이스에 저장되고(866), 상기 로컬 데이터베이스에서의 데이터 아이템과 연관된다. 추가적으로, 상기 제2체크섬은 상기 로컬 데이터베이스에서 제1체크섬(또는 클라이언트-계산 체크섬)을 교체한다. 이러한 실시예는 네트워크 반응시간이 높은 경우(예컨대, 통신이 장시간 걸리는 경우)에 특히 이점이 있고, 상기 네트워크 접속은 보다 낮은 대역폭을 가진다(예컨대, 얼마나 많은 데이터가 전송될 수 있는 지에 관한 일부 제한들이 있어, 단지 약간의 구성요소들이 상기 중앙 데이터베이스에 저장된 데이터 아이템과 상기 로컬 데이터베이스에 저장된 데이터 아이템을 동기화하는데 필요한 경우에 상기 데이터 아이템의 단지 약간의 구성요소들을 전송하는데 이점이 있게 된다).
일부 실시예들에 있어서, 상기 클라이언트로부터의 요청이 구성요소 식별자들을 포함하지 않았던 경우, 상기 답신은 상기 데이터 아이템에서의 구성요소 식별자들에 대한 요청을 포함한다(870). 상기 실시예에 있어서, 상기 클라이언트는 상기 데이터 아이템과 연관된 구성요소 식별자들(예컨대, 대화와 연관된 메시지 식별자들 또는 스레드 리스트와 연관된 스레드 식별자들)에 대한 요청을 수신한다(872). 상기 클라이언트는 상기 로컬 데이터베이스로부터 상기 데이터 아이템과 연관된 구성요소 식별자들을 검색하고(874), (상기 데이터 아이템에 대한 관련된 유니크 식별자와 함께) 상기 구성요소 식별자들을 상기 서버 시스템에 전송한다(876). 상기 서버 시스템은 상기 요청을 수신하고, 상기 중앙 데이터베이스로부터 상기 유니크 식별자로 표시된 데이터 아이템을 검색한다(878).
상기 서버 시스템은 상기 중앙 데이터베이스에서의 데이터 아이템과 연관된 구성요소 식별자들을 상기 클라이언트 장치에 의해 상기 서버 시스템으로 전송된 구성요소 식별자들과 비교한다(880). 상기 두 세트의 구성요소 식별자들을 비교함으로써, 상기 서버 시스템은 있다고 한다면 상기 중앙 데이터베이스에서의 데이터 아이템의 어떤 구성요소들이 신규인 지를 판정한다(882). 일 예시에 있어서, 상기 데이터 아이템은 3개의 메시지들(예컨대, 구성요소들)과의 대화인데, 여기서 상기 클라이언트 버전의 대화는 제1의 두 메시지들만을 구비하는 한편, 상기 서버 시스템 버전의 대화는 3개의 메시지를 모두 구비한다. 상기 예시에 있어서, 상기 클라이언트는 상기 대화에서의 제1메시지 및 제2메시지에 대한 서버 시스템 메시지 식별자들을 전송한다. 상기 예시에 있어서, 상기 서버 시스템은 상기 중앙 데이터베이스로부터 대화를 검색하고, 제1메시지, 제2메시지 및 제3메시지를 식별한다. 상기 예시에 있어서, 상기 서버 시스템은 상기 중앙 데이터베이스로부터 검색된 메시지들에 대하여 상기 클라이언트로부터의 메시지 식별자들을 비교하고, 상기 제3메시지가 신규 메시지(예컨대, 신규 구성요소)인 것을 판정한다.
일부 실시예들에 있어서, 상기 데이터 아이템에 하나 이상의 신규 구성요소들이 있는 것으로 판정한 후, 상기 서버 시스템은 상기 제2체크섬과 함께 상기 클라이언트에 대하여 하나 이상의 신규 구성요소들을 전송한다(884). 상기 클라이언트는 하나 이상의 신규 구성요소(들) 및 제2체크섬을 수신하고(886), 상기 로컬 데이터베이스에 하나 이상의 신규 구성요소들과 제2체크섬을 저장한다(888). 상기 실시예는 전후로 보다 많은 트립(trip)들을 포함하지만, 상기 트립들 전체는 클라이언트와 서버 간에 전송되는 보다 적은 양의 데이터를 포함한다는 점에 유의해야 한다. 따라서, 상기 실시예는 네트워크 반응시간이 낮은 경우(예컨대, 통신이 단시간 걸리는 경우)에 특히 이점이 있고, 상기 네트워크 접속은 낮은 대역폭을 가진다(예컨대, 얼마나 많은 데이터가 전송될 수 있는 지에 관한 제한들이 있어, 그것이 전송될 필요가 있는 이들 데이터의 구성요소들만을 전송하는데 이점이 있게 된다).
일부 실시예들에 있어서는, 데이터 아이템들을 업데이트하기 위한 방법들(예컨대, 전체 데이터 아이템을 업데이트하는 것, 구성요소들을 전송하는 것, 또는 구성요소들의 리스트에 대한 요청을 전송한 다음 상기 구성요소들을 전송하는 것)의 조합이 사용되고, 상기 클라이언트 장치는 상기 클라이언트 장치와 상기 서버 시스템 간의 접속의 대역폭 및/또는 상기 접속의 반응시간을 판정하고, 네트워크 반응시간으로 인한 지체 시간(lag time) 또는 대역폭 이용가능성의 고려사항들을 토대로 사용하는 최고의 방법을 결정한다. 일부 실시예들에 있어서, 상기 서버 시스템은 클라이언트 장치와 서버 시스템 간의 접속의 대역폭 및/또는 상기 접속의 반응시간을 판정하고, 네트워크 반응시간으로 인한 지체 시간 또는 대역폭 이용가능성의 고려사항들을 토대로 사용하는 최고의 방법을 결정한다.
본 명세서에 기재된 방법들 각각은 컴퓨터로 판독가능한 기록매체에 저장되는 그리고 하나 이상의 서버 시스템(106) 또는 클라이언트 장치(102)들의 하나 이상의 프로세서들에 의해 실행되는 명령들에 의해 관리될 수도 있다. 도 7a 내지 도 7b 및 도 8a 내지 도 8d에 도시된 오퍼레이션들 각각은 컴퓨터 메모리 또는 컴퓨터로 판독가능한 기록매체에 저장된 명령들에 대응할 수도 있다.
상기 설명은 설명을 목적으로 특정 실시예들을 참조하여 기술되어 있다. 하지만, 상기 예시적인 논의들은 본 발명을 개시된 정확한 형태로 망라하거나 제한하려는 의도는 전혀 없다. 상기 기술적 사상의 관점에서는 수많은 수정예들과 변형예들이 가능하다. 상기 실시예들은 본 발명의 원리들과 그 실제 적용예들을 가장 잘 설명하도록 선택 및 기재되어, 당업계의 당업자가 본 발명 및 각종 실시예들을 심사숙고된 특정 용도에 적합한 각종 변형예들과 함께 최적으로 활용하도록 할 수 있게 되었다.

Claims (18)

  1. 오프라인 성능들을 갖는 웹 어플리케이션을 동작시키기 위한 컴퓨터 시스템으로서,
    컴퓨터 프로세서 및 컴퓨터 메모리를 구비하는 클라이언트 장치;
    상기 클라이언트 장치 상에서 실행하도록 구성된 웹 브라우저;
    상기 웹 브라우저 내에서 동작하도록 구성된 로컬 웹 어플리케이션;
    상기 로컬 웹 어플리케이션 및 상기 로컬 웹 어플리케이션과 연관된 서버 시스템 간의 통신들을 관리하도록 구성된 웹 인터페이스;
    상기 컴퓨터 메모리에 유지되는 기록 큐(write queue); 및
    다수의 데이터 아이템들을 포함하고 있는, 상기 컴퓨터 메모리에 유지되는 지속적인(persistent) 로컬 데이터베이스 ― 상기 다수의 데이터 아이템들의 각각은 각각의 개별적인 데이터 아이템이 상기 클라이언트 장치 상에서 및 상기 서버 시스템 상에서 고유하게 식별될 수 있게 하는 식별자와 연관됨 ― 를 포함하고,
    상기 웹 어플리케이션이 데이터 아이템 상에서 동작을 수행할 필요가 있을 때, 상기 웹 어플리케이션은 상기 데이터 아이템이 상기 로컬 데이터베이스에 있는지를 결정하기 위해서 데이터베이스 요청을 발행(issue)하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있지 않다면, 상기 웹 어플리케이션은 상기 웹 인터페이스를 통해 상기 서버 시스템으로 데이터 요청을 발행하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있고 상기 동작이 상기 데이터 아이템을 업데이팅하는 것을 수반한다면, 상기 웹 어플리케이션은 상기 데이터베이스에 저장된 상기 데이터 아이템 상에서 상기 동작을 수행하고, 상기 동작을 특징짓는 정보를 상기 데이터 아이템의 식별자와 함께 상기 기록 큐에 기록하며,
    상기 클라이언트 장치 및 상기 서버 시스템 간에 네트워크 접속이 존재할 때, 상기 웹 인터페이스는 상기 서버 시스템으로 상기 기록 큐를 드레인(drain)하는,
    컴퓨터 시스템.
  2. 제 2항에 있어서,
    상기 로컬 데이터베이스는 비-휘발성 메모리에 저장되는,
    컴퓨터 시스템.
  3. 제 1항 또는 제 2항 중 어느 한 항에 있어서,
    상기 웹 어플리케이션은 오프라인 성능들을 갖는 웹-기반 이메일 어플리케이션인,
    컴퓨터 시스템.
  4. 제 1항 내지 제 3항 중 어느 한 항에 있어서,
    상기 데이터 아이템들은 이메일 어플리케이션 내의 스레드 리스트들(thread lists) 또는 대화들(conversations)인,
    컴퓨터 시스템.
  5. 제 1항 내지 제 4항 중 어느 한 항에 있어서,
    상기 컴퓨터 시스템은 캐시(cache)가 가득 찼음을 검출하고,
    상기 캐시 내의 데이터 아이템들 중 적어도 일부가 캐시 대체 정책에 따른 삭제를 위해 마킹(marked)되는,
    컴퓨터 시스템.
  6. 제 1항 내지 제 5항 중 어느 한 항에 있어서,
    상기 드레인하는 것은 상기 기록 큐의 동작들이 상기 기록 큐에 저장된 순서에 따라 상기 동작들을 상기 서버 시스템으로 전송하는 것을 포함하는,
    컴퓨터 시스템.
  7. 컴퓨터 프로세서 및 컴퓨터 메모리를 구비한 클라이언트 장치에서 오프라인 성능들을 갖는 웹 어플리케이션을 동작시키기 위한 컴퓨터-구현 방법으로서,
    상기 클라이언트 장치 상에서 웹 브라우저를 실행하는 단계;
    상기 웹 브라우저 내에서 동작하도록 구성된 로컬 웹 어플리케이션을 실행하는 단계;
    상기 로컬 웹 애플리케이션 및 상기 로컬 웹 애플리케이션과 연관된 서버 시스템 간의 통신들을 웹 인터페이스를 사용하여 관리하는 단계;
    상기 컴퓨터 메모리에 기록 큐를 유지하는 단계; 및
    다수의 데이터 아이템들을 포함하는, 상기 컴퓨터 메모리 내의 지속적인 로컬 데이터베이스를 유지하는 단계 ― 상기 다수의 데이터 아이템들의 각각은 각각의 개별적인 데이터 아이템이 상기 클라이언트 장치 상에서 및 상기 서버 시스템 상에서 고유하게 식별될 수 있게 하는 식별자와 연관됨 ― 를 포함하고,
    상기 웹 어플리케이션이 데이터 아이템 상에서 동작을 수행할 필요가 있을 때, 상기 웹 어플리케이션은 상기 데이터 아이템이 상기 로컬 데이터베이스에 있는지를 결정하기 위해서 데이터베이스 요청을 발행(issue)하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있지 않다면, 상기 웹 어플리케이션은 상기 웹 인터페이스를 통해 상기 서버 시스템으로 데이터 요청을 발행하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있고 상기 동작이 상기 데이터 아이템을 업데이팅하는 것을 수반한다면, 상기 웹 어플리케이션은 상기 데이터베이스에 저장된 상기 데이터 아이템 상에서 상기 동작을 수행하고, 상기 동작을 특징짓는 정보를 상기 데이터 아이템의 식별자와 함께 상기 기록 큐에 기록하며,
    상기 클라이언트 장치 및 상기 서버 시스템 간에 네트워크 접속이 존재할 때, 상기 웹 인터페이스는 상기 서버 시스템으로 상기 기록 큐를 드레인(drain)하는,
    컴퓨터-구현 방법.
  8. 제 7항에 있어서,
    상기 로컬 데이터베이스는 비-휘발성 메모리에 저장되는,
    컴퓨터-구현 방법.
  9. 제 7항 또는 제 8항 중 어느 한 항에 있어서,
    상기 웹 어플리케이션은 오프라인 성능들을 갖는 웹-기반 이메일 어플리케이션인,
    컴퓨터-구현 방법.
  10. 제 7항 내지 제 9항 중 어느 한 항에 있어서,
    상기 데이터 아이템들은 이메일 어플리케이션 내의 스레드 리스트들(thread lists) 또는 대화들(conversations)인,
    컴퓨터-구현 방법.
  11. 제 7항 내지 제 10항 중 어느 한 항에 있어서,
    상기 컴퓨터 시스템은 캐시(cache)가 가득 찼음을 검출하고,
    상기 캐시 내의 데이터 아이템들 중 적어도 일부가 캐시 대체 정책에 따른 삭제를 위해 마킹(marked)되는,
    컴퓨터-구현 방법.
  12. 제 7항 내지 제 11항 중 어느 한 항에 있어서,
    상기 기록 큐를 드레인하는 것은 상기 기록 큐의 동작들이 상기 기록 큐에 저장된 순서에 따라 상기 동작들을 상기 서버 시스템으로 전송하는 것을 포함하는,
    컴퓨터-구현 방법.
  13. 클라이언트 장치의 하나 이상의 프로세서들에 의해 실행하기 위한 하나 이상의 프로그램들을 저장하는 컴퓨터 판독가능 저장 매체로서, 상기 하나 이상의 프로그램들은,
    상기 클라이언트 장치 상에서 웹 브라우저를 실행하기 위한 명령;
    상기 웹 브라우저 내에서 로컬 웹 어플리케이션을 실행하기 위한 명령;
    상기 로컬 웹 애플리케이션 및 상기 로컬 웹 애플리케이션과 연관된 서버 시스템 간의 통신들을 웹 인터페이스를 사용하여 관리하기 위한 명령;
    메모리에 기록 큐를 유지하기 위한 명령; 및
    다수의 데이터 아이템들을 포함하는, 상기 메모리 내의 지속적인 로컬 데이터베이스를 유지하기 위한 명령 ― 상기 다수의 데이터 아이템들의 각각은 각각의 개별적인 데이터 아이템이 상기 클라이언트 장치 상에서 및 상기 서버 시스템 상에서 고유하게 식별될 수 있게 하는 식별자와 연관됨 ― 을 포함하고,
    상기 웹 어플리케이션이 데이터 아이템 상에서 동작을 수행할 필요가 있을 때, 상기 웹 어플리케이션은 상기 데이터 아이템이 상기 로컬 데이터베이스에 있는지를 결정하기 위해서 데이터베이스 요청을 발행(issue)하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있지 않다면, 상기 웹 어플리케이션은 상기 웹 인터페이스를 통해 상기 서버 시스템으로 데이터 요청을 발행하고,
    만약 상기 데이터 아이템이 상기 로컬 데이터베이스에 있고 상기 동작이 상기 데이터 아이템을 업데이팅하는 것을 수반한다면, 상기 웹 어플리케이션은 상기 데이터베이스에 저장된 상기 데이터 아이템 상에서 상기 동작을 수행하고, 상기 동작을 특징짓는 정보를 상기 데이터 아이템의 식별자와 함께 상기 기록 큐에 기록하며,
    상기 클라이언트 장치 및 상기 서버 시스템 간에 네트워크 접속이 존재할 때, 상기 웹 인터페이스는 상기 서버 시스템으로 상기 기록 큐를 드레인(drain)하는,
    컴퓨터 판독가능 저장 매체.
  14. 제 13항에 있어서,
    상기 로컬 데이터베이스는 비-휘발성 메모리에 저장되는,
    컴퓨터 판독가능 저장 매체.
  15. 제 13항 또는 제 14항 중 어느 한 항에 있어서,
    상기 웹 어플리케이션은 오프라인 성능들을 갖는 웹-기반 이메일 어플리케이션인,
    컴퓨터 판독가능 저장 매체.
  16. 제 13항 내지 제 15항 중 어느 한 항에 있어서,
    상기 데이터 아이템들은 이메일 어플리케이션 내의 스레드 리스트들(thread lists) 또는 대화들(conversations)인,
    컴퓨터 판독가능 저장 매체.
  17. 제 13항 내지 제 16항 중 어느 한 항에 있어서,
    상기 컴퓨터 시스템은 캐시(cache)가 가득 찼음을 검출하고,
    상기 캐시 내의 데이터 아이템들 중 적어도 일부가 캐시 대체 정책에 따른 삭제를 위해 마킹(marked)되는,
    컴퓨터 판독가능 저장 매체.
  18. 제 13항 내지 제 17항 중 어느 한 항에 있어서,
    상기 기록 큐를 드레인하는 것은 상기 기록 큐의 동작들이 상기 기록 큐에 저장된 순서에 따라 상기 동작들을 상기 서버 시스템으로 전송하는 것을 포함하는,
    컴퓨터 판독가능 저장 매체.
KR1020117026251A 2009-04-03 2010-04-01 지속적인 웹 어플리케이션 설계를 위한 구조적 패턴 KR101647071B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/418,483 2009-04-03
US12/418,483 US8725793B2 (en) 2009-04-03 2009-04-03 Architectural pattern for persistent web application design

Publications (2)

Publication Number Publication Date
KR20120005490A true KR20120005490A (ko) 2012-01-16
KR101647071B1 KR101647071B1 (ko) 2016-08-09

Family

ID=42209489

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117026251A KR101647071B1 (ko) 2009-04-03 2010-04-01 지속적인 웹 어플리케이션 설계를 위한 구조적 패턴

Country Status (8)

Country Link
US (1) US8725793B2 (ko)
EP (2) EP2665001B1 (ko)
KR (1) KR101647071B1 (ko)
CN (1) CN102449628A (ko)
AU (1) AU2010232614B2 (ko)
CA (1) CA2760798A1 (ko)
DE (1) DE202010018490U1 (ko)
WO (1) WO2010114964A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140124362A (ko) * 2012-01-18 2014-10-24 마이크로소프트 코포레이션 로컬 및 원격으로 저장된 전자 메시지의 혼합 프레젠테이션을 위한 시스템 및 방법

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011031130A1 (en) * 2009-09-08 2011-03-17 Emanual System Sdn Bhd System and method of implementing a data management system
US20110087603A1 (en) * 2009-10-13 2011-04-14 Google Inc. Cloud based media player and offline media access
US20120124142A1 (en) 2010-11-15 2012-05-17 Robert Kroeger Light-Weight Method for Delivering the Smallest Set of New Messages to a Conversation Cache on an Intermittently Connected Mobile Email Client
US8868644B2 (en) * 2010-11-15 2014-10-21 Google Inc. Mechanism for message prefetching in an intermittently connected offline-capable mobile web application
CN102541852B (zh) * 2010-12-07 2015-11-25 北京奇虎科技有限公司 一种网页应用的客户端软件实现方法
EP2649540A1 (en) * 2010-12-08 2013-10-16 N&N Chopra Consultants Pvt. Ltd. System and method for integrating software functionalities on n-layer architecture platform
US8966059B2 (en) * 2011-04-06 2015-02-24 Microsoft Technology Licensing, Llc Cached data detection
US8554729B2 (en) 2011-08-31 2013-10-08 Google Inc. System and method for synchronization of actions in the background of an application
WO2013059199A1 (en) * 2011-10-17 2013-04-25 Disintermediation Services, Inc. Two-way real time communication allowing asymmetric participation across multiple electronic platforms
US9152732B2 (en) * 2011-11-02 2015-10-06 Microsoft Technology Licensing, Llc. Browser cache assist for accessing web-based content
US20130159389A1 (en) * 2011-12-19 2013-06-20 Microsoft Corporation Utilizing Dynamic Heuristic Transitions between Local and Remote Data for Displaying Electronic Communications
AT513242B1 (de) * 2012-07-02 2018-07-15 Frequentis Ag Verfahren zur Synchronisation von Daten in einem Computernetzwerk
CN103078945B (zh) * 2013-01-07 2015-11-25 北京奇虎科技有限公司 对浏览器崩溃数据进行处理的方法与系统
CN103152381B (zh) * 2013-01-07 2016-06-29 北京奇虎科技有限公司 一种对浏览器崩溃数据进行处理的方法和服务器系统
US9292709B1 (en) 2013-02-05 2016-03-22 Google Inc. Computing a checksum for content in local storage
US9614932B2 (en) * 2013-03-14 2017-04-04 Microsoft Technology Licensing, Llc Managing and implementing web application data snapshots
CN104219198B (zh) * 2013-05-30 2018-04-27 中国银联股份有限公司 一种WebApp的防篡改方法
US9760897B2 (en) * 2013-09-21 2017-09-12 Oracle International Corporation Method and system for defining an offlinable view/controller graph
US9456335B2 (en) 2013-09-21 2016-09-27 Oracle International Corporation Method and system for defining an offlinable model graph
US10104081B2 (en) * 2013-12-19 2018-10-16 Google Llc Privileged static hosted web applications
CN105338037A (zh) * 2014-08-07 2016-02-17 中兴通讯股份有限公司 一种动态调度方法及系统
CN105763588B (zh) * 2014-12-18 2020-02-04 阿里巴巴集团控股有限公司 一种关系网络数据的维护方法、离线服务器及实时服务器
US11102313B2 (en) * 2015-08-10 2021-08-24 Oracle International Corporation Transactional autosave with local and remote lifecycles
US10419514B2 (en) 2015-08-14 2019-09-17 Oracle International Corporation Discovery of federated logins
US10452497B2 (en) * 2015-08-14 2019-10-22 Oracle International Corporation Restoration of UI state in transactional systems
US10582012B2 (en) 2015-10-16 2020-03-03 Oracle International Corporation Adaptive data transfer optimization
US10387392B2 (en) 2016-05-17 2019-08-20 Rockwell Automation Technologies, Inc. Method to automate historian configuration using controller based tag meta attribute
CN106325936A (zh) * 2016-08-24 2017-01-11 明算科技(北京)股份有限公司 应用程序快速访问的方法和系统
US10498684B2 (en) 2017-02-10 2019-12-03 Microsoft Technology Licensing, Llc Automated bundling of content
US10911389B2 (en) * 2017-02-10 2021-02-02 Microsoft Technology Licensing, Llc Rich preview of bundled content
US10909156B2 (en) 2017-02-10 2021-02-02 Microsoft Technology Licensing, Llc Search and filtering of message content
US10931617B2 (en) 2017-02-10 2021-02-23 Microsoft Technology Licensing, Llc Sharing of bundled content
CN109451064B (zh) * 2018-12-26 2021-08-17 深圳左邻永佳科技有限公司 web应用的离线实现方法、装置、计算机设备和存储介质
US11138288B2 (en) * 2019-08-01 2021-10-05 International Business Machines Corporation Priority-based rendering
CN110825761B (zh) * 2019-11-14 2024-02-23 中国船舶重工集团公司第七0七研究所 一种面向船岸分布式电子海图系统的海图数据布置与更新方法
CN116366472B (zh) * 2023-04-11 2023-10-13 广东保伦电子股份有限公司 一种减少服务器转发压力的前端控制、服务器转发方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030187957A1 (en) * 2002-03-29 2003-10-02 Tong Huang Automatic data download system and method
US20060259567A1 (en) * 2005-05-16 2006-11-16 Jennings Cullen F Configurable downloading of content pointed to in electronic messages
US20070033569A1 (en) * 2005-08-02 2007-02-08 Davidson James G Client/server web application architectures for offline usage, data structures, and related methods
WO2008054951A1 (en) * 2006-10-30 2008-05-08 Microsoft Corporation Offline execution of web based applications

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6766369B1 (en) 1998-03-09 2004-07-20 Net Zero, Inc. Internet service error tracking
US6964008B1 (en) 1999-11-12 2005-11-08 Maxtor Corporation Data checksum method and apparatus
US6470329B1 (en) * 2000-07-11 2002-10-22 Sun Microsystems, Inc. One-way hash functions for distributed data synchronization
US6704024B2 (en) 2000-08-07 2004-03-09 Zframe, Inc. Visual content browsing using rasterized representations
DE10047216A1 (de) 2000-09-23 2002-04-11 Philips Corp Intellectual Pty Ein Verfahren zur Erkennung von Schreibkonflikten in replizierten Datenbanken ohne Speicheroverhead
US6961759B2 (en) 2001-09-24 2005-11-01 International Business Machines Corporation Method and system for remotely managing persistent state data
JP3823040B2 (ja) * 2001-10-12 2006-09-20 インターナショナル・ビジネス・マシーンズ・コーポレーション データ記憶装置、データ処理装置、書き込み要求の実行順序を最適化する方法、データ処理方法およびハード・ディスク・ドライブ
US7152242B2 (en) 2002-09-11 2006-12-19 Enterasys Networks, Inc. Modular system for detecting, filtering and providing notice about attack events associated with network security
US7487502B2 (en) 2003-02-19 2009-02-03 Intel Corporation Programmable event driven yield mechanism which may activate other threads
US7092703B1 (en) 2003-03-24 2006-08-15 Sprint Spectrum L.P. Method and system for accessing a universal message handler on a mobile device
US7272782B2 (en) 2003-12-19 2007-09-18 Backweb Technologies, Inc. System and method for providing offline web application, page, and form access in a networked environment
US7814155B2 (en) 2004-03-31 2010-10-12 Google Inc. Email conversation management system
JP2005301791A (ja) 2004-04-14 2005-10-27 Nec Corp 移動通信端末および移動通信端末のアプリケーション起動制御方法
US8230423B2 (en) 2005-04-07 2012-07-24 International Business Machines Corporation Multithreaded processor architecture with operational latency hiding
US8595744B2 (en) 2006-05-18 2013-11-26 Oracle America, Inc. Anticipatory helper thread based code execution
US7792792B2 (en) 2006-05-22 2010-09-07 Microsoft Corporation Synchronizing structured web site contents
US7769144B2 (en) 2006-07-21 2010-08-03 Google Inc. Method and system for generating and presenting conversation threads having email, voicemail and chat messages
US20080147671A1 (en) 2006-12-18 2008-06-19 Lampdesk Corporation System for Running Web Applications Offline and Providing Access to Native Services
US7788540B2 (en) 2007-01-31 2010-08-31 Microsoft Corporation Tracking down elusive intermittent failures
EP1956499A1 (en) * 2007-02-09 2008-08-13 Research In Motion Limited System and method for managing databases associated with respective personal information manager service accounts
EP1962192A1 (en) 2007-02-21 2008-08-27 Deutsche Telekom AG Method and system for the transparent migration of virtual machine storage
US8244907B2 (en) 2007-10-16 2012-08-14 International Business Machines Corporation Browser-based logoff from distributed and federated environments
US8819560B2 (en) 2008-08-04 2014-08-26 International Business Machines Corporation Dispatching events to multiple browser windows/tabs using a single connection
US9792384B2 (en) 2009-02-26 2017-10-17 Red Hat, Inc. Remote retreival of data files
US8745202B2 (en) 2009-04-03 2014-06-03 Google Inc. Tracking remote browser crashes via cookies
US8260876B2 (en) 2009-04-03 2012-09-04 Google Inc. System and method for reducing startup cost of a software application
US8666954B2 (en) 2009-04-03 2014-03-04 Google Inc. Reduced bandwidth cache coherency via checksum exchange

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030187957A1 (en) * 2002-03-29 2003-10-02 Tong Huang Automatic data download system and method
US20060259567A1 (en) * 2005-05-16 2006-11-16 Jennings Cullen F Configurable downloading of content pointed to in electronic messages
US20070033569A1 (en) * 2005-08-02 2007-02-08 Davidson James G Client/server web application architectures for offline usage, data structures, and related methods
WO2008054951A1 (en) * 2006-10-30 2008-05-08 Microsoft Corporation Offline execution of web based applications

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140124362A (ko) * 2012-01-18 2014-10-24 마이크로소프트 코포레이션 로컬 및 원격으로 저장된 전자 메시지의 혼합 프레젠테이션을 위한 시스템 및 방법
US10255587B2 (en) 2012-01-18 2019-04-09 Microsoft Technology Licensing, Llc System and method for blended presentation of locally and remotely stored electronic messages

Also Published As

Publication number Publication date
DE202010018490U1 (de) 2017-02-09
AU2010232614A1 (en) 2011-11-24
EP2665001B1 (en) 2018-06-20
US20100257230A1 (en) 2010-10-07
CN102449628A (zh) 2012-05-09
EP2665001A3 (en) 2014-10-08
EP2414965A1 (en) 2012-02-08
US8725793B2 (en) 2014-05-13
WO2010114964A1 (en) 2010-10-07
EP2665001A2 (en) 2013-11-20
AU2010232614B2 (en) 2015-06-11
CA2760798A1 (en) 2010-10-07
KR101647071B1 (ko) 2016-08-09

Similar Documents

Publication Publication Date Title
KR101647071B1 (ko) 지속적인 웹 어플리케이션 설계를 위한 구조적 패턴
AU2010232613B2 (en) System and method for reducing startup cost of a software application
US11899618B2 (en) Architecture for management of digital files across distributed network
US20100325363A1 (en) Hierarchical object caching based on object version
KR20050001422A (ko) 캐시 엔트리를 무효화시키는 데 사용될 수 있는데이터베이스 테이블 변경 정보의 등록 및 검색
US20200387541A1 (en) Remote virtualized asset delivery and local provisioning
US8666954B2 (en) Reduced bandwidth cache coherency via checksum exchange
KR101345802B1 (ko) 룰 데이터 처리 시스템 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190724

Year of fee payment: 4