이미 소장하고 있다면 판매해 보세요.
|
1부 웹 애플리케이션의 새로운 물결
1장 웹의 새로운 패러다임 1.1 Ajax가 각광받는 이유 1.1.1 사용자 인터페이스 측면 1.1.2 네트웍 지연 현상 1.1.3 비동기 상호작용 1.1.4 애플리케이션의 활용 패턴 1.1.5 고정관념에서 벗어나자 1.2 Ajax를 이루는 4가지 원리 1.2.1 애플리케이션을 담는 틀, 브라우저 1.2.2 데이터를 제공하는 서버 1.2.3 지속적이고 원활한 사용자 인터페이스 1.2.4 이제는 웹사이트도 코딩하는 시대 1.3 대표적인 Ajax 클라이언트 사례 1.3.1 업계 현황 1.3.2 구글 맵 1.4 유사 기술 1.4.1 매크로미디어 플래시 1.4.2 자바 웹 스타트 1.5 요약 1.6 참고자료 2장 Ajax 첫걸음 2.1 Ajax의 기본 구성 요소 2.2 자바스크립트로 만드는 새로운 사용자 인터페이스 2.3 CSS로 화면 모양 만들기 2.3.1 CSS 셀렉터 2.3.2 CSS 스타일 속성 2.3.3 간단한 CSS 예제 2.4 DOM 기반 화면 구성 2.4.1 자바스크립트로 DOM 다루는 법 2.4.2 DOM 노드 찾기 2.4.3 DOM 노드 생성 2.4.4 스타일 적용 2.4.5 innerHTML 속성 활용 2.5 XML 데이터를 비동기적으로 읽어오기 2.5.1 IFrame 2.5.2 XmlDocument와 XMLHttpRequest 2.5.3 서버에 요청 보내기 2.5.4 요청 결과를 받기 위한 콜백 함수 2.5.5 전체 과정 2.6 Ajax가 돋보이는 이유 2.7 요약 2.8 참고자료 3장 Ajax 개발 순서 3.1 혼돈 속의 한 줄기 빛 3.1.1 디자인 패턴 3.1.2 리팩토링과 Ajax 3.1.3 적절한 적용범위 잡기 3.1.4 리팩토링 적용 방법 3.2 리팩토링 사례 3.2.1 퍼사드와 어댑터 패턴을 이용한 브라우저 호환성 3.2.2 옵저버 패턴을 이용한 이벤트 처리 3.2.3 커맨드 패턴을 이용한 사용자 액션 3.2.4 싱글톤 패턴을 이용한 효율적인 자원 관리 3.3 모델 뷰 컨트롤러 3.4 웹 서버 측면의 MVC 3.4.1 패턴을 사용하지 않은 사례 3.4.2 모델 리팩토링 3.4.3 내용과 표현 방법 분리 3.5 참고할만한 라이브러리와 프레임웍 3.5.1 브라우저 호환 문제를 처리하는 라이브러리 3.5.2 위젯 라이브러리 3.5.3 애플리케이션 프레임웍 3.6 요약 3.7 참고자료 2부 Ajax 핵심 기법 4장 애플리케이션으로 다시 태어난 웹페이지 4.1 새로운 차원의 MVC 4.1.1 규모를 넓히자 4.1.2 웹 브라우저와 MVC 4.2 Ajax에서의 뷰 4.2.1 뷰에서 로직 분리해내기 4.2.2 로직에서 뷰 분리해내기 4.3 Ajax에서의 컨트롤러 4.3.1 전통적인 이벤트 처리 방법 4.3.2 W3C 이벤트 처리 모델 4.3.3 유연한 이벤트 모델 구현 4.4 Ajax에서의 모델 4.4.1 자바스크립트를 이용한 객체 모델링 4.4.2 서버와 연동 4.5 모델에서 뷰 생성 4.5.1 자바스크립트 리플렉션 4.5.2 배열과 객체 4.5.3 컨트롤러 추가 4.6 요약 4.7 참고자료 5장 서버의 역할 5.1 서버 작업 5.2 서버 프로그램 구현 5.2.1 많이 쓰이는 프로그래밍 언어 5.2.2 N 티어 구조 5.2.3 클라이언트측과 서버측의 모델 5.3 일반적인 서버 구성 방법 5.3.1 프레임웍을 적용하지 않은 웹 서버 5.3.2 모델2 프레임웍 5.3.3 컴포넌트 기반의 프레임웍 5.3.4 SOA 적용 5.4 데이터 통신 유형 5.4.1 클라이언트 전용 방식 5.4.2 행성 탐색기 예제 5.4.3 내용 중심 : 웹페이지 관점 5.4.4 스크립트 중심 : 플러그인 관점 5.4.5 데이터 중심 : 애플리케이션 관점 5.5 서버에 데이터 전송 5.5.1 HTML 폼 5.5.2 XMLHttpRequest 5.5.3 사용자의 변경 사항 관리 5.6 요약 5.7 참고자료 3부 Ajax 고급 기법 6장 편의성을 고려한 인터페이스 6.1 고품질 애플리케이션의 요건 6.1.1 반응성 6.1.2 안정성 6.1.3 일관성 6.1.4 간결성 6.1.5 실전 적용 6.2 메시지 전달 방법 6.2.1 요청에 대한 응답 처리 6.2.2 다른 사용자의 변경 내용 처리 6.3 Ajax 메시지 프레임웍 6.3.1 메시지 설계 6.3.2 사용자 인터페이스 요구사항 6.4 메시지 프레임웍 구현 6.4.1 상태표시줄과 아이콘 6.4.2 메시지 세부 내용 6.4.3 기능 통합 6.5 네트웍 전송 모듈에 메시지 프레임웍 활용 6.6 최신 데이터 표시 6.6.1 하일라이팅 방법 구상 6.6.2 Scriptaculous 라이브러리의 Effect 객체 6.7 요약 6.8 참고자료 7장 Ajax와 보안 7.1 자바스크립트와 브라우저 보안 7.1.1 원천 서버 정책 7.1.2 Ajax에서 고려해야 할 점 7.1.3 하위 도메인 문제 7.1.4 브라우저별 보안 기능 7.2 원격 서비스와 통신하는 방법 7.2.1 원격 서비스 프록시 7.2.2 웹 서비스 활용 7.3 비밀 데이터 보호 7.3.1 중간자 공격 7.3.2 보안 HTTP 연결 7.3.3 자바스크립트로 하는 데이터 암호화 7.4 Ajax 데이터 전송 정책 7.4.1 안정적인 웹 서버 설계 7.4.2 웹 데이터 접근 제한 7.5 요약 7.6 참고자료 8장 성능 8.1 성능이란? 8.2 자바스크립트 실행 속도 8.2.1 원시적인 실행 시간 측정 방법 8.2.2 벵크만 프로파일러 8.2.3 Ajax 실행 속도 최적화 8.3 자바스크립트 메모리 관리 8.3.1 메모리 누수 방지 8.3.2 Ajax에서 고려해야 할 점 8.4 성능을 높이는 설계 방법 8.4.1 메모리 사용량 측정 8.4.2 간단한 예제 8.4.3 메모리 사용량을 줄이는 방법 8.5 요약 8.6 참고자료 4부 Ajax 실전 프로젝트 9장 동적으로 연동하는 콤보 박스 9.1 더블 콤보 자바스크립트 9.1.1 클라이언트 중심 개발의 제약사항 9.1.2 서버 중심 개발의 제약사항 9.1.3 Ajax로 해결하자 9.2 클라이언트측 구성 방안 9.2.1 HTML 폼 설계 9.2.2 클라이언트와 서버 간의 통신 9.3 서버측 프로그램 : VB.NET 9.3.1 XML 결과 문서 정의 9.3.2 서버측 코드 작성 9.4 결과 표시 9.4.1 XML 문서 들여다보기 9.4.2 CSS 적용 9.5 고급 기능 9.5.1 다중 항목 선택 9.5.2 트리플 콤보 9.6 리팩토링 9.6.1 업그레이드된 ContentLoader 9.6.2 더블 콤보 모듈 구현 9.7 요약 10장 검색어 자동완성 기능 만들기 10.1 사전 조사 10.1.1 일반적인 동작 방식 10.1.2 구글 서제스트 사례 10.1.3 Ajax로 만드는 검색어 자동완성 10.2 서버측 프레임웍 : C# 10.2.1 서버와 데이터베이스 10.2.2 서버측 프로그램 테스트 요령 10.3 클라이언트측 프레임웍 10.3.1 HTML 10.3.2 자바스크립트 10.3.3 서버에 요청 전송 10.4 기능 추가 : 다중 엘리먼트 지원 10.5 리팩토링 10.5.1 첫 날 : TextSuggest 컴포넌트 개발 계획 10.5.2 둘째 날 : TextSuggest 코딩 - 깔끔하고 설정하기 쉬운 컴포넌트 10.5.3 셋째 날 : Ajax 적용 10.5.4 넷째 날 : 이벤트 처리 10.5.5 마지막 날 : 추천단어 목록 화면 구성 10.5.6 리팩토링 결과 보고 10.6 요약 11장 Ajax로 만드는 포털 사이트 11.1 진화하는 포털 11.1.1 전통적인 포털 11.1.2 풍부한 기능의 인터페이스 11.2 자바 기반의 Ajax 포털 구성 11.3 Ajax 로그인 기능 11.3.1 사용자 테이블 11.3.2 서버측 로그인 프로그램 11.3.3 클라이언트측 로그인 프로그램 11.4 DHTML 윈도우 구현 11.4.1 윈도우 데이터베이스 11.4.2 윈도우 정보를 전달하는 서버측 프로그램 11.4.3 외부 자바스크립트 라이브러리 11.5 Ajax 자동 저장 기능 구현 11.5.1 윈도우 라이브러리 수정 11.5.2 윈도우 정보 자동 저장 11.6 리팩토링 11.6.1 생성 메소드 구현 11.6.2 AjaxWindow.js 라이브러리 호출 11.6.3 포털 컴포넌트의 명령 정의 11.6.4 Ajax 활용 11.6.5 리팩토링 결과 보고 11.7 요약 12장 XSLT를 활용한 실시간 검색 12.1 검색의 기술적인 측면 12.1.1 전통적인 검색 방법 12.1.2 프레임과 팝업 윈도우를 사용할 때의 문제 12.1.3 Ajax와 XSLT를 이용한 실시간 검색 구상 12.1.4 클라이언트로 결과 전송 12.2 클라이언트 프로그램 12.2.1 클라이언트 구성 12.2.2 작업 초기화 12.3 서버측 프로그램 : PHP 12.3.1 XML 문서 만들기 12.3.2 XSLT 준비 12.4 XML과 XSLT 활용 12.4.1 인터넷 익스플로러 12.4.2 모질라 12.5 마무리 12.5.1 CSS 적용 12.5.2 기타 개선 사항 12.5.3 XSLT 도입을 위한 고려사항가 적절한 방법인가? 12.5.4 즐겨찾기 문제 해결 방안 12.6 리팩토링 12.6.1 XSLTHelper 12.6.2 컴포넌트로 재구성 12.6.3 리팩토링 결과 보고 12.7 요약 13장 Ajax 애플리케이션 만들기 13.1 인터넷상의 정보 수집 13.1.1 XML 피드 받기 13.1.2 RSS 표준의 구조 13.2 사용자 인터페이스 구현 13.2.1 작업 흐름 13.2.2 테이블을 사용하지 않은 HTML 프레임웍 13.2.3 CSS 스타일 적용 13.3 RSS 피드 받기 13.3.1 전역 변수 13.3.2 피드 미리 읽어두기 13.4 화면 전환 효과 13.4.1 브라우저별 투명도 설정 방법 13.4.2 나타나고 사라지는 효과 13.4.3 자바스크립트 타이머 13.5 추가 기능 13.5.1 XML 피드 추가 13.5.2 화면 이동 기능 13.6 제약 사항 해결 13.6.1 모질라 보안 문제 해결 13.6.2 애플리케이션 활용 범위 확장 13.7 리팩토링 13.7.1 RSS 리더 모델 13.7.2 RSS 리더 뷰 13.7.3 RSS 리더 컨트롤러 13.7.4 리팩토링 결과 보고 13.8 요약 부록 A. Ajax 개발자의 필수 도구 부록 B. 자바스크립트와 객체 지향 프로그래밍 부록 C. Ajax 프레임웍과 라이브러리 |
|
인터넷, 특히 웹 환경이 사람들에게 알려지고 크게 성장하게 된 이후로 벌써 10년이 훌쩍 지났습니다. 그 동안 인터넷은 컴퓨팅 환경뿐만 아니라 전반적인 사회 생활과 문화를 탈바꿈시키는 엄청난 영향력을 발휘하고 있습니다. 컴퓨터를 사용할 줄 아는 사람들은 웹에서 정보를 얻고 물건을 사며 학교도 다니고, 웹에서 새로운 스타 연예인이 뜨고 지는 데 익숙해져 있습니다. 말 그대로 일상 생활의 곳곳에 인터넷과 웹이 스며든 상태입니다. 초기에는 온라인과 오프라인을 구분할 수 있었지만, 이제는 그 구분조차 모호해질 지경입니다. 이런 인터넷 사회에서 인터넷을 통해 즐거움을 얻거나 감동을 얻고 더 큰 존재로 성장할 수 있는 방법을 찾아 보는 게 당연하고, 또 그래야만 합니다.
10년이면 강산이 변한다고 합니다. 웹과 HTML은 성장을 거듭해 HTML로 화면 인터페이스를 구현하는 데스크탑 PC용 애플리케이션이 생겨날 정도이고, 일반적인 웹 사이트도 화려하기 그지없는 화면으로 사용자들을 유혹합니다. 인터넷과 웹을 사용하기 시작한 지 10년이 지난 만큼 그 동안 인터넷 기술도 다양하게 변했습니다. 인터넷 관련 업체에서는 특히 그 동안의 수동적인 면모에서 벗어나 인터넷 상에서 훨씬 동적인 기능을 제공하기 위해 노력하고 있습니다. 마이크로소프트는 액티브X 기술을 사용해 인터넷 익스플로러 상에서 굉장히 인터랙티브한 사이트를 구축할 수 있도록 했고, 어도비(구 매크로미디어)는 플래시를 만들어 동적인 웹 프로그래밍 분야에서 독보적인 지위를 차지하고 있습니다. 그런데 동적인 웹 사이트를 만들려면 C 언어를 사용해 인터넷 익스플로러에서만 작동하는 액티브X 컴포넌트를 만들거나, 액션스크립트와 디자인 기법을 배워 플래시로 프로그램을 작성해야만 할까요? 이제 전문적인 기술을 배울 필요 없이 자바스크립트와 XML, 그리고 기존에 사용하던 웹 서버만 있으면 동적인 인터넷 서비스를 충분히 구축할 수 있습니다. 바로 Ajax입니다. Ajax를 구성하는 부분 기술들은 이미 오래 전에 공개된 것들입니다. 자바스크립트가 그렇고 XML도 물론 그렇습니다. 하지만 두 가지가 이제서야 맞물려 인터넷을 뒤흔들 만큼 강력한 힘을 발휘하기 시작했습니다. 심지어는 인터넷과 XML을 기반으로 하는 업체가 성능과 호환성, 특히 빠르고 동적이라는 측면에서 특별한 장점을 가진 데스크탑 애플리케이션을 전문적으로 개발하는 대형 업체에게 심각한 위협을 가하고 있는 상황을 만들어 낸 장본인이 바로 Ajax 입니다. Ajax를 활용하면 그만큼 데스크탑 애플리케이션에 버금가는 동적인 웹 사이트를 만들어 낼 수 있다는 의미겠지요. Ajax 인 액션은 단순한 웹 사이트를 벗어나 Ajax를 활용해 동적이고 풍부한 기능을 제공하는 사이트를 구축하는 데 필요한 기본적인 부분부터 높은 수준에 이르는 내용까지 차근차근 설명한 책입니다. 개발자뿐만 아니라 Ajax에 관심 있는 웹 디자이너도 시작할 수 있도록 프로그래밍의 기본 개념을 쉽게 풀어내고 있습니다. Ajax는 인터넷에 구축된 웹 사이트를 주요 대상으로 삼고 있기 때문에, 인터넷과 웹이 관련된 개발자나 디자이너라면 누구나 한번씩 읽어봐야 할 내용들로 가득합니다. --- 역자 서문 |
|
1부에서는 Ajax가 무엇인지, 소프트웨어를 개발할 때 활용하면 어떤 면에서 유용한지를 설명하고, 개발 결과물의 품질을 높일 수 있도록 몇 가지 도구도 살펴봤다.
2부에서는 Ajax 애플리케이션이 실제로 동작하게 만드는 데 필요한 핵심적인 기법을 살펴본다. 3부에서는 2부에서 살펴본 여러 가지 기법을 사용해 개발 개념을 확인하는 수준에서 제품이라고 할 수 있는 정도까지 품질을 끌어 올릴 수 있는 방법을 알아본다. 4부에서는 좀 더 실무적인 관점에서 5개의 Ajax 프로젝트를 단계별로 설명하면서 진행하고, 마지막 부분에서는 각 프로젝트의 결과물을 리팩토링해 독자들이 직접 자신의 웹 애플리케이션에서 활용할 수 있는 컴포넌트로 탈바꿈 시킨다. |
|
★ 부록 CD ★
본문에서 예로 들었던 예제 프로그램의 소스코드는 모두 부록 CD에 들어있으며, http://www.manning.com/crane 페이지에서 다운로드 받을 수도 있다. 닷넷 서버나 J2EE 애플리케이션 서버, 리눅스 장비, 아파치 서버, MySQL 데이터베이스, PHP/파이썬/펄(LAMP) 등의 환경을 각자 사용하기 편한 위치에 갖고 있지 않은 경우가 상당수 있을 것이라고 판단되며, Ajax에서 중점적으로 다루는 부분은 역시 클라이언트측의 프로그램이다. 따라서 가능한 경우에는 아파치, 톰캣, IIS 등의 웹 서버에서 간단하게 활용할 수 있도록 가상(mock) 서버 프로그램을 최대한 마련해 고정적이고 의미 없는 내용이지만 예제를 작동시켜 볼 수 있도록 준비했다. 이런 가상 프로그램은 실제로 동작하는 원본 프로그램과는 별개로 만들어져 있고, 데이터베이스나 웹 서버를 잘 다루는 사람이라면 실제 동작하는 예제를 사용해 보는 것도 좋다. 부록 CD 안에 설정하는 방법을 간단하게 설명한 readme.txt 파일이 있으니 참고하자. ★ 온라인 서비스 ★ 매닝 출판사의 사설 웹 포럼에 접속해 책에 대한 의견을 나눌 수 있고, 기술적인 질문을 올리거나 저자나 다른 사용자로부터 도움을 얻을 수 있는 http://www.manning.com/crane 페이지에 접속해보자. 또한 한국어판 출간에 즈음해 옮긴이가 『Ajax 인 액션』의 독자들에게 도움이 될 수 있는 내용을 모아 Ajax 관련 커뮤니티(www.ajaxinaction.net)를 오픈할 예정이다. 커뮤니티에는 질문과 답변, 관련 업계 소식, 자료실, 자유게시판, 오탈자 신고 등의 내용을 준비하고 있다. 『Ajax 인 액션』을 읽으면서 궁금했던 점, 짬짬이 만들었던 Ajax 프로그램, 새로운 웹을 이끌어가는 개발자의 지식과 정보 등을 함께 공유할 수 있는 장을 마련하고자 한다. |
|
★ 이 책의 특징 ★
Ajax는 이미 단단한 기반을 확보하고 있는 여러가지 웹 관련 기술을 한데 모아 새롭고 재미있는 방법으로 활용하는 방법이다. 완전히 새로운 기술을 처음으로 접해 공부해야 한다면 백지부터 시작하기 때문에 오히려 간단할 수도 있다. 하지만 Ajax는 다르다. 이전에 사용하던 상당수의 방법과 개념을 버려야 한다. 이런 특성 때문에 Ajax 인 액션은 다른 출판사의Ajax 책이나 인 액션(In Action) 시리즈가 늘 해왔던 것과는 약간 다른 방법으로 구성되어 있다. 책을 읽다보면 다른 점을 느낄 수 있을지도 모르겠지만, 이런 방법이 Ajax를 설명하기에 가장 적합한 방법이라고 생각한다. 또한 Ajax는 그 자체로 대부분 클라이언트측에 치우쳐 있는 기술이라고 볼 수 있는데, 클라이언트 프로그램이 완전히 바뀌기 때문에 서버측 프로그램도 모두 바꿔야 할 필요가 있다. 이 책은 주로 클라이언트측의 프로그램을 중심으로 하고 있고, 대부분의 프로그램 예제도 자바스크립트로 작성되어 있다. Ajax를 사용하면 몇 가지 기본 원칙을 통해 서버와 클라이언트를 자연스럽게 분리시킬 수 있고, 완전히 분리되어 있기 때문에 어떤 종류의 서버측 언어라도 사용할 수 있다. 그러다 보니 다양한 언어를 사용하는 개발자를 배려할 필요가 있었고, 예제 프로그램에서 서버 부분에 PHP, 자바, C#, 비주얼베이직.NET 등 다양한 종류의 프로그래밍 언어를 활용했다. 더 중요한 점은 서버측 프로그램을 최대한 간결하고 특이한 방법을 사용하지 않는 방향으로 구성했기 때문에, 필요하다면 직접 다른 언어와 환경에 맞춰 쉽게 포팅할 수 있도록 했다. 특정 부분에서 언어적인 특성을 활용하는 경우가 있다면 해당 언어에 익숙하지 않은 독자라도 쉽게 이해할 수 있도록 상세한 내용을 최대한 설명하려고 노력했다. ★ 이 책의 대상 ★ 모두 Ajax에 직접적인 관심을 가진 사람들을 대상으로 해서 이런 독자들에게 꼭 필요한 내용을 최대한 책에 담으려 노력했다. 웹 브라우저를 단순한 터미널 형태의 개념으로 생각하고 서버측 프로그램을 개발하던 개발자가 방향을 잡는 데 도움이 될 수 있도록 지침을 마련했다. 적당히 돌아가는 정도로만 프로그램을 작성하며 디자인 작업을 주로 하던 디자이너에게도 소프트웨어 설계와 배경에 대한 지식을 전달할 수 있도록 구성했다. 원래 어떤 일을 했던 간에 Ajax는 여러 분야를 함께 활용해야 하는 기술이기 때문에 익숙치 않은 작업을 해야 할 경우가 많다. 독자의 관심 분야를 약간 넓은 범위로 확장한 다음 새로운 기술을 배울 수 있도록 신경을 기울였다. ★ 저자 서문 ★ 우리는 필연적인 운명을 만나놓고도 그 사실을 알아차리지 못한 채 살아가는 경우가 많다. 갖가지 화려한 최신 기술들이 업무를 장악하던 1990년대 초반 아무에게도 인정받지 못하고 개발자 사이에 소외되어 있던 자바스크립트라는 언어가 있었다. 얼핏 이름만 보면 그 당시 많은 관심을 받고 있던 자바와 비슷하다고 생각할 수도 있지만 실제로는 자바와는 전혀 관계 없는 언어였는데, 자바스크립트와 나의 인연은 참으로 끈질겼다. 90년대 말 무렵 방탕한 생활은 그만 접고 괜찮은 직업을 찾아야겠다는 생각에 디지털 셋탑박스 기술과 관련된 얼리 어답터들과 함께 일하게 됐다. 셋탑박스에서 사용하던 사용자 인터페이스는 100% 자바스크립트로 구현되어 있었고, 나중에는 윈도우 관리 프로그램, 작업 스케줄러 등 자바스크립트로 처리할 수 있는 가장 복잡한 일들을 개발하는 개발팀의 팀장까지 맡게 됐다. 그럼에도 나는 "자바스크립트가 인기를 끄는 일은 없을 걸"이라고 생각했다. 시간이 흘러 사람들이 좀더 많이 사용하는 프로그램을 개발하게 됐는데, 흔히 "꿈의 건물"이라고 부르는 인텔리전트 빌딩에서 사용하는 대규모 메시징 인프라를 구축하면서 다양한 종류의 사용자 인터페이스를 만드는 일이었다. 자바 기술을 잘 사용한다는 점 때문에 취직한 회사에서 결국 나중에는 자바스크립트로 복잡한 사용자 인터페이스를 만드는 일을 하게 됐다. 일부 개발자들이 자바스크립트 언어를 사용해 전체 시스템에서 상당히 중요한 부분을 차지하는 프레임웍을 개발하려는 생각을 갖고 있었다. 이런 분위기가 놀라웠던 나는 마이크 포스터가 만든 x 라이브러리(본문에서 좀 더 자세한 설명을 볼 수 있다)를 얼른 받아왔다. 이메일과 텍스트 형태의 게시판 관련 작업을 하던 어느 날, 웹 브라우저 화면 전체를 새로고침하지 않고도 안 보이도록 숨겨둔 프레임을 통해 새로운 메시지가 도착했는지를 확인하면 어떨까하는 엉뚱한 생각이 뇌리를 스쳤다. 몇 시간 동안 집중해서 프로그램을 작성해 새로운 메시지를 확인하는 부분의 코드를 모두 구현했다. 그리고는 새로 도착한 메시지를 사용자가 쉽게 구분해 볼 수 있도록 색깔을 달리해서 보여주는 건 어떨까 하는 생각까지 들었다. "정말 웃기는 일이야"하는 생각이 들긴 했지만, 결국 제대로 동작하는 코드를 만들었다. 내가 이러고 있는 동안 에릭 코스텔로나 에릭 해쳐, 브랜트 애슐리 등의 같은 개발자들도 비슷한 생각을 하고 있었고, 마이크로소프트는 아웃룩 웹 액세스를 개발하면서 XMLHttpRequest 객체를 만들고 있었다. 더 이상 피할수 없는 운명이 다가오는 순간이었다. 그 이후 개발 부하가 매우 큰 곳에서 일을 하게 됐는데, 바로 대규모 은행에서 사용할 1 티어 형태의 소프트웨어를 개발하는 작업이었다. 개발팀은 자바, 자바스크립트, 숨겨진 프레임 등 갖가지 기법을 사용해 사이트를 구현했다. 개발팀은 1천5백만 줄에 이르는 코드를 관리했는데, 대부분 고정적인 자바스크립트 프로그램이고 일부 자바스크립트는 JSP를 통해 동적으로 만들어 내기도 했다. 물론 이미지 파일 등의 내용은 완전히 제외하고 하는 얘기다. 자바, 자바스크립트, 프레임 등의 기술을 활용해 수백 명의 은행 직원이 하루에도 수백만 달러에 달하는 계좌를 관리하는 소프트웨어를 구현했었다. 아마도 그 때 만들었던 소프트웨어로 관리하는 계좌를 보유하고 있는 독자도 있을 것이다. 그렇게 시간은 계속 흘러갔고 자바스크립트 언어는 시나브로 계속해서 발전하고 성장하고 있었다. 그러던 2005년 2월, 제시 제임스 가렛이 잃어버린 퍼즐의 한 조각을 발견하는 경이로운 사건이 일어났다. 여러 사람이 몇 년간 그토록 찾아 헤매던 방법, 즉 브라우저 호환성을 신경쓰지 않고도 비동기적인 방법으로 클라이언트와 서버간의 통신을 처리하면서 DHTML을 사용해 복잡한 사용자 인터페이스를 만들 수 있는 방법에 제시는 짧고 귀여운 이름을 붙였다. Ajax! 이제 그 동안 명멸했던 여러 기법들은 그대로 역사가 되어버렸다. 최근 Ajax는 굉장한 관심을 받고 있고 헤아리기 어려울 정도로 많은 Prototype과 Rico, Dojo, qooxdoo, Sarissa 등 여러가지 프레임웍을 통해 훌륭한 자바스크립트 프로그램이 많이 양산되고 있다. 부록 C에 관련 프레임웍과 라이브러리를 최대한 모아 소개했다. 아마도 현재 나와있는 라이브러리나 도구는 빠짐없이 모았다고 본다. 컴퓨터로 작업하면서 요즘처럼 재미있게 일한 적도 없었던 것 같다. 우리는 결말을 이야기하는 것이 아니다. 지금도 Ajax 분야는 계속해서 발전하고 있다. 2005년 5월 1장의 초고를 썼고 9월에 교정을 마쳤는데, 그 몇 달 동안 얼마나 많은 일이 있어났는지 생각만 해도 가슴이 벅차다. 물론 이 책에서 다루는 주제에 대해 고민하고 논의해야 할 일들이 아직도 많이 남아있고, 최소한 향후 몇 년간은 굉장히 재미있는 일들이 많이 생길 게 분명하다. 에릭과 대런을 만나 이번 저술 작업을 함께 진행할 수 있어 굉장히 행운이었고 즐거웠다는 점을 알리고 싶다. 여러분도 이 책을 읽고 동참해 함께 재미를 누렸으면 한다. 데이브 크레인 ★ 추천의 글 ★ 최근 3년간 인터넷 서비스 사업을 통해 고객을 만나면서 깨달은 소중한 진리가 하나 있다. "어떤 경우에도, 변명의 여지 없이, 고객이 늘 옳다"는 것이다. 하지만 "대부분의 경우"엔 업계의 트렌드를 의식하게 되고, 고객을 '교육'하겠다는 안일한 생각을 하게 되며, 기술적인 제한점들을 극복하지 못하게 되는 등 일하는 사람 입장에서 생각하게 된다. 그간 우리는 이런 틀 안에서 애플리케이션이나 서비스를 기획하고 개발했지만, 사용자나 고객은 이를 이해하지 못했다. 그저 장바구니에서 물건 하나를 지우고 포토앨범에서 사진을 볼 뿐인데 왜 무겁게 페이지 전체가 다시 떠야 하는지 불편함을 호소했지만 우리 고객센터, 기획팀, 개발팀은 한계를 이해하지 못하는 고객의 아우성으로 치부하고 회식자리 안주감으로 삼을 뿐 다른 방법을 찾지 못했다(대부분 액티브X 등으로 해결해오긴 했다). 하지만 Ajax는 웹 페이지라는 틀에 갇힌 웹 애플리케이션에서 벗어나 사고의 폭을 넓혀주고 새로운 세상에 눈을 뜨게 해줬다. Ajax라는 이름을 얻기까지 5년 넘게 주목조차 받지 못하다가 여러 성공 사례가 생기고 트렌드가 되고 나니 너도나도 이용하게 된 현실은 우리에게 어떤 의미가 있을까? Ajax의 모든 것을 총망라해서 자세히 다루고 있는 이 책에서 설명하는 내용을 완벽히 소화하는 것은 물론 중요하다. 하지만 Ajax 기술 쪽에 방점을 두지 않아도 좋다. 고객에게 더 나은 사용편의성을 제공하는 문제에 대한 관점이 변화되고 생각의 틀을 넓히게 되는 계기가 되었음에 감사하고 그것만으로도 이 책을 읽은 큰 보람이 있었다. 구글의 성공 사례에 힘입어 웹 2.0이 화두로 떠오르면서 Ajax는 관련 책들을 봇물처럼 쏟아내며 출판시장에서도 바람몰이를 하고 있다. 이에 즈음해 『실용예제로 배우는 웹표준』과 『웹 2.0을 이끄는 방탄웹』에 이어 '에이콘 웹 프로페셔널 시리즈'의 야심찬 세 번째 주자로 선을 보이는 『Ajax 인 액션』이 드디어 국내 독자들을 찾아왔다. 단순히 개발기법들을 소개하는 것이 아니라 개발방법론의 노하우를 배울 수 있다는 것이 개발자들에게 있어서 이 책이 중요한 의미를 지니는 이유라고 손꼽을 수 있다. 또한 국내 독자에게 처음 웹 표준이라는 개념을 선보인 웹 프로페셔널 시리즈의 앞선 두 권의 책에서는 디자이너, 기획자, 개발자 순으로 무게 중심이 실려있었다면, 이번 책은 개발자에게 가장 큰 무게 중심이 실려있을 뿐 여전히 이 세 가지 영역에 중첩되는 내용을 제공하고 있다. 즉 이 책을 통해 개발자와 디자이너는 더욱 생산성 높고 활기 넘치는 협업을 이룰 수 있고, 기획자는 기존 웹 애플리케이션의 틀을 넘어서는 서비스를 기획할 수 있을 것이다. 『Ajax 인 액션』은 최신 추세에 발걸음을 맞춘 새로운 정보를 제공할 뿐만 아니라 웹 표준에 기반한 방법들을 지속적으로 제공한다는 점에서 웹 프로페셔널 시리즈의 전편들과 맥을 같이하고 있다. 사용자가 실제로 편하게 쓸 수 있는 서비스를 교묘한 편법이 아닌 정석으로 풀어갈 수 있는 정보를 담은 좋은 책들이 웹 프로페셔널 시리즈의 이름을 걸고 앞으로도 계속 이어지길 바라며 시리즈 에디터로서 함께 노력하고자 한다. 아마존 독자들의 열광적인 성원과 전 세계 전문가들에게 극찬을 받으며, 출간된 지 수 개월이 넘도록 아마존 컴퓨터 분야 베스트셀러를 차지하며 전 세계에서 가장 많이 팔린 Ajax 책으로 연일 새로운 기록을 만들어내고 있는 『Ajax 인 액션』이 국내 독자들이 아쉬워 하는 2%를 가득 채워줄 최고의 Ajax 서적이 될 것이라 감히 가늠해 본다. 박수만 / 에이콘 웹 프로페셔널 시리즈 에디터 |