Top

Ajax 인 액션

  • 원서명Ajax in Action (ISBN 1932394613)
  • 지은이Dave Crane
  • 옮긴이강철구
  • ISBN : 8989975883
  • 28,000원
  • 2006년 05월 30일 펴냄
  • 페이퍼백 | 816쪽 | 190*255mm
  • 시리즈 : acorn classics, 웹 프로페셔널

책 소개

▶▷2006 아마존 컴퓨터 인터넷 부문 베스트셀러 1위!!

전 세계에서 가장 많이 팔린 Ajax No.1 베스트셀러!
아마존 독자가 열광하고 전 세계 전문가들이 극찬한 최고의 Ajax 책


기초부터 고급 기법까지 Ajax의 모든 것을 상세하게 소개한다
사이트에 바로 응용할 수 있는 5가지 실전 프로젝트 수록


웹 사이트에 접속하는 사용자들은 전통적인 웹 사이트 구성 방법에 이미 식상해 있다. 웹 페이지를 보다 보면 스크롤 위치가 자꾸 바뀌는 통에 짜증이 나고, 페이지를 새로 받아오는 동안 멍하니 기다리기도 하며, 새로 받아온 페이지에 눈을 적응시키느라 스트레스를 받는다. 불편한 점이 이만저만이 아니다. 자바스크립트와 XML을 사용해 비동기적으로 통신하는 방법, 즉 Ajax라고 알려진 방법을 적용하면 웹 사이트에 접속하는 사용자에게 훨씬 훌륭한 기능과 인터페이스를 제공할 수 있다. 일단 한번 Ajax 인터페이스에 맛을 들인 사용자는 입맛을 바꾸기가 쉽지 않다. Ajax는 웹상에서 물 흐르듯 직관적인 인터페이스를 사용자에게 제공할 수 있는 새로운 개념이다.

Ajax 인 액션은 이렇듯 새로운 개념을 직접 구현하는 데 꼭 필요한 내용을 담고 있다. 애플리케이션 프로그램의 전체적인 기능을 그대로 유지하면서 서버와 클라이언트 부분으로 어떻게 분리하는지를 설명한다. 또한 유연하고 유지보수가 용이한 상태로 애플리케이션을 관리하는 방법도 알려주며, 프로그램을 적절하게 잘 설계해 브라우저 호환성 등의 문제에도 얼마나 잘 대응할 수 있는지를 설명한다. 이 책을 읽기 전에 전통적인 웹 사이트에서 주로 사용하던 낡은 프로그래밍 기법은 버려야 한다. 독자는 프로그램 실행 코드의 상당 부분을 웹 브라우저로 옮겼을 때 어떤 장점이 있는지를 몸소 체험할 수 있다. 이 책은 지금 웹 사이트를 개발하거나 개발해 본 경험이 있는 웹 개발자의 필독서이다.


[ 이 책에서 다루는 주요 내용 ]

■ Ajax의 기본 개념
■ Ajax에서 디자인 패턴이 중요한 이유
■ Ajax를 사용할 때 실수하기 쉬운 부분
■ Ajax를 활용하는 실전 프로젝트: 검색어 자동완성 기능, XSLT를 활용한 실시간 검색 등
■ Prototype, Scriptaculous, x, Rico 등의 Ajax 라이브러리를 활용한 예제
■ Ajax 유저빌리티와 보안, 성능 문제


[ 이 책의 특징 ]

Ajax는 이미 단단한 기반을 확보하고 있는 여러가지 웹 관련 기술을 한데 모아 새롭고 재미있는 방법으로 활용하는 방법이다. 완전히 새로운 기술을 처음으로 접해 공부해야 한다면 백지부터 시작하기 때문에 오히려 간단할 수도 있다. 하지만 Ajax는 다르다. 이전에 사용하던 상당수의 방법과 개념을 버려야 한다. 이런 특성 때문에 Ajax 인 액션은 다른 출판사의Ajax 책이나 인 액션(In Action) 시리즈가 늘 해왔던 것과는 약간 다른 방법으로 구성되어 있다. 책을 읽다보면 다른 점을 느낄 수 있을지도 모르겠지만, 이런 방법이 Ajax를 설명하기에 가장 적합한 방법이라고 생각한다.

