ThoughtWorks Anthology

Books 2008/08/20 12:32

사용자 삽입 이미지


ThoughtWorks 사의 에세이 모음집.

실용주의 프로그래머 비스무리한거라고 보면 되겠다.

http://www.pragprog.com/titles/twa/thoughtworks-anthology




http://spponge.tistory.com/trackback/57
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



4월의 어느 해맑은 아침, 하라주쿠의 뒤안길에서 나는 100퍼센트의 여자아이와 엇갈린다.

솔직히 말해 그다지 예쁜 여자아이는 아니다. 눈에 띄는 데가 있는 것도 아니다. 멋진 옷을 입고 있는 것도 아니다. 머리카락 뒤쪽에는 나쁜 잠버릇이 끈질기게 달라붙어 있고, 나이도 적지 않다. 벌써 서른 살에 가까울테니까. 엄밀히 말하면 여자아이라고 할 수도 없으리라. 그럼에도 불구하고, 나는 50미터 떨어진 곳에서부터 그녀를 알아 볼 정도다. 그녀는 내게 있어서 100퍼센트의 여자이기 때문이다.

그녀의 모습을 목격하는 순간부터 내 가슴은 땅울림처럼 떨리고, 입안은 사막처럼 바싹 말라 버린다. 어쩌면 당신에게도 좋아하는 여자 아이 타입 이라는 것이 있을지도 모르겠다. 가령, 발목이 가느다란 여자아이가 좋다든지, 역시 눈이 큰 여자아이라든지, 손가락이 절대적으로 예쁜 여자아이라든지, 잘은 모르겠지만 천천히 식사하는 여자아이에게 끌린다든지와 같은 식의.  나에게도 물론 그런 기호는 있다. 레스토랑에서 식사를 하다가, 옆 테이블에 앉은 여자아이의 코 모양에 반해 넋을 잃기도 한다. 그러나 100퍼센트의 여자아이를 유형화하는 일은 아무도 할 수가 없다. 그녀의 코가 어떻게 생겼었나 하는 따위는 전혀 떠올릴 수가 없다. 아니, 코 가 있었는지 어땠는지조차 제대로 기억할 수 없다. 내가 지금 기억할 수 있는 것은, 그녀가 그다지 미인이 아니었다는 사실 뿐이다. 왠지 조금 이상하기도 하다.

"어제 100퍼센트의 여자아이와 길에서 엇갈렸단 말이야" 하고 나는 누군가에게 말한다.

"흠, 미인이었어?" 라고 그가 묻는다.

"아니야, 그렇진 않아."

"그럼, 좋아하는 타입이었겠군."

"글쎄 생각나지 않아. 눈이 어떻게 생겼는지, 가슴이 큰지 작은지 전혀 아무 것도 기억하지 못 하겠다구."

"이상한 일이군."

"이상한 일이야."

"그래서, 무슨 짓을 했나? 말을 건다든가, 뒤를 밟는다든가 말야."

"하긴 뭘 해. 그저 엇갈렸을 뿐이야."

그녀는 동에서 서로, 나는 서에서 동으로 걷고 있었다.

제법 기분이 좋은 4월의 아침이다. 비록 30분이라도 좋으니 그녀와 이야기를 하고 싶다. 그녀의 신상 이야기를 듣고도 싶고, 나의 신상 이야기를 털어놓고도 싶다. 그리고, 무엇보다도 1981년 4월 어느 해맑은 아침에, 우리가 하라주쿠의 뒤안길에서 엇갈리기에 이른 운명의 경위 같은 것을 밝혀보고 싶다. 거기에는 틀림없이 평화로운 시대의 낡은 기계처럼, 따스한 비밀이 가득할 것이다.

우리는 그런 이야기를 하고 난 후 어딘가에서 점심 식사를 하고, 우디 알렌의 영화라도 보며, 호텔 바에 들러 칵테일이나 뭔가를 마신다. 잘만 하면, 그 뒤에 그녀와 자게 될지도 모른다. 가능성이 내 마음의 문을 두드린다.

나와 그녀 사이의 거리는 벌서15미터 가량으로 좁혀졌다.

자, 도대체 어떤 식으로 그녀에게 말을 걸면 좋을까?

"안녕하세요. 단 30분만 저와 이야기를 나누지 않겠습니까?"

이건 너무나 바보스럽다. 마치 보험 권유같지 않을까.

