로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
고객님 안녕하세요!
강컴 회원만의 특별한
서비스를 경험하세요!
로그인  |  회원가입
추천 블로거
튜나
안녕하세요~
저는 3D graphics program...
퍼지컴
공구리
미친병아리
...
서평보기
Professional Java XML
AHMED | WROX PRESS | 원서 | 2001-05-08
종합평점
도서수준
XML 기초부터 Web Service까지.. 2006-10-25 오전 3:54:08 
평점
도서수준
조회수 (1569)
공감 (0)
임은천 님의 블로그
예전에 원서를 읽고나서 시간이 너무 오래 걸렸기 때문에(그 때도 대략 1주일 날아간듯..) 원서를 꺼려하게 되었지만, 이번에 강컴에서 이벤트를 통해서 위의 도서를 단지 9000원에 판매 했기 때문에 주저 없이 사게 되었다.
 
WROX 사의 Professional의 책들이 대부분 그러하지만, 이 책 역시 꽤 두께가 있는 책이다. 대략 1130쪽 정도의 내용을 읽어야 하는데, 16명의 공동 저자분들이 만들어 낸 역작이라고 볼 수 있다. 다만, 여러 명의 저자가 작성을 했기 때문에 갑자기 이야기 하는 방식이나 설명 순서가 약간은 개연성이 떨어지는 부분도 있지만, XML의 처음부부터 실제 구현부 까지(그 당시 시점에 접할 수 있는 최대한의 한도까지) 설명을 하고 있다. 물론 현재의 개발과 약간의 구문 차이는 있을 지언정 개념적인 측면에서는 큰 차이점이 없기 때문에 이 책이 오래 되었다고 해서 무시할 정도는 아니다. 어쨌든 봐야하는 영어의 양이 너무나 많았으니 이 책 한 권으로 엄청난 양의 독해 공부가 된 것도 사실이다.
 
언제나 모든 책의 모습처럼 이 책도 역시 시작은 가장 기본적인 내용을 다룬다. 책 제목이 Java XML에 대한 것이므로, 당연히 첫 장은 XML에 대해서 나온다. Well-Formed XML, Valid XML, XML Namespaces, Information Set, XML 다루기에 대한 대략적인 설명이 50쪽 까지 나온다. 다른 책에서도 접할 수 있는 내용이라서 안봐도 되지만, 영어 해석에 대한 감을 익히고자 상대적으로 간단한 내용을 6시간 정도 투자해서 보았다. 물론 처음에는 영어를 안 본지 꽤나 된 후인지라, 느렸다. 읽다 보니 조금씩 읽는 속도가 빨라지긴 했다.
 
2장에서는 SAX에 대해서 다루고 있다. 우리는 자바 개발자이니 다른 부분보다 JAXP를 통해서 SAX Parser를 얻는 부분을 보면 되겠다. 해당 내용은 66p에 있다. 알다 시피 SAX는 이벤트 기반의 파서이다. 기본적인 SAX Parser Handler의 구현은 73p에 있으며, 이 Handler를 통해서 각각의 이벤트들을 처리 하게 된다. 78p에 있는 setValidating(true) 이 내용을 통해서 Validation을 하도록 설정할 수도 있다.
82p에서 나오는 Locator Class는 라인 위치나 컬럼 번호 같은 것을 표시하는 것과 관련 있는데, 주로 쓰이는 곳은 나온 것처럼 Exception을 처리할 때 쓰인다.(다른 곳에 써도 되겠지만 말이다.)
85p에 나오는 Lexical Handler는 말 그대로 구문상의 내용을 처리할 때 쓰인다. 구문은 주석이나 CDATA Section, DTD 같은 것을 뜻한다.
91p부터 2장 마지막까지는 실제적인 vCard(가상 비즈니스 카드)에 대한 SAX의 구현체를 보여준다. 여기에서는 State Pattern을 써서 Event의 상태를 변화시켜 처리하는 것으로 구현을 하고 있다.
 
