개인적으로는 스칼라나 하스켈 못지 않게 어려운 (그리고 생각과는 많이 다른) 언어가 자바스크립트인 것 같다. 그 난해함에 추가되는 문제는 생태계가 가장 빠르게 변화하는 언어라 단순히 언어 스펙을 공부하는 것만으로는 충분하지 못하다는 것이다. 이 책은 이러한 문제를 조금은 해결 할 수 있는 책이 아닌가 생각이 된다.

프로그래밍을 전혀 모르는 사람에게는 의미 없는 책이지만, ES3 부터 자바스크립트를 사용한 개발자나, 다시 한번 ES6 수준에서 알고 있는 지식을 정리하려는 사람들에게 추천할 만한 내용을 가지고 있다.

예를 들면 "30"* 3 = 90 이 나온다던가 let a = [1,2,3,] 처럼 마지막 콤마를 허용한다는 것 같은 것... 
arrow function 에서 this나 arguments가 펑션과 좀 다른다는 것은 제대로 정리가 안된다면 매번 헷갈려 하는 이슈 들이다. (물론 "30"*3 처럼 난해한 표현식을 추천하는 것은 아니다)


책을 쭈욱 읽어가면서  이 책의 장점을 정리해 보았다.

1. 30페이지 정도 나뉜 챕터들은 주제가 명확히 분리되어 있고, 그 안에서는 원리/이론 - 기초 - 심화로 이어진다. 처음부터 읽어가지 않아도 필요한 부분만 참고할 수 있다.

2. 중간중간 NOTE 도 도움이 되고, 챕터별 마지막 요약은 한 번 리마인드 할 수 있는 기회를 줬다.

3. 책의 내용뿐 아니라 번역 역시 책의 퀄리티를 결정하는 중요한 요소인데 (개인적으로는 ) 만족스러웠고, 단어 옆에 원래 영어단어가 충분히 표현되어 있어서 헷갈림이 없었다.   


본문 중 일부분


하지만  책의 본래 목적이기도 하지만 타겟 독자층이 애매하지 않나 생각이 들었고,  책 내용적으로는 ES6 부분은 별도 표시를 해 줬더라면 좋지 않았을 까 해본다.  

6개월전 Vue.js를 운영툴에 적용한 이후, Java와 Kotlin, Scala로만 프로젝트를 진행하고 있었는데, 이 책을 한번 읽음으로서 다시 한번 자바스크립트를 복습 할 수 있는 좋은 기회가 되었다. 

신고

한빛미디어 / 데이터 과학 입문

분류없음 2014.12.27 15:47 posted by dev.bistro




링크 : http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-135-2


이 책에 대해서 몇번 들었지만, 생소한 분야를 원서로 읽을 용기는 없었다. 이번에 한빛에서 번역판이 나오게 되어서 읽었고, 슥슥 넘겨본 정도이지만, 이에 대한 이야기를 해볼까 한다.

책 서두에도 나오지만 '빅 데이터' 와 '데이터 분석'은 유행처럼 번졌고 아직도 대세다.  정확히 무엇을 뜻하는지 나 같은 평민 개발자는 쉽게 이해할 수 없었다. 