"미안합니다. 이 근처에 혹시 24시간 영업 세탁소가 없는지요?"

이 역시 같은 정도로 바보스럽다. 무엇보다도 내 손에 세탁물 주머니조차 없지 않은가. 누가 그런 대사를 신용하겠는가?

어쩌면 솔직하게 말을 꺼내는 편이 좋을지도 모른다.

"안녕하세요. 당신은 나에게 100퍼센트의 여자아이란 말입니다."

아니, 틀렸어. 그녀는 아마도 이런 대사를 믿지 않을 것이다. 그리고 설령 믿어 준다 해도, 그녀는 나와 이야기하고 싶어하지 않을지도 모른다.

"당신에게 있어 내가 100퍼센트의 여자라 하더라도, 나에게 있어 당신은 100퍼센트의 남자는 아닌걸요, 죄송하지만"이라고 말할지도 모른다.

그것은 충분히 있을 수 있는 일이다. 만약 사태가 그렇게 되면 나는 틀림 없이 혼란에 빠질 것이다. 나는 그 쇼크에서 두 번 다시 회복될 수 없을지도 모른다. 내 나이 벌써 서른 두 살, 결국 나이를 먹는다는 건 그런 것이 아닐까.

꽃가게 앞에서, 나는 그녀와 엇갈리게 된다. 따스하고 조그만한 공기덩어리가 피부에 와 닿는다. 아스팔트로 포장된 길 위에는 물이 뿌려져 있고, 언저리에서는 장미꽃 향기가 풍기고 있다. 나는 그녀에게 말을 걸 수도 없다. 흰 스웨터를 입은 그녀는 아직 우표를 붙이지 않은 흰 사각 봉투를 오른손에 들고 있다. 그녀는 누군가에게 편지를 쓴 것이다. 그녀의 눈이 졸린 듯한 것으로 봐서, 어쩌면 하룻밤 동안 그것을 썼는지도 모른다. 그리고 그 사각 봉투 속에는 그녀에 관한 비밀이 전부 들어 있는지도 모른다.

몇 걸음인가 걷고 나서 뒤돌아보았을 때, 그녀의 모습은 이미 혼잡한 사람들 사이로 사라지고 없었다.  물론 지금은, 그때 그녀를 향해 어떻게 말을 걸었어야 했는가를 확실히 알고 있다. 그러나 어떻든 간에 너무나도 긴 대사이므로 틀림없이 제대로 말할 수는 없었을 것이다. 내가 이런 식으로 생각하는 것은 언제나 실용적이지 못하다. 아무튼 그 대사는 "옛날 옛적에"로 시작되어, "슬픈 이야기라고 생각지 않습니까"로 끝난다.

옛날 옛적에, 어느 곳에 소년과 소녀가 있었다. 소년은 열여덟 살이었고, 소녀는 열여섯 살이었다. 그다지 잘생긴 소년도 아니었고, 그다지 예쁜 소녀도 아니었다. 어디에나 있는 외롭고 평범한 소년과 소녀였다.  하지만 그들은 틀림없이 이 세상 어딘가에 100퍼센트 자신과 똑같은 소녀와 소년이 있을 것이라고 굳게 믿었다. 그렇게, 그들은 '기적'을 믿고 있었던 것이다. 그리고 기적은 확실히 일어났다.

어느 날 두 사람은 거리 모퉁이에서 딱 마주치게 된다.

"놀라워, 난 줄곧 너를 찾아다녔단 말야. 네가 믿지 않을는지 모르지만, 넌 내게 있어서 100퍼센트의 여자아이란 말야" 하고 소년은 소녀에게 말한다.

"너야말로 내게 있어서 100퍼센트의 남자아이야. 모든 것이 모두 내가 상상했던 그대로야 꼭 꿈만 같아."

두 사람은 공원 벤치에 앉아서, 서로의 손을 잡고 언제까지나 실컷 얘기를 나눈다. 두 사람은 이미 고독하지 않다. 그들은 각기 100퍼센트의 상대자를 원하며, 자신은 그 상대자의 100퍼센트가 되고 있다. 100퍼센트의 상대자를 원하며, 상대자의 100퍼센트가 된다는 것은 그 얼마나 멋진 일인가. 그것은 이미 우주적인 기적인 것이다.