또한 Ajax는 그 자체로 대부분 클라이언트측에 치우쳐 있는 기술이라고 볼 수 있는데, 클라이언트 프로그램이 완전히 바뀌기 때문에 서버측 프로그램도 모두 바꿔야 할 필요가 있다. 이 책은 주로 클라이언트측의 프로그램을 중심으로 하고 있고, 대부분의 프로그램 예제도 자바스크립트로 작성되어 있다. Ajax를 사용하면 몇 가지 기본 원칙을 통해 서버와 클라이언트를 자연스럽게 분리시킬 수 있고, 완전히 분리되어 있기 때문에 어떤 종류의 서버측 언어라도 사용할 수 있다. 그러다 보니 다양한 언어를 사용하는 개발자를 배려할 필요가 있었고, 예제 프로그램에서 서버 부분에 PHP, 자바, C#, 비주얼베이직.NET 등 다양한 종류의 프로그래밍 언어를 활용했다. 더 중요한 점은 서버측 프로그램을 최대한 간결하고 특이한 방법을 사용하지 않는 방향으로 구성했기 때문에, 필요하다면 직접 다른 언어와 환경에 맞춰 쉽게 포팅할 수 있도록 했다. 특정 부분에서 언어적인 특성을 활용하는 경우가 있다면 해당 언어에 익숙하지 않은 독자라도 쉽게 이해할 수 있도록 상세한 내용을 최대한 설명하려고 노력했다.


[ 이 책의 구성 ]

1부는 Ajax가 무엇인지, 소프트웨어 개발 시 활용하면 어떤 면에서 유용한지를 설명하고, 개발 결과물의 품질을 높일 수 있는 몇 가지 도구도 살펴본다. 2부는 Ajax 애플리케이션이 실제로 동작하게 만드는 데 필요한 핵심 기법을 살펴보고, 3부는 2부에서 살펴봤던 것처럼 여러 기법을 사용해 개발 개념을 확인하는 수준에서 제품 수준까지 품질을 끌어 올릴 수 있는 방법을 알아본다. 4부는 좀 더 실무적인 관점으로 5개의 Ajax 프로젝트를 단계별로 설명하면서 진행하고, 끝으로 각 프로젝트의 결과물을 리팩토링해 독자들이 직접 자신의 웹 애플리케이션에서 활용할 수 있는 컴포넌트로 탈바꿈시킨다.


[ 이 책의 대상 ]

모두 Ajax에 직접적인 관심을 가진 사람들을 대상으로 해서 이런 독자들에게 꼭 필요한 내용을 최대한 책에 담으려 노력했다. 웹 브라우저를 단순한 터미널 형태의 개념으로 생각하고 서버측 프로그램을 개발하던 개발자가 방향을 잡는 데 도움이 될 수 있도록 지침을 마련했다. 적당히 돌아가는 정도로만 프로그램을 작성하며 디자인 작업을 주로 하던 디자이너에게도 소프트웨어 설계와 배경에 대한 지식을 전달할 수 있도록 구성했다. 원래 어떤 일을 했던 간에 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 프로그램, 새로운 웹을 이끌어가는 개발자의 지식과 정보 등을 함께 공유할 수 있는 장을 마련하고자 한다.

저자/역자 소개

[ 저자 소개 ]

Dave Crane

데이브 크레인(Dave Crane)은 Ajax의 원조격인 DHTML을 사용해 TV 셋탑박스, 홈 오토메이션, 은행의 재정 관리 시스템 등을 구현한 경력이 있다. 현재 영국의 글루세스터샤이어에 살고 있다.


Eric Pascarello

에릭 파스카렐로(Eric Pascarello)는 ASP.NET 개발자로 활동하고 있으며, JavaRanch에서 HTML과 자바스크립트 포럼을 담당하고 있다. 현재 미국 메릴랜드주 로렐에 살고 있다.


Darren James

대런 제임스(Darren James)는 오픈소스 Rico 프로젝트에서 기획과 설계 등을 담당하고 있다. 현재 미국 캘리포니아주 서니베일에 살고 있다.


