[이북 리뷰] this와 객체 프로토타입

this와 객체 프로토타입

이 책은 You don’t know JS 시리즈 중에 하나로 이 시리즈의 내용은 사실  Github에서 읽을 수도 있고 심지어 참여(?)도 할 수 있도록 공개되어 있다. 하지만 우리말로 좀 더 쉽게 읽을 수 있도록 한빛미디어에서 리얼타임 시리즈로 번역하여 이북으로 내놓고 있으며 이 책 “this와 객체 프로토타입”은 세 번째 책에 해당한다. 다른 두 책은 You Don’t Know JS: 스코프와 클로저You Don’t Know JS: 타입과 문법이다.

참고로, 세 번째 책의 원문은 다음의 링크에서 직접 읽어볼 수 있다.

https://github.com/getify/You-Dont-Know-JS/tree/master/this%20%26%20object%20prototypes

this 바인딩의 진실

jQuery나 Angular를 쓰든 아니면 날 것으로  getElementById()를 사용하든 자바스크립트를 쓰다 보면 가장 헷갈리는 부분 중 하나가 this 바인딩이다. 책에서는 깔끔하게 this 바인딩의 4가지 규칙을 2장에서 잘 설명하고 있어 큰 도움이 된다. 적어도 앞으로는 this 바인딩으로 헷갈릴 일이 없을 것 같다. 규칙을 잊어버렸다면 2장의 정리만 읽으면 읽었던 내용이 잘 드러난다.

Class인 척 하는 Javascript ([[prototype]])

이 책에서 저자가 힘을 주어 이야기 하는 부분이 바로 자바스크립트에서 OOP를 따라하려다 보니 오해가 많아지고 있다는 점이다. 동의하는 부분이다. 자바스크립트는 OOP처럼 class에서 객체로 복사하는 타입이 아니라 reference로 위임한다는 내용은 자바스크립트를 사용하려면 꼭 숙지하고 넘어가야할 내용이다.

OLOO (Objects Linked to Other Objects)

저자는 자바스크립트가 여타의 OOP언어와 동일한 것처럼 말하지 말라고 한다. 자바스크립트와 prototype을 통해서 class 기반의 디자인 패턴을 적용하는 것은 OK! 그러나 내부의 동작원리가 위임기반이라는 것을 제대로 알기!를 강조한다. 그래서 저자는 자바스크립트를 OLOO라고 부르기를 권하고 있는데 일리있는 말이라고 생각한다.

리뷰

원문을 Github에서 볼 수도 있지만 이 책이 가지고 있는 장점이 더 있다. 한글로 쉽게 읽을 수 있다는 장점도 무시 못하지만 역자가 이해를 돕기 위해 많은 내용을 더해서 설명하고 있다는 점이다. 물론 역자가 추가한 내용은 따로 잘 구분되어 있어서 원문의 내용을 해치지 않는다.

ref

이 책을 리뷰하면서 번역된 다른 두권도 사보게 될 만큼 추천할 만한 내용이다. 자바스크립트의 입문서를 떼고 이 시리즈를 읽거나, 개발 경험을 갖춘 사람들이 읽으면 도움이 될 것 같다.

readers_emblem_250

빅데이터 컴퓨팅 기술 리뷰

_m_4114m “빅데이터 컴퓨팅 기술”  책은 일반적인 기술 개발서적은 아니다. 이 책은 빅데이터라는 큰 개념을 잘개 쪼개서 현재 기술들을 아주 상세하게 리뷰해 놓은 개론서이다.

한빛리더스 8기 5번째 미션도서 첫인상

책 자체가 한빛아카데미의 IT Cookbook 시리즈로 나와서 사실상 대학생 교재 및 참고도서라 봐도 무방하다.  그래서인지 총 6분의 공저자 모두 현직 대학교수들로 이루어져 있다. 또한 매 챕터마다 간단한 내용확인 수준의 연습문제가 제공되고 레퍼런스가 꼼꼼하게 달려있다. 레퍼런스가 잘 달려 있어서 관심있는 부분을 자세하게 찾아볼 수 있다는 점이 마음에 든다.

내용은 크게는 다음의 3개의 파트로 구분된다.

  1. 빅데이터 개요
  2. 빅데이터 컴퓨팅 기술
  3. 빅데이터 기술 개발현황과 실제 구현예

목차를 보고 책을 읽으면 각 파트별로 세부적으로 현재 나와 있는 거의 모든 기술 들에 대해서 조사해서 담았다는 것을 알 수 있다.  현재 석사생으로 이 책을 읽으며 가장 먼저 들었던 느낌은 과제 제안서에 넣을 키워드가 소스가 풍부한 책이라는 점이다. 빅데이터가 뭔지, 어디서부터 조사를 시작할지 잘 모르겠다면 이 책은 빅데이터에 대한 숲을 보여주는데 제 몫을 한다.

한빛리더스 8기 5번째 미션도서 첫인상

그런데, 이 점이 단점으로 작용하기도 한다. 이유는 단순한 기술과 정보의 나열이다 보니 책이 좀 지루하다. 계속 읽게끔 하는 매력이 별로 없다. 챕터마다 다음 챕터로 넘어가게끔하는 내용의 재미가 느껴지지 않는다. 조금 더아쉬운 점을 이야기하면, 단순히 현재 기술을 나열한 것 이상의 통찰을 주지는 못하는 것 같다.

정리하면, 빅데이터라는 주제를 백과사전식으로 잘 종합한 것은 좋은 점수를 줄 수 있으나 다소 내용이 평면적이고 딱딱하다는 점이 아쉽다.

풀컬러 내용

그러나  내용이 지루할 것을 편집자들이 이미 예견했다는 듯이 화려한 풀컬러로 독자들을 조금 더 책에 붙든다. 십중팔구 내용까지 단조로운 모노톤이었다면 읽기 쉽지 않았을 것이다. 지루하기 쉬울 내용을 풀컬러의 화려한 장표와 그림으로 채운 것에는 플러스 점수를 줄 수 있다.
풀컬러 내용

