ZIP
확장자.zip
.zipx (새로운 압축 알고리즘)
MIME 종류application/zip
개발필 캐츠
파일 포맷 종류파일 압축


ZIP 파일 형식이란 데이터를 압축, 보관하기 위한 파일형식이다. ZIP 파일은 하나 혹은 여러개의 파일들을 그 크기를 줄여 압축하고 하나로 묶어 저장한다. ZIP 파일 형식에서는 다양한 종류의 압축 알고리즘의 사용이 가능하나, 2009년 현재 Deflate 알고리즘만이 가장 많이 사용되고, 지원되는 압축 압축알고리즘이다.

파일 형식은 1989년 Phil Katz가 PKZIP에서 사용하기 위해 만들어진 것으로, Thom Henderson의 ARC 파일 압축 형식을 발전시킨 것이다. 현재도 PKZIP 형식은 PKZIP뿐만 아닌 다른 많은 유틸리티 소프트웨어에서 지원하고 있다. 마이크로소프트사는 1998년도부터 "압축 폴더"라는 이름으로 운영 체제에 포함시켜 지원하고 있으며, 애플사는 맥 오에스 텐 10.3버전부터 지원하고 있다.

ZIP 파일은 일반적으로 그 파일의 확장자로 ".zip" 혹은 ".ZIP"으로 사용하고, MIME 형식으로는 application/zip으로 표시하여 사용한다. 또한 다양한 소프트웨어에서 파일 저장형식으로 사용되고 있으나, 그럴 경우 일반적으로 그 파일의 확장자가 다른 형태로 저장된다. 예를 들어, 자바의 경우 .jar 로, 모질라 파이어폭스의 애드온의 경우 .xpi로, 이드 소프트웨어사의 .pk3/.pk4 파일이 그러하며, 윈앰프나 윈도 미디어 플레이어 의 스킨 파일들과 오픈오피스의 오픈도큐먼트 파일인 .odt와 마이크로소프트사의 Open XML 파일형식인 .docx도 그러하다.