[ 저자 서문 ]

우리는 필연적인 운명을 만나놓고도 그 사실을 알아차리지 못한 채 살아가는 경우가 많다. 갖가지 화려한 최신 기술들이 업무를 장악하던 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월에 교정을 마쳤는데, 그 몇 달 동안 얼마나 많은 일이 있어났는지 생각만 해도 가슴이 벅차다. 물론 이 책에서 다루는 주제에 대해 고민하고 논의해야 할 일들이 아직도 많이 남아있고, 최소한 향후 몇 년간은 굉장히 재미있는 일들이 많이 생길 게 분명하다. 에릭과 대런을 만나 이번 저술 작업을 함께 진행할 수 있어 굉장히 행운이었고 즐거웠다는 점을 알리고 싶다.

여러분도 이 책을 읽고 동참해 함께 재미를 누렸으면 한다.

- 데이브 크레인



[ 역자 소개 ]

강철구

교육부 종합생활기록부 프로젝트, B2B 엔진, 정부 문서유통 소프트웨어, 검색엔진, 홈네트워킹 등의 개발을 비롯해 다양한 프로젝트에 참여했다. 현재는 검색엔진 제품과 이미지 처리 솔루션 등을 개발하고 있고, 인공지능과 영상처리, 정보검색 등 다양한 관심사와 관련한 새로운 비즈니스를 준비하고 있다. 아주대학교 대학원에서 컴퓨터 비전 (영상 인식)을 전공했고 오픈소스 자바 검색엔진인 루씬(Lucene)에 관한 첫 국내서인 『루씬 인 액션』(에이콘출판, 2005)을 번역했다.


[ 역자 서문 ]

인터넷, 특히 웹 환경이 사람들에게 알려지고 크게 성장하게 된 지 벌써 10년이 훌쩍 지났습니다. 그동안 인터넷은 컴퓨팅 환경뿐 아니라 사회생활과 문화 전반을 탈바꿈시키는 엄청난 영향력을 발휘하고 있습니다. 컴퓨터를 사용할 줄 아는 사람들은 이미 웹에서 필요한 정보를 얻고 물건을 사며 웹에서 학교도 다니는 등 새로운 생활에 이미 익숙해져 있습니다. 말 그대로 일상 생활 곳곳에 인터넷과 웹이 스며들어 이제는 온라인과 오프라인의 구분조차 모호해질 지경입니다. 이제는 인터넷을 통해 즐거움을 얻거나 감동을 얻고 더 큰 존재로 성장할 수 있는 방법을 찾아 보는 게 당연해졌고, 또 그래야만 합니다.

강산도 변한다는 지난 10년 동안 웹과 HTML은 성장을 거듭해 HTML로 화면 인터페이스를 구현하는 데스크탑 PC용 애플리케이션이 생겨날 정도이고, 일반적인 웹 사이트도 화려하기 그지없는 화면으로 사용자들을 유혹하고 있습니다. 인터넷 관련 업체도 그 동안의 수동적인 면모에서 벗어나 인터넷 상에서 훨씬 동적인 기능을 제공하기 위해 노력하고 있습니다. 마이크로소프트는 액티브X 기술을 사용해 인터넷 익스플로러(IE) 상에서 굉장히 인터랙티브한 사이트를 구축할 수 있도록 했고, 최근 어도비가 인수한 매크로미디어는 플래시를 만들어 동적인 웹 프로그래밍 분야에서 독보적인 지위를 차지하고 있습니다. 그런데 동적인 웹 사이트를 만들려면 C 언어를 사용해 IE에서만 작동하는 액티브X 컴포넌트를 만들거나, 액션스크립트와 디자인 기법을 배워 플래시로 프로그램을 작성해야만 할까요? 방법이 있습니다. 이제 전문 기술을 배울 필요 없이 자바스크립트와 XML, 그리고 기존에 사용하던 웹 서버만 있으면 동적인 인터넷 서비스를 충분히 구축할 수 있습니다. 바로 Ajax입니다.