요약하면, 빅데이터와 연관이 있는 거의 모든 키워드들을 잘 짜여진 틀 안에 차곡 차곡 쌓아놓은 기술백서이다. 그래서 책에서 느껴지는 장단점도 보통의 white paper 같은 느낌이 드는 책이다.

책 첫머리에서 설명하는대로 빅데이터를 입문할 때 간단하게 살펴보기에 적절한 책이며 심화학습 및 내용을 위한 길라잡이라고 볼 수 있다.

이 리뷰는 한빛리더스 8기 활동의 일환으로 작성한 것입니다.

한빛리더스 8기

드림팀의 악몽 애자일로 뒤엎기 리뷰

한빛리더스 8기 4번째 미션도서로 선택한 책  “드림티의 악몽 애자일로 뒤엎기“에 대한 리뷰입니다.

14395177215_1993b93173_z

제목에서 알 수 있듯이 기본적으로 “애자일”을 다루는 책입니다. 그동안 피상적으로 애자일에 대해서 들어만 보았을 뿐 자세한 내용을 모르기도 하고, 아직 학생의 신분이기에 프로젝트의 프로세스를 제대로 경험해 본 적이 없는 상태에서 이 책을 읽었습니다.

이 책은 소설의 형식을 빌려서 애자일이 어떻게 프로젝트를 변화시키는지를 보여줍니다. “애자일은 이런 것이다. 스프린트는 무엇이고 스크럼 마스터의 역할은 무엇이다. “와 같은 전달 방식이 아니라 하나의 이야기의 흐름 속에서 자연스럽게 애자일의 개념을 익히도록 도와주는 서술적인 구조입니다.

책의 두께는 조금 있는 듯 하지만, 여유로운 편집으로 넓은 문장 여백을 갖고 있어 출퇴근시  하루 1-2시간 오고가면서 읽으면 1-2일이면 “애자일”스럽게 “애자일”에 대해서 알 수 있습니다.

구체적인 내용은, 애자일을 적용해 왔지만 점점 이상한 방향으로 프로젝트가 흘러가는 “드림팀”이라는 가상의 팀을 두고 “짐”이라는 컨설턴트가 5일 동안 코칭하는 과정을 담고 있습니다.

읽기 시작하면 한 꼭지가 끝날 때마다 “모험은 XX페이지에서 계속”이라는 문구를 만나게 됩니다. 그렇습니다. 이 책은 순차적으로 읽는 책이 아니라 그 때 그 때 상황적 판단에 따라 내용이 여러 갈래로 나뉘어집니다.  저는 처음에 그런 줄도 모르고 읽다가 여러번 “끝”을 만나 다시 돌아가서 다른 선택으로 여정을 계속해 나갔습니다. 혹시라도 잘못된 선택으로 “끝”을 만나더라도 당황하지 말고 다시 돌아가면 “끝”;;

image

책을 다 읽고 나서 뒤 표지를 보니 책의 주제와 구성을 아주 효과적으로 압축해 놓으셨더군요. 저는 뒤 표지를 안 보았더니 중간에 갈림길이 있는 것도 모르고 당황을 했었습니다. 지금까지 본 많은 책의 뒤 표지 중에서 책을 아주 명쾌하게 요약설명해 주는 것 같습니다.

드림팀의 악몽 애자일로 기뒤엎기

이 책은 뒤쪽에 총 4개의 부록을 제공합니다. 첫 번째 부록은 책에서 등장하는 인물의 역할을 설명해주는 Who’s Who인데요. 저도 읽으면서 벤, 로저, 카산드라,  등등 익숙치 않은 영미식 이름의 여러 인물들이 나오니까 자꾸 헷갈려서 다시 돌아가서 누가 누구였는지 확인 했었는데요. 이렇게 명쾌하게 정리된 부록이 있다는 것은 책을 다 읽고 나서 알았습니다.

두 번째 부록은 책에서 코칭을 담당하는 컨설턴트 “짐”이라는 가상의 인물의 링크드인 프로필을 제공하고, 세 번째는 책에서 언급된 애자일 관련 전문 용어 설명이 있습니다.

그리고 이 책의 마지막 네 번째 부록은 깊게 애자일에 대해서 알아보고 싶은 분들을 위한 참고목록을 제공합니다.

책의 구성부터 부록까지 깔끔하고, 충실하게 애자일을 부담없이 입문할 수 있게 해주는 좋은 길라잡이라는 느낌을 받았습니다.

정리하면,
애자일이 무엇인지, 애자일을 프로젝트에 적용하면 무엇을 하고 , 어떤 변화가 생길 수 있는지 알고 싶은 개발자나 기획자 혹은 이런 호기심을 갖고 있는 사람들은 가볍게 읽을 수 있는 책입니다.

Java 객체 지향 디자인 패턴 리뷰

개발과 관련된 학습정보는 웹을 통해서 풍성하게 얻을 수 있다. 디자인 패턴 또한  위키피디아부터 시작해서 블로그에 잘 정리된 양질의 컨텐츠들이 참 많다. 더욱이 디자인 패턴은 케이스별로 다룰 수 있어 웹에서 관심 있는 패턴들을 검색해서 학습하기도 용이하다. 그런데 문제는 웹 상의 컨텐츠에는 대부분 “왜”가 빠져 있다는 점이다 . 컨텐츠의 작성자들은 대부분 “왜”를 가정하고 내용을 설명하고 있기 때문이다.

한빛미디어 리더스 8기 세 번째 미션!~

최근에 출판된 한빛미디어의  “Java 객체 지향 디자인 패턴“은  “왜 이 패턴이 필요한가?”에 질문에 답과 함께 패턴의 내용을 설명한 책이다.  패턴이란 것이 원래부터 있던 정형화된 이론이라기 보다는 시간이 지나면서 쌓여진 노하우이기 때문에 책만 읽는다고 해서 쉽게 내 것이 되지는 않는다.  다행히도  두 저자는 오랜 강의 경력을 바탕으로 이러한 문제를 충분히 절감하고 최대한 상세하게 패턴의 필요성을 피력하고 있음을 이 책에서 볼 수 있다.