목차

  [숨기기

발전사 [편집]

태동기 [편집]

1980년대 중반 Thom Henderson이 운영하던 작은 회사인 System Enhancement Associates사는 ARC라는 프로그램을 발표한다. 이 프로그램은 SEA사가 개발한 ARC 파일 형식으로 대상 파일을 압축하거나, 해당 형식의 파일의 압축을 해제하는 기능을 가진다. 이 프로그램은 다양한 플랫폼을 지원하며, 소스파일을 포함하여 셰어웨어 형태로 배포되었다. 이 파일 형식은 곧 사실상의 표준이 되었다. Phil Kats는 PKXARC라는 이름으로 IBM 호환기종(IBM 인텔 DOS 플랫폼)에서 운영되는 ARC와 호환 가능한 프로그램을 발표한다. 이 프로그램은 8088 어셈블리어로 최적화되어 다양한 플랫폼에 적용하기 위해 C언어로 작성된 ARC보다 상당히 빠른 수행성능을 나타냈다.

ZIP이란 이름은 Katz의 친구 로버트(Robert Mahoney)가 제안한 것이다. 이는 그 당시 ARC 및 다른 파일 형식보다 빠른 제품을 만드는 것을 기원하며 이름을 지었다.





DEFLATE는 ZIPgzip 등의 프로그램에서 사용되는 무손실 압축 데이터 포맷이자 알고리즘이다. 필 캐츠가 PKZIP에 쓰기 위하여 고안하였으며, 후에 이 알고리즘은 RFC 1951로 등록되었다.

DEFLATE 알고리즘은 특허가 걸린 기술을 사용하지 않는 것으로 알려져 있으며, 때문에 필 캐츠가 설계했던 ZIP를 비롯해 많은 파일 포맷과 프로그램에서 광범위하게 사용되고 있다. 대조적으로 GIF 이미지 파일 포맷에서 사용된 LZW 알고리즘의 특허는 2003년에야 만료되었고, 이는 DEFLATE 알고리즘을 사용하는 PNG 이미지 파일 포맷의 개발을 촉진시켰다.

기술 [편집]

DEFLATE는 기본적으로 LZ77 알고리즘을 통해 데이터를 압축한 뒤, 중복되는 내용에 대한 포인터(일치하는 내용의 위치와 길이)를 허프만 부호화를 사용하여 한 번 더 압축한다.

DEFLATE 알고리즘은 일반적으로 그 압축률에 비해 압축/해제 속도가 빠르나, 나중에 나온 압축 알고리즘에 비해서는 압축률이 다소 떨어지는 경향이 있다.

구현 [편집]

zlib 범용 압축 라이브러리는 DEFLATE 알고리즘의 대표적인 구현이다. 7-Zip에서는 DEFLATE와 같은 포맷을 사용하면서 압축률을 더 높이는 알고리즘을 사용하고 있으며, 켄 실버맨(Ken Silverman)의 KZIP과 PNGOUT에서도 더 효율적인 알고리즘을 구현하고 있다.

바깥 고리 [편집]



출처 - http://ko.wikipedia.org/wiki/DEFLATE








Shared Dictionary Compression over HTTP (SDCH) is a data compression method aimed to reduce redundancy across HTTP responses .[1] This method is proposed by Google and implemented in their Google Chrome web browser. This is a proposed modification to HTTP/1.1. SDCH is using VCDIFF (RFC 3284) for the compression.

References[edit]


출처 - http://en.wikipedia.org/wiki/SDCH










'Web > Common' 카테고리의 다른 글

web - 반응형(responsive) 웹  (0) 2013.09.14
web - deep link(딥링크)  (0) 2013.07.28
web - BOM, DOM  (0) 2013.06.26
네이버지도에서 ‘내 위치’  (0) 2013.04.29
web - content negotiation  (0) 2013.01.10
Posted by linuxism
,


각 엘리먼트마다 이벤트를 주면 새로 로드한 것들은 이벤트를 다시 주어야 합니다.

하지만 이벤트를 다시주는 일은 피곤하지요.

이런 경우에는 delegate 나 live 를 통해 해결합니다.

jQuery의 delegate(), live(). 1.7부터는 on 도 추가되었으니 확인해보세요.



출처 - http://m.clien.net/cs3/board?bo_table=kin&bo_style=view&wr_id=2436195




'Development > jQuery' 카테고리의 다른 글

jquery - fullCalendar events function  (1) 2013.07.29
jquery - fullCalendar viewchanged  (0) 2013.07.28
jQuery - History/Back Button plugins  (0) 2013.06.25
jquery - 메소드 정리  (0) 2012.11.01
jQuery - textarea byte check  (0) 2012.07.24
Posted by linuxism
,

ajax - xmlhttprequest

Web/Ajax 2013. 6. 26. 12:45


XMLHttpRequest는 Microsoft가 만든 JavaScript 개체(object)입니다. 후에 Mozilla도 이것을 받아들였습니다. XMLHttpRequest는 HTTP를 통해서 쉽게 데이터를 받을 수 있게 해줍니다. 이름과는 좀 동떨어지게도 XML 문서 이상의 용도로 쓰일 수 있습니다. Gecko에서 이 개체는nsIJSXMLHttpRequest와 nsIXMLHttpRequest 인터페이스를 구현한 개체입니다. 최신 버전 Gecko에서 이 개체에 변경 사항이 좀 있었습니다.XMLHttpRequest changes for Gecko1.8을 보십시오.

기본 사용

XMLHttpRequest의 사용법은 아주 간단합니다. 이 개체의 인스턴스를 만들고, URL을 열고, 요청을 보내면 됩니다. 그 후에는 인스턴스의 결과 문서와 HTTP 상태 코드를 사용할 수 있게됩니다.

var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', false);
req.send(null);
if(req.status == 200)
  dump(req.responseText);
참고: 이 예제는 동기적으로 동작하므로 이 함수를 JavaScript에서 호출하면 UI가 멈춥니다. 실제 제품 코드에서는 이 코드를 사용하지 마십시오.

비동기 사용

XMLHttpRequest를 확장 기능에서 사용하려면 반드시 비동기적으로 동작하도록 해야합니다. 비동기적으로 사용할 때, 데이터가 오면 콜백을 받게 됩니다. 이로써 브라우저가 우리 요청을 처리하는 동안에도 평상시처럼 계속 동작하게 됩니다.

var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', true);
req.onreadystatechange = function (aEvt) {
  if (req.readyState == 4) {
     if(req.status == 200)
      dump(req.responseText);
     else
      dump("Error loading page\n");
  }
};
req.send(null);

프로그레스 모니터링

XMLHttpRequest가 지원하는 nsIJSXMLHttpRequest 인터페이스는 요청이 처리되는 동안 발생할 수 있는 다양한 이벤트를 들을 수 있습니다. 주기적인 진행 상태 알림, 에러 알림 등등이 이에 포함됩니다.

예를 들어, 문서를 받는 동안 사용자에게 진행 상태 정보를 제공하려면 다음과 같은 코드를 사용할 수 있습니다.

onProgress: function(e) {
  var percentComplete = (e.position / e.totalSize)*100;
  ...
},

onError: function(e) {
  alert("Error " + e.target.status + " occurred while receiving the document.");
},
..
httpRequest = new XMLHttpRequest();
httpRequest.open("GET", url, true);
httpRequest.onprogress = this.onProgress;
httpRequest.onload = this.onLoad;
httpRequest.onerror = this.onError;
httpRequest.send(null);

onprogress의 속성인 position과 totalSize는 받은 데이터가 몇 바이트인지, 데이터의 전체 크기가 몇 바이트인지 각각 나타냅니다.

모든 이벤트는 그에 대응하는 XMLHttpRequest를 target 속성으로 가지고 있습니다.

다른 속성과 메소드

위에서 살펴본 특성(property)과 메소드 외에도 요청 개체에는 유용한 특성과 메소드가 있습니다.

responseXML

XML 문서를 읽어들일 때, responseXML 특성은 XmlDocument 개체인 채로 XML 문서를 포함하고 있습니다. 이 문서는 DOM 메소드를 이용해서 조작할 수 있습니다. 서버가 적격의(well-formed) XML이긴 하지만 XML Content-Type 헤더가 명시되지 않은 문서를 보냈을 때, 브라우저가 문서를 XML로 간주하도록 하기 위해 overrideMimeType() 을 사용할 수 있습니다. 서버가 적격이 아닌 XML 문서를 보냈을 때는 어떤 재정의(override)가 있더라도 상관없이 responseXML은 null이 됩니다.

overrideMimeType()

이 메소드는 문서를 특정한 content type으로 처리하도록 강제하는데 사용됩니다. 서버가 XML 문서를 보내오지만 Content-Type 헤더를 제대로 설정해서 보내지 않을 때 responseXML를 사용하고 싶다면 이 메소드를 사용하면 됩니다.

참고: 이 메소드는 반드시 send() 보다 먼저 호출되어야 합니다.
var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', true);
req.overrideMimeType('text/xml');
req.send(null);

setRequestHeader()

요청을 보내기 전에 요청의 HTTP 헤더를 설정하려면 이 메소드를 사용합니다.

참고: 이 메소드를 사용하기 전에 반드시 open()을 호출해야 합니다.
var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', true);
req.setRequestHeader("X-Foo", "Bar");
req.send(null);

getResponseHeader()

서버 응답으로부터 HTTP 헤더를 얻고 싶을 때 이 메소드를 사용합니다.

var req = new XMLHttpRequest();
req.open('GET', 'http://www.mozilla.org/', true);
req.send(null);
dump("Content-Type: " + req.getResponseHeader("Content-Type") + "\n");

XPCOM에서 사용하기

참고: JavaScript XPCOM 구성요소(component)에서 XMLHttpRequest를 사용하려면 변경이 필요합니다.

JavaScript XPCOM에서는 XMLHttpRequest() 생성자로 XMLHttpRequest 개체를 생성할 수 없습니다. 구성요소 안에서는 생성자가 정의되지 않고, 코드는 에러를 발생시킵니다. 그러므로 우리는 다른 문법을 사용해야 합니다.

이렇게 쓰는 대신,

var req = new XMLHttpRequest();
req.onprogress = onProgress;
req.onload = onLoad;
req.onerror = onError;
req.open("GET", url, true);
req.send(null);

이렇게 합니다.

var request = Components.
              classes["@mozilla.org/xmlextras/xmlhttprequest;1"].
              createInstance();

// 이벤트 핸들러를 설정하기 위해서 nsIDOMEventTarget을 사용

request = request.QueryInterface(Components.interfaces.nsIDOMEventTarget);
request.addEventListener("progress", function(evt) { ... }, false);
request.addEventListener("load", function(evt) { ... }, false);
request.addEventListener("error", function(evt) { ... }, false);

// 요청을 보내기 위해서 nsIXMLHttpRequest를 사용

request = request.QueryInterface(Components.interfaces.nsIXMLHttpRequest);
request.open("GET", "http://www.example.com/", true);
request.send(null);

References

  1. XMLHttpRequest - REST and the Rich User Experience
  2. XULPlanet documentation
  3. Microsoft documentation
  4. Apple developers' reference
  5. "Using the XMLHttpRequest Object" (jibbering.com)
  6. The XMLHttpRequest Object: W3C Working Draft



출처 - https://developer.mozilla.org/ko/docs/XMLHttpRequest








'Web > Ajax' 카테고리의 다른 글

ajax - 보안  (0) 2012.07.07
AJAX 기본 개념  (0) 2012.04.24
Posted by linuxism
,