3장에서는 DOM에 대해서 다루고 있다. 아마 SAX보다는 더 이야기 들어본 경우가 많을 것이다. DOM은 W3C에서 다루어지기 때문에 더 쉽게 알려진 것 같다. DOM에는 Level이라는 개념이 있는데, 책에 나와 있듯이 해당 내용들은 Version이 올라가는 것을 나타내는 것이 아니고 특정 영역에 대한 정의를 구분하는 역할을 하고 있다. DOM 1이 Core와 HTML 관련 DOM API를 다루고 있는 부분이라서 좀 더 자주 접할 것이고, 더 중요하게 여겨질 수 있다. 아마 DOM API 같은 경우에는 자바 스크립트를 통해서 자주 접해봤을 것이다.
실질적인 DOM Tree를 만들어 보는 예제는 120p에 있다. 아마 구문이 그리 복잡하지 않고 직관적(intuitive)이기 때문에 이해하는데 큰 어려움이 없을 것이다.
최종적으로 Transformer를 통해서 결과를 출력하는데, 이건 SAX나 DOM이나 거의 비슷한 형태로 쓰일 수 있다. 사실 JAXP를 통해서 어느 정도 통합된 인터페이스가 제공되기 때문에 개발자 입장에서는 둘의 엄청나게 다른 차이점에도 불구하고 비슷하게 사용할 수 있게 된다. 중간에 다뤄지는 부분만 한쪽은 Tree형태고, 한쪽은 Event 형태라는 것 정도만 다르다.
124p 부터는 DOM Tree를 실제 Swing의 JTree로 Mapping하는 예제를 다루고 있다.
131p에서부터는 DOM Level 2에대해서 다루고 있는데, 여기서 다시 짚어 주듯이, 주된 차이점은 namespace를 지원하게 되었다는 점이다. 또한, 각 인터페이스에 몇몇 Method도 추가되었고, 14개의 모듈로 나뉘어 모듈별로 세분화를 꾀했다.
그리고 NodeIterator와 다르게 TreeWalker라는 것이 있어서 Filter를 통해 필요한 내용만 볼 수도 있게 되었다.(141p)
 
4장에서는 Java 프로그래머가 좀 더 쉽게 XML을 다룰 수 있는 도구인 JDOM에 대해서 다루고 있다. Java Document Object Model의 약자일 거라고 생각하고 있었는데, JDOM은 그냥 JDOM이라고 한다. 물론 차후에 JSR에 포함되었긴 하지만 말이다. 어쨌든 SAX를 입력으로 하고 DOM처럼 이리저리 쉽게 사용할 수 있으니 SAX와 DOM의 장점만 취했다고 보면 된다. 결국 Java Programmer에게는 JDOM을 사용하는 게 좀 더 이해하기 쉽고 좋다는 뜻도 된다.
169p에 나오는 내용은 간단한 팁 정도지만, 모르면 애먹는 부분이 될 수도 있다. XMLOutputter(" ", true) 같이 해줘야지 예쁜 형태의 Indent가 있는 XML 구문을 볼 수 있다.
SAX Builder를 쓰든지 DOM Builder를 쓰든지 상관 없지만, 전자는 간단하고 자주 일어나지 않은 XML Parsing에 사용하고 후자는 복잡하고 자주 일어날 수 있는 XML Parsing에 사용한다는 것 정도는 기억을 해두자.
178p에서 다루고 있는 JDOM 예제는 web.xml에서 servlet을 입력하는 것을 보여준다. 개념적인 설명이기 때문에 복잡한 예제는 아니다.
 
5장에서는 XML 스키마를 다루고 있다. 다만, 이 부분은 상당히 이론적인 내용과 기본 개념에 대해서만 다루고 있고, 사용한 단어가 다른 부분에 비해 좀 더 어려웠기 때문에 읽는데 약간 애를 먹었다. 그리고 정확하게 이해를 하기도 힘들었다. 이 부분의 저자도 밝히고 있듯이 기술 SPEC만 400페이지 되는 것을 짧은 지면에 전부 설명하기에는 역부족이기 때문이다. 어쨌든 해당 내용은 따로 Professional XML Schema라는 책이 있으니 그것을 사서 보충하기로 하고 약간 아쉬움을 남긴 채 넘어가도록 하자.
 
