2008/11/18 12:53 | 웹개발

현재 Velocity Tools의 최신 버전은 1.4 입니다. 그런데 스트럿츠2에서 1.4 버전을 사용하게 설정을 하면 제대로 되지 않고

java.lang.NoSuchMethodError: org.apache.velocity.tools.view.context.ChainedContext.<init>(Lorg/apache/velocity/context/Context;Ljavax/servlet/http/HttpServletRequest;
Ljavax/servlet/http/HttpServletResponse;Ljavax/servlet/ServletContext;)V
       org.apache.struts2.views.velocity.VelocityManager.createContext(VelocityManager.java:193)
       org.apache.struts2.dispatcher.VelocityResult.createContext(VelocityResult.java:235)
       org.apache.struts2.dispatcher.VelocityResult.doExecute(VelocityResult.java:152)
       org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
       com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
       com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
       ...


이런 류의 오류가 발생합니다.

원인은 스트럿츠2가 이 전 버전에 포함돼 있고 이제는 지원이 중단된 생성자를 사용하고 있기 때문입니다. 이를 해결하기 위해서는 다음과 같은 자신만의 VelocityManager 클래스를 만든 후 이를 사용하게 스트럿츠2에 등록해 주면 됩니다.

import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.util.VelocityStrutsUtil;
import org.apache.struts2.views.jsp.ui.OgnlTool;
import org.apache.struts2.views.util.ContextUtil;
import org.apache.struts2.views.velocity.StrutsVelocityContext;
import org.apache.struts2.views.velocity.VelocityManager;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.context.ChainedContext;

import com.opensymphony.xwork2.util.ValueStack;

public class MyVelocityManager extends VelocityManager
{

            private static final Logger LOG = Logger.getLogger(MyVelocityManager.class);

            public Context createContext(ValueStack stack, HttpServletRequest req, HttpServletResponse res) {
                VelocityContext[] chainedContexts = prepareChainedContexts(req, res, stack.getContext());
                StrutsVelocityContext context = new StrutsVelocityContext(chainedContexts, stack);
                Map standardMap = ContextUtil.getStandardContext(stack, req, res);
                for (Iterator iterator = standardMap.entrySet().iterator(); iterator.hasNext();) {
                    Map.Entry entry = (Map.Entry) iterator.next();
                    context.put((String) entry.getKey(), entry.getValue());
                }
        context.put(STRUTS, new VelocityStrutsUtil(getVelocityEngine(), context, stack, req, res));

                ServletContext ctx = null;
                try {
                    ctx = ServletActionContext.getServletContext();
                } catch (NullPointerException npe) {
                    // in case this was used outside the lifecycle of struts servlet
                    LOG.debug("internal toolbox context ignored");
                }

                if (toolboxManager != null && ctx != null) {

                    // here is the new constructor :
                    ChainedContext chained = new ChainedContext(getVelocityEngine(), req, res, ctx);

                    chained.setToolbox(toolboxManager.getToolbox(chained));
                    return chained;
                } else {
                    return context;
                }

            }
}


스트럿츠2에 등록은

struts.xml 에
<constant name="struts.velocity.manager.classname" value="com.mypackage.MyVelocityManager" ?>

또는,

struts.properties 에
struts.velocity.manager.classname=com.nate.santorini.framework
.SantoriniVelocityManager

라고 해 주면 됩니다.

이 내용은 Struts2 & Velocity Tools 에서 찾을 수 있었습니다.
2008/11/18 12:53 2008/11/18 12:53
2008/11/18 10:12 | 웹개발

HTTP 프로토콜에는 요청에 대해 오류가 발생시 그에 적절한 오류 응답 코드를 정의하고 있습니다. 예를 들어 404는 페이지가 없는 경우, 500은 내부 서버 오류 등등으로요.
웹서버나 WAS에는 이러한 코드들에 대한 기본 페이지를 가지고 있습니다. 하지만 이러한 페이지들을 그냥 사용하는 경우는 없고 보통 사이트에 맞게 재정의해서 사용하기 마련입니다. 오류가 발생시 자신의 사이트에서 원하는 디자인으로 오류 발생을 알리는 거죠.
Java 플랫폼일 경우 모든 예외(exception) 발생을 포착하여 보통 사용자에게는 하나의 오류 페이지를 보여주게 지정하게 됩니다.
이러한 작업을 현재 진행하고 있는 프로젝트에 적용 중이었습니다. 예외 포착도 잘하게 설정 완료하고, 간단하게 오류 페이지도 만들어 놓은 후 프로그램에서 일부러 예외를 발생하게 설정을 완료한 후에 브라우저에서 해당 url을 요청하여 결과를 확인했습니다.
먼저 FF에서는 결과가 제대로 나왔습니다. 그 다음 IE 차례였는데, 제가 지정한 오류 페이지가 보이질 않고 브라우저 자신의 500 오류에 대한 메시지가 나오는 것입니다.