한빛미디어 리더스 8기 세 번째 미션!~

책의 내용은 총14장으로 이루어져 있고, 이 중 1-4장은 디자인 패턴과 관련된 기본적인 내용 설명을 다루고 5장부터 14장까지 다음의총 10개의 디자인 패턴에 대해서 설명한다.

[책에서 설명하는 10가지 패턴]

  1. 스트래티지 패턴
  2. 싱글턴 패턴
  3. 스테이트 패턴
  4. 커맨드 패턴
  5. 옵서버 패턴
  6. 데커레이터 패턴
  7. 템플릿 메서드 패턴
  8. 팩토리 메서드 패턴
  9. 추상 팩토리 패턴
  10. 컴퍼지트 패턴

디자인 패턴 후면

각 디자인 패턴에 대한 설명은 그림과 같이 패턴이 적용되지 않은 일반적인 코드를 통한 문제 사례와 함께 문제를 인식하는 단계, 패턴을 도입하여 해결책을 제시하고,  패턴에 대한 설명과 함께 효과를 입증하는 순서로 반복 진행된다.

더불어 책의 부제에서 알 수 있듯이 이 책은 10가지 패턴을 “UML”의 클래스 다이어그램과 컬래보래이션 다이어그램을 가지고  설명하면서 자연스럽게 UML을 눈으로 익히고 보는데 큰 도움을 준다.

디자인 패턴 컬래보레이션 다이어그램

큰 장점이 될 수 있는 점은 부분은 모든 예제 문제와 연습문제에 해답을 제공하고 있다는 점이다. 문제는 제공하지만 해답을 제공하지 않거나 일부만 제공하는 책들과 비교했을때 저자의 세심한 배려가 눈에 띄는 부분이다.

다만, 역으로 생각하면 해답으로 제공되는 내용이 전체 책의 약 1/5이 된다는 점을 고려할 때 해답은 따로 PDF 형식으로 제공하고 책을 좀 더 가볍게 만들었으면 어떨까하는 아쉬움이 드는 부분이기도 하다.

한 가지 더 아쉬운 점은 들자면 이 책은 예제 소스를 제공하지 않는다.요즘 프로그래밍 서적 대부분이 예제 코드를 Github이든  zip 형태이든 어떤 방법으로든 제공하고 있다는 점을 고려할 때 조금 아쉽다는 생각이다.

요약하면, 이 책은 각 디자인 패턴의 필요성, 내용, 실제 적용과정 및 결과를 일관된 순서로  설명한다. 모든 챕터에 연습문제와 해답을 제공함으로 책 한권으로 혼자서 학습하기에 부족함이 없는 책이다.

본 리뷰는 한빛 리더스 8기 활동의 일환으로 작성한 것입니다.

한빛리더스 8기

프로그래밍 면접 이렇게 준비한다 리뷰: 한빛미디어

개발하는 사람이라면 한 번쯤 인터넷 상에서 “구글 면접 문제” 식의 글을 보고 문제도 풀어봤을 것이다. 그리고 아마 문제의 난이도 때문에 심한 좌절감(?)을 맛보았을지도 모르겠다. 실제로 구글 뿐 아니라 거의 모든 IT기업들은 개발자를 찾을 때 반드시 기술면접을 본다. 따라서 취업 또는 이직을 준비한다면 적절하게 기술면접을 준비할 필요가 있다. 왜냐하면, 기술면접은 바로 옆에 구글신과 스택오버플로우를 끼고서 할 수 없기 때문이다. 이렇게 구직을 위해 기술면접을 앞두고 있는 사람들을 위해 어떻게 기술면접을 준비할 것인가에 대한 내용을 담은 것이 “프로그래밍 면접 이렇게 준비한다”이다. 일단 당장 석사를 마치면 나도 구직을 준비해야 한다는 점에서 책을 꼼꼼히 읽어 나갔다. 한빛리더스 8기 2차 리뷰 도서 책의 원제는  “Programming Interviews Exposed”이고 부제로 “Secrets to Landing Your Next Job”이다.  원서의 제목에서 “Next Job”이 눈에 들어왔다. 원서의 부제 “Next Job” 이 말해주는 바와 같이 “기술 면접”은 인생에 단 한번 지나가는 통과의례라기보다는 주기적으로 접하게 될 확률이 높다. 따라서 이 책은 한번의 구직을 위한 일회성 책이 아니라는 점이 중요하다. 재판도 아니고 3판까지 책이 이어져 왔다는 것에서 이미 이 책의 가치는 어느 정도 검증되었다고 볼 수 있다. 책은 총 17장의 챕터와 이력서 작성을 돕는 부록으로 구성된다. 책에서 구분하고 있지는 않지만 각 챕터는 내용상 크게 5파트로 나누어 볼 수 있을 것 같다.

  • 1-2장: 구직과 관련된 일반적인 내용
  • 3-8장: 알고리즘 관련 내용
  • 9-13, 16장: 학부에서 다루는 컴퓨터 사이언스 관련 전반적인 지식
  • 14-15장: 문제해결능력과 연관된 퍼즐
  • 17장, appendix: 기타