6장에는 XML-Object Mapping이라는 단어가 나온다. 241p에 이상한 개념도가 나온데, 도대체 이 장에서는 무엇을 다루려고 하는 것일까? 이 장에서는 어쩌면 생소할 수도 있는 객체 그래프를 XML로 Mapping하는 것에 대해서 다루고 있다. 뒷부분에 실제 구현이 나오고 이 부분에서는 각 개념들의 용어를 정의 하는 정도라고 생각하고 넘어가면 되겠다.
270p에 요약되어 있듯이 Document Centric, Data Centric, Object Centric에 대한 XML, Mapping에 대해서 설명하고 있다.
 
7장에서는 XSLT에 대해서 다루고 있다. 323p까지 다루고 있지만, 이전에 XSLT에 대해서 다루어 본 적이 있으신 분들에겐 그다지 신기한 내용은 아닐 것이다. 다만 Java에서 이런 Transform을 할 때는 xalan(Apache) 프로세서를 사용하기도 한다는 것 정도를 기억해 두고 넘어가자. 화면을 그리는 것에 관심이 있는 Web Designer 분들께서는 읽으시면 재미 있을 것이다. 다만 구문 자체는 Design과 별 상관 없이 XPath 구문과 Processor가 처리하는 XSLT 처리 요소들로 이뤄져 있다.
 
8장에서는 아예 처리를 완료한 html 형태를 보여주고 있다. xalan을 사용해서 XPath를 다루는 342p의 내용이 아마 흥미로울 것이다.
349p부터는 Extension Function이라는 것을 소개하고 있는데, Java와 연관된 BSF 관련 스크립트 언어 연결 방법에 대한 설명이다. 물론 우리가 자주 접하는 자바 스크립트를 기반으로 설명을 하고 있다. 저렇게 복잡하게까지 해서 써야할까? 하지만, 그냥 알아 두는 것도 좋을 법 하다. 어찌되었든 함수 하나 호출하는데 너무 복잡해서 그다지 현실성 있어 보이지는 않는다. 물론 프레임워크 개발자라면 저런 것에 관심이 있을 수도 있겠다. 최종 사용은 357p에서처럼


처럼 쓰면 된다.
 
359p에는 redirect라는 확장을 보여주는데,

안에 들어갈 내용


처럼 쓴다.
 
360p에는 XSLT를 사용해서 DB연결을 하는데, 저렇게 쓰는 사람이 있을까? 생각된다.
9장에서는 XPointer, XLink에 대한 설명이 나온다. 기본적으로 지원해 주는 브라우저가 별로 없기 때문에 실제 어떤 것인지 감잡기도 힘들 것이다. 어쨌든 연결과 특정 부분 지정이라는 점을 기억해 두자.
 
10장에서는 Sementic Document라는 주제로 내용이 전개 된다. RDF와 XTM에 대한 내용인데, RDF 자체의 초기 개념 모델은 그다지 복잡하지 않은 것 같은데, XTM과 연관되서 설명되면서 도무지 무슨 이야기를 해석도 잘 안되었다. 415p부터 점점 커지는 XML을 보면서 따분해서 하품만 나올 지경이었다. 422p의 코드도 그다지 맘에 와닿지가 않았다. 결국 이건 노가다 성이 있다. 라는 생각이 들었기 때문이다. 결국 웹이 좀 더 똑똑해지기 전에 저런 노가다를 해야 하는 건가? 하는 생각이었다. 필요가 있을 때 추가가 되면 자연스럽게 발전하게 되는데.. 사실 해당 기술에 대한 이해가 부족해서 인지, 썩 내키는 방식은 아니었다. 오히려 관련자에 의해서 좀 더 정형화된 Web Service의 UDDI 레지스트리 같은 게 더 마음에 와 닿았다.
428p에서는 결국 해당 Topic에 대한 주제를 보여주지만, 역시 큰 감흥은 없었다. 개념은 복잡하고 구현은 단순하고..아이러니하다.
 