'음... 이상하네...'

Fiddler로 확인 결과 오류 코드와 함께 지정한 오류 페이지는 제대로 반환되고 있었습니다.
이 때부터 땅파기가 시작됐죠. 이러 저러한 설정들을 해가며 아무리 해도 여전히 안 되는 겁니다. 엄청난 땅파기 후에,

'음... 구글에게 한 번 물어볼까'

하는 생각에 검색 결과 다음과 같은 답을 찾을 수 있었습니다.

A Warning about Microsoft Internet Explorer - IE and too-short custom 404 error pages

IE는 특정 오류 페이지가 자신이 원하는 크기보다 작을 경우 응답 받은 내용을 보여주는 것이 아니라 자신이 가진 해당 오류에 대한 내용을 보여주는 것이었습니다.
다음의 표는 위의 URL에서 인용한 내용입니다.

코드 설명 파일 크기
400 Bad Request > 512 bytes
403 Forbidden > 256 bytes
404 Not Found > 512 bytes
405 Method Not Allowed > 512 bytes
406 Not Acceptable > 512 bytes
408 Request Time-out > 512 bytes
409 Conflict > 512 bytes
410 Gone > 512 bytes
500 Internal Server Error > 512 bytes
501 Not Implemented > 512 bytes
505 HTTP Version Not Supported > 512 bytes


결국 저는 테스트 용이라 아주 간단하게 오류 페이지를 만들었던게 문제였습니다. 물론 그 덕분에 이런 내용을 알게됐지만, 땅파기는 역시 힘들어요.
일반적으로 오류 페이지를 만들 때는 이거 저거 치장을 하기 때문에 보통 이 크기는 넘을거라 생각은 하지만 알아는 둬야 저같은 땅파기는 안 할 듯 싶습니다.
2008/11/18 10:12 2008/11/18 10:12
TAG , ,
2008/11/11 22:26 | IT