포털회사에서 검색에 근무하는 나는 이 정도의 데이터를 처리하고 있으니까 빅데이터인가? 검색로그를 보면서 의미있는 결과를 뽑기위해 삽질하는 나는 데이터 분석을 하고 있는가? 고민하면서 여기 저기 기웃거리며... 그게 여의치 않을때는 책으로 배울려고 했다 ( T_T http://bistros.tistory.com/88 베이지언 통계 내용은 이 책에서 스팸 필터를 처리하는 방법으로 다시 접하였다)

책의 시작은 이러한 고민을 함께 함으로써 시작된다. 그리고 기본적인 알고리즘 선형회귀나 k근접과 같은 아주 기본적인 개념부터 설명한다. (아... 심플한건 책 쓴사람들 입장이다 난 이때부터 어려웠다 -ㅇ-)


그리고 그나마 익숙한 베이지언부터  이야기를 시작한다. 하나의 사례에 대해서 20-30page의 적당한 양으로 분석 / 방법을 제시해 주고 마지막에는 R code로 실제 어떻게 프로그래밍으로 적용시켜야 하는지도 보여준다. (통계학자가 아닌 프로그래머 입장에서 매우 감사하다)


약간의 프로그래밍 지식(R) 과 대충 미적분을 아는 수학 실력이면 이 책을 훑어 볼 수 있다. (물론 다 이해한다는건 아니다). 

이 책이 나에게 실적적인 도움이 되었다고는 말 못한다. 하지만 나처럼, 왜? 뭐? 에 대한 약간의 조언과, 앞으로의 길라잡이 정도는 제시해 줄수 있을듯 하다. 

(개인적으로) 책 내용은 상당히 난해했고, 딱딱했다... 하지만, 꼭 한번 읽어보라 추천해주고 싶다. 

신고



링크 : http://www.hanbit.co.kr/ebook/look.html?isbn=9788968486739


Java8이 나온지도 반년이 지났다.

Java7에 비해서 그 변화도 크고 도입해야 할 이유도 확실하기 때문에 많은 관심을 가지고 있다.


현업에서는 아직 8을 이용하지는 않고 있지만, 개인 프로젝트나, 알고리즘을 해결 해야 하는 이슈가 있다면 java-8로 진행한다.


Java에서 중요한 전환점이 될 8 버전에 대해서  국내 서적은 그렇게 많지 않다. 2권 정도...


그 중 한권은 자바8의 핵심임 람다에 대해서만 설명한 책이었고, 

같은 200페이지를 어떤식으로 풀어 나가나 싶어서 이 책을 보게 되었다.

(책의 목차가 매우 다르다 @.@)


1. 번역

번역서이니 만큼 번역에 대해서 애기해볼까 한다.

55페이지부터 계속 등장하는 '원시 특수화'나 61페이지의 '공개된 리소스' 처럼 한글로 된 애매모호한 단어들이 눈에 거슬렸다. 

'원시 타입-primitive type' 처럼 일관성인게 원단어를 첨부해주면 좋았지 않을까 한다.

4.4장에서는 좀 갸웃거렸지만 "8장. 디자인 구조와 원칙"처럼 개념적인 단원에서도 어렵지 않게 읽어 내려 갈 수 있었다. 

뒤로 갈수록 좀 더 이해하기에 편안한 느낌 들었다.  (솔직히 개인적으로 번역에 대해 민감한 편은 아니기도 하다)



2. 다른 한빛의 e북보다 페이지도 많은 편이고 코드량도 많지 않기 때문에  많은 내용이 들어 있다. 단순한 람다의 사용법만을 설명하지 않고

병렬성 이슈와 테스트, 패턴까지 한 번에 언급한점은 마음에 들었다. (보는이에 따라서 찔끔찔끔 이라고 싫어하는 분도 있겠네...)

특히 자바와 뗄수 없는 패턴의 언급은 매우 적절해 보였다. 

람다식을 배운후 어떻게 적용할까, 어떤식으로 적용하는가에 대해 의문점을 가진다면 이 부분의 예제로 충분히 이해를 하리라 생각되어 진다.

(물론 더 좋은것은 github에서 l=java와 함께 검색하는 것이다.)



마지막으로..

javascript나, scala와 같은 기존 람다 개념에 익숙한 언어 개발자라면 높은 장벽은 아니다. 

하지만, 오래된 자바 개발자나 람다 자체가 생소하다면  문법적 학습뿐 아니라 또 다른 학습을 요한다. 그리고 생각의 전환도 좀 필요하고...

쉬운 문법의 설명으로 부터,  중요한 주제들을 한번씩 훑어 있는 이책은

자바8을 처음 접하려는 사람이나, 나같이 이미 사용하고 있는 사람들에게도 또 한번 생각해줄만한 계기가 될 수 있겠다.

(어렵다면 다음 책을 한번 읽고 다시 읽어보면 좋을듯 : http://www.hanbit.co.kr/ebook/look.html?isbn=9788979149678 )


신고

Effective Unit Testing / 한빛미디어

life/book 2014.10.27 00:21 posted by dev.bistro



제목만으로도 이 책은 선택할만한 가치를 가지고 있다. Effective로 시작하는 책들이 가진 무게감이며, 그간의 경험을 통해서 알고 있기 때문이다.

크게 3부분으로 나누고 있다.
Part1에서는 이 책이 말하고자 하는 '좋은 테스트 코드'를 이해하기 위한 기본을 설명해주고 
Part2에서는 샘플코드-개선방법-결과 3단계로서 반복적으로 실 사례를 보여주며,
Part3에서는 좀 더 고급화된 소주제들과 팁들을 공유해주고 있다.

시작부터 중요한 얘기를 들려준다
100퍼센트의 코드 커버리지는 좋겠지만 실제로 중요한 것은 아니라는 점. 어느 점이 지나가면 테스트를 작성하는 비용대비 이점이 거의 없어진다는 얘기를 들려준다. 가장 중요한 제품 코드의 테스트 코드를 먼저 작성하며, 뒤로 갈수록 중요도가 하락하거나, 코드 커버리지를 위한 의미없는 테스트 코드가 작성되기 떄문이다.

이러한 테스트코드의 가치를 유지하는 방법은 제품의 품질을 위한 테스트코드 작성이 아니라, 설계를 위한 테스트코드 작성을 하라 조언해주고 있다. 하지만 이 부분이 말은 쉽다. '실패하는 코드를 작성하고 그걸 왜 완성시켜야 하지? 처음부터 잘 짜여진 코드를 작성하면 되지' 라고 생각하는 많은 개발자 들이 품질관리용에서 설계목표로 넘어가지 못한다. 
(나 역시 너무나도 당연한 '실패 테스트'에서 시작하라는거에 반감이...-ㅇ-)

여튼, 이러한 테스트코드는 제품코드 만큼 중요하다.  품질검증과 설계목적인 테스트코드 역시 제품을 만들어가는데 중요한 요소이며, 이를 관리하는 리소스역시 일정에 포함된다. 좋은 테스트코드가 필요한 이유이다. "어쩌면" 당연한 내용을 2부에 걸쳐서 예제로 보여준다. "당연하지만" 당연하게 하지 않는 것들이다. 그냥 쭉 읽으니 감동이 느껴지지 않아서 만들고 있던 specs2 code들을 대입해보며 읽으니 좀 더 느낌이 왔다.

이후 생각치도 못한 아이디어도 3부에서 얻게되었다.
java로 프로젝트를 진행할 때는 java-junit을... scala 프로젝트에는 specs2로 테스트코드를 작성하였는데, 생각의 전환을 일꺠워 줬다. 왜 groovy를 여기에 쓸 생각을 못했지?


정리하며...
흔히 말하는 TDD를 위한 책은 아니다. 그 부분은 1부에서 잠깐 소개되며, 친절하게도 다른 래퍼런스들을 소개해준다. 이 책은 TDD를 위한 '좋은 테스트 코드를 작성하는 방법'을 위한 책이다.  초급자를 위한 책은 아니며, 어느 정도 테스트 코드의 중요성을 알고있는 사용자에게 적합한 책이라 생각된다. 

책은 300페이지 정도로 결코 두껍지는 않다. 2부가 지겹다면 과감히 스킵하고 1부만을 봐도 좋을듯 하다.
1부를 보고 엉망인 테스트 코드를 직접 적용해나가도 보면 2부의 케이스를 찾아보며 적용하게 될것이다.


링크 : http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-062-1



신고

특히 자료구조나 알고리즘의 경우에는 업무의 실제적인 기본이 될 뿐만 아니라... 더 좋은 곳을 향한 '이직의 기본내공'이다 ^^; (내가 면접을 볼때도... 면접관으로 참여할떄도... 자료구조의 이해와 알고리즘은 좋은 얘깃거리이다)

새 언어를 배울때 자료구조 부분은 꼭 해보는게 좋다고 생각한다 (솔직히 직접 구현은 안하고 import /include만 하기때문에  주기적으로 까먹는다-.-)
Basic을 시작으로 Pascal, C, Java, Python, 마지막에는 Scala, Groovy로 이 주제를 학습해왔고, 이번에는 Javascript로 복습을 하자는 생각을 하게 되었다. 

지금껏 사용해왔던 Javascript는 Jquery나, angularjs처럼 client영역에서 대부분 이었다. (개인적으로 Node.js는 관심분야가 아니다) 책에서 설명하는 '자바스크립트 환경'은 책을 진행하기에 어려움이 많다. REPL이라기에는 어시스트도 제대로 되지 않고 에디트도 쉽지 않고... 그래서 우선은 환경 설정부터 따로 진행하였다.


1) http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/ 에서 jsshell 다운로드 및 설치
2) .profile에서 PATH 설정 후 js 실행되는지 확인
3) http://www.jetbrains.com/webstorm/ 에서 webstorm 설치
4) 실행후 프로젝트 하나 생성 App.js파일 하나 만들고 print 한줄을 쓰자
5) 실행할때 Node Interpreter 옵션을 SpiderMonkey의 js로 지정...