11장에서는 뜬금없이 Socket I/O가 나온다. XML인데 도대체 왜 Socket이 나오는 것일까? 다 이유가 있다. XML이 그냥 한자리에 고정되어서 있는다면야 아무 상관 없지만, 정보 교환을 할 때 좀 더 XML의 가치가 빛나는 것이 아닐까? 특히 통신을 할 때는 이 Socket I/O를 그냥 넘어갈 수는 없는 것이다.
448p 부터는 XML Server Socket과 Client를 통해서 어떻게 보내지고 처리되는 지 간략하게 소개되고 있다. XML Input Source 부분이 Stream 형태도 받아들이므로 Socket을 통해서 자연스럽게 처리가 될 수 있다는 것을 보여준다.
 
12장에서는 Server-Side HTTP를 다루고 있다. 다른 책에서와 비슷한 내용일 거라고 생각을 했지만, 이 책에는 역시 흥미로운 것이 하나 더 있다. 실제 구현을 쭈욱 따라 가야 하겠지만, 480p에 나오는 BasicHttpGopher라는 클래스가 하는 역할이 재미 있다. 이 내용을 잘 따라가 보면, 클라이언트가 무엇이든지 상관없이 원하는 웹서버의 Upload 주소를 안다면 업로드를 할 수 있게 된다. 물론 보너스로 HTTP Request, Response에 대해서 확실하게 알게 될 것이다. 결과는 504p에 보인다. 좀 더 정확한 내용을 얻고자 한다면, Browser를 처리하는 웹 서버를 만들고 브라우저에 업로드를 시작시켰을 때 들어오는 스트림 값을 어느 정도까지만 출력해도 원하는 결과를 얻을 수 있을 것이다.
 
13장에서는 Clinent-side HTTP를 다루고 있지만, 구현 방향만 반대일 뿐 이전 장과 큰 차이점이 있다고 볼 수는 없다.
 
14장에서는 Server-Side Presentation을 설명하면서 간단하게 Cocoon Project에 대해서 설명하고 있다.(585p 에서 실질적으로 사용하는 것을 보여준다. 여기는 맛보기로 후에 더 자세히 다룬다.)
 
15장에서는 Client-Side Presentation을 다루고 있지만, 아쉽게도 Applet을 통해서 설명하고 있기 때문에, 현재 기술 흐름으로 봐서는 큰 Merit가 없다고 보여진다. 그냥 AJAX를 사용하도록 하자.
630p 쪽에서 나오는 XML Island 정도가 조금 신기한데, 얼마나 알고 쓰일지는 모르겠다. 즉 안 쓰고도 원하는 결과를 얻을 수 있을 것이다. 물론 구현이 더 간편하지만, IE에서만 지원하기 때문에 더더욱 그렇다. 그 뒷부분의 CSS 지원은 IE도 현재 된다.
 
16장에 XML Persistence가 나온다. 뭔가 느껴지지 않는가? 그렇다. 6장에서 잠깐 맛뵈기만 보여줬던 객체 저장과 복구에 대해서 다루는 것이다. 물론 여러가지 Mapping 방식이 있겠지만,(647p) 어쨌든 그건 Template Method에서 조금만 수정하면 수정 가능하도록 해당 구현을 진행해 간다. 여기에서 다루는 내용은 Reflection을 통한 객체 Mapping을 하고 있고, 약간의 Trick이 섞인 구현인지라, 구문 자체는 상당히 머리가 아플 것이다. 처음에 왜 EBNF 같은 선언들이 나왔는지 구현을 보면 알 것이다. 어쨌든 신기하게도 해당 객체 그래프는 XML로 나온다. 여기에서 끝일리가 없다. 반대로도 되어야 한다. 즉 XML을 읽어서 다시 객체를 만들어 본다. 물론 이게 너무 복잡하기 때문에 Serialization을 쓰거나 좀더 성능을 개선하고 효율적으로 하기 위해서는 Externalization을 쓸 것이나, 이런 신기한 구현도 있으므로 차근 차근 따라가 보자. 물론 이해 안된다고 고민할 필요 없다. 꼭 그렇게 구현 안해도 되는 것이니 말이다. 구문 상으로는 가장 머리아픈 장이었다. 전부 이해도 안되고 말이다.
 