그러나 두 사람의 마음속을 얼마 안되는, 극히 얼마 안되는 의구심이 파고 든다. 이처럼 간단하게 꿈이 실현되어 버려도 괜찮은 것일까 하는...

대화가 문득 끊어졌을 때, 소년이 말한다.

"이봐, 다시 한 번만 시도해 보자. 가령 우리 두 사람이 진정한 100퍼센트의 연인이라고 하면, 반드시 언제 어디선가 다시 만나게 될 거야. 그리고 이 다음에 다시 만났을 때도 역시 서로가 서로의 100퍼센트라면, 그때 바로 결혼하자구. 알겠니?"

"응, 알았어."

그리고 두 사람은 헤어졌다. 서쪽과 동쪽으로. 그러나 사실을 말하자면 시도해 볼 필요는 조금도 없었다. 그런 것은 해서는 안될 일이었다는 말이다. 왜냐하면 그들은 진정 100퍼센트의 완벽한 연인이었으니까. 그것은 기적적인 사건이었으니까.  하지만 두 사람은 너무나 어려서, 그런 것은 이해할 수조차 없었다. 그리고 정석처럼 비정한 운명의 파도가 두 사람을 마구 농락하기에 이른다.

어느 해 겨울, 두 사람은 그 해에 유행한 악성 인플루엔자에 걸려, 몇 주일이나 사경을 헤맨 끝에 옛날 기억들을 몽땅 잃고 말았던 것이다. 어찌된 일일까, 그들이 깨어났을 때 그들의 머리 속은 마치 D.H.로렌스의 소년 시절 저금통처럼 완전히 텅 비어있었다.  그러나, 두 사람은 참을성 있는 소년과 소녀였기 때문에, 노력하고 또 노력 해서 다시금 새로운 지식과 감정을 터득하여, 훌륭히 사회에 복귀할 수 있었다. 아아 하느님, 그들은 진정 확고한 사람들이었던 것이다. 그들은 정확하게 지하철을 갈아타거나 우체국에서 속달을 부치거나 할 수도 있게 되었다. 그리고 완벽하지는 못해도 75퍼센트의 연애랑, 85퍼센트의 연애를 경험하기도 했다. 그렇게 해서 소년은 서른 두 살이 되었고, 소녀는 서른 살이 되었다. 시간은 놀라운 속도로 지나갔다.

그리고 4월의 어느 해맑은 아침, 소년은 모닝 커피를 마시기 위해 하라주쿠의 뒤안길을 서쪽에서 동쪽으로 향하고, 소녀는 속달용 우표를 사기 위해 똑같은 길을 동쪽에서 서쪽으로 향한다.  두 사람은 길 한복판에서 엇갈린다. 잃어버린 기억의 희미한 빛이 두 사람의 마음을 한 순간 비춘다. 그들의 가슴은 떨린다. 그리고 그들은 안다.

그녀는 내게 있어서 100퍼센트의 여자아이란 말이다.

그는 내게 있어서 100퍼센트의 남자아이야.

그러나 그들이 간직하고 있는 기억의 빛은 너무 연약하고, 그들의 언어는 이제 14년 전만큼 맑지 않다. 두 사람은 그냥 말없이 엇갈려, 혼잡한 사람들 사이로 사라지고 만다. 영원히.

슬픈 이야기라고 생각지 않습니까?

그렇다. 나는 그녀에게 그런 식으로 말을 꺼내 보았어야 했던 것이다.



http://spponge.tistory.com/trackback/56
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST



IE8을 이용하여 웹페이지를 열면 IE8 표준모드(웹표준 준수)로 웹페이지를 렌더링하는데 기존 웹사이트 대부분은 IE7에 최적화되어있거나 IE을 기준으로 개발되어있을 것이다.

그렇기 때문에 IE8에서 기존 웹페이지를 테스트했을 때 깨져보이는 현상이 있을 수 있다.

물론 최적의 솔루션은 기존 페이지를 웹표준을 준수하도록 수정하는 것인데 임시방편으로 IE7에 맞게 개발된 페이지를 IE8에서 열었을 때 IE7에서 테스트했을 때와 똑같이 표시되도록 하는 방법을 소개한다.

자세한 내용은 아래 링크를 클릭.

Windows Internet Explorer 8 지원