먼저 이 책의 장점은  내용외적으로 깔끔한 편집 디자인이 가져다 주는 높은 가독성을 들 수 있다. 특히 내용의 핵심이나 코드 예제 중에서 중요한 부분의 볼드 처리가 마음에 든다. 프로그래밍 면접 책 안 또 다른 세심한 배려는 책의 가로 길이이다. 보통의 IT 서적들이 교과서와 같이 가로 길이가 길어서 휴대성이 떨어진다. 그러나 이 책은 들고 다니기 편한 소설책 정도의 가로 길이와 두께를 가지고 있다. 고로 휴대하고 다니면서 읽기에 좋다. 실제로도 나는 이 책을 아침 저녁 지하철에서 2주 동안 다 읽었다. 한빛리더스 8기 2차 리뷰 도서 표지 내용적인 측면에서도 훌륭하다. 3판까지 어어져 오면서 저자들이 더 날카롭고 예리하게 기술면접에 필요한 핵심적인 내용들을 망라해 놓았다는 것을 느낄 수 있다. 굳이 기술면접을 위해서가 아니더라도 한권 안에 빠르게 컴퓨터 사이언스의 주요 핵심들을 훑기에도 적절하다. 3-8장에 이어지는 알고리즘 설명은 분량면에서는 당연히 알고리즘 도서와 비교할 수 없지만 기술면접에 특화된 핵심을 족집게처럼 집어서 요약해 주어 유익하다. 특별히 8장 “정렬”은  적은 분량 안에 다양한 정렬 알고리즘의 장단점을 분석해 놓고 있어 빠르게 복습하기에 용이하다. 늘상 혼동하기 쉬운 부분들에 대한 설명도 마음에 든다. 예를 들면 책 16장 “인자전달” 문제 중에서 다음과 같은 것이다.

아마 C 계열의 언어를 접해 본 사람은 위와 같이 함수의 인자로 전달되는 포인터 타입이 은근히 헷갈린다는 것을 공감할 것이다. 이처럼 책에서는 포인트를 잘 집어서 밀도 있게 내용들을 담고 있다. 물론, 이 책의 아쉬운 점도 있다. 기본적으로 책이 쓰여진 맥락이 미국상황이라는 점이다.  국내 IT 기업들도 기술면접을 보긴 하지만 미국과는 절차나 방법이 다소 차이가 있다. 이런 부분들을 감안하면서 읽어야 한다. 부록에서 제시하는 이력서도 마찬가지다. 물론 부록의 내용이 국내상황에 맞지 않는다는 점을 저자도 밝히고 있다. 이러한 부분은 번역서로의 한계라고 느껴진다. 결론적으로, 이 책은 기술면접에 대한 경험이 없는 사람이라도 책을 읽고 나면 문제가 어떤 식으로 나올지, 어떻게 준비할 지에 대한 감을 충분히 쌓을 수 있다고 생각한다. 구직이나 이직을 준비하는 것은 결국 개발자 자신의 역량을 쌓는 일이라고 생각한다. 따라서 이 책은 일회성으로 기술면접을 대비하는 용도를 넘어서 다양한 알고리즘을 분석적으로 활용하고 사용하는 언어의 특성들에 대해서 이해하는 등의 사고를 키우는데도 도움이 될 것이다.

이 글은 한빛 리더스 8기 활동의 일환으로 작성한 것입니다.

한빛리더스 8기

함수형 자바스크립트 리뷰

함수형 자바스크립트 도서

함수형 자바스크립트는 함수형 프로그래밍 과 자바스크립트를 다루는 책이다. 하지만 내용은 자바스크립트로 “함수형 프로그램을 작성하는 방법”에 대해서 중점적으로 설명하는 책이다.

이 책에서는 자신의 라이브러리와 애플리케이션을 단순화할 때 자바스크립트의 복잡성이라는 괴물을 길들이는 데 함수형 스타일의 프로그래밍이 어떻게 도움이 되는지 설명한다. 27p

Untitled

항상 책을 읽고 리뷰를 하면서 강조하는 부분은 읽는 사람의 수준과 기본 지식에 대한 부분이다. 이 책은 “함수형 프로그래밍”에 대해서 자세하게 설명하지만 그렇다고 바닥부터 모든 것을 다루는 책은 아니다. 자바스크립트도 처음이고 함수형 프로그래밍에 대해서 들어본 적이 없다면 이 책은 일단 내려놓자. 

이 책은 난이도가 있다. 자바스크립트에 대한 선이해가 필수이다. 자바스크립트의 동작원리에 대해서 애매한 부분은 다른 책들을 다시 들춰 보면서 읽어나갔다. 자바스크립트에 대한 선이해와 경험이 충분해야 책 속의 내용을 깊이 이해할 수 있다.

Untitled

일급함수, 추상화와 클로저, 체이닝 등 한번 읽고 이해할 수 있다면 좋겠지만 적어도 리뷰하는 나는 그렇지가 못했다. 익숙했던 절차적 프로그램, 객체지향적 사고와는 다른 “함수형 프로그래밍”이란 새로운 관점을 배우고 익혀야 하기 때문이다. 그래서 이 책은 기본적으로 개념 설명이 본질이고 개념이해를 돕기 위한 수단으로 Underscore.js를 기반으로 예제를 보여준다. 

책을 읽고 예제를 따라하다 보니 아쉬운 점이 좀 있다. 책의 앞 부분에서 구현한 함수들을 자연스럽게 뒤에서 사용하고 있다. 즉 한번 읽는 흐름을 놓치면 책의 앞뒤를 왔다갔다하며 내용의 의미를 잘 찾아가야 한다. 

의외의 혜택은 책 끝 부분에 있는 “참고문헌”이다.  함수형 프로그래밍과 관련된 알짜같은 책목록이 있으니 서점에 가서 꼭 살펴보기를 권한다.

옮긴 분도 몇 번이나 읽는 수고를 반복해야 이해할 수 있었다는 데 욺긴이보다도 지식과 경험도 없는 사람이 겨우 한번 읽고 리뷰를 쓴다는게 어불성설이긴 하다.

그래도 요약해보면, 자바스크립트를 통한 함수형 프로그래밍에 대해서 제대로 공부하려면 이 책을 곱씹고 봐야 한다는 점이다.

이 글은 한빛 리더스 8기 활동의 일환으로 작성한 것입니다.

한빛리더스 8기

DOM을 깨우치다 리뷰

Bj퍼블릭 출판사 리뷰 도서