17장에서는 XML과 DBMS와의 연동을 다루고 있다. 이 책에서는 Rowset에 대해서 간단히라도 설명해 주고 있다.(701p) Rowset이 .NET에서와는 다르게 그냥 일반 ResultSet과도 동일하게 쓰일 수도 있다는 것을 알게 되었다. 물론 JdbcRowSet 때문이지만 말이다. 다른 건 .NET과 마찬가지로 일반 RowSet의 의미로 쓰인다. 주의할 점은 여기에서 쓰인 구현은 Meta 정보에 너무 자주 접근해 성능을 매우 떨어뜨리므로 Meta 정보는 최소한으로 접근하도록 구현을 변경하도록 해야 한다.
720p의 WebRowSet은 뭐니뭐니 해도 readXml 메서드를 제공하기 때문에 XML과 좀 더 친근한 RowSet이라고 할 수 있다.
722p에서는 역시 잠깐 Cocoon에 대해서 설명을 달아주고 있다.
 
18장에서는 정말 자주 접할 수 밖에 없는 설정과 배치에 대한 XML을 다루고 있다. 간단한 서블릿 설정부터 EJB 설정까지 개발자는 정말 많은 설정이 있음에 머리 아파하게 된다. 하지만, 솔직히 그리 편하게 다루지 못하는 것이 사실이다. 사실 XML에서 특정 위치를 찾는데는 DOM보다는 XPath가 엄청나게 유용하다. 이 장에서는 그 XPath를 거의 직접적으로 다룰 수 있는 Xalan2의 XPathUtil을 사용해서 특정 설정 파일을 다루는 것을 보여준다. 물론 부가적으로 XPathUtil2라는 클래스명으로 확장에서 구현하고 있지만, 그다지 어려운 것이 아니다.(740p에 있다.) 위의 클래스를 통해서 특정 Descriptor를 나타내는 Descriptor라는 클래스를 보자. 별로 하는 것은 없다. 단지 XMLUtil을 통해서 XML을 만들고 요소를 얻거나 갯수를 얻는 등의 작업을 Wrapping해서 사용자에게 제공을 한다. 물론 여기에서는 직접적으로 XPath를 사용하는 것이 안나오기 때문에 그에 관련된 내용인 지 잘 모르겠지만, 실제 구현된 것을 이용하는 751p 예제에서 XPath를 사용하는 것을 보고 매우 편하다는 사실을 알게 될 것이다. 이 내용을 통해서 다른 구현은 쉽게 구현될 수 있다. 얼마나 쉽게 해당 요소로 접근할 수 있는 지 느껴보자. XPath는 정말 편하다.
753p 부터는 실질적인 E-mail Application 예제를 보여준다. 이미 만들어진 XPathUtil Wrapper를 통해서 직관적인 구현을 볼 수 있다.
 
19장에서는 XML 프로토콜과 통신에 대해서 다룬다. 일반적인 통신적인 개념 뿐만 아니라, XMLRPC, SOAP(808p에는 Apache Soap 실행화면), BXXP(BEEP로 발음) 등에 대해서 다루고 있다. BXXP라는 건 처음 봤는데, 사용하기에 매우 단순화 되어 있는데다가 MultiPlexing이 가능하다는 점으로 인해서 상당히 성능이 좋을 거라고 예상이 된다. 다만, 크게 알려지지 않아서 그다지 많이 쓰이지 않겠지만.. 어쨌든 보기에는 엄청 단순했다. SOAP는 점점 복잡해 지고 있어서, 많은 괴리감이 느껴지지만, BXXP처럼 단순한 개념이라면 언제라도 환영이다.
 