Ajax를 구성하는 부분 기술들은 이미 오래 전에 공개된 기술입니다. 자바스크립트가 그렇고 XML도 물론 그렇습니다. 하지만 두 가지가 이제서야 맞물려 인터넷을 뒤흔들 만큼 강력한 힘을 발휘하기 시작했습니다. 인터넷과 XML을 기반으로 하는 업체가 성능과 호환성을 필두로 특히 빠르고 동적이라는 측면을 내세워, 데스크탑 애플리케이션을 개발하는 전문 대형 업체를 위협하는 상황을 만들어 낸 장본인이 바로 Ajax 입니다. Ajax를 활용하면 그만큼 데스크탑 애플리케이션에 버금가는 동적인 웹 사이트를 만들어낼 수 있게 된 것입니다.

『Ajax 인 액션』은 단순한 웹 사이트에서 벗어나 Ajax를 활용해 동적이고 풍부한 기능을 제공하는 사이트를 구축하기 위해 필요한 기본부터 고급 내용까지 차근차근 설명해놓은 책입니다. 개발자뿐 아니라 Ajax에 관심 있는 웹 디자이너도 시작할 수 있도록 프로그래밍의 기본 개념을 쉽게 풀어내고 있습니다. Ajax는 인터넷에 구축된 웹 사이트를 주요 대상으로 삼고 있기 때문에, 인터넷과 웹에 관련된 일을 하는 개발자나 디자이너라면 누구나 한 번씩 읽어봐야 할 내용들로 가득합니다.

- 강철구

목차

목차
  • 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. 자바스크립트와 객체 지향 프로그래밍

관련 블로그 글

Ajax? 에이잭스? 정답은 없지만...

(가까운 역자 몇 분께는 해드린 이야기지만) 어느 날 작은 서점에서 걸려온 전화를 한 통 받았습니다.

"에이콘이죠? 아직 인 액션 책 있어요?"
"네? 아직이요?"
"책 제목이 아직 인 액션인데, 없어요?"
"아, Ajax 인 액션이요..."

사용자 삽입 이미지

서점 관계자 분의 영어 실력이나 발음을 무시해서 드린 말씀은 절대 아닙니다. 지금은 "에이잭스"라는 발음으로 어느 정도 통일이 된 듯 보입니다만, 불과 2, 3년전만 해도 Ajax는 각종 웹 관련 컨퍼런스에 가도 "아작스, 에이잭스, 아약스..." 등 다양한 이름으로 불리웠습니다. 게다가 표기에까지 이르면 애이젝스, 애이잭스, 경우의 수는 배로 늘어나겠죠. 여기에는 네덜란드 축구팀 아약스도 한몫을 했을 겁니다. (Ajax 작명과 관련한 자세한 일화는 어제 방문한 M모 역자분이 Ajax 보안 책인 줄 알고 샀다가 버럭했다는--;; "방탄 Ajax" 책 앞 부분에 자세히 나와있습니다.)

기술전문서를 다루는 저희 에이콘같은 출판사에서는 책 제목을 지을 때 특히 새로 부상하는 개념이나 용어라든가 다른 곳에서 출간된 적이 없는 분야라든가 하면 제목을 지을 때 여간 고민스러운 게 아닙니다. 저희 에이콘의 편집방침은 일단 될 수 있는 한 (1) 반드시 한글로 표기할 것(단, 영문 두문자를 딴 약어는 예외) (2) 가능한 한 우리말로 번역할 것 (3) 그러나 무리한 한글화는 피할 것..입니다. 입말과 글말이 나뉜 우리 말글세상에서 책은 어찌 됐든 눈으로 읽어내야 함이기 때문에 한글 표기는 필수불가결합니다. 저희 책의 최신 도서 목록, 혹은 초난감 기업의 조건 본문이나 최근 나온 acornLoft 시리즈 책들을 보시면 아시겠지만 될 수 있으면 한글로 표기하기 위해 애를 씁니다. 물론 최근엔 그냥 영어를 음차로 표기한 책 제목도 있어서 좀더 책내용을 잘 설명한 멋진 책 제목을 지어내지 못한 데는 죄스러운 생각이 들고, 목록을 막상 펼쳐보니 그다지 그러하지도 않은 듯도 합니다만.