이 책은 자바스크립트를 가지고 DOM을 어떻게 제어하고 다룰 것인지에 대해서 자세하게 설명하고 있는 책이다. 자바스크립트 프레임워크 홍수의 시대 속에 자바스크립트로 DOM을 직접 다루는 것을 배우는 것이 의미가 있는지가 아마 이 책을 읽어야 하는 지를 결정지을 것이다. 역자도 서두에 밝히고 있듯이 jQuery로 손쉽게 DOM을 다룰 수 있는데 굳이 자바스크립트로 DOM을 다루는 이 책이 의미가 있을까 질문을 던지고 있다.

따라서 jQuery로 DOM을 다루는 데 만족할 사람이라면 굳이 이 책을 들쳐보라고 권하고 싶지 않다. 그러나 jQuery 의 동작원리와 함께 자바스크립트에서 DOM을 어떻게 제어하는지를 알고 싶은 궁금함이 가시지 않는 사람이라면 이 책은 탁월한 선택이 될 것이다.

개인적으로는 프론트쪽 웹개발을 주업으로 하지 않지만  종종 웹사이트 개발을 할 때가 많다. 이럴 때마다 자바스크립트에 대한 지식이 부족해서 jQuery 를 가지고 땜방식 코딩을 해온 것이 사실이다. 그러나 이 책을 읽으면서 DOM의 구성이 어떻게 이루어지는지 브라우저가 어떻게 HTML 코드를 파싱하여 메모리 상에서 객체로 쌓아두는지에 대한 명료하게 알 수 있었다. 그래서 책의 영문명 “DOM Enlightenment”와 한글명 “DOM을 깨우치다”가 모두 책 내용을 잘 반영한 제목이라는 생각이 든다.

이 책이 가지고 있는 좋은 점을 구체적으로 하나 들자면 모든 코드를 jsfiddle에 올려두어 링크를 제공한다는 점이다. 프로그래밍을 공부하는 방법은 일단은 묻지도 따지도 않고 책에 있는 코드를 다 따라 쳐보는 것이 상당히 효과적인 방법이기는 하다. 하지만 DOM을 이해하기 위한 목적으로는 이 방법이 그다지 효율적이라고 볼 수 없다. 이 책의 목적은 어디까지나 자바스크립트가 DOM을 어떻게 다루는지를 명확하게 설명하는 것이기 때문이다.

Bj퍼블릭 리뷰도서 DOM을 깨우치다

모든 예제의 링크가 그림과 같이 소스코드 상단에 적혀 있지만 출판사인  비제이퍼블릭 홈페이지에 가서 모든 링크정보가 있는 워드파일을 직접 받을 수도 있기 때문에 굳이 일일이 타이핑 할 필요도 없다. 카피앤페이스트로 모든 예제를 눈으로 확인할 수 있다.

개인적으로 나중에 확인해 둘 요량으로 OneDrive에 파일을 올려서 다음의 링크로 공개를 해 놓았다.

http://1drv.ms/NU0VAj

요약하면, 자바스크립트 코드를 간단히 사용하고 읽을 줄 알지만 DOM에 대한 원리가 궁금하다면 이 책은 적절한 해답이 되어 줄 것이다.

[The Power Of Event 요약] 7장 Complex Events and Event Hiearchies

Part 1의 마지막인 7장에서는 이벤트의 조합과 이벤트 추상화 계층을 설명하면서 복합이벤트처리가 실제로 어떻게 이루어지는지에 대한 설명을 여러 예제를 통해서 보여준다. 구체적으로 이 장에서는 다음의 이슈에 대해서 설명한다.

  • 이벤트 조합
  • 복합 이벤트
  • 이벤트 계층 추상화
  • 계층형 시스템의 개인화된, 룰기반의 뷰

7.1 Aggregation

복합이벤트는 다른 이벤트들의 조합으로 이루어진 이벤트이다. 낮은 계층에서 발생하는 상세한 이벤트들이 사용자가 정의한 패턴과 룰에 따라 좀 더 정제된 추상화된 결과물로 복합이벤트가 되는 것이다. 명칭만 생각하면 “복합이벤트”가 정말로 “복잡한” 형태의 이벤트라고 생각할 수 있지만 개념상 여러 이벤트의 조합으로 이루어진 이벤트이기 때문에 “복합(Complex)”라는 명칭이 붙는 것이다. 실제 복합이벤트가 담는 내용적 측면에서 봤을때 “사용자가 이해할 수 있는, 사용자에게 유의미한” 이벤트를 “복합이벤트”라고 정의한다고 생각하면 된다.

복합이벤트가 어떻게 도출되는지에 대한 예를 책에서 5가지로 보여준다. 이 중에서 하나의 어셈블리 연산을 복합이벤트로 하는 간단한 예를 설명해보자.

Add(X, Y)라는 특정 프로세서의 명령어가 있다고 하자. 실제 이 연산은 더 하위 레벨의 프로세서 관련 연산들의 순서로 이어져 있다. 이러한 하위 레벨의 연산은 사용자에게는 직관적이지 않고 상당히 구체적인 연산에 해당한다. 단순히 덧셈 연산하나를 하기 위해서 여러 개의 하위연산을 직접 작성하는 것은 어렵기 때문에 이러한 하위레벨의 연산들의 순서를 하나의 묶음으로 조합하여 상위 레벨의 연산인 Add(X, Y)가 탄생한다.

7.2 Creating Complex Events

복합이벤트가 무엇인지 정의했다면 자연스럽게 어떻게 복합이벤트가 발생하느냐는 질문이 들 것이다. 이에 대한 답은 이벤트 패턴 룰을 정의하라는 것이다. 이벤트 패턴 룰은 사용자가 원하는 복합 이벤트를 도출하기 위해서 여러 이벤트간의 관계(시간, 인과)와 함께 이벤트의 조합을 정의하는 것이다. 예를 들면 4-way handshaking과 유사하게 어떠한 데이터를 하나 보내는데 총 4번의 이벤트가 교환되는 프로토콜이 있다면, 한번의 전송이 완료되었다는 복합이벤트인 CompletedTran 이벤트의 패턴 룰은 다음과 같이 정의할 수 있다.