티베로 데이 2008에 다녀왔습니다.
(http://tiberoday.tmax.co.kr/index.jsp)

사실 기념품에 눈이 멀어 다녀왔지만, 회사에서 티베로 도입을 검토한다는 얘기도 있고 해서 동향 파악도 할 겸 다녀왔습니다.

컨퍼런스의 슬로건은 Over The miRACLE 이었습니다. 제가 굵은체로 표시한 부분만 보면 아시겠지만 ORACLE을 넘어서겠다는 그들의 의지를 나타나내는 슬로건입니다. 물론 이런 해석은 자의적인게 아니라 티맥스 쪽에서 그렇게 얘기하더군요.

4시간이상 앉아서 들으면서 느낀 점은 티맥스가 기업 데이터 정복을 위해 엄청나게 노력하고 있다는 것이었습니다. 자세히 찾아본 것이 아니어서 틀릴 수도 있지만 오라클이 제공하는 제품군에 대응하는 모든 제품들을 다 선보이고 있는 듯 했습니다.

다른 것들은 제가 엔터프라이즈 환경에서 개발을 하고 있지 않기 때문에 별로 눈에 들어오지 않았지만, Tibero라는 DMBS 자체와 Tibero Lite는 관심이 가더군요.

뭐 당연히 자사 제품 소개니까 좋다고 하겠지만, 성능 평가 결과 Tibero가 Oracle에 비해 동등하거나 조금 더 나은 결과를 보여준다고 합니다. 거기다가 가격도 Oracle에 절반정도이며 기존에 Oracle에서 마이그레이션을 하는 경우 툴의 제공은 물론 기존의 질의문이나 프로시져, 함수 등을 거의 수정할 필요가 없다고 합니다.
오라클을 쓸 수 밖에 없는 환경이라면 한 번 쯤 고려해 볼 만한 거 같습니다. 비용도 비용 문제지만 국내 업체이기 때문에 강할 수 밖에 없는 기술 지원이 상당히 매력적인거 같습니다.

Tibero Lite는 SQL Lite 같은 파일 기반 DB 시스템이라고 보시면 됩니다. 잘 아는 것처럼 SQL Lite 같은 경우는 php 뿐만 아니라 Google Gears및 Android등에 쓰이고 있죠. 파일 기반의 DB 시스템은 소규모 환경에서 꽤 유용한 거 같습니다.
Tibero Lite가 SQL Lite 등에 비해서 월등해 보인 점은 다양한 파일 형식 지원과 많은 수의 오라클 통계 함수 등 훨씬 많은 질의문 지원 등입니다. 어느 정도 경량화 돼 있느냐와 API 지원등이 관건이겠지만 꽤 괜찮아 보였습니다. 이 건 티맥스에서 오픈 소스화 하여 발전시켜 나가는 것도 좋지 않을까 생각되네요.

그 외에도 많은 제품들을 설명하고 실제 적용 사례도 설명됐습니다.

참, Tibero DBMS의 클러스터 지원은 오라클 쪽과 같은 Shared DB Cluster 방식이라고 하더군요. 몇 가지 Cluster 방식을 설명하면 자신들이 지원하는 방식인 Shared DB 방식에 대해 장점들을 강조했습니다. 나름대로 자부심을 가지고 있는 듯이 느껴졌습니다.

이 후의 향방이 중요하겠고 또한 실제 내부가 어떨지 모르겠지만 국산 DBMS 기술이 다른 누구도 아닌 Oracle을 상대로 해서 발전하고 있다는 점이 놀라웠습니다.

티맥스의 꿈이 어떻게 실현될지 앞으로가 기대됩니다.

2008/11/11 22:26 2008/11/11 22:26
2008/11/11 12:01 | 살아가는 얘기

썬 개발자 네트워크에서 이메일이 와서 선테크 블로거를 신청했습니다.

http://www.sdnkorea.com/suntechblogger/introduction <- 여기에서 자세한 안내를 볼 수 있습니다.

물론 선물에 눈이 멀어 신청했지만, Java와 MySQL 등과는 뗄래야 뗄 수 없는 관계이기 때문에 앞으로 관련 글들을 올려보려고 합니다.
고군분투!

2008/11/11 12:01 2008/11/11 12:01
2008/10/27 12:38 | 웹개발

Fiddler(www.fiddler2.com)는 HTTP(S) 트래픽을 살펴보게 해주는 좋은 툴입니다.

해당 사이트에서 add-ons를 부분을 보면 Inspector중에 JSON Viewer(www.codeplex.com/JsonViewer)라고 나오는데 이 애드온은  JSON 데이터를 볼 때 아주 편리합니다. Fiddler에 부담을 주는 것도 아니기 때문에 그냥 설치해 놓으면 JSON 데이터를 사용할 때 유용하게 사용할 수 있습니다.

사이트에 보면 설치 방법이 조금은 복잡(?)하게 나오는데 그 설치 방법을 따를 필요없이 dll 파일들만 Fiddler가 설치된 폴더 밑의 Inspectors 폴더에 복사에 넣으면 잘 동작합니다.

한 가지 문제점은 한글이 제대로 나오지 않는 것인데, 왜 그런가 궁금해서 소스를 받아 살펴보니 수신 데이터의 인코딩을 무조건 UTF-8로 해석하기 때문이었습니다.
그래서 해당 문제점을 해결한 버전을 만들어봤습니다.
아래 링크를 통해 다운 받는 압축 파일 안의 모든 dll 파일들을 Fiddler가 설치된 폴더 안의 Inspectors 폴더 안에 복사해 넣고 Fiddler를 실행시키면 됩니다.

[Fiddler Json Viewer 수정버전 받기]

참고로 Fiddler는 WinInet(정확한 표현인지 조금 애매합니다)을 사용하는 애플리케이션들의 HTTP(S) 트래픽은 기본적으로 모두 포착합니다. 그래서 IE, Opera, Chrome, Safari(for Win)등은 모두 별도의 설정없이 트래픽을 확인할 수 있습니다. 그리고, FireFox의 경우는 프록시 서버를 localhost 8888로 설정하면 Fiddler를 사용하여 트래픽을 확인할 수 있습니다.
2008/10/27 12:38 2008/10/27 12:38
2008/10/23 20:10 | 웹개발

웹앱스콘 2008(웹 애플리케이션 컨퍼런스 2008)에 다녀왔습니다.
(혹시 웹앱스콘을 모르시는 분은 링크를 참조해 주세요)

오전에는 일이 있어 오후 컨퍼런스에만 참석 했는데, 나름대로 생각할 거리들을 많이 얻어서 참석한 보람이 있었습니다. 그리고 그 유명한 조엘 스폴스키의 강연도 들을 수 있었고요.
사용자 삽입 이미지
조엘 스폴스키는 조엘 온 소프트웨어라는 블로그로 유명한 개발자이자 CEO입니다. 블로그 제목과 같은 제목의 책도 출판했는데 이책도 매우 유명하고, 최근에는  똑똑하고 100배 일 잘하는 개발자 모시기라는 책도 나왔습니다. 이 책은 관리자라면 한 번쯤 읽어볼 만합니다. 최고의 인재를 구해야한다는 부분에서 가슴이 저려오지만, IT쪽에서 인력을 뽑고 관리해야하는 입장이라면 피플웨어와 함께 필독해야할 책이 아닌가 생각됩니다.
동시 통역이 제공되지 않고 쉴새없이 따다다 말하는 그의 말투로 인해 잘 알아듣지는 못했지만 대충 알아들은 내용과 PT내용을 사진찍은걸 가지고 정리해 보도록 하겠습니다.

그의 강연 제목은 "Blue-chip Products" 이었습니다.
제목에서 추측해 볼 수 있는 것처럼 선두 또는 킬러 애플리케이션의 요건에 대해서 재치있고 지루하지 않게 강연을 했습니다.
사용자 삽입 이미지
그의 강연은 이 빅토리아 베컴과 데이비드 베컴의 사진으로 시작했습니다. 더 정확히 얘기하면 처음에는 왼쪽에 있는 빅토리아 베컴 사지만 보여주면서 누군지를 묻더군요. 이 사진만 보셔도 아시겠지만 그의 프리젠테이션은 재밌고 유쾌했습니다.
전면에 베컴 부부를 내세운 이유는 다음 선수와 비교하기 위해서였습니다.
사용자 삽입 이미지
이 선수 미국 프로축구팀 LA 갤럭시의 선수라고 하더군요. 조엘의 요점은 이 선수 실력도 좋가 성적도 좋지만 1위인 베컴이 훨씬 나은 수익과 인기를 누린다는 것이었습니다. 그 내용을 다음과 같은 내용으로 잘 정리해줬습니다.
사용자 삽입 이미지
일등과 2등또는 그 밑에 있는 등수의 것들과의 비교입니다.
조엘은 화면에 보이는 것처럼 베컴과 랜던 도노반, 그리고 아이팟과 마소의 준 등등을 비교했습니다. 최종 비교 내용은 다음과 같습니다.
사용자 삽입 이미지

이렇게 이야기를 전개한 후 조엘은 다음의 내용을 보여주면서 드디어 본론이자 핵심을 얘기합니다.
사용자 삽입 이미지

사람들을 행복하게 만들고, 미적 감각을 나타내며 문화적 코드를 잘 읽고 나타내야 한다는 것입니다.
사람을 행복하게 만들라는 얘기는 사용자들에게 사용하는데 있어서 불편을 주지말고 편하게 사용자가 주도권을 가지고 사용할 수 있게 하라는 이야기였습니다.
그리고 두번째 미적 감각에서는 싱크패드와 맥북을 비교하면서 두 노트북의 바닥 처리를 주목하게 했습니다. 기술자 관점에서 실질적인 기능에만 초점을 맞춘듯 한 싱크패드의 바닥을 매끈하게 잘 처리한 맥북의 바닥을 비교하며 미적인 면을 제품에 잘 나타내야 한다는 것입니다. 이러한 내용은 우리가 잘 알듯이 애플의 전 상품이 좋은 예라고 할 수 있을 것입니다.
세번째 문화적 코드는 우리도 뭔가를 개발할 때 한번쯤 생각해 볼만한 좋은 내용이었습니다. 이 부분에서는 사람의 심리적 측면 고려를 얘기했습니다. 일반적인 세단과 4WD 자동차를 비교하면서 실제적으로 통계치는 4WD차가 사고율이 높지만 사람들은 보통 높은 위치에서 아래로 내려다보는 식의 시야를 가질 수 있는 4WD차가 더 안전하다고 느낀다던지, 사람들은 각진 것도다 둥근 모서리에서 더 안전감을 느낀다는 것 등을 얘기했습니다.

앞서도 얘기한 것처럼 그의 강연은 유쾌했고 경쾌했습니다. 잘은 모르지만 그의 블로그만큼이나 그의 강연도 미국에서 유명하지 않을까 하는 생각이 들더군요.

세세한 설명들은 제가 잘못 알아들어 틀린 부분도 있겠지만 일단 세가지 명제만으로도 뭔가를 개발할 때 고려해볼만한 도움이 되는 주제인거 같습니다.
2008/10/23 20:10 2008/10/23 20:10
2008/02/12 17:32 | 웹개발

웹 개발을 하다보면 잘 알 것 같으면서도 잘 모르는 것들이 종종 있습니다. 그 중에서 몇가지를 정리해 봤습니다.

1. Cookie의 크기와 최대 수

3대 규칙
- 쿠키당 4Kb
- 도메인당 20개
- 총 쿠키 개수 300개 (하지만 현재 브라우저들은 더 많이 지원)

Cookie에 대한 내용은 Netscape Communications에서 1997년에 제안한 권고안인
RFC2109:HTTP State Management Mechanism에 정의돼 있습니다.
3대 규칙이 원문에는 모두 at least가 붙어 있습니다. 그러므로, 최소한 이 정도는 되야 한다는 규칙인데 총 쿠기 개수를 제외하고는 그대로 지켜지고 있는 것으로 보입니다.


2. CSS에서 position의 값인 absolute와 relative의 차이점


relative
- 문서의 기본 흐름에 의해 위치한 자신의 현재 위치를 기준으로 위치 지정

absolute
- relative로 지정된 조상 엘리먼트 중 가장 가까운 엘리먼트를 기준으로 위치 지정


3. URL의 최대 길이

RFC 2616, "Hypertext Transfer Protocol - HTTP/1.1"에는 길이에 대한 제한이 명시돼 있지 않습니다. 다만 서버에서 받아들일 수 없는 길이의 요청이 있을 경우 414(Request-URI Too Long) 코드를 반환하도록 규정하고 있습니다.
이러한 규정 하에서 각 서버와 브라우저들은 나름대로 다음과 같이 구현하고 있습니다.

MS IE: 2083 글자 (http://support.microsoft.com/kb/q208427/)
FireFox: 65536 글자 이후부터 주소창에 표시되지 않음
Safari: 적어도 80,000
Opera: 적어도 190,000
Apache: 요청의 개별 필드당 8192byte
IIS: 16,384 글자

이러한 엄청난 확인을 직접 한 사람이 있습니다.
http://www.boutell.com/newfaq/misc/urllength.html <- 여기를 보시면 이 모든 데이터를 위해 직접 실험한 분의 내용을 볼 수 있습니다.


이번에는 3개만 정리해 봤습니다.
다음 번에는 문자셋에 대해서 좀 정리를 해 볼 예정입니다.


2008/02/12 17:32 2008/02/12 17:32
2008/02/01 12:20 | 게임이야기

얼마전 SKT T1의 코칭 스태프 전원이 경질됐다는 기사가 떴다.
뭐, 프로스포츠 세계에서 '코징 스태프 전원 사퇴', '감독 전격 퇴임' 등의 기사는 흔히 볼 수 있는 내용이기는 하지만 e스포츠이기 때문에 조금은 다른 생각이 들었다.

e스포츠는 프로 스포츠를 표방하고 있다. 그러므로, 기존의 프로스포츠들이 가지고 있는 시스템의 많은 부분을 수용할 것임에는 자명하다. 하지만, 아직 충분히 시장이 커지지 않은 e스포츠계에서 선수나 감독의 퇴출 문제를 그대로 수용하기에는 좀 문제가 있지 않나 싶다. 다른 스포츠는 퇴출이 되는 경우 이들을 수용할 나름대로의 시장 - 아마추어 쪽이나 비교적 수가 되는 타구단 또는 각 매체의 해설위원 등등 - 을 가지고 있다. 하지만 e스포츠는 아직 이들을 수용할 충분한 시장을 가지고 있지 않다. 현재로서는 프로의 냉정한(좋게 말하면 현실적인) 세계보다는 파이를 키우고 활성화하는 것이 더 필요할텐데 그 전에 벌써 프로 시스템이 들어오는거 같아 안타까울뿐이다.

물론 프로 세계이므로 당연한 현상이며 이전에도 정수영 감독이나 송호창 감독 같은 경우처럼 전혀 없던 경우도 아니다. 그리고, 앞으로도 프로스포츠계이기 때문에 더더욱 이런 현상은  자주 볼 수 있을 것이다. 하지만, 오랫동안 e스포츠를 지켜봐오고 또 SK T1의 팬 이었던 한 사람으로서 아쉬운 마음에 이런 생각이 들었던 것이다.

어제 '스타뒷담화'에 주훈 감독이 나와서 경질과 관련된 이야기들을 늘어 놓았다. 하지만, 방송이므로 얼마나 원만큼 했을까. 그나마 다행(?)인건 긴 공백없이 바로 온게임넷의 해설자로 활동하게 됐다니 잘 된 일이다. MBC게임보다 온게임넷을 주로(더 정확히는 거의) 보는 이유가 맘에 드는 해설진 때문인데 또 하나의 좋은 해설자가 나오기를 바래본다.
2008/02/01 12:20 2008/02/01 12:20
2007/08/22 12:16 | 책 이야기

사용자 삽입 이미지

최근에 읽은 무라카미 류의 작품이다.
무라카미 류의 작품들은 너무 급진적이어서(사실 그런 작품을 직접 읽은 건 없고 책 소개 등을 통해 얻은 정보이다) 조심해서 책을 고르지 않으면 안 된다.
무라카미 류의 작품을 처음 접한 것은 엑소도스라는 책이었다. 이 책을 읽고 나서 매우 맘에 들어서 그의 다른 작품들을 찾았는데 그 작품들 대부분의 소재가 좀 그래서 읽기가 꺼려지는 것들이 많아 그의 작품들을 많이 읽지는 못했다. 하지만 소재가 지나치지 않은 그의 작품들은 대부분 다 읽은거 같고 매번 만족감을 얻을 수 있었다.
이 책 역시도 만족스럽니다.
의식의 흐름(?)만으로 모든 단편들이 구성돼 있다.

예를 들면,

"지금 블로그 글을 쓰고 있다. 의식의 흐름이라는 표현을 쓰고 싶은데 맞는 건지 의심스럽다. 책의 이미지를 yes24에서 가져다 썼는데, 이런건 저작권과 관련없을지... 책 소개해 주니까 괜찮지 않을까..."

뭐 이런 식으로 각 단편들이 특정 상황에 있는 주인공이 1인칭 시점으로 현재의 생각을 표현하는 식으로 되어 있다.
이 책을 읽다 보면 자신도 모르게 책 처럼 자신의 생각을 열거해 보게 되기도 한다.
2007/08/22 12:16 2007/08/22 12:16
2007/08/03 14:27 | 책 이야기

사용자 삽입 이미지

역시 저자의 기발함이 돋보이는 책.
이 책은 한 마디로 정리된다,

"베르나르 베르베르 식의 창세기!"

베르나르 베르베르는 그 유명한 개미가 아닌 "뇌"라는 책을 통해서 접하게 되었다. 그리고 (정말 기발한 생각이 가득 담긴)나무를 거쳐 이 책까지 읽게 되었다.
저자의 여러 책들을 읽은 혹자는 이전 내용들의 반복이라고 약간은 혹평을 하기도 하던데 그렇지 않은 내 입장에서는 별 무리없이 재미있게 읽을 수 있었다.
하지만 단편들의 묶음인 나무에서는 그 길이 때문인지 그런 느낌은 전현 느낄 수 없었던 것에 반해 이 책에서도 뇌에서와 같이 2% 조금 못되게 뭔가 약간 모자란듯한 느낌을 받았다.

2007/08/03 14:27 2007/08/03 14:27