V8 기반의 Node와 SpiderMonkey는 문법이 조금 다르다.. 그래서 어시스트등의 IDE기능을 100% 사용을 할 수는 없지만... 무식하게 js-shell에서 진행하거나 그냥 에디터에서 진행하는것보다는 나을것 같아서 이렇게 진행하였다. (더 좋은 방버이 있을것 같지만... 진행에 전혀 문제가 없기에 ...)

완전하지는 않지만 이게어디냐...



이렇게 환경을 설정하고 2장부터는 일반적인 자료구조론의 내용이다. 배열을 시작으로 리스트, 스택,큐등을 진행하고 좀 더 심화과정으로 딕셔너리, 트리, 그래프가 나온다. 마지막으로 약간의 알고리즘으로 책이 끝난다...

전체적으로 잘되어 있는 번역과, 다르게 해석될수 있거나, 영어 자체가 더 익숙한 단어들에는 '원 단어'를 표시해주어  오해를 할만한 부분을 해소시켜 주었다.


책을 읽고 나서 장단점을 몇가지 적어본다면...

#1. 이 책 열심히 따라 하더라도 일반적인 브라우저/Node.js 에서 작동이 안된다... (문법이 달라...)
(위의 스샷의 for each 문법은 일반적인 브라우저나 Node.js에서 안먹힌다... ㅠ ㅠ
참고 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in )