Create Complex Event

CompletedTran 이벤트는 보는 바와 같이 Send, Receive 등의 이벤트보다 상위 개념의 추상회된 이벤트라는 것을 알 수 있다. 네트워크 매니저가 아닌 이상 우리는 네트워크 계층의 이벤트 정보를 일일이 모니터링하지 않는다. 정확하게 내가 전송하려는 데이터가 보내졌는지에 대한 확인이 중요하기 때문이다. 이러한 요구사항이 바로 이어지는 장 이벤트 추상화 계층에서 다루는 내용이다.

7.3 Event Abstraction Hierarchies

이벤트 추상화 계층은 결국 사용자에게 의미없는 Low Level 정보들 가운데에서 유의미한 정보를 얻기 위한 데이터 계층의 모델링과도 같다. 일반적으로 이벤트 추상화 계층은 다음의 두가지 요소를 명확하게 갖추고 있어야 한다.

  • 시스템의 계층과 각 계층 내의 활동: 시스템을 여러 계층으로 구분하고 각 계층에서 일워지는 활동들을 찾아서 정의한 후 여기서 발생하는 이벤트 타입과 명세를 정의해야 한다.
  • 각 계층에서의 이벤트 조합룰 집합: 이전의 정보를 기반으로 가장 낮은 계층을 제외한 모든 계층에서 이벤트 패턴 룰을 정의하여 어떠한 이벤트를 복합이벤트로 도출할 것인지를 정의해야 한다. 중요한 점은 이벤트 패턴 룰을 통해 도출되는 복합 이벤트를 해당 계층의 어떤 이벤트 타입으로 할 것인지를 잘 설정해야 한다.

위의 두가지 정보들을 잘 정의하여 이벤트 추상화 계층을 구축하는 것은 CEP를 위한 선제적인 조건이다.

7.4 Building Personalized Concept Abstraction Hierarchies

복합이벤트의 정의와 생성, 이벤트 추상화 계층은 결과적으로 특정 사용자군이 관심갖는 정보만을 개인화하여 정확하게 도출해서 제공하기 위한 기술적 수단이라고 할 수 있다.

타겟 시스템 안에는 여러 이해관계자가 있고, 각자가 관심갖고 필요로 하는 정보는 당연히 다를 수 밖에 없다. 따라서 우리는 각 사용자에게 맞는 정보를 제공해야 하고 이를 타겟 시스템의 개인화된 뷰를 통해서 정보를 제공할 수 있는 것이다.

이 책에서는 Monitoring과 Viewing이란 용어를 구분해서 정의하고 있다. 두 행위의 본질은 같으나 가장 낮은 계층을 살펴보는 것을 Monitoring이라 하고 이를 제외한 상위계층에서 발생하는 High-level의 복합이벤트를 살펴보는 것을 Viewing이라 표현한다.

두 개념을 구분하는 이유는 Monitoring하는 대상은 변하지 않지만  Viewing의 대상은 가변적이기 때문이다. 타겟시스템의 계층은 고정된 것이 아니라 우리가 정의하는 영역이다. 따라서 이벤트 패턴룰의 변경을 통해서 우리는 얼마든지 계층과 복합이벤트를 변경할 수 있고 이는 Viewing의 결과에 변화를 가져온다.

개인화된 추상화 계층을 구성하기 위해서는 7.3 장의 이벤트 추상화 계층의 요소에서 설명한 두가지 요소를 순차적으로 잘 정의해야 한다. 다음 장에서 실제적인 예제를 통해서 어떻게 추상화 계층을 정의하는지 확인해 본다.

7.4.1 Viewing Network Activity

이 예제에서는 이전부터 사용한 네트워크의 패킷 전송을 가지고 설명한다. 7.3장에서 설명한 것과 같이 이벤트 계층을 정의하기 위해서는 먼저 각 계층과 계층 내의 활동과 이벤트 명세를 다음과 같이 정의해야 한다.

Step1-Event Abstracion Hierarchy

다음으로 가장 하단의 계층을 제외한 계층 내의 이벤트 패턴 룰을 위의 첫 번째 그림과 정의해야 한다. 이와 같은 과정을 통해 상위 계층에서 도출된 복합 이벤트는 역으로 다시 하위 이벤트의 집합으로 추적이 가능하고 이를 “Drill-Down”이라고 한다. 예를 들면 아래 그림과 같이 CompletedTran 이벤트는 네개의 연속된 이벤트의 조합으로 Drill-Down할 수 있다.

Drill Down

[The Power Of Event 요약] 6장 Event Patterns, Rules, and Constraints

6장에서는 CEP 어플리케이션의 기반이 되는 이벤트 패턴, 반응형 이벤트 패턴 룰, 이벤트 패턴 제약 드의 개념을 설명하고 다음과 같은 내용들을 다룬다.

  • 패턴검색의 종류
  • 이벤트 패턴
  • strawman 이벤트 패턴 언어
  • 이벤트 패턴 룰
  • 이벤트 패턴 제약
  • 이벤트 패턴을 통한 비즈니스 룰 검출

6.1 Common Kinds of Pattern Searching

CEP의목적은 무수한 이벤트로부터 사용자의 관심에 맞는 관련 이벤트의 집합을 적절하게 찾는 것이다. 인터넷에서 필요한 정보를 검색하기 위한 조건으로 검색어를 입력하듯 찾고자하는 정보와 관련된 이벤트 집합을 얻기 위해서 이벤트의 패턴을 기술해야 한다.

