|
Release It
단위 테스트, 통합테스트, 스트레스 테스트 등 여러 테스트를 거치거도 실전 환경에서 정상적으로 작동하는 것을 보증하기가 어려운 분야가 바로 웹 개발일 것 같다. 이 책은 이러한 경험들( 느려지는 서버, 이유없이 죽는 서버)이 일어나는 이유(안티패턴)과 이를 해결하기 위해 해결책(패턴)들을 저자의 경험을 바탕으로 설명하고 있다. 이 책은 중급이상의 웹 개발자라면 꼭 한번쯤 읽어보아야 할 책중 하나라고 생각한다.
마지막으로 이 책의 번역에 대해서 이야기해야 겠다. 그러나, 책의 번역에 있어 만족스럽진 못한 부분들이 있었던 것다.
첫째, 단어 자체가 우리말로 번역하기 어려운 경우의 번역이 아쉽다.
둘째, 번역중 단어가 생략된 경우,
셋째, 번역이 잘못된 경우, One system I saw would tear down any JDBC connection that ever threw a SQLException. Each page request would attempt to create a new connection, get a SQLException, try to tear down the connection, get another SQLException, and then vomit a stack trace all over the user. 이걸 짧은 실력으로 번역해 보면,
넷째, 문단이 잘못된 경우
전반적으로는 괜찮았지만, 좀 매끄럽지 못한 부분들이 내용을 이해하는데 걸림돌이 되었다.
이런 번역상의 문제에도 불구하고 이 책의 내용이 너무 좋기 때문에 읽길 권한다. 마지막으로, 번역상의 문제점을 지적하고 다름대로 번역해 봤지만, 평자 또한 영어 번역 전문가가 아니기 때문에 매끄럽지 못합니다. |
|
프로젝트에서 개발자, 모델러등의 역할을 두루 경험하고 나면 오를수 있는 궁극의 위치가 바로 아키텍트라고 생각합니다. 이런 아키텍트들은 크게 두 부류로 나눌수 있습니다. 정말 바닥에서 부터 박박 기다가 올라온 사람이 있는가 하면 초 엘리트 코스를 밟아서 코드 한줄 안 짜본 사람도 있습니다. 과연 누가 더 나을까요 ? 제가 좋아하는 말이 하나 있는데 현장의 경험을 뒷받침 할 수 있는 근거를 댈 수 있어야 한다.경험만 많다고 다 해결되지 않습니다. 많은 프로젝트를 경험하면서 그에 상응하는 소프트웨어 공학에 대한 지식을 머리속에 집어넣고 자신이 의사결정 할때 이를 잘 맵핑 시킬수 있어야 합니다. 이 책 『Release It 』의 저자는 제가 지금까지 떠든 내용을 하나의 책으로 묶어 냈습니다. 특정 상황에 대한 해결책을 패턴으로만 제시하는 경우 자칫 지루해 질수 있는데 이 책은 그런 부분을 자신의 경험에서 우러나오는 사례연구로 메꾸고 있습니다. 책의 4장에 보면 사용자들에 대한 재미있는 정의가 나옵니다. 영화에서 절벽에 걸린 자동차처럼 여러분의 시스템이 재앙의 가장자리에서 요동칠 때, 어떤 사용자는 자동차 덮개에 앉는 갈매기가 되기도 한다. 갈매기가 절벽 쪽으로 움직인다. 시스템을 사용하는 사람은 최악의 시간에 최악의 것을 정확하게 해내는 재능이 있다.저는 이말에 200% 공감합니다. 시스템을 설계하는 사람은 이런 사람이 사용자라고 가정하고 시스템을 만드는게 당연하다고 봅니다. 영화 트루 라이즈에 보면 위와 같은 상황이 나옵니다. 가슴에 느껴지시죠. 저 갈매기가 바로 우리의 고객이며 떨어지는 트럭이 우리의 시스템 입니다. 이 책은 IT 초보자 보다는 많은 고민을 해본 사람들에게 더 추천하고 싶습니다. 많은 설명과 다이어 그램, 코드가 등장하지만 특정 분야 하나가 아닌 시스템 전체를 다루고 있기 때문에 아무래도 이런 용어나 기술에 대한 기본지식이 있어야 이책의 가치를 느낄수 있을거 같네요. |
|
처음 제목에서 묻어나오는 느낌은 오프라인 소프트웨어의 이야기를
가지고 시작하고 있을꺼라는 예상을 하게 했고, 깔끔한 표지로 인해 초보자 또는 중급자의 책이 아닐까 하는 생각을 가지고 책을 펼쳤다.
얼마 지나지 않아 그 생각은 전혀 잘못 되었다는걸 깨닫게 되었는데
우선 이 책은 웹기반 어플리케이션 프로그램에 대한 설명을 하고 있으며,
Java, 분산처리, 웹서버 환경, 패턴, 그리고 어느정도이상의 경험을
바탕으로 요구 하고 있었다.
아마도 중고급자에게 어울릴만한 책으로 예상이 되었고, 추가적으로 어느정도
이상규모 프로젝트에 들어간 중급자 이상의 서버 클라이언트 또는 웹 개발자에게
필요한 책이라는걸 깨닫게 되었다.
우선 이 책은 기본지식을 많이 요구하고, 경험을 요구하다 보니 내용자체도
어렵고 술술 읽어가기는 힘들다. 가장 요구되는 능력이 Java의 예외, 스레드 덤프,
서버구조등에 대한 이해와 고객의 행동패턴등이 요구되게 된다.
이렇게 난이도도 높고 필요한 지식이 많아 읽기는 힘들지만
이 책은 다른 책과는 달리 매우매우 풍부한 경험을 바탕으로
쓰여진 책이었고 그로인해 책의 깊이를 느낄수 있었고, 문제가 일어난 일을
바탕으로 쓰고있어서 소읽고 외양간 고치는 작업을 미리 예상해 볼 수 있었다.
책은 안전성, 용량(효율), 네트워크(효율), (서버 운영의)투명성을 이야기 하고
있다. 각 주제에 대한 장의 구성은 대체적으로 실제로 일어났던 문제를 제시하고 그에 따른 해결책을 찾아보고 이 방법에 대한 예방책을 설명하는 방식으로 진행되며 진행되는 도중도중에도 어떠한 부분이 일어날수 있는지 계속 제시하고 포함하여 생각하는 방식으로 진행되게 된다.
여기서 가장 재미있는 부분은 모든부분이 다 중요하고 수긍이 가는 문제들로
구성을 하고 있다는 것이다.
이 책을 읽고 나서 느낀점은 현재 EJB서버 그리고 JSP등의 개발을 하시는
프로그래머 분들에게는 매우 좋은 책이 될것 같다는 생각이 들고, Java쪽의 개발을 하지 않더라도 문제의 발생요인 (대체적으로 멀티스레딩, 사용자의 이상행동, 프로그래머의 예상내의 예외처리등의 헛점)을 설명하고 있으므로 모든 서버프로그래머들에게는 매우 좋은 책이 될수 있을거라 생각한다.
|
|
이 책은 쉽지 않다.
중급자라 하더라도 모르는 것들을 찾아 보면서 봐야 할 만큼 많은 지식들이 소개가 된다.
우리는 개발을 하면서 개발 자체에만 또는 기술 자체에만 목적을 두는 개발자들을 자주 볼수 있다.
또한, 개발 서적들을 그동안 탐독하면서 고객의 요구사항은 이렇고 , 개발의 패턴은 이렇게 이런 기술을 써야하고... 등의 매우 낙관적인 상황만을 상상하며 개발하기 쉽다.
이 책의 저자는 수많은 그리고 깊은 경험을 바탕으로 매우 어려운 내용들을 풀어낸다.
우리는 그의 실수, 경험담등을 통해서 실수를 미연에 방지 할 수 있는 레퍼런스로 활용 할 수가 있다.
이 책을 읽으면서 부끄럽다는 생각을 많이 했다.
시스템 아키텍트, 소프트웨어 아키텍트라고 스스로를 칭하려면 이정도의 사전 지식을 가지고 있어야 할것이라고 생각한다.
아니, 지식이라기 보다는 통찰력이라고 해야 할 것이다.
Case By Case 로 접근 하는 것은 공부한 Case 가 아니면 해법을 생각해 낼 수 없다는 데에 가장 큰 단점이 있다.
실제로 인상 깊은 것은 저자가 문제에 대해 접근 하는 방법이나 해결하기 위해서 경험한 해법들이었다.
최악과 최상은 상황과 Context 에 따라서 다르다.
우리는 상식적으로 알고 있으나 실수 할 때가 많다는 것을 깨우쳐 주게 하는 책이다.
그동안 읽어왔던 시리즈중 가장 어렵다는 생각을 했다.
바라건대, 이 책의 저자가 가지는 풍부한 시각을 나 역시도 갖추고 싶다.
|
|
시리즈인 'Debug it'에 감동을 받아 구입하였다. 처음 봤을때는 'Release'라고 해서 일반 패키지나 클라이언트 서버 환경의 애플리케이션 프로그래머들의 이야기일거라고 생각했었는데, 의외로 웹 프로그래머들의 이야기이다.
보통 웹프로그래머들은 릴리즈(패치)한다고 하지 않고 오픈을 하고 반영(리플렉션)을 한다고 하기 때문이다. 딱 한국의 금융 전산(IT, SI)환경과 너무나 잘맞는 JSP기반의 이야기이다.
사실 다시 정의하자면 릴리즈가 아니라 릴리즈 후의 운영관점에서의 IT 스토리를 총 집대성 해놓았다고 보면 이 책에 딱 들어맞는다. 24*7환경에서의 서비스되는 웹프로그램의 디버깅, 성능분석, 관리등의 이야기가 들어있기 때문이다.
아무튼 온라인 게임이나, 클라이언트 소프트웨어의 패치 절차를 기대했었지만 웹프로그래밍만 이야기 해서 맥이 빠진 감이 없지 않으나 이런 이야기를 해주는 책은 드뭄으로 귀한 책이라고 할 수있다. 그리고 앞으로 더 볼 다른 시리즈 책으로는 'Ship it'과 'Manage It'이 있다. |
|
서문에서 읽어야 할 대상을 아키텍트, 설계자, 엔터프라이즈 급 시스템 개발자로 한정하고 있지만, 웹서비스를 만든다면 한번쯤 읽어봐도 될만한 내용들로 구성되어 있다. 아무리 작은 서비스라도 모든 서비스는 크게 키운다는 꿈을 가지고 시작하기 마련이니까. 나도 그 정도로 큰 서비스를 만들어본적은 없지만, 작은 규모에서도 겪어본 몇몇 사고(로그로 넘쳐버린 하드디스크 등)를 책에서 보면서 꽤 정리가 잘 돼있다는 느낌을 받았다. 실제로 그런 것들은 데여보기 전까지는 신경쓰지 않는 부분이니까. 현재 엔터프라이즈 시장을 지배하고 있는것이 자바인건 사실이지만, 그렇다고 거의 모든 내용을 자바로만 설명한 점은 좀 아쉽다. 인상깊은 구절 - 아마도 저자가 책을 쓰게 된 이유가 아닐까 싶은 부분
미국도 실무에서 오래도록 일하는 프로그래머는 얼마 없는 듯. 그래서 시행착오로 배우게 되는 지식들이 빠른 인력교체와 함께 사라져 버리고, 새로 들어오는 사람들이 과거와 같은 패턴의 사고를 치며 앞의 사람들이 몸으로 배웠던것을 그대로 다시 배우는 일을 줄여보고자 책을 쓴 듯한 느낌. 아무튼, 큰 서비스를 만들고 있거나 만들고 싶은 사람이라면 읽어서 손해는 없을 책. |
|
* 책받은 소감
* 하지만 첫번째 눈에 들어온 것은 책내부는 Part로 나누어져 있는데 목차에는 Part가 없었다.(원서도 그런 것인지는 잘 모르겠다.)
* 나의 이력에 비추어 보아... 솔직히 이러한 시스템의 Release에 대한 이야기를 기대했지만 이런 시스템은 대세가 아니니 ;-).
* 아쉬운 점 가만히 생각해보면 대규모 프로젝트 적용(Release It)이 일반 응용 프로그램만으로 이루어지기는 게엄업계나 증권등 몇 종류가 되지 않을 것도 같다.
* 숲과 나무는 통한다.
400여 페이지에 달하는 책을 번역하신 분께 존경과 감사를 전한다. |
|
먼저, 원서의 내용 자체는 훌륭했으리라 추측한다. (원서를 다시 주문하였다)
역자의 소개글에서 다수의 베타리더분들-역자가 언급하는-의 도움이 컸다라는 글귀가 이 번역서 구입의 큰 계기가 되었다. 어눌한 번역도 여러 사람의 검증을 거치면 좋아지지 않을까 ? 라는 막연한 기대 때문이었다.
그러나 간단한 내용조차 오역 혹은 엉뚱한 번역이 많았다. (경우에 따라서는 가관이다. E.g. Oracle thin driver 와 thick driver 혹은 type 2나 type 4 드라이버 같은 초보적인 내용조차 엉뚱하게 설명하고 있다)
이러한 부분들은 나머지 매끄럽지 못한 번역에 대해 많은 의구심을 낳게 한다.
뒷부분에 소개된 베타리더 후기는 '분명히' 번역서가 아닌 원서에 기초한 것으로 보인다.
꽤 많은 노력과 자원이 투입된 번역서로 보이지만, 아직 갈 길이 멀어 보인다.
가급적 원서 구입을 권장한다. 가격도 얼마 차이 안난다. 진지하게 읽어야 한다면 시간도 절약해 줄 것이다.
|
|
The Pragmatic Programming 시리즈는 언제나 저를 즐겁게 합니다.
개발 10년차는 저에게 Release it은 release 하기전에 우리가 고려해야 될 사함에 대해 서술하고 있습니다. 바꾸어 말하면 설계시부터 우리는 어떻게 대처를 할것인가를 생각하게 하는 책입니다.
각장별로 주옥같은 이야기를 펼쳐져 있습니다.
당신이 서버 개발자 혹은 시스템 개발자라면 꼭 읽도록 하십시요.
|