#2. 좀 더 친절한 예제 수행방법이 있었으면 좋지 않았을까? (실제로 다른 리뷰를 찾아보니 실행에 어려움을 겪으신듯 하다)

#3. https://github.com/oreillymedia/data_structures_and_algorithms_using_javascript 에 예제코드는 올려져 있지만.. 연습문제에 대한 솔루션은 제공하지 않고, 구하는 방법도.. 못찾았다. (내가 못찾은 것일수도 있다) 이건... 있어야하지 않을까...? 

#4 이 책의 단점은 아니지만... Javascript와 자료구조론이라는게 궁합이 맞을까라는 의문이 든다...
[1,100,2].sort()의 결과에서 보는것처럼 (이건 Node.js마찬가지)  자료구조라는 포커스보다. Javascript의 언어적 특수성에 의한 구현물이 발생하기 떄문이다...

#5. server-side를 전혀 해본적이 없는 javascript developer가 자료구조를 학습하기에 좋다. (그런데  javascript 딱 1개만 할 수 있는 자료구조 학습희망자가 있을지는 모르겠다.)

#6. 번역에 불만이 없다. 특히 오해할 수 있는 단어에는 영어 단어를 같이 노출해주는 배려가 좋았다.


마지막으로...

http://shop.oreilly.com/product/0636920029557.do#PowerReview 에 있는 리뷰처럼  표준을 벗어난 구현과, 세련된것 같지는 않은 구현이다.
책을 충실히 번역하는 것도 중요하지만, 책자체가 미흡하다면 그 부분에 대한 보강은 블로그등을 통해서 해주는게 좋지 않을까 한다.  (예를 들면 출판 전 현업 리뷰를 통해서 1장의 환경 설정 하는 방법을 블로깅 해서 공유한다던지, 뒤에 7장 정도의 실제 따라하기를 유튜브를 통해 공개한다던지..)


신고



작년에도
'파이썬 라이브러리를 활용한 데이터 분석'  를  읽은적이 있다. 얇지는 않은 책이였지만, 나름 재미있게 본 기억이 있기에 이번에도 비슷하리라 생각하고 이 '파이썬을 활용한 베이지안 통계' 를 다시 한번 집어 들었다. 

omg


그간 읽어왔던 책에 비해 매우 얇은 두께와, (잘하지는 않지만) 생소하지 않은 파이썬이라는 언어에 혹해서 쉽게 쉽게 넘어갈 줄 알았는데....  ==> 이렇게..

베이지안을 전혀 모른채 이 책을 선택했기에 어느 정도 사전 학습이 필요로 하였다. (뭐.. 예를 들면 제일 처음 만나는 코드를 작성하기 위해서 이정도를 알아야한다. )

하지만  문제의제기 & 필요한 개념의 소개 &  풀이에 필요한 함수&계산식과 & 풀이로 이어지는 짧은 단계로 인해서 큰 어려움없이 진행 할 수 있었다.




1,2 장에서는 Pmf라는  단순한 딕셔너리 클래스로서 문제를 풀어나가고, 이후에는 Suite를 이용한다. ( 아 물론 이 파일은 책 앞부분을 보면 제공을 하고 있고, 타이핑이 귀찮은 분들을 위해 책에 있는 소스 코드도 함께 제공해준다)
대부분 이 코드를 많이 사용하였고, 후반부정도가면 numpy 등이 추가로 사용되어 진다.

Suite.class



막 외우거나 이해하기 보다는 '파이썬 라이브러리를 활용한 데이터 분석' 처럼 다양한 케이스들을 소개하면서 독자에게 사례를 보여주는 느낌의 책이다.  책을 다 읽고나서도 ... 뭐가 내머릿속에 남았지? 라고 하면 선뜻 대답을 할 수 없다. (그도 그럴것이 베이지안이 머지 ?  정도로 책을 읽기 시작했...) 
그렇다고 해서 도움이 되지 않았다고는 말할 수 없다. 이러한 것들이 있고, 다음에 업무에서 이 책에서 본 내용이 조금이라도 떠 올려진다면 이 책의 가치는 나에게 충분하다고 본다.

현업에서 로그 적재와 분석에 고민을 하고 있다. 좀 더 많은 이론적인 학습이 필요하다고 뼈저리게 느꼇다.

자장, 짬뽕 셋트의 느낌이다.



개인 환경 : Python 2.7.8 & PyCharm  on Mac
학습 시간 : 약 2시간 * 10일 정도


신고

회사에서의 룰이나, 개인적으로 진행하고 있는 일과도 전혀 관게 없는 것이, '게임'이다 하지만. 하루에 1-2시간. 일주일에 10시간은 꼬박꼬박 게임을 즐기고 있다. 국민학생때, 즐기던 갤러그 때문에 프로그래밍을 시작한것은 어이없기도 한 사실이다.  실제로 '매우 조잡'한 알카로이드를 GWbasic으로 만든 기억도 아직 남아있다. 이 정도면 게임에 대해 좀 더 알아주는게 예의가 아니겠는가?

지난번에 읽은 책  만들면서 배우는 AndEngine 게임 프로그래밍: 하루에 하나씩 완성하는 안드로이드 게임 프로그래밍 ( http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-058-4 ) 처럼 이 책 역시 그러한 개인적 관심에 의해서 읽게 되었다. 


(다른 책은 읽어 보지 못했다) 이 책은 주제에 따라 여러책으로 출간되었다.  내가 읽어본 책은 제목처럼 '퍼즐 게임'에서 사용하는 상황과 알고리즘에 대해서 설명해주고 있다. 

게임을 만드는 방법을 소개해주는 책이 아니다. 게임에서 게임이 필요한 알고리즘에 대해서 어떻게 풀어나가지는지에 집중하고 있다.  '상황의 소개' -> '처리할 방법의 소개' -> '알고리즘의 설명' -> '코드의 구현' 으로 각 사례를 보여준다.

목차 : http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-070-6#binfo3 에서 보는것처럼, 시작은 아주 심플한 캐릭터의 이동으로 시작한다. 그 이후 이 캐릭터가 만날 수 있는 상황(막다른길, 아래로 떨어지기, 다른 장애물에 부딪쳤을때 )를 점진적으로 해결해 나가는 방법을 보여준다. 

이렇게 1장이 끝나면, 2장에서는 물건의 낙하 3장에서는 연결처럼 계속 퍼즐 게임에서 처리해야할 상황, 처리하는 방법, 진화를 보여주고 있다.  쉽게 이해 할 수 있게 말이다. 예제코드 역시 어렵지 않아서 C++를 사용한지 7년이 넘은 나 조차가 무리없이 코드를 이해할 수 있었다.


이러한 상황을 해결해 나가는 이 순서는 개인적으로도 많은 도움이 되었다. 생각치도 못한 이슈를 제안해주기도 했고, 생각치도 못한 방법으로 해결을 해나가기도 했다. 내가 얼마나 잘하는지도 중요하지만, 얼마나 더 좋은 방법이 있는가, 남들은 어떻게 하는가를 아는것도 중요한데, 마치 한명의 개발자가 일해 나가는 방법을 뒤에서 지켜보는 것 같아서 만족스러웠다. 




단, 아쉬운점이 있다면 실제로 실무에서도 해당 알고리즘을 그대로 이용하는가? 에 대해선 조금 아쉬움이 남는다. 
예를 들면 96페이지에서 나오는 '테트리스의 낙하지점을 미리 표시해주는'기능의 경우, 떨어질 좌표를 계산해서 그곳에 회색으로 표시해준다. 라고 설명을 해준다. '기본적인 알고리즘을 이해'하는데에는 매우 훌륭하지만, 실제로 예제에서 보여주는 코드는 효율적이지는 않다. 실무에서도 이렇게 쓸거 같지는 않다. 책의 각 말미에 '현업에서는 이 알고리즘을 실제로 이렇게 쓴다' 라는 한장정도의 텍스트가 추가로 있었으면 매우 좋지 않을까 생각되었다.

그럼에도 불구하고
,  게임 알고리즘에 대해 환상?을 가지고 있던 내게 많은 도움이 되었다. 이 책에 당장 나에겐 조금의 도움도 되지 않는다. 하지만 이 책에서 상황에 맞는 다양한 알고리즘을 적용하는 방법은 내 업무에서도 많은 도움이 될것임은 확신한다. 

이후 시리즈 중 하나인 슈팅 게임 알고리즘을 한 번 더 보고 싶다. 물체의 동시처리, 충돌점의 처리등. 평소에 궁금한 것들을 해결해 주는 방법을 나에게 알려줄 것 같아서이다.






신고

이것이 레디스다 / 한빛미디어

life/book 2013.12.29 22:56 posted by dev.bistro

책 링크 : http://hanb.co.kr/book/look.html?isbn=978-89-6848-059-1

redis 는 최근의 트랜드중에서 나름 상위권을 차지하고 있으며, 실무에서도 캐시레이어나 데이터 스토리지로 많이 쓰이고 있다. ( 참고 - http://db-engines.com/en/ranking

허나, 그 만큼 이슈도 많기에 릴리즈 버전이 쉴새 없이 올라가고 있고, ( 코드에 오타 있어서 버전업이 되기도 한다, 참고 - http://download.redis.io/redis-stable/00-RELEASENOTES ) 래퍼런스가 체계화되어 있지는 않은 것 같기에 구글링이나 앞서 적용한 이들의 노하우를 들으면서 참고하는 형편이었다. 그 와중에 좋은 책이 출간되었다 하여 2-3일만에 다 보았다.


2,3,4 장을 통해서 redis가 무엇인지 처음 접해보는 사용자에게 초기진입을 쉽게 유도한다. 뿐만 아니라 6장에서 설명해주는 '내부구조' 챕터에서 어떻게 구현되어있는가를 설명해준다.  개인적으로 어떤 기술을 사용하려면 최소한 그 내부가 어떻게 생겨먹었는지는 알아야 한다고 생각하는데 이 책은 입문-내부-활용이라는 순서에 맞추어 진행해주고 있었다. 

7장 역시 좋은 내용이다. '빠르고' , '단순' 한 redis 이기 떄문에 '휘발성', '싱글스레드', '불안정' 이라는 단점을 이겨내고 어디에 써먹을 수 있을까? 라는 의문이 많이 들었는데 7장의 사례를 통해 많은 도움이 되었다. 여기서 특히 'redis 를 어디에 어떻게 써야하는지 잘 모르겠다면 그것은 redis를 사용하기에 적합하지 않다'라는 아주 귀중한 한줄의 내용을 터득하였다. redis를 어디에 쓰지?가 아닌 여기엔 redis를 써야겠구나 인데. 너무 redis에 포커싱을 맞추고 책을 읽었던 것 같다



redis는 단순함이 그 장점이다.  

redis.io 에 들어가서 설치하고 깨작깨작 읽으면서 명령어 몇 개를 날리다보면 아 쉽네 ~ 다 배웠네. 라고 생각하기 쉽다. 하지만 어디에 써야하는지는 감이 오지 않는다. 이 책은 이러한 redis를 어떻게 쓰고, 어떻게 생겼고, 어떻게 활용하고, 어떻게 잘 쓸수 있는지 까지 순서대로 보여준다. redis를 깨작깨작 써봤거나 keys를 부담없이 날렸던 사용자라면 다시 한번 읽어보라 권하고 싶다.


참고로 우리의 redis 사용에 대해서 얘기해보면  포털의 검색쿼리를 처리해야한다. 우리팀에서는 처음 도입하였고,  자체개발 , redis, 딴거 중에서 결정하였다. 

현재 진행 프로젝트는 6개월 정도 진행되고 있으며, 6개월 정도 뒤에 안정화 될것 같다. X대의 redis instance를 올리고 있고, main data의 vadliation을 위한 sub storage 의 포지션을 가지고 있다. (메인은 MySQL), 빠른 응답 속도, 공개된 소스코드, 사용하기에 단순함, 빠른 이슈처리와 릴리즈 등이 마음에 들지만... '버그', '너무 빠른 릴리즈-_-' , '단순함' 역시... 아쉬움으로 남는다. 플젝의 팀원 한명이 redis를 맡아 이슈를 해결하고.. 센티넬을 쓸 수 없는 환경이라  센티넬을 만들면서  진행중이다.
이번 플젝에서는 극도로 신중히 redis를 결정했다면, 다음 프로젝트부터는 당당히 아키텍쳐 구성 후보에 올릴 것 같다. (한 줄 :안쓸땐 몰랐는데, 써보니 괜찮네 )






신고

Elemental Design Patterns / 한빛 미디어

life/book 2013.11.30 14:28 posted by dev.bistro

아래 리뷰를 보는데 참고가 될것 같아서 제 소개를 짧게 해보면

 - 8년차 개발자 / Java Backend  FrontEnd Developer / 그외 Scala, Python등을 추가로 사용하며

 - 오픈소스, 선행기술에 관심이 있다.





디자인 패턴은 항상 회자되며, 이야기거리의 중심이 되곤 한다. 하지만, 이 패턴이라는것의 모호한 개념만을 가진채 '아 ~ 난 디자인 패턴을 적용하고 있는건가?' '이게 이 패턴이 맞는건가?' 라는 고민을 항상 가졌다


그러던 와중에 이 책을 알게 되었다. GoF의 패턴을 몇년전에 읽고 감동을 받았지만, 실제로 현업에서는 적용 할수 없었다. 아니 적용은 모르게 계속 하고 있었지만 이게 그 패턴인지도 몰랐다가 정확한 표현같다 하나의 패턴을 적용하기엔 너무 다양한 변수와 환경, 심지어는 언어 조차도 달랐기 때문이다


엘리멘틀 디자인 패턴(EDP)는 이런 패턴을 쪼개어서 최소한의 단위로 살펴본다.  ( 5장의 실제 EDP를 소개하는 첫 부분에서는 '갱체생성', '변수가져오기', '상속'등 아주 기본적인것도 패턴이라 정의한다. )


이 책은 솔직히 어렵다. 기존의 기술서적이 재미있게 한장 한장 넘겼다면, 이 책은 조용한 도서관에서 한 줄 한줄 곱씹어 보면서 책을 봤다. 그래서 이해가 안되어서 형광펜으로 줄을 그으면서 다시보고 다시보고... 심지어는 다 보지도 못했다.-_- 책의 내용을 뭐라 설명하는게 미안할 정도로 내가 이해하는게 맞나? 라는 불확신도 들고....


그래도 

- 가장 기본이 되는 EDP 4종 되부름, 위임, 리디렉션, 병합이라는 개념은 몰랐지만, 내가 하루에 몇개씩 생산해내며, 수십번씩 보고 있다는 것을 알았고, 이것들을 EDP라는 최소한의 패턴으로 정의를 해놓았다는 것을 알았다.

- 내가 암기나 학교에서 배운것들을 단순히 암기나 현장의 경험으로 통해 익혀서, 무자각적으로 '판단'없이 적용해 버렸다는 사실을 깨닫았다.

- 그리고 패턴은 언어의 종류와 상관없다 라고 하지만 이 책에서는 '자신이 구현할 언어가 디자인 패턴을 표현할 방법을 선택하는데 가장 큰 영향을 미친다'라고 한다.   (5장 첫부분 137Page - 패턴자체를 언어레벨에서 구현하는 경우등이 존재)


책을 읽고 나서 당장 무엇인가를 바꿀만한 임팩트는 없다. 하지만 몇가지의  깨닫음을 얻었고, 그것으로 충분했다. 나같은 포지션 뿐 아니라, 어느 정도 정체기를 격고 있거나, 패기 충분한 신입개발자도 읽어보면 도움이 될것 같다.  특히 1 ~ 5장은 꼭 읽었으면 하는 바램이다.






신고

http://www.hanb.co.kr/book/look.html?isbn=978-89-6848-047-8 

출판사의 링크에서 소개글을 읽어보면 누가 필요로 한지 말해준다. 개인적으로 담당하고 있는 시스템의 1-2억/DAY의 로그에서 좀 의미있는 데이터를 뽑아낼수 없을까 라는 생각으로 읽기 시작하였다.

최근 팀 세미나에서 대은님의 발표 ( 링크 )나, 지난  DEVIEW에서 링크드인의 김형진님의 발표 (링크)도 재미있게 들은 것도 이 책을 선택한 이유가 되었다.

1. 파이선을 잘 알아야하나?
결론부터 얘기하면 헬로우 월드를 찍을 정도의 실력이면 된다. (하지만 easy_install이나 pip를 이용한 라이브러리설치는 할 줄 알아야한다.)
파이썬에 자신이 없으면 부록에 있는 50페이지의 기본문법만 보더라도 이 책을 충분히 소화할 수 있다.  (50페이지면 충분하다) 그리고 6장까지 개발환경 IPython, 파이썬 라이브러리 Numpy, Pandas , 제일 기초적인 분석데이터를 어떻게 load할것인가에 대해서 Input/Output을  오차없이, 다양하게 보여줌으로서 나를 이해시켜줬다.

2. 왜 파이썬이었을까? 
메인을 Java와 Javascript였고, 파이썬은 프로토타입이나, 서비스 운영을 위한 스크립트 정도로 사용을 하였다.  http://codejob.co.kr/code/view/74나 http://www.itworld.co.kr/print/78477 처럼 왜 통계 / 분석분야에서 많이 사용되는지 이해를 하지 못했다. 겨우 라이브러리 몇개 잘 되어 있다고 대규모 데이터분석에 이용한다고?  근데.. 그 라이브러리가 너무 강력하다.. (물론 '등등'도 강력하다) 당장 4천만건의 로그에서 간단한 결과를 뽑아내는것도 단 몇줄이면 되었다...







7장 예제 결과

3. 경험을 줌으로서 필요성을 느끼게 한다.

중요한 알고리즘이나, 방법론을 설명하는 책은 아니다  2장부터 끝까지 예제를 계속해서 보여줌으로써, 눈이 아닌 손으로 익히게 해준다.  이 예제들을 본것으로 충분했다. 내가 필요한것을 하기 위해 기존의 Kepler에서 TestCase를 먼저 작성하거나, PyCharm을 켜놓고 고민하는게 아닌, IPython에 import numpy, pandas를 해야함을 깨우쳤다. 지금 하고 있는 일에 날개를 달아주는 느낌이다. 






ps1. 1장의  EPD 설치
2012년도에 나온 이 책의 1장 내용처럼  https://enthought.com/  들어가면 EPD 를 쉽게 찾을수 없다. 메인페이지에 보니, Canopy로 EPD가 reloaded 되었다고 하고 , Canopy Doc 에는 Canopy is the next generation of the Enthought Python Distribution (EPD) 이라고… 2013년에 1.0을 출시하였다 링크 

여차 저차 구글링을 해서 https://www.enthought.com/repo/free/ 에서 EPD free license를 찾아서 진행하였다. (뭔가 나쁜짓을 한거 같은 느낌이 ... )


ps2. pandas의 친절한 yahoo API
5장에서는 설명되지 않지만, 11장. 금융 관련 내용을 진행하다보면 pandas.io.data 패키지의 명령어 단 한줄로 yahoo에서 애플의 금융 정보를 불러온다. 해당 내용은 https://github.com/pydata/pandas/blob/master/pandas/io/data.py 에 있으며... 정말 친절한 라이브러리같다 -_-;  (이걸 스칼라나 그루비로 짜면 그나마 나은데, 자바로 짜면 이미 클래스가 몇개여... )


신고


티스토리 툴바