이벤트의 패턴을 기술하는 방식은 두가지가 있다. 하나는 컴퓨터가 이해할 수 있는 언어인 이벤트 패턴 언어(Event Pattern Language)를 사용하는 것이다. 이벤트 패턴 언어는 앞으로 계속해서 자세하게 다루게 될 것이다. 두번째 방법은 GUI를 활용한 방법으로 서두에서 설명한 웹서치가 이에 해당한다. 아래 그림과 같이 구글에서도 다양한 검색 조건 필터와 고급검색을 통해서 원하는 정보를 찾아주지만 정확하게 원하는 정보만을 찾는데는 한계가 있다.

구글 고급검색

패턴매칭은 컴퓨터 시스템에서 고전적이고 익숙한 이슈이기도 하다. 유닉스 계열의 OS에서 문자열 검색을 위한 grep 같은 명령어 패턴 매칭을 위한 도구라고 할 수 있다.

그러나 CEP에서 우리가 원하는 이벤트 패턴 매칭은 단순한 웹검색이나 문자열 검색보다 정교하고 복잡한 요구사항이 따른다. 이벤트 패턴 매칭은 이벤트간의 시간, 인과관계, 조합의 정보를 포괄하여 적절한 이벤트 집합을 찾아내는 과정이다. 따라서 단순한 문자열 검색조건보다 복잡한 형태의 이벤트 패턴을 기술할 수 있는 도구가 필요하다.

6.2 Event Pattern

이벤트 패턴이란 우리가 관심갖고 찾기 원하는 특정한 이벤트의 집합을 매칭시키는 하나의 템플릿을 말한다. 이벤트 패턴은 이벤트에 대한 정보 뿐 아니라 이벤트 간의 인과관계 의존성, 시간속성, 데이터 매개변수 및 컨텍스트 정보등을 포함한다. 이는 다른 표현으로 타겟 시스템 안에서 발생하는 이벤트의 Poset 가운데 하나를 기술하는 템플릿이 된다.

이벤트 패턴은 찾고자하는 대상 패턴에 따라 다음의 몇가지로 분류가 가능하다

  1. Content-Sensitive Pattern
  2. Context-Sensitive Pattern
  3. Filter Pattern
  4. Complex Pattern

Content-Sensitive Pattern이란 이벤트 패턴 내의 속성 값을 기준으로 패턴을 매칭시키는 경우를 말한다. 예를 들어 다음과 같은 패턴이 있다고 생각해보자.

“All orders from customer C in the last month”

이 패턴을 매칭하기 위해서는 이벤트의 속성을 일일이 확인하여 소비자가 ‘C’인지, 시간은 한달이 지나지 않았는지를 확인해야 한다. 즉 이벤트의 내용을 기반으로 패턴을 매칭하는 경우를 Content-Sensitive 패턴이라 한다.

Context-Sensitive Pattern은 Content-Sensitive 패턴과 유사하지만 이벤트의 내용을 확인하지 않고 특정한 맥락을 기반으로 패턴을 매칭한다는 점이 다르다. 다음의 예제를 보자

“All orders from frequent customers in the last month”

이 패턴은 이벤트의 속성 값을 기준으로 패턴을 매칭할 수 없다. 이벤트의 속성으로 특정한 소비자를 한정하여 찾는 것이 아니라 어떠한 소비자가 지난 한달간이라는 시간 구간 안에서 반복적으로 구매를 하였는지 그 맥락을 찾아서 패턴을 매칭해야 한다. 이렇게 일정한 상황과 맥락을 기준으로 패턴을 매칭하는 경우를 Context-Sensitive 패턴이라 한다.

세 번째로 Filter Pattern은 예제를 통해서 먼저 살펴보자.

“All orders from customers in response to a discount announcement”

이 패턴은 할인 메시지에 반응해서 구매를 한 소비자를 찾는 것이다. 결국 이 패턴에 따라 검출된 구매 이벤트는 할인 메시지 이벤트의 인과관계로 아래 그림과 같이 종속되어 있음을 알 수 있다.

Filter Pattern

이러한 Filter 패턴은 이벤트 간의 인과관계에서 원인 이벤트를 필터로 하여 매칭대상 이벤트 공간을 한정시켜 주는 역혈을 한다.

마지막 유형은 Complex Pattern으로 의미 그대로 세가지 유형에 속하지 않으면서 복잡한 이벤트 관계를 갖고 있는 경우이다. 다음과 같은 패턴의 예를 보자.

“All orders from customers at the regular price that have led to the customer requesting a reduced price in response to the discount announcement”

이 패턴은 아래 그림과 같이 독립적인 Poset들을 함께 연관지어 매칭하는 복잡한 형태를 띄고 있다. 개별적으로 주문이 완료된 이벤트들이 독립적으로 발행된 할인 이벤트에 반응하여 할인을 요구하는 형태로 서로 다른 Poset들이 연관되어 패턴을 이루고 있음을 알 수 있다.

Complex Pattern

이러한 Complex 패턴은 일반적인 이벤트 패턴 언어로 기술하기 상당히 까다로운 형태의 패턴의 예가 된다. 이벤트 패턴 언어는 이러한 형태의 복잡합 패턴 매칭까지 다룰 수 있어야 한다.

6.3 A Strawman Pattern Language

이제까지 이야기한 이벤트 패턴 언어의 예를 들기 위해서 이 장에서는 아주 단순한 형태의 이벤트 패턴 언어를 다룬다. 여기서 설명하는 간단한 형태의 이벤트 패턴 언어를 STRAW-EPL이라고 한다. 복잡한 패턴 언어를 다루기 전에 이벤트 패턴언어에 대한 전반적인 이해와 입문으로서 STRAW-EPL을 생각하면 된다.

STRAW-EPL은 and, or, ->(인과관계)의 세가지 관계연산자를 지원한다. 각 연산자들은 예를 들면 다음과 같이 사용할 수 있다.

  • A and B and C : 이 패턴의 의미는 A,B,C 모든 패턴을 동시에 매칭한다는 뜻이다.
  • A or B or C: 이 패턴의 의미는 A,B,C 중 어느 하나라도 매칭한다는 뜻이다.
  • A -> B: 이 패턴의 의미는 A가 B의 원인일 경우의 두 이벤트 짝을 매칭한다는 뜻이다.