20장에서는 XML과 Messaging에 대해서 다룬다. 어차피 Java XML이기 때문에 JMS에 대해서 다뤄지고 있다. 다른 책에서 볼 수 있는 내용과 그다지 다르지 않다. 다만 852p에서는 Apache SOAP 메시지를 전달하고 받는 것을 구현하고 있다.
 
21장에서는 다분히 이론적인 B2B 시장에 대해서 다루고 있다. 물론 cXML, xCBL, Rosetta Net, UDDI, BizTalk, ebXML 등 전반적인 B2B 시장에 대해서 설명을 해주고 있기 때문에, 한 번 정도는 읽어 볼 내용이라고 생각된다. 아마 몇 몇 단어는 다른 것들을 통합하거나 포함하고 있어서 요즘에도 보이는 명칭들이 있을 것이다. 하지만, 설명되어 지고 있는 XML 자체의 크기가 너무 길어서, 이 부분의 저자가 큰 그림을 잘 그리는 타입이라는 것을 알았고, 이 건 정말 설명에 별로 안 좋은 방법이라는 것도 깨달았다. 집중력이 엄청 떨어진다고나 할까.. 어쨌든 구현은 정말 단조롭다. 884p를 보면 알 수 있을 것이다.
 
가장 마지막 장인 22장에서는 Web Service를 다루고 있다. 기초부터 튼튼히 다루고 있지만, namespace에 대해 본 독자가 잘 못 이해하고 있는 것인지, 아니면 뭔가 놓치고 있는 개념이 있는지 그 부분이 잘 이해가 되지 않았다. SOAP에 대한 이야기가 나오고, 실제 WSDL, Skeleton, Stub까지 만드는 과정까지 직접 저자가 따라가면서 설명하기 때문에, 아마 그냥 따라가 보면 큰 어려움 없이 이해될 것이다. 버전이 변화되어서 안될 수도 있겠지만, 그리 대처하지 어렵지 않을 것이다. 왜냐하면 기본 개념은 현재도 그대로 유지되고 있기 때문이다. 최종은 IBM의 DB2 개인판을 사용해서 실제 UDDI를 구축해 보는 것으로 마무리를 짓고 있다.
 
이로써 기나긴 Java XML 책은 끝나고 부록으로 여기에서 다루었던 각각의 API들과 단어들에 대한 설명을 A~G에 걸쳐서 하고 최종적으로는 Tomcat 3.2.1 버전 설치를 담고 있다.(물론 Tomcat 설치 부분은 별 필요는 없다.)
 
책을 따라가면서 다시 서평을 쓰다 보니, 정말 길어졌는데, 그 만큼 이 책의 내용이 길어서 본 독자도 읽을 때 매우 힘들었다. 특히 영어로만 되어 있어서 도무지 한글 서적을 읽을 때의 속도를 낼 수는 없었다. 또한, 이해하는 것도 대략 70% 정도에 머물렀다. 어쨌든, 힘들었지만, 다 읽고 나니, 그래도 마음이 후련하다. 번역된 서적도 있던 것 같던데, 그 게 번역이 잘되었다면, 그냥 읽어도 될 것같다. 원서로 봐서는 아마 번역판도 번역이 잘 될 수 밖에 없을 것 같다.(문장이 크게 어렵지 않다.)
 
[점수]
통합성 : 90점 / 100점
주석 점수 : 100점 / 100점
용어 선정 : 80점 / 100점
독자 이해도 : 90점 / 100점
참조 목록 : 80점 / 100점


 
코멘트 0   공감 0
코멘트작성
 
이메일주소수집거부