정확한 시기는 기억안나지만 나온다 나온다 하면서 3년을 넘게 끌어서 이제 슬슬 잊혀져 갈 무렵 드디어 출간이 되었다. 수많은 자바스크립트 개발자들에게 단비와 같은 jQuery를 만든 존 레식이 Bear Bibeault와 함께 쓴 책이고 프로 자바스크립트 테크닉 이후 두번째 책이다. 책을 3년 넘게 쓰다니 얼마나 지쳤을가 싶은 생각도 드는데 책 초반에 책이 이렇게 오래 걸린 이유가 설명을 하다보니 과연 그렇게 하는 것이 옳음 방법인가 하는 생각이 들어서 jQuery 소스를 다시 수정해가면서 책을 쓰다보니 늦어졌다고 하고 있다.
책의 제목도 그렇고(보통 자바스크립트에서는 고수라는 의미로 닌자라는 호칭을 사용한다. 난 별로 안좋아하는 호칭이지만...) 책 초반에 정확히 밝히듯이 이 책은 자바스크립트 초심자를 위한 책은 아니다. 즉, 변수선언을 어떻게 하는지 함수는 어떻게 사용하는지 같은 설명을 하는 책은 아니라는 얘기다. 최소한 기본적인 자바스크립트는 사용할 줄 알고 어느정도는 능숙히 사용하는 선에서 좀 더 고급 스킬을 알려주는 책이라고 할 수 있다.
저자의 네임밸류대로 내용이 아주 충실하고 좋다. 1부에서는 본격적인 내용에 들어가기 전에 알아둘어야 할 부분에 대해서 설명하고 있다. 이 책에서 설명할 내용에 대한 전체적인 내용부터 책 전체에서 사용할 테스트코드(assert) 및 테스트방법등을 설명해 주고 있다. 2부에서는 함수와 객체에 대해서 다룬다. function은 자바스크립트에서 가장 중요한 부분이기 때문에 함수를 사용하는 여러 방법과 범위, 클러저와 prototype에 대한 개념을 아주 잘 설명해 주고 있다. jQuery의 저자임에도 상당수의 예제소스를 prototype.js에서 가져와서 보여주고 있다.(한때 무척 좋아하는 프레임워크이기 때문에 반가웠다. 이 부분은 jQuery의 초점이 객체확장같은 부분에는 많이 관여안하고 있기 때문일것 같다.) 이어서 어느 프로그래밍 언어에서나 중요한 정규표현식을 다루고 타이머(setTimeout, SetInterval)이 동작하는 구조를 잘 설명해 주고 있다.
3부부터 본격적으로 책에서 계속 닌자들이 하는 방식이라고 얘기하는 고급(?) 스킬(어쩌면 약간 변칙적일수도 있는...)을 설명해 주고 있다. 라이브러리를 만드는 경우가 아니면 일반적으로는 좀 적게 사용할 eval과 with문을 어떻게 활용하면 좋은지 설명해 주고 있다. 이런 부분은 직접 사용하지 않더라도 많은 라이브러리에서 내부에서 사용하므로 이해할 필요가 있다는 점을 강조하고 있는데 충분히 동감한다. 특히 보통은 권장하지 않는 with문에 한 챕터를 할당해서 설명하고 있는 부분은 상당히 인상적이다. 성능비교표를 보면 with문을 사용해야 하는가 싶기도 하지만 존 레식을 필요에 따라서는 충분히 with문의 이점을 얻을 수 있고 이미 많이 사용하고 있다고 강조하면서 with문의 가장 큰 회의론자가 더글라스 크록포트라는 점을 짚어준다. 이어서는 클라이언트 자바스크립트에서 가장 어려운 크로스 브라우징 전략을 설명해 주고 있다. 개발을 할 때 목표 브라우저를 어떤 전략으로 고르고 접근해야 하는지를 설명하고 있다.
마지막 부분은 jQuery의 가장 큰 장점이라고 생각하는 이벤트 핸들링, DOM 조작, CSS 셀렉터를 설명해 주고 있다. 직접 각 브라우저에서 어떤 문제가 있고 그래서 어떻게 접근해야 하는지 찬찬히 설명해 주면서 예시 코드를 보여주는데 jQuery가 가장 강점인 부분이기 때문에 문제와 해결을 위한 접근방법에 대한 설명도 좋고 복잡한 내용임에도 설명이 잘 되어있다고 생각한다. 이부분의 대부분 예제는 jQuery에서 가져와서 jQuery의 소스를 보거나 이해하는대도 도움이 꽤 되리라고 본다.
개인적인 총평은 참 괜찮은 자바스크립트 책이 나왔다고 생각한다. 그동안 자바스크립트 책이라 하면 자바스크립트 완벽가이드와 더글라스 크록포드의 자바스크립트 핵심가이드정도를 추천해 주곤 했는데 사실 완벽가이드는 최고기는 하지만 너무 두꺼운 단점이 있고 핵심가이드는 두께로 초심자용인척 하면서 꽤 어려운 단점(?)이 있었는데 이 책이 초심자용 책은 아니지만 이 두권의 아쉬움을 달래줄만한 책이라고 생각한다. 설명에서 예제코드까지 이해하기 좋게 잘 구성되어 있다. 그리고 다른 책에서는 집어주지 않았던 고급적인(?) 내용도 꽤 있다고 생각된다.
다만 대부분의 예제 코드를 assert문을 통해서 테스트 결과로 동작여부를 보여주고 있는데 이러한 접근은 좋은 가이드라인이라고는 생각하지만 어째서인지 모두 통과하는 assert문으로 작성하지 않고 있다. 이는 의도적이라고 보이긴 하는데 예제코드만 보았을 때는 이 assert문이 통과할 의도인지 아닌지를 알수 없어서 이어진 설명과 테스트 실행결과를 봐야만 알 수 있어서 읽는 입장에서는 좀 헷갈린다.(즉 실패하는 테스트인데도 코드는 true일걸로 기대한 것으로 작성된 부분도 일부 있다는 얘기다.)
존 레식은 일본문화에 상당히 심취해 있는지 예제코드에서 블리치의 쿠로사키 이치고나 루키아등이 등장하는 점도 이 책의 재미 중 하나이다. 그리고 영어를 잘하는 사람에게는 어떤지 모르겠지만 이 책은 내 어휘력 수준에서는 영어 문체가 약간은 어렵다고 느껴졌다.(읽어본 다른 원서에 비해서도..) 지금 번역서가 준비중인 걸로 알고 있는데 왠지 이 책은 원서로 봐줘야 할것 같아서 기다리지 못하고 원서를 읽어버렸다. 번역서가 빨리 나오길 바랄뿐이다.
벌써 다 보셨군요. DSL이 필요할 때는 with만큼 좋은 게 없는데, 그냥 안쓰면 되는 건데 왜 빼버렸는지...
전 사실 with는 써본적이 없긴한데.. 보면서 역시 쓰기 나름이구나라고 생각하게 되었습니다. ㅎㅎㅎ 빠지긴 했어도 하위호환성때문에 사라지진 않지 않을까요? ㅎ
한번 사볼까 하고 있었는데 사봐야겠군요. 참고로 존 레식은 한 일본 대학에서 '우키요에'에 대해 Visiting researcher로 일한 적이 있어서 일본 문화에 더 친숙할지도 모르겠네요. :)
일본대학은 지금도 일하고 있는것 같더라구요.. 저도 언제 볼 수 있을지 모르지만 역서도 한번 봐야겠어요. ㅎ
좋은 리뷰 감사드립니다. 클라이언트를 다루게 되면 꼭 참고해야 겠네요~
지금은 역서가 나와서 쉽게 읽을 수 있게 되었죠. ^^