STRAW-EPL에서 패턴을 정의하기 위해서는 다음의 네가지 요소를 선언해야 한다.

  1. 변수: 변수의 타입과 명칭을 선언 [예: Message M]
  2. 이벤트 타입: 이벤트의 명칭과 속성을 열거하여 선언 [예: Send(Message M, Bit B, Time T)]
  3. 패턴: 패턴은 관계 연산자를 활용하여 선언 [예: Send(M, B, T1) and ReSend(M, B, T2)]
  4. 상황조건: 패턴이 매칭되었을 때의 반드시 만족시켜야하는 조건 선언 [예: 0 < T2 – T1 < 10]

6.3.1 Pattern Matching

패턴의 각 매칭결과는 패턴의 변수들을 이벤트의 값으로 치환한 결과로서 하나의 인스턴스로 Poset을 이룬다. 결국 매칭은 패턴안에 변수들을 동일한 값의 속성으로 치환하는 과정이다.

6.3.2 Writing Patterns in STRAW-EPL

STRAW-EPL에서 패턴은 표양식위에 작성한다. 표 안에는 6.2장에서 설명한 것과 동일하게 패턴의 요소들인 변수, 이벤트 타입, 패턴, 패턴에 사용한 관계연산자, 상황조건을 선언하면 된다. 다음은 STRAW-EPL 패턴의 예제이다.

STRAW-EPL Pattern 예제

이 패턴은 보는바와 같이 네트워크 상의 패킷 전송이 정상적으로 이루어 졌음을 나타내는 패턴매칭이다. 상세하게 설명하면 Send, Receive, Ack, RecAck 네 이벤트가 동일한 Data, Bit 값을 기준으로 순차적으로 인과관계로 묶여 있고 Send와RecAck의 시간 구간이 10초 이하인 상황조건일 경우 성공적으로 데이터가 전송되었다는 것을 매칭하는 패턴이다.

6.4 Event Pattern Rules

이벤트 패턴 룰은 이벤트 패턴이 매칭될 때 실행하는 반응 규칙을 말한다. 사용자가 정의한 이벤트 패턴이 매칭되면 이에 따른 반응으로 새로운 이벤트가 생성되므로 자연스럽게 양자간에 인과관계가 암묵적으로 생긴다.

반응 규칙은 논리적으로 두 부분으로 나눌 수 있다. 하나는 트리거로서 이벤트 패턴이고 다른 하나는 패턴이 매칭될 때 실행되는 액션이다.

패턴이 매칭될 때 생성되는 이벤트는 자신의 인과관계로서 이벤트 패턴의 전체 이벤트와 연관된다. 이 때 인과관계를 갖는 패턴 매칭의 모든 이벤트는 생성된 이벤트의 인과관계상 조상 이벤트들이 된다.

반응규칙은 구현에 따라 순차적이거나 병렬적으로 생성된다. 다음의 그림을 먼저 살펴보면 순차적인 반응규칙과 병렬적인 반응 규칙을 구별할 수 있다.

Reactive Rules

순차적인 규칙은 트리거에 따라 새로운 이벤트가 생성될 때 생성된 이벤트 사이의 순차적인 인과관계가 존재하고, 병렬적인 규칙은 오직 트리거 이벤트(인과관계의 조상 이벤트)와의 인과관계만을 갖고 있다는 것을 알 수 있다.(둘 사이의 차이가 어떤 의미를 지니는지 이해하지 못했다.)

다음의 이벤트 패턴 룰의 예이다. 이벤트 패턴 룰 역시 이전에 이벤트 패턴과 같이 STRAW-EPL의 표양식을 동일하게 사용할 수 있다. 다만 여기에 Action 행을 하나 추가하여 이벤트 패턴이 매칭될 때의 액션을 선언하면 된다.

Event Pattern Rule

이 이벤트 패턴 룰은 이전 장의 네트워크 패킷 전송의 이벤트 패턴의 확장으로, 데이터의 전송까지의 시간이 1시간을 넘을 경우 Warning 이벤트를 생성하라는 의미이다. 이 패턴에서의 이벤트 관계는 다음의 그림으로 표현할 수 있다.

Causal Ancestors

주황색 배경에 이벤트 집합이 패턴 매칭된 Poset 이며 이는 암묵적으로 Warning 이벤트와 인과관계를 가지고 있다는 것을 알 수 있다.

6.5 Constraints

제약조건은 시스템에서 이벤트들이 반드시 만족시켜야 하는 조건을 선언하는데 사용된다. 시스템이 어떻게 작동해야하는지 뿐만 아니라 시스템을 사용하는 사람이 어떻게 활용해야 하는지를 제약한다.

제약조건은 STRAW-EPL에서는 간단하게 “never”라는 연산자를 통해서 선언한다. 이 연산자는 두개의 구성요소를 갖는다. 하나는 never라는 연산자 자신과 다른 하나는 만족시켜야 할 STRAW-EPL 이벤트 패턴이다. 다음의 패턴을 예로 보자.

Constraints Example Pattern

보는 바와 같이 이 패턴은 소비자가 한번 주문한 제품을 바로 뒤에 취소하는 것을 허용하지 않겠다는 제약 조건의 패턴을 표현한 것이다. 이 패턴 선언 중간에 never 연산자가 포함된 것을 확인할 수 있다.

이벤트 패턴 룰의 목적은 패턴을 매칭하여 새로운 이벤트를 생성시키는 것이었다면 제약조건의 목적은 단순하게 시스템에서 발생하면 안 되는 상황을 모니터링 하는 것이다. 따라서 제약조건을 이벤트 패턴 룰로 전환하여 문제상황에 대해서 이벤트를 생성시켜 모니터링하는 것도 좋은 방법이다. 결론적으로 제약조건은 시스템이 보장하지 않는 행동에 대하여 표현하는 수단으로 활용할 수 있다.