저는 서버 엔진 개발자입니다만, 가끔 아름다운 뷰로 클라이언트(사내일수도 있고, 사외일수도 있고)들을 유혹하기 위하여 RIA쪽을 살펴보고 있습니다.
여러 기술 가운데 FLEX가 이해하기 쉽고, 개발SDK가 무료여서 책 몇권을 구입하여 보고 있습니다.

그중 한권이 바로 바닐라로이라는 회사에서 펴낸 플렉스 3 노하우 바이블이라는 책입니다.

FLEX 3 KNOWHOW BIBLE(FX)
카테고리 컴퓨터/인터넷
지은이 바닐라로이 (대림, 2008년)
상세보기


이 책...개인적으로 별로 권하지 않습니다. 바이블이라면 사실 개념적인 이야기와 실제 적용사례까지 적절히 소개되어야 하지만, 이 책에서 다루는 것은 마치 각 이슈별 예제코드를 테마로 정리해 놓은 수준입니다. (뭐 이런 스타일이야 개인차가 있는 것은 확실합니다만, 제가 원하는 스타일은 아닙니다.)

더욱이 개념마저 상실한 부분이 있었으니, 바로 "BASE64 알고리즘을 사용하여 문자열 압축하기"라는 부분입니다. 정말 이 제목 보고 제 자신이 알고있던 것까지 혼란스러울 정도였습니다. ㅡ.ㅡ

이해를 돕기 위하여 base64 알고리즘에 대해 잠시 설명을 드리자면, 이름에서 알 수 있듯이 64진수를 사용하여 정보를 표현하는 것입니다. 왜 64진수냐, 아스키코드에서 문자로 표현되는 셋트를 활용하여 모든 형태의 바이너리 데이터를 표현하기 위함입니다. 이때 64진수에 사용되는 문자는 영어 대소문자(52자 = 26자*2(대소문자))와 0부터9까지의 숫자(10자), 기호(+, / 두자)를 사용합니다. 총 64개의 글자이지요. 여기에 특수목적으로 '='기호를 사용합니다.
알고리즘은 인터넷에 많이 소개되어 있으니 차치하고, 기본적으로 base64는 3바이트를 4바이트로 표현합니다. 즉 3바이트(24바이트)를 64진수(6바이트)로 표현하려면 4자리가 필요합니다. 즉 3바이트의 바이너리 데이터가 4바이트가 됩니다. 3바이트 미만일 경우에도 기본적으로 4바이트가 됩니다.

다시 말하자면 base64는 압축 알고리즘이 아니라, 단순히 값을 어떻게 표현할 것인가를 정의한 인코딩 방식이며, 임의의 바이너리데이터를 출력가능한 문자로 나타내기 위하여 메모리 공간의 효율성을 손해보는 것까지 감수하는 방식이라는 것입니다.

그런데 놀라운 사실은 84.60kb의 원본문자열을 압축하니 812바이트가 되었다는 예제가 있는 것입니다. 어떻게 이렇게 놀라운 예제가 제공될 수 있는지 궁금합니다.

거참. 예제코드에 사용된 base64클래스를 다운로드 받을 수 있는 곳의 URL이 책에 있는데, 접속하면 어떻게 받아야 할지 모르겠습니다. 화려한 화면전환효과가 RIA의 핵심이 아닌데 말이지요.

아래 굴돌님의 코멘트에 따라 조금 내용을 보완합니다.


책에서 소개한 사항은 "BASE64를 이용한 문자열 압축"이 아니라 "바이트 배열을 zlib알고리즘을 제공해주는 Compress로 압축한 다음, 이를 Base64로 나타내기"입니다.

문자열을 압축해서 결과로 나오는 스트림이 ASCII로 표현할 수 없는 바이트스트림이니, 이를 BASE64로 인코딩해서 전달하면 된다라는 의미인데, 만약 저자가 이런 의미로 썼다면 굳이 문자열 압축이라고 쓸 필요는 없는 것입니다.

아주 황당해서 코드 볼 생각까지도 안했는데, 굴돌님께서는 보셨군요.

코멘트 감사합니다.


혹시나 플렉스를 배워볼까 하시는 분들은 flex.org에 나와있는 getting started 문서를 살펴본 다음, http://blog.flexexamples.com/ 에서 다양한 예제를 살펴보는게 훨씬 도움이 많이 될 것 같습니다.


Posted by NeoZest