http://spponge.tistory.com/trackback/55
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. BlogIcon himarx 2008/08/16 21:07  댓글주소  수정/삭제  댓글쓰기

    그럼 IE8에선 웹 표준 준수를 요구한다는 겁니까?
    헐........... 즈그들이 할 소리는 아닌 것 같네요-_-;;;;;
    이제 인터넷 뱅킹부터 싹 갈아야-_-;;;;;(뭐 즈그네 ActiveX니까 지원은 하겠지만....)

  2. BlogIcon spponge 2008/08/17 14:05  댓글주소  수정/삭제  댓글쓰기

    IE8에선 기본적으로 W3C 표준안을 준수하도록 변경됩니다.
    html, css등등 말이죠...
    진작에 바뀌었어야하는데 늦었지만 지금이라도 바꿀것은 바꾸는게 맞겠죠.
    인터넷뱅킹 문제는 아마도 각 은행들이 전용 어플리케이션을 배포하는 형태로 가는게 좋을텐데 일단 IE8에서 active-x가 완전히 배제되지 않는 한 힘들지 싶습니다.




최근 웹사이트 보안이 이슈화 되면서 사이트 보안 담당자들이 SQL Injection을 막기 위해 Dynamic SQL 사용을 제한하고 있다.

상황에 따라 변화하는 SQL 생성을 위해서 대부분의 개발자들이 Client Side에서든 Server Side에서든 Dynamic SQL을 문자열로 조합하여 실행하는 방법을 사용하는 상황에서 기존에 개발되어 있거나 앞으로 개발하게 될 SQL 문을 Static SQL로 변환하는 것은 골치 아픈 문제거리이다.

예를 들어, 검색 조건 3개(@cond1, @cond2, @cond3)를 Parameter로 가지는 프로시져에서 Parameter의 값 조건에 따라 SQL을 Dynamic하게 구성하여 생성하던 것을 Static SQL로 변환한다고 가정해 보면 아래와 같은 조건 분기에 따라 Static SQL(초록색부분) 총 8개를 만들어 넣어야 한다.(세상에나!!!)

<예제 코드>
IF @cond1 IS NOT NULL
BEGIN
  IF @cond2 IS NOT NULL
  BEGIN
     IF @cond3 IS NOT NULL
     BEGIN
        -- Static SQL
     END
     ELSE
     BEGIN
        -- Static SQL
     END
  END
  ELSE
  BEGIN
     IF @cond3 IS NOT NULL
     BEGIN
        -- Static SQL
     END
     ELSE
     BEGIN
        -- Static SQL
     END
  END
END
ELSE
BEGIN
  IF @cond2 IS NOT NULL
  BEGIN
     IF @cond3 IS NOT NULL
     BEGIN
        -- Static SQL
     END
     ELSE
     BEGIN
        -- Static SQL
     END
  END
  ELSE
  BEGIN
     IF @cond3 IS NOT NULL
     BEGIN
        -- Static SQL
     END
     ELSE
     BEGIN
        -- Static SQL
     END
  END
END


이 방법은 작업 시간도 많이 걸릴 뿐 아니라 코드의 가독성, 수정, 유지 보수성 모두를 어렵게 만들어서 개발자의 여름 휴가 따위는 꿈도 꾸지 못하게 할 수 있다. 저멀리 해변에 널린 육떡진(^^;;) 츠자들이 그립지 않겠는가 말이다.

더구나! 이 경우는 조건이 달랑 3개뿐인 경우이다. 잘 생각해보면 조건의 갯수가 n개라고 했을 때 이에 비례하여 늘어나는 Static SQL의 갯수는 2의 n승 개임을 알 수 있다. 이는 우리가 알고리즘 강의시간에 배운 시간 복잡도 측정 방법 즉, Big O 표기법을 이야기 할 때 가장 시간이 오래 걸린다고 알려져 있는 "O(2의 n승)"이 아닌가 말이다. 다시 말해서 조건이 10개가 되면 2의 10승 = 1024가 된다. 1024개의 Static SQL을 작성하여 분기문 사이에 붙여넣고 있다 보면 인생을 비관하게 될 지도 모르겠다...

하여... 이에 대한 해결책을 제안하고 있는 유명한 자료들을 링크해본다.
조만간 아래 자료들을 종합하여 Dynamic SQL 을 Dynamic SQL 변환하는 방법을 올릴 예정이다.

http://spponge.tistory.com/trackback/54
YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST