인사이드 자바스크립트 - 핵심 개념과 원리를 정확하게. jQuery, Node.js, 클로저의 개념까지
송형주.고현준 지음 / 한빛미디어 / 2014년 1월
평점 :
절판


최근 MEAN(mean.io) 이라는 용어가 새로 나왔다. JavaScript에서 파생한 주요 프레임워크 4가지를 일컫는 말이다. MongoDB, Express, Angular.js, Node.js 4총사를 의미한다. 10년 전엔 하대했던 JavaScript가 이제는 가장 부상하는 언어의 중심이 되었을 뿐 아니라, JavaScript 하나로 Server와 Front Side를 넘나들고 원맨쇼를 하는 수준에 이르렀다.


계속 되는 JavaScript 기술이 출시되지만 대부분 기술의 구현 방식에 초점을 맞추었지, 그것이 어떤 핵심원리를 가지고 있는지 누구도 말하지도 궁금해 하지도 않았다. 어떤 지식이든지 간에 그 분야의 핵심 원리를 배운다는 점은 매우 매우 매우 중요하다. 기초를 세우는 반석이 탄탄하게 세워져 있으면, 그로부터 파생되는 지식들은 사실상 곁다리이고 응용일 뿐이다.


  인사이드 자바스크립트는 국내에서 거의 보기 힘든 '언어 원리 이해' 책이다. 내부 구조가 어떻게 되어 있는지를 분해해 알려주는 데 초점을 맞춘 책이기 때문이다. 


JavaScript의 모든 함수 객체가 prototype 프로퍼티를 가지고 있다는 것을 인지하고 있는 프로그래머는 그리 많지 않을 것이다. JavaScript는 왠지 다른 언어보다 쉬울 것이라는 편견 때문에 본질적 구조에 대한 지식이 매우 없는 경우가 많다는 것을 알게 되었다.


또 Chapter 6에서는 객체지향 프로그래밍(OOP)도 구현할 수 있는 법도 소개한다. Java를 하면서 가장 많이 처음에 보는 어휘는 바로 OOP이다. Class를 구현하는 객체를 만드는 언어의 특성 때문에 그 언어에 대해 그렇게 이야기를 많이 듣기는 하지만, JavaScript는 뭐가 기반인지 아는 사람은 많지 않다. JavaScript는 Prototype 기반의 언어인데, JavaScript로 OOP를 한다해도 Class라는 것이 없기 때문에 함수도 객체인 점을 이용해서 Function을 Class처럼 사용하는 방식으로 응용해 구현하는 재미를 볼 수 있다.


마지막엔 JavaScript 프레임워크를 대중화로 이끈 jQuery 1.0 소스를 분석해 본다. 2.0이 나와있는 현재 1.0을 분석하는 이유는 초기 버전이기 때문에 소스가 간결하기 때문이다. 늘 쉽게 써보기만 했지, 소스를 한 번 쓱 열어보는 이상은 하지 않았던 JavaScript 유저들은 jQuery 소스를 알아 볼 매우 드문 기회를 얻을 수 있을 것이다.


컴퓨터 언어의 발전 방향은 늘 간결하고, 불편한 점들을 감추도록 해왔다. 과거에 비해 소스코드가 점점 짧아지고 있고, 더 높은 효율성을 가지고 있다.(Perl에 비해 JSP는 더 편리졌고, JSP를 하던 사람도 Node.js를 해보면 또 놀라울 정도다.)


또 여러가지 복잡하게 가지고 있는 것보다 하나의 언어를 기반으로 하고 있다는 점도 편리하게 느껴진다는 점에서 앞으로도 JavaScript의 영향력은 계속 커질 것이다. 그런 점에서 출발을 할 때 핵심을 잘 파악하고 나아간다면 더 많은 배움에서 지름길이 되리라 생각한다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
이것이 레디스다 - 초고속 읽기 쓰기를 제공하는 인메모리 기반 NoSQL, Redis
정경석 지음 / 한빛미디어 / 2013년 11월
평점 :
절판


아직까지는 RDBMS가 대세이긴 하지만, 누가봐도 새로운 신흥 세력 NoSQL로 많은 서비스들이 점차 이동하고 있다는 점은 부인할 수 없을 것이다.


SNS 등 엄청난 이용자수의 기하급수적으로 늘어나고 있는 이용량 증가가 관계형 데이터 베이스에서는 한계가 오기 시작하기 때문이다.

하루에도 천문학적 데이터 트래픽을 만들어 내는 Facebook, YouTube, Twitter, Kakao Talk 등은 기존의 테이블 기반의 처리 방식으로 어려워졌다. 이런 엄청난 양의 비정형 데이터를 처리하기 위한 방법으로 나온 대안이 바로 NoSQL이다.


CouchDB, MongoDB 등 유명한 NoSQL의 오픈소스 프로그램들이 있지만, 그 중에서도 REDIS(REmote DIrectory Server)는 ANSI C로 작성된 인메모리 기반의 NoSQL이다. Inmemory란 말 그대로 모든 데이터를 메모리에 저장한 뒤에 조회한다는 말이다. 

Redis는 Twitter, Line, Pinterest 등 유수의 인터넷 서비스 업체들이 사용하고 있는 오픈소스 NoSQL이다. 


Redis는 기존 RDBMS와 다르게 Key-Value 형태로 저장되어 있다. Key를 통해 Value(값)을 찾는다. 데이터 형태는 5가지를 지원하는데, String, List, Hash, Set, Sorted Set이다.


그렇다면 기존의 RDBMS를 사용했을 때의 발생할 법한 문제점을 보자.

Tomcat 서버 3대와 MySQL로 새로운 서비스를 런칭했다. 사용자 반응이 매우 좋아 증가 추세가 가파른 곡선을 그렸다. 그러다 결국 시스템이 다운되었다. 다음과 같은 결과가 나왔다.



시스템을 보니 CPU, Memory모두 최대치 상태였고, MySQL 서버의 리소스는 40%정도만 점유하고 있었다. 따라서 WAS의 리소스 부족이라 판단하고, 3대를 추가해 총 WAS 6대와 MySQL서버 1대로 재동작 시켰다. 그랬더니 서비스 중단 현상이 사라졌다.




그러다 한달 후...다시 서비스가 중단되었다. 그래프를 보았다


이번에는 MySQL 서버의 문제였다. MySQL 서버 응답 지연으로 WAS와 DB사이의 연결이 끊어진 것이다. 


어떻해야 할까? 이번엔 DB서버를 증가시켜야 할까?

WAS를 추가할 때는 해당 하드웨어에 Tomcat을 설치하고, JSP, JAR 파일을 복사하고, DB서버 IP를 설정하면 되었지만, DB서버를 변경하려면 저장된 데이터를 전부 새 서버로 Migration 작업을 해야 한다. 그럴려면 또 서비스를 중단시켜야 한다.


매번 이런 일이 발생할 즈음에 이렇게 서비스를 중단시켜야 할까?

H/W의 성능을 업그레이드 시키는 Scale Up을 한다해도 어느 순간부터는 물리적인 한계가 존재한다. 즉 증가시켜도 증가분만큼 성능이 향상되지 않는 것이다.



NoSQL은 처음부터 Scale Out(같은 H/W를 증가시켜 나가는 것) 염두해 두고 설계했다. 그래서 데이터 트래픽이 증가해도 비슷한 사양의 H/W를 추가하면 대응이 가능하며, 위의 예처럼 데이터 요청량의 증가를 예측하기 어려운 경우에 NoSQL을 사용하는 것이 현명한 선택이다.



RDBMS의 기본은 데이터 간의 관계다. 즉 Table 끼리의 Relation이 가장 중요하다.

반면, NoSQL은 관계는 중요하지 않으며, 처리할 수 있는 데이터양과 성능이 가장 중요하다.




이 책은 무턱대고, REDIS 설치부터 시작해서 사용법을 점진적으로 들어가지 않는다. 아직까지 NoSQL이라는 것에 대한 개념이 생소한 사람들이 많다는 것을 인지하고 있는지, 빅데이터와 NoSQL에 대한 개념과 현재의 환경, 기존의 RDBMS와의 비교 등 다양한 관점에서 알아볼 수 있다.


다음은 NoSQL의 CAP 정리를 시각적으로 나타낸 것이다.

Consistency, Availibility, Patition tolerence를 말하는데, RDBMS나 NoSQL이나 이 셋 중 둘을 고르고, 한 가지 속성을 희생해야 하는 것이 특징이다.

MySQL은 A, C를 가졌으나, P를 희생해야 하고, MongoDB나, Redis는 C, P가 지원하지만, A가 약하다.


이 책에서는 기본적인 데이터 사용법 부터, 실무와 가까운 활용사례를 소스를 예를 들어 설명하고, 확장기법과 관리기법, 튜닝까지도 알려준다.


가장 마음에 드는 것은 쇼핑몰 서비스를 예로 드는 실무에 가까운 활용법이다. 실제로 이런 이론 설명과 몇 가지 사용법으로는 매우 추상적인 단계에 머물게 되는데, 실제 업무에 사용하게 될 상황을 간접적으로나마 체험하게 됨으로써 보다 구체적인 적용을 꾀할 수 있다.


저자는 도움이 되는 책이 되었으면 좋겠고, 설명을 쉽게 하는 책이 되었으면 좋겠다고 했는데 그런 면의 노력이 많이 깃들여져 있는 것 같다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
거침없이 배우는 커피스크립트 - 더 빠른 자바스크립트 개발을 위한
트레버 번햄 지음, 이현남 옮김 / 지&선(지앤선) / 2013년 12월
평점 :
장바구니담기


CoffeeScript는 jQuery같은 JavaScript Library가 아닌 Ruby로 만들어진 Complier로 실행되면서 JavaScript로 변환되는 JavaScript를 단축시키는 언어이다.


Github에서는 2011년 부터 매우 주목받기 시작했으며, Ruby, Python같은 효율적인 언어로 알려진 것들로 부터 영감을 얻었다고 한다.


CoffeeScript는 간단한 문법적 특징이 있다.


스페이스바 공백을 block 구분하는 데 쓴다. 

세미콜론( ; ) 을 사용할 필요는 없다. 

{ } 대신 들여쓰기로 그 기능을 대신한다. 

- 파라미터를 전달하는 function call시 () 도 필요없다. 공백 한칸을 주고 파라미터를 주면 바로 () 의 역할을 한다. ( 파라미터가 없는 경우에는 함수임을 표시하기 위해 () 가 필요하다. 일관성을 위해서 항상 () 써주는 것도 한 방법이다. )


JavaScript의 이러한 문법도

if (opposite) { number = -42; }


CoffeeScript에서는 이렇게 한 줄로 변한다.

number = -42 if opposite



함수도 매우 간단하다. JavaScript에서는

square = function(x) { return x * x; };


하지만, CoffeeScript에서는

square = (x) -> x * x


이렇게 한 줄이 되어버린다.


보면 알겠지만, 불필요하게 반복되는 단어들은 제거해 버린 것이 CoffeeScript의 특징이다.



이 책의 경우에는 보편적으로 가지고 있는 구성이 아니여서 다소 보기가 쉽지 않다.

보통 책들의 구성을 살펴보면 문화권의 영향을 많이 타는 듯한 느낌인데, 일본 번역서의 경우 매우 간결한 구조와 쉬운 설명을 특징으로 가지고 있는 반면, 미국 번역서의 경우 이런 절차적인 방식보다 유연성 있게 풀어나가는 방식이 많다.


그런데 이 책의 경우에는 유연성을 넘어 다소 산만하게 느껴질 정도로 파악하기 어렵다. 본인은 Node.js를 경험해 보았지만, 만약에 Node.js를 경험해 보지 않은 독자라면 어디서 부터 실행을 해야 할지 난감할 듯 싶다.

"Command Prompt창에서 'coffee'라는 실행어를 치시오" 라는 간단한 말 한 마디로 끝날 수 있는 방식을 독자의 선택에 맡기는 느낌이다.

Editor를 선택하는 것도 한국서의 경우에는 Sublime Text를 어디에서 다운 받아 실행하세요. 라고 하지만, 이 책은 'Vim, Emacs, Cloud9도 있다.' 라고 이야기 한다.


방법을 가르치는 동양의 문화와 선택권을 중시하는 서양의 문화권의 차이에서 오는 갭일지도 모른다.


그것을 감안해도 이 책은 더욱 저자 만의 낯선 흐름과 풀어내는 방식이 독자의 흐름과 생경하게 느껴질 수 있을 것 같다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
마음을 생각하는 디자인 - UI 디자인 규칙을 이해하기 위한 핵심 가이드
제프 존슨 지음, 강규영 옮김 / 지&선(지앤선) / 2013년 11월
평점 :
품절


하루에도 몇 천 번씩 알게 모르게 웹사이트, 광고, TV, 책, 신문 등 엄청나게 많은 매체를 접한다. 우리는 선천성과 후천적인 교육의 결과로 그 매체들을 파악하거나 스쳐지나가고, 또 잊어버리거나 기억한다.


아무렇지 않게 생각했던 그 인식의 세계에 대한 해설을 볼 수 있다는 것은 나름 우리의 인식 체계에 대한 설명을 들을 수 있는 기회일 뿐아니라, 우리가 문서 등 여러가지 매체를 생산해 낼 때 매우 좋은 기회가 된다.


이 책은 UI 디자인 규칙을 이해하기 위한 핵심 가이드 라는 부제를 달고 있지만, 사실 UI/UX와는 상관없이 매우 보편적인 우리의 인식 체계에 대한 설명을 알 수 있다.


하루에도 우리는 웹사이트를 보면서 읽거나 말거나를 결정하는 그 요인들이 사실 모두 이유가 있었다는 것을 알 수 있는 기회다.


책에 의하면, 우리가 점, 선, 면으로 이루어진 도형을 파악하는 것은 선천적이나, 인류 역사상 문자를 읽고 해독하는 것은 그리 오래 되지 않았다고 한다. 또한 매우 교육을 잘 받은 층만이 읽기에 능하며 상당수의 사람들은 읽기를 위한 주의력 자원이 그리 많지 않다고 한다.


만약 주의력 자원이 100이 있다면 우리가 만드는 웹사이트, 문서 등을 만들어 낼 때 그 주의력 자원이 모두 소모되기 전에 파악이 되도록 해야 한다는 말이다.


글을 쓸 때도 적절한 폰트 크기와 자평, 친숙한 어휘(실제로 익숙하지 않은 어휘를 보면 멈칫하지 않은가? 그럴 때 우리는 주의 자원을 사용한다. 철학서의 경우는 생경한 어휘의 연속이기 때문에 결국 조금 읽자 마자 주의자원을 다 사용하고 마는 것이다.) 사용을 고려해야 하는 셈이다.


또한 가운데 정렬을 함부로 하게 되면 우리의 눈이 글을 따라가다가 다음 줄로 갈 때 첫 번째 글자의 위치를 파악하기 어려워서 매우 힘들기 때문에 함부로 사용해서는 안 된다고 한다.


이 책은 인간의 제한성에 대해 대체로 이야기 한다. 화장실 들어 올 때와 나갈 때가 다르다는 속담처럼 우리의 기억도 목적을 이루고 나면 목적을 위한 대상을 잊어 먹는 경우가 종종 있다.

가스불을 안 끈다던지, 우산을 사용하고서는 놓고 온다던지 말이다.

그러한 인지 기억의 한계를 UX에서는 기억할 필요가 없도록 해 줘야 한다고 이야기 한다.


게슈탈트의 법칙은 디자인을 배우게 되면 알게 되는 일반적인 이론이지만, 이러한 이론을 몰랐다면 자신이 웹사이트나 스마트폰 앱의 인터페이스를 파악하는 방식을 깨닫게 될 것이다.



우리는 하루에도 문서, 앱, 웹 사이트 등으로 부터 구성된 레이아웃을 통해 상황과 내용을 파악한다. 정보의 소비자 입장이든 생산자 입장이든 생활에서 매우 빈번하게 이뤄지는 현상에 대한 최소한의 이론은 가지고 있어야 우리가 무엇을 하든지 수월하게 파악할 것이다.


나는 이 책을 학교에서 배웠으면 좋겠다는 생각을 한다. 이것은 디자인의 영역이 아닌 우리가 늘 사용하는 인식에 대한 설명서이기 때문이다.


댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
스프링3 입문 - 스프링3.1 지원, 스트럿츠, 하이버네이트, 마이바티스 연계
하세가와 유이치 & 오오노 와타루 & 토키 코헤이 지음, 김성재 옮김 / 한빛미디어 / 2013년 10월
평점 :
구판절판


우리나라의 IT는 거의 SI를 일컬을 만큼 SI 비중이 절대적이다. 그리고 그 SI는 Java와 Spring이 또 절대적이다. 그럼에도 불구하고 이상하리 만큼 Spring 책이 많지 않다. Spring 책을 쓸 수 있을만한 저자가 없는 것인지 안 쓰는 것인지는 모르겠지만 스프링 서적은 부족한 편이다.


'스프링3 입문'은 (책 속의 저자의 말대로라면) JSP 개발 경험이 있는 정도 수준의 초급개발자를 대상으로 하고 있다.


많은 이들이 '스프링'을 '스프링 프레임워크'와 동의어로 사용하고 있지만, 사실 스프링은 시리즈물(?)의 제목이라고 할 수 있다. 그리고 스프링 프레임워크는 그 스프링 시리즈 중 하나인 것이다. Spring Web Flow, Spring Android, Roo, Groovy, Grails 등 Spring 시리즈는 매우 다양하다.

또한 Spring은 다른기술과 다르게 사용방법만 안다고 되는 것이 아니라 Spring이 가진 철학과 어떠한 방향을 지향하고 있는지에 대한 지식도 매우 중요하다. 이는 '토비의 스프링3' 저자도 처음에 강조하던 말이다. 이러한 배경이 아키텍처를 만드는 데 중요한 밑바탕이 되기 때문이다.

그래서 다른 책과 다르게 유독 스프링 책은 스프링의 배경에 대해 많은 지면을 굳이 할애해서 설명하고 있다.


이 책은 제목에 '입문' 이라는 단어를 달고는 있으나 매우 실무지향적인 입문서이다. 그 점이 기존의 책과 매우 차별화 되는 점이다. 스프링을 다룬다고 해서 스프링 하나만 다루는 경우는 많지 않다. 실무에서는 사실 기존의 기술을 두고 같이 사용하는 경우가 매우 빈번하기 때문이다. 때문에 이 책에서는 스트럿츠 1, 2와 MyBatis 2, 3 그리고 하이버네이트 까지 Spring과 연계되는 프레임워크를 사용하는 법까지 다루고 있다.

또한 챕터가 매우 구조적으로 이루어져 있어서, 마치 레고 블럭 하나하나를 깔끔하게 떼어놓은 듯한 느낌이다. Spring MVC, Spring Web Flow, DI, AOP, Data Access 층 등 매우 깔끔하게 챕터를 분리해 놓았다.


그럼에도 불구하고, 이 책은 사실 저자가 책에서 말 한대로 JSP, Servlet 정도를 개발해 본 경험이 있는 그러나 프레임워크 경험은 없는 개발자가 보기엔 다소 무리가 있는 난이도이다. 챕터 1에서 소개를 끝내고 나오자 마자 챕터 2, 3에서 부터 DI, AOP가 쏟아지는데, 이런 Spring의 고유한 구조는 한 번에 들어가기 매우 생소하기 때문이다.


따라서 초보자를 위한 스프링 입문이라는 말보다는 실무자를 위한 스프링 확장 정도가 적절하지 않나 싶다. 이 책은 Spring을 어느 정도 사용해 보았지만 아직 구멍이 조금 있는 Spring 실무 경험자에게 보다 구조적이고 실무적인 지식을 안겨줄 수 있는 책이다.


댓글(0) 먼댓글(0) 좋아요(3)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo