작년 10월에 강컴에 들렀다가 받은 책을 이제야 읽어 보고 서평을 쓰게 되네요~ 이전엔 몰랐는데 이 책의 역자 분은 최근 프로그래밍에 관한 에세이 ‘행복한 프로그래밍’, ‘누워서 읽는 알고리즘’ 의 저자 임백준씨 이군요~ 번역이 매우 자연스럽고 역주를 통해 보완 설명도 가끔 보이고 이런 점은 책에 대한 이해가 부족한 단순히 내용만을 번역한 책에서는 볼 수 없는 설명이겠죠.
이 책은 EJB, LDAP을 다루면서 책을 전개하고 있지만 특정 기술들은 이미 알고 있다는 가정을 하고 있습니다. 가상의 회사를 통해 사용자 요구사항을 수렴하여 기초적이고 독립적인 데이터 계층을 설계해 보는 것이 이책의 목적입니다. 저자는 3권의 시리즈를 통해 데이터 계층 설계 => 웹 프리젠테이션 층 설계(웹 기반 애플리케이션) => 웹 서비스 라는 구성 계획을 세우고 있습니다만 이책의 원서가 2002년 3월 임을 볼 때 두 번째 책이 나온다 하더라도 어떤 메리트가 있을까? 라는 생각이 드네요~ 어떻게 보면 이렇게 물리적으로 구성을 나누었기 때문에 확실한 데이터 계층 분리를 보여주긴 합니다~ 프리젠테이션 구현을 신경 쓰지 않고 데이터 계층에만 집중하여 볼 수 있었던 것은 좋았습니다.
특정 기술에 대해 선행지식을 요구하기는 하지만 EJB에 관해 약간의 지식과 J2EE(JMS, JDBC, JNDI)에 관한 지식만 있으면 수월하게 보실 수 있습니다. 주로 소스를 중심으로 책을 설명하기 보다는 소스 부분은 마지막 부록 부분으로 남겨놓고 필요한 부분만 추가하면서 진행했기 때문에 책을 빠르게 볼 수 있었고 특이한 점이라면 LDAP을 사용하여 사용자 로그인, 권한 기능을 구현한 점입니다. LDAP을 많이 접해 보지 않았지만 이 책을 통해 어느 정도 감을 잡을 수 있을 정도로 어렵지 않게 설명되어 있습니다. 오라일리 책의 특징이긴 하지만 소스를 실행시키기가 까다롭습니다. 그렇기 때문에 그냥 이런 식으로 구현하는구나~ 하고 소스를 살펴 보는 것에 만족하는 것이 편하고 정신건강에 좋습니다~
가끔씩 저자의 내공이 보이는 장(시퀀스를 가지고 있는 테이블은 눈 여겨 볼만한 부분이었습니다. Oracle에서 시퀀스를 가지고 올 때 nextval로 가져 온 다음 무언가 잘못되어 rollback시키면 시퀀스는 증가한 상태로 있는 처치 곤란한 상태가 되죠. 또한 혼란을 가중시키지 않는 인터페이스 명명 법이라던가, 메소드 명명법등..)도 있었고 전체적인 흐름도 자연스럽습니다만 아쉬운 점이 있다면 이책에서 구현한 데이터 계층이 차후 나올 지도 모르는 세 번째 책의 주제인 웹서비스와 어떻게 연동이 될까? 라는 궁금증을 낳았습니다. 모든 것을 웹서비스에 맞추어 새롭게 만들어야 하는 것일까? 아니면 어디까지 재사용이 가능한가? 라는 호기심이 생기더군요.
EJB와 DB설계에 관한 내용(Value Object및 패턴 얘기 등등)은 그리 새로울 것이 없었지만 LDAP을 써먹는 방법, 그것의 이점과 이후 시리즈 책들이 출간된다면 부담 없이 볼만한 책이라는 생각이 듭니다~
서평은 잔인한 것이다. 마케팅 차원에서 서평은 도서의 판매를 촉진하기 위해 장려하지만, 책의 입장에서 보면 잘 팔리는 책은 더욱 잘 팔리게, 안 팔리는 책은 더욱 안 팔리게 만드는 역할을 수행한다. 양질의 도서가 아니면 서평은 괴로운 일이다. 이런 측면에서 『엔터프라이즈 자바 애플리케이션 구축 : 아키텍처』의 서평을 쓰는 일은 고역은 아니다. 특히 이 책은 담고 있는 정보의 희귀성, 소스의 통합성 및 정확성이라는 장점을 가지고 있기 때문이다. 그럼에도 불구하고 이 책이 모든 개발자들에게 잘 소화될 수 있는 책은 아니라고 생각한다. 저자가 밝히듯, 엔터프라이즈(기업용) 애플리케이션의 구축과정, 즉 프로젝트에 관한 소프트웨어 공학적인 이해와 J2EE 기술에 대한 기본적인 지식을 필요로 하기 때문이다.
저자에 따르면, 이 책은 “부분적인 예제를 넘어서 커다란 애플리케이션을 처음부터 만들어 나가는 전체 과정과 설계단계에서 내리는 의사결정에 대한 구체적인 설명”이다. 이 책에서 구현하는 애플리케이션은 조금씩 이름을 달리 하기는 하지만, 기본적인 형태는 MVC(Model-View-Control)모델을 기반으로 하고 있다. Model의 측면에서는 관계형 데이터베이스, 디렉토리 서버, 그리고 이를 핸들링 하는 방법으로 CMP 엔티티 빈과 Manager 클래스를 사용한다. 이때 실제 프로젝트에서 사용하는 것과 같이 Adapter 클래스를 사용한다. 또한 흥미로운 점은 데이터베이스에 신규 Key값을 생성하는 방식에 대한 설명인데, 일반적으로 Max값을 조회하고 거기에 1를 더하거나 Sequence(주로 오라클에서 사용)에서 값을 읽어오는 방식의 문제점을 제기하면서 스캇 앰블러의 방식을 이야기한다. 이 책에서는 이를 자세히 다루지 않고 Key값 생성을 위한 별도 테이블을 구성하고, Stateless Session Bean을 이용하는 방법을 소개했다. 신선했다. 일반적으로 Key값 생성이 중요한 경우, 별도 테이블을 구성한 경우가 있었지만, Session Bean을 이용하기보다는 직접 데이터베이스로 작업했다. 약간 아쉬운 점은 업무 자체가 작은 트랜잭션만으로 이루어져 있다는 것이다. 즉 대용량 처리 및 배치 처리를 위한 업무가 빠져 있다.
네 개의 장을 할애하여 데이터 계층에 대해 상세하고 다룬 다음, 비즈니스 로직과 메세징과 패키징에 대해 이야기한다. 패키징에 대한 내용은 적었던 것 같다. 이 부분에서 아직까지 신기술로 잘 사용되지 않고 있는 Message-Driven Bean과 JMS 클라이언트 프로그램 예제가 나와 있어 좋았다. 또한 Stateful Bean에서 시작하여 Stateless Bean으로 바꾸는 과정을 보여준다.
이 책은 전체 세 권으로 구성된 시리즈의 첫 번째 책이다. 마지막 장인 아키텍처를 넘어서는 계속해서 변화하는 요구사항에 대응할 수 있는 유연성을 갖춘 시스템을 염두에 두고 앞장에서 논의한 애플리케이션을 설명하고 있다. 또한 2권과 3권에 등장할 웹 애플리케이션과 무선이라는 프리젠테이션에 대한 부분을 언급하면서 끝나고 있다. 기대는 되지만 어떤 모습인지 알 수 있을 정도로 자세하지는 않다.
이 책을 처음 잡았을 때의 느낌은 “얇군”이었다. 부록을 제외하고도 500페이지를 훨씬 넘을 줄 알았는데, 300페이지를 조금 넘기고 있을 뿐이다. 프리젠테이션 계층이 없다는 면에서는 절름발이 애플리케이션이라고 할 수 있지만, 아직 공장에 있는 로봇 태권V로 말하고 싶다. 만약 실제 개발과정에 조금이라도 더 다가서고 싶다면, 이 책은 좋은 동반자가 될 것이다. 또한 이미 나와 같이 다가선 사람들에겐 생각할 거리를 제공해 줄 거라 생각한다.
이 책은 엔터프라이즈 자바 애플리케이션을 구축하는데 필요한
내용을 다루는 3권의 시리즈물의 첫번째 책에 해당한다. 오렐리에서
준비중인 이러한 3권의 시리즈물은 각각 아키텍처, 웹 기반
애플리케이션, 웹서비스이다. 2권과 3권에서는 각각 JSP와
서블릿 그리고 XML, 웹서비스에 대해서 다룰 것이며 이 책은 그 시작으로
EJB 애플리케이션 서버 구축을 위한 방법을 설명하고 있다.
오렐리의 책이면 흔히 그렇듯이 이 책은 독자가 기본적인 EJB 지식과
데이터베이스 지식을 가지고 있을 것이라는 것을 가정으로 하고 시작한다.
대부분의 EJB 기본서적들과 이 책이 맥락을 달리하는 부분은 바로
아키텍처에 집중하고 있다는 것이다. 기본서에서는 EJB를 설명하기 위해
EJB그 자체에 치중하다보니, 어떤 구조를 왜 채택해야하는지 그리고
어떤 구조가 더 나은 구조인지에 대해서는 건너뛰는데 반해서 이 책은
순전히 왜 그런 구조를 채택하고 왜 어떻게 코딩해야하는지에만 집중
하고 있다. 예를들어 사무실 정보를 나타내는 OFFICE테이블에서 기본키는
OFFICE_ID이지만 엔터티 빈에서는 getId()를 사용해야하고 이것이
왜 그런지, 그리고 어째서 getId()라는 메소드명을 사용하고 getID()는
아닌지, 또한 이렇게 획득한 ID가 Integer타입이어야 하는 까닭에 대해서
설명하고 있다. 애플리케이션 서버를 구축하는 방법이 다양할 수 있다는
측면에서 안목있는 개발자의 지식을 엿보는 재미가 쏠쏠하다.
그러나 이책은 EJB와 서블릿간의 연동이라던가 EJB를 웹 서비스로 노출
시킨다던가 하는 부분은 다루고 있지 않다. 이러한 부분은 이어지는
시리즈물인 2,3권을 기대해 봐야 할 것이다. 전체467쪽에서 실제
내용은 326페이지까지이며 그 뒤는 부록으로 이 책내에서 다루고
있는 가상의 회사인 forethought.com 구축을 위한 SQL문, 소스코드의
전체와 서버 설정방법등을 다루고 있다. CD부록은 없으나 웹에서
소스코드를 다운로드 할 수 있으므로 소스코드입력의 부담은 덜할 것이다.
그리고 보안이나 EJB튜닝의 내용은 다루고 있지 않다.
이런류의 책이 드물다는 점에서, 그리고 좋은 개발자의 애플리케이션 설계
기법을 배울 수 있다는 점에서 볼만한 책이라고 생각한다.