루씬 인 액션이라는 책을 낼 때의 얘기입니다. 오픈소스 자바 검색엔진 Lucene을 다룬 이 책을 처음 낼 때만해도 이 루씬을 제대로 발음하거나 표기하는 분이 없었습니다. 루슨트 테크놀로지(Lucent Technology)에 낯이 익었던지라, 루슨? 루센? 어떻게 읽어야 할지 난감해했죠. 한편에서는 그냥 Lucene이라고 쓰자는 분도 있었지만, 한글 표기의 제1원칙을 저버릴 수 없었기에 역자 강철구님이 저자에게 메일을 보냈습니다. 그리고 결국 Lucene이 루씬 창시자 더그 커팅 부인의 미들네임이고, [lusi:n]으로 발음한다는 사실을 알아냈죠. 야후, 멋진 남편입니다. bliss 인 액션, 뭐 그런 셈이죠? :)
사용자 삽입 이미지

지금 돌이켜 생각하면 저희 출판사에서 책을 낼 때 그냥 무성의하게 LUCENE! 이렇게 냈다면 아직도 왕왕 루쎈이니 루쓴이니 루씬이니 많은 용어가 난무하지 않았을까 싶은 생각이 듭니다. 물론 지금은 루씬이라는 단어를 보면 촌스럽다거나 낯설다는 생각이 전혀 들지 않지만(이건 물론 맨날 회사에서 책을 접하는 제 입장일 수도 있습니다^^) 처음 책을 낼 땐 저조차도 참으로 '메롱'한 제목 같다는 느낌을 지울 수 없었던 게 사실입니다. 하지만 전 언어란 바로 이렇듯 관습이거나 사회적인 무언의 약속과도 같은 특성을 지녔다고 생각합니다. 물론 아직도 유명한 저자이자 교수인 도날드 크누스(Knuth)에 대해서는 K가 묵음이 아니란 것까지는 모두 동의했지만, 늘 커누스니 크누스니에 대해서 역자분들의 논쟁이 이어지기도 합니다만, 흠. 여하튼 여기까지.

이 경우는 발음을 전혀 짐작할 수 없는 용어에 대한 조금 극단적인 예였구요, 영문표기냐 한글표기냐의 갈림길에서 고민을 하는 경우도 많아서, 대부분 필자분들을 잘 설득(!)해서 일반인에게 쉽게 다가갈 수 있는 방향으로 서로 절충을 합니다. 영문표기를 우선하시는 저자나 역자분들이 하시는 말씀도 옳은 게, 이미 개발자는 영문 표기에 친숙하다. 혹은 등록상표이기 때문에 한글로 표기하는 건 어불성설이다.라는 말씀을 많이 하시죠. 하지만 결국 번역서라는 것도 한 나라의 글과 말을 다른 나라의 언어로 옮겨 표현하는 작업이라고 생각해본다면 IT 기술분야라는 족쇄로 애써 자신을 꽁꽁 얽어맬 필요는 없다고 생각합니다. 지금은 친숙해진 와이어샤크를 활용한 실전 패킷 분석이라는 책을 낼 때도 Wireshark를 와이어샤크로 표기함에 있어서, 이제는 유명 베스트셀러가 되어버린 (개정판) 예제로 배우는 Adobe 플렉스: UX와 성능이 향상된 RIA 제작의 첫걸음: 플렉스 3 & 어도비 에어를 낼 때도 플렉스냐, FLEX냐, 에어냐 AIR냐를 갖고 적지 않은 이야기를 했던 걸 생각하면 참 아주 간단한 문제인 듯하면서도 결정하기 어려운 것 같기도 합니다.
사용자 삽입 이미지

지금은 아주 폭발적으로 많은 책이 출간된 Ajax 분야는 그런 면에서 볼 때 아쉬움이 많이 남는 작업이었습니다. Ajax 인 액션을 출간하던 당시 모출판사 책에 국내 첫 Ajax 책 자리를 내주고 두번째로 내는 거였던지라 왜 그랬는지 모르지만 약간 소심한 마음에 그냥 Ajax라는 표기를 따랐었습닏다. 과감히 그때 "에이잭스 인 액션"이라고 책 제목을 지었더라면 어땠을까요? 지금 보면 너무 낯설지만 그래도 뭔가 용어 통일을 주도해나가지 않았을까 하는 생각도 들거든요.

맞아요. 어디든 정답은 없습니다. 전부를 만족시킬 수 있는 것도 없구요. 저희가 하고 있는 일련의 작업들이 전부 맞다고도 볼 수는 없지만 뭔가 노력과 시도를 해보는 건 필요하겠죠. 얼마 전 개봉한 영화 존레논 컨피덴셜 상영 후 이어진 시네토크에서 김작가는 그런 말을 했다죠. 좋은 음악을 만드는 사람이 훌륭한 음악가라면, 세상을 바꾸는 음악을 만드는 사람은 "위대한 음악가"라구요. 저희는 "위대한"은커녕 아직 "훌륭한" 출판사의 반열에 이르기도 턱없이 부족하지만, 그래도 언젠가는 세상을 바꾸는 책을 만들어내보겠다는 작은 꿈 하나씩만은 가슴 속에 품고 살고 있지 않나 하는 생각은 듭니다.

저희 출판사에서 나온 "조엘 온 소프트웨어"가 모든 개발자들의 가슴에 불을 지르고 첫 씨앗을 뿌리기 시작한 "웹 표준 연작"이 웹 세상을 조금씩 바꾸고 "게임회사 이야기"가 날이면 날마다 지속되는 야근 속 배달 피자의 열망을 지피웠다면 말이죠. :)

* 참고로 저희 출판사에서는 외래어 표기시 될 수 있으면 개발자분들이 쓰는 용어, 하지만 발음이 틀린 경우라면 우선은 발음 기호를 최우선합니다. 어플리케이션보다는 애플리케이션. 에이잭스같은 경우에서도 보듯이 될 수 있으면 "ㅔ" 발음과 "ㅐ" 발음은 구분해주는 편이 좋죠. 외래어표기법을 지키고는 싶지만, 현실과 너무 동떨어진 경우에는 따르기가 쉽지 않더군요. -0-

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

『Ajax 인 액션』 1위.. ^^*


전 세계에서 가장 많이 팔린 Ajax No.1 베스트셀러!
아마존 독자가 열광하고 전 세계 전문가들이 극찬한 최고의 Ajax 책
지난 5월 중순, 위와 같은 문구를 내걸고 판매를 시작한 『Ajax 인 액션』이 오늘 강컴 베스트셀러 1위에 올랐습니다. 할인 행사나 이벤트 도서가 아닌 다음에, 이렇듯 꾸준한 기세로 성원을 얻어내어 1위에 오르는 경우는 흔치 않았었는데요.

독자들의 사랑에 힘입어 소개 문구에 한 줄을 더 추가해야 할 것 같습니다.

Ajax 관련 국내 책을 모두 석권한 최고의 베스트셀러!
물론 한낱(!) 순위에 연연하는 것은 아니지만, 그래도 기분 좋습니다. ^_^
좋은 책을 발굴해서 아주 훌륭히 번역해준 강철구 역자님께 감사드립니다. 황금돼지띠 해에 태어날 2세를 가지셨다는 기쁜 소식도 들었는데, 든든한 에이콘 가족으로 늘 함께 해주셔서 감사합니다. 그리고 무엇보다도 좋은 책을 골라 읽어 주시는 독자여러분께도 감사의 말씀 전할게요.
(음.. 저희야.... 역자분과 독자분들이 잘 차려주신 밥상에서 그저 맛있게 먹기만 했을 뿐... ㅡ.ㅡ ㅎㅎ)

CC

크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

pxxxiv 마지막 문단 삭제
Ajax 커뮤니티(www.ajaxinaction.net)는 현재 운영되지 않고 있습니다.

p41 아래에서 8행 코드 부분
h1 div { color: red } → div h1 { color: red }

p150 2행
내장된 String.substring 함수를 → 내장된 String.split() 함수를

p168 예제 4.10 11행, 14행

Garment.prototype.addColor(color){
→Garment.prototype.addColor=function(color){

Garment.prototype.addSize(size){
→Garment.prototype.addSize=function(size){