[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

레이블이 MapReduce인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MapReduce인 게시물을 표시합니다. 모든 게시물 표시

2016년 4월 25일 월요일

[Book] Hadoop 완벽 가이드..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Hadoop 완벽 가이드 - 6점
톰 화이트 지음,
심탁길.김우현 옮김
한빛미디어

요즘 같아서는 왠지 관심을 가지지 않될것 같은 빅데이터를 다루는 Hadoop에 대한 책입니다. 하둡에 관심을 가진 사람들은 알겠지만 하둡이라는 기술은 무척 방대합니다. 어느 기술이든지 처음 접할때는 대게 방대하다고 느껴지지만 하둡은 특히나 더 그런것 같습니다. 마치 JSP부터 서블릿, MVC등 차례차례 배워나가는 것이 아니라 자바도 잘 모르는데 스프링 + 하이버네이트 + 타일즈까지 묶인 풀스택을 접해서 어디서부터 공부해야 하는 건지 모르는 것과 비슷하게 느껴집니다. 이 책은 Hadoop Definitive Guide라는 이름답게 Hadoop의 기술군 대부분을 다루고 있습니다. 목차에 나오다 시피 하둡의 핵심인 맥리듀스부터, Hive, Pig, Hbase, HDFS, ZooKeeper, Sqoop 등입니다.(물론 하둡에는 이 외에도 많은 것들이 있습니다.) 그리고 당연하게도 맵리듀스에 가장 많은 지면을 할애하고 있습니다.

이 책은 하둡 0.20.0을 기준으로 작성되었습니다.(참고로 2011년 다시 나온 개정판입니다.) 하둡의 공식사이트의 릴리즈정보를 참고하면 다음과 같이 나와있습니다.

  • 1.0.X - 현재 안정버전, 1.0 릴리즈
  • 1.1.X - 현재 베타버전 1.1 릴리즈
  • 2.X.X - 현재 알파버전
  • 0.22.X - 보안이 포함되어 있지 않음
  • 0.20.203.X - 레거시 안정버전
  • 0.20.X - 레거시 안정버전
처음 이 버전정보를 보았을 때 기존에 웹쪽에서 주로 사용하던 프로젝트들의 버전릴리즈와는 다른 방식이라 무척이나 헷갈렸습니다. 이 내용대로라면 0.20.0은 레가시 버전이고 1.0.X가 안정버전이구나 싶었는데 트위터를 통해서 물어보니 아직 0.20 대를 많이 쓰기 때문에 0.20.X 버전으로 공부해도 무리가 없을 듯 합니다. 실제로 클라우데라의 CDH3도 하둡 0.20.2 버전을 사용하고 있습니다. 하둡의 버전 관계를 이해하는데는 다음 그림이 좀 도움이 됩니다.

하둡의 버전
출처 : Konstantin I. Boudnik & Cos가 만든 다이어그램을 Alex Popescu가 올린 글

얘기가 좀 샜는데 다시 책 얘기를 좀 하자면 책의 번역이 형편없습니다. 좀 심하게 말하기는 했지만 번역기를 돌린 것마냥 아주 못 읽을 수준까지는 아니지만 문장을 아주 난해하고 번역이 되다만 것처럼 되어서 이해하기가 어렵습니다. 책을 읽기는 있는데 무슨 말을 하는 건지 쉽사리 이해가 가지 않아서 한문장을 2-3번은 읽어야 그럭저럭 의미가 와닿습니다. 문장이 완전히 틀린건 아니지만 난해하다는 얘깁니다. 워낙 다양하고 방대한 기술을 설명하기 때문에 안그래도 내용이 어려운데 문장까지 난해하다 보니 기술이 어려운건지 제가 이해력이 딸리는 건지 판단하기가 어렵고 하둡은 더 먼 기술로 느껴져버립니다. ㅠㅠ (현재는 하둡에 관련된 책이 하나 더 나왔는데 그 책도 평이 그렇게 좋은 것 같지는 않습니다.)

하둡의 근간인 맵리듀스부터 설명해서 HDFS와 함께 맵 리듀스가 어떻게 구성되고 어떻게 사용되는지를 설명해 주고 있고 그 뒤에는 맵리듀스위에 올라간다고 할 수 있는 피그, 하이브 등을 설명하고 있습니다. 개인적으론 부록부터 읽고 시작하는게 그나마 좋을 듯 합니다. 일단 하둡을 제대로 배우려면(저는 그렇게 못했지만) 전부는 아니더라도 책의 예제를 따라하면서 공부하는 것이 제일 좋을 듯 한데 그럴려면 부록에 있는 설치가이드와 예제에서 사용할 기상데이터에 대한 내용을 먼저 숙지하는게 좋아보입니다.(딱히 책의 흐름과는 연관이 없기 때문에 먼저 보는 것이 나을 것입니다.) 하둡같은 빅데이터기술을 처음해봐서 그런지는 모르겠지만 설치하는 광정에서 많이 해맸고 설치한 후 실제로 예제를 사용해 보는데서 더 많이 해맸습니다. 같이 공부하신 분들도 비슷하게 말씀하시는 걸로 봐서는 설치가이드는 약간 부족하다고 생각합니다. 설치에 관련헤서는 좀 삽질하면서 해볼 생각을 해봐야 할 것 같습니다.

책의 만족도가 아주 높은 정도까지는 아니지만 하둡같은 방대한 기술을 책 한번읽고 이해한다는 것은 무리이기 때문에 어느정도 수긍은 하고 있습니다. 스터디를 통해서 책을 읽었는데 진행속도가 무척 빨랐기 때문에 예제를 따라하기는 커녕 책읽기도 급급하면서 읽었습니다. 약간의 부실한 부분은 예제를 실험해 보면서 하면 꽤 많은 부분에서 도움이 되리라고 생각합니다.(최소한 구성은 괜찮아 보입니다.) 어쨌든 저로써는 각 기술이 뭘하는 건지 정도는 파악했습니다. 실제 공부는 사용해 보면서 할 때가 진짜가 될 것이긴 한데 하둡에 대해서 전혀 감을 갖고 있지 않다면 이 책이 나쁜 선택까진 아니라고 생각합니다.(선택권이 거의 없다시피하긴 하지만 영어가 된다면 원서가 더 나을수도 있겠습니다.)



2016년 4월 6일 수요일

[EP]H3 Developers Conference 2011 후기 #2..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

개발자를 위한 고급 Git 활용전략 - 김상영
Git명령의 대부분은 File보다는 Commit 객체를 다룬다는 점을 알아야 하고 Git의 명령어를 이해하기 위해서는 HEAD와 브랜치가 단순한 포인터라는 것을 기억해야 합니다.

이 발표는 말로 정리하기는 어려운 부분이 있어서 Aj가 올려주신 발표자료를 첨부했으니 이 내용을 보시는게 이해하기가 훨씬 쉬울 것입니다. 처음 설명은 HEAD와 브랜치에 대한 설명이었습니다. Git의 커밋객체들이 자신의 부모 커밋들을 참고해서 링크드리스트처럼 연결되고 HEAD는 이에 대한 포인터로의 역할만 합니다. Branch도 마찬가지로 다른 커밋객체를 가리키는 새로운 포인터일 뿐입니다. 이를 자바스크립트의 객체에 비유해서 설명했는데 명확하게 이해하기가 쉬운 비교였습니다. 다만 자바스크립트로 비유할 때 커밋객체의 parent대신에 prev로 설명했는데 혹 git을 잘 모르는 사람은 prev라는 속성이 있는 것으로 오해할까 싶기도 했습니다.(머 그걸 오해한다고 큰 문제가 생기는 것은 아닙니다. ㅎ)

뒷부분은 Git저장소의 해부에 대한 내용입니다. git저장소를 만들면 .git폴더안에 많은 파일들이 생기고 git로 작업할 때마다 이 폴더안에 새로운 파일들이 생기게 되는데 이 구조에 대한 설명이었습니다. 커밋객체는 커밋할 때 생기지 않고 git add할 때 생기는데(git add할때 생기는건 블랍객체이고 커밋객체는 커밋할때 생깁니다.)  .git/objects안에 생기고 블랍파일입니다. git blob format는 헤더를 포함해서 zlib으로 압축을 합니다. git hash-object 명령어를 사용하면 파일에 대한 해쉬명을 알아낼 수 있고 해시화된 파일은 git cat-file로 그 내용을 알 수 있습니다.

왜 해쉬를 사용했는가 하면 중복이 나올 확률이 무척 적으며 육안으로 구별하기 어려운 간단한 차이도 해시에서는 쉽게 구별할 수 있습니다. 그래서 Git에는 4개의 객체가 있는데 모두 파일로 존재합니다.

  • Blob : .git/objects안에 존재합니다.
  • Tree : 폴더처럼 트리안에 트리가 존재하고 그안에 Blob가 존재할 수 있고 .git/objects안에 있습니다.
  • Commit : 리스트입니다. 이전 커밋을 참조하는 Parent, tree, author, date등의 속성을 가지고 있고 .git/objects안에 있습니다.
  • Tag : 커밋객체에 대한 포인터로 .git/refs/tags아래 있습니다.

Git에는 Working Area, Staging, Repo 3가지 스페이스가 있습니다. 각 명령어를 실행할 때마다 이 스페이스 사이에 리스트가 만들어지는 것이고 이 리스트를 통해서 비교가 됩니다. 그리고 리셋옵션은 리셋할 스페이스를 지정하는 것입니다. --soft는 Repo까지 --mixed는 Staging까지 --hard는 Working까지 리셋한다는 의미입니다.

Aj와 개인적인 친분도 있었기 때문에 초기에 이 발표에 대한 설명을 들은적이 있었는데 그때는 사실 잘 이해가 되지 않고 너무 어려운 얘기를 하시려는게 아닐까 생각했었습니다. 그뒤에 여러번의 과정을 거쳐서 발전되어 실제 발표할 때는 너무나 깔끔한 설명이 되었습니다. Git에 대해 궁금하신 분은 이 발표자료를 꼭 참고하라고 하고 싶습니다. 개인적으로는 이날 제일 유익한 세션이었네요.

많은 Git에 대한 발표들이 GIt의 명령어에 대한 것이었다면 이번 발표는 Git의 내부구조에 대한 설명이었는데 이해를 돕기 위해서 자바스크립트의 변수에 비유해서 설명하였는데 아주 이해하기 쉽고 최근에 제가 궁금해 하던 부분이기 때문에 무척 유익했습니다. Git을 시작할 때 이런 부분을 이해하고 사용해야 한다는 것은 아니지만 단순히 clone - commit - push만 하는 것 이상의 작업을 하려면 반드시 내부구조에 대한 이해가 반드시 필요합니다.

UX에 대한 7가지 오해와 진실 - 김수영
이 세션을 저로써는 잘못 선택한 세션이었습니다. 저는 사실 UX자체에 대한 내용으로 생각하고 들어갔지만 실제로는 UX에 대한 얘기가 아니라 UX팀과 UX팀의 업무에 대한 얘기였습니다. 그래서인지 오후가 되어서인지 좀 집중하지 못하고 들었습니다.


많은 얘기가 있었지만 간단히 요약하면 위 사지의 7가지가 오해이고 아래 사진의 7가지가 그 진실입니다. 내용이 요약으로 하기는 좀 어려워서 사진으로 대체합니다. ㅡㅡ;;


이런 부분은 UX만 아니라 상당부분은 QA팀이나 기획팀에 적용해도 크게 이상하지 않았을꺼라고 생각하고 있습니다. 저도 UX에 어느정도 관심이 있는데 사실 많이 알지 못합니다. 저는 사실 국내에 UX에 대해서 제대로 아는 사람이 얼마나 있는가에 대해서 좀 회의감을 가지고 있는 사람입니다. UX라는 단어가 인기를 끈 뒤에 많은 회사에 UX라는 조직이 생겼지만 제대로 UX를 하고 있는지는 잘 모르겠습니다. 발표내내 들은 느낌은 KTH의 UX조직은 개발과 프로젝트의 전반적으로 관여하고 품질향상을 위해서 상당히 노력하는 것으로 보였는데 아마 저는 이렇게 UX와 일을 못해봐서 그렇게 느끼고 있었는지도 모르겠습니다.

제가 느끼는 UX조직의 문제는 UX라는 단어의 모호함(어쩌면 모호하다기 보다는 대부분 쉽게 이해못하는...)때문도 있지만 UX라는 것이 그렇게 표가 나지 않는 작업입니다. UX라는 것은 아주 다양한 곳에 적용되지만 아주 간단한 예로는 주민등록번호를 입력하면 생년월일이 자동으로 입력된다는 등의 일이 있습니다. 당연히 이는 무척 중요하고 사용자의 편의성을 크게 높여주지만 사실 잘 표가 나지 않습니다. 조직내에서 우리 UX팀이 좋은 UX를 만들어냈다는 것을 윗분들에게 보여주기가 다른 쪽에 비해 쉽지 않다는 것입니다.(대부분 윗분들은 UX를 깊이 이해못하고 있으니까요.) 그래서인지 어느 조직이든 그렇듯이 UX팀의 존재성을 증명하려다 보니 좀 이상한 UX까지 억지로 들어가는 느낌이 없잖아 이다고 생각하고 있습니다.

암튼 이런건 개인적인 생각이고 다른 분들은 좋았다는 사람들도 많았던것 보니 아마 기대감의 차이였던 것 같습니다. 전 UX전문가한테 UX에 대해 자세한 얘기를 좀 듣고 싶었거든요. 발표를 들으면서 다른 UX조직도 KTH처럼 다방면으로 노력하면서 하는지 궁금하다군요.(그렇다면 제가 UX에 대한 오해를 가지고 있었던 것이겠지요. ^^;;)

파이썬으로 클라우드 하고 싶어요 - 하용호
이 세션의 주제는 파이썬으로 분산처리도 해보고 병렬처리도 해보고 클라우드도 써보자였습니다. 지금은 시대가 빅데이터와 분산처리를 필요로 하고 있습니다. 가장 간단한 것은 한 컴퓨터내의 멀티코어를 잘 사용하는 것이고 그 다음은 여러 머신을 사용하고 그 다음은 클라우드를 사용하는 것입니다. 하지만 분산프로그래밍은 어려운데 배우기도 어렵고 쓰기도 어렵고 실행하기도 어렵습니다. 이렇게 어려운 이유는 작성하는 것이 어렵고 라인수도 무척 길어집니다. 그리고 네트워크나 디스크가 병목점이 될 때가 많고 의외로 반복사용하기도 어렵습니다.

여기에 대한 해답이 파이썬이고 파이썬을 사용하면 생각의 속도로 코딩을 할 수 있습니다. 국내에서는 인기가 높지 않지만 파이썬도 쉽고 쉽게 쓸 수 있는 라이브러리도 많이 존재하고 파이썬이 느리기는 하지만 어차피 네트워크나 디스크로 인한 병목점이 많이 발생하기 때문에 파이썬의 속도는 크게 문제가 되지 않습니다.

멀티코어를 잘 사용하려면 쓰레드를 여러개 사용해야 합니다. 간단한 덧셈프로그램을 하나의 쓰래드로 했더니 3.5초가 걸렸는데 쓰레드를 2개로 늘렸더니 오히려 4.2초가 걸렸습니다. 파이썬도 파이썬 버츄얼머신상에서 동작하는데 이는 GIL(Global Interpreter Lock)때문에 발생하는 문제입니다. 보통 시스템이 락이 걸때 Coarse-grained락이라는 큰 락을 거는데 성능이 좋지 않고 작업당 락은 거는 Fine-Grained락은 작은 락이라 성능은 좋지만 만들기가 쉽지 않습니다. 파이썬은 전체를 락으로 거는 단 하나의 락을 사용합니다. 그래서 쓰레드를 여러개 사용하더라도 락이 하나이기 때문에 하나의 CPU가 일을 하면 다른 CPU는 놀고 있습니다.

GIL을 사용하면 인터프리터 구현이 쉽고 GC만들기도 좋습니다. 파이썬이 GIL을 도입했을 때는 1990년대였기 때문에 싱글CPU였지만 지금은 멀티코어가 일반화되었기 때문에 이부분이 오히려 장벽이 되었습니다. 그래서 쓰레드로 할 수 없으면 프로세스로 할 수 있습니다. GIL은 프로세스에서만 유효하기 때문에 CPU별로 프로세스를 구분해 주어 작성하면 앞의 덧셈프로그램을 프로세스 2개로 1.88초만에 계산할 수 있습니다. 사실 이건 꼼수가 아니라 분산프로그래밍에서는 오히려 정답입니다. 쓰레드라는 것은 하나의 PC내에 존재하는 것이지만 분산은 여러 머신에 걸처서 해야 하는 것입니다. 파이썬에는 Parallel Python이라는 라이브러가 존재하는데 여러 프로세스에 분산해 주는 역할을 합니다. 사용하기도 쉽고 잘 동작하는데 싱글머신의 멀티코어에도 사용할 수 있고 워커머신 자동찾기 기능도 있습니다.

이제 클라우드를 사용해 보겠습니다. 맵리듀스는 2004년 OSDI의 구글 발표에서 이야기 나온 것입니다. 맵리듀스는 사실 어려운게 아닌데 누구나 많은 양의 작업을 해야한다면 생각해 낼 만한 작업입니다. 예를 들어 책에 나오는 단어의 갯수를 세어보는 작업을 해야한다면 여러명에게 일을 나눠주고(map) 나눠준 결과를 다시 모으는 것도 힘들기 때문에 일정단위로 분단장을 뽑아서 종류별로 모으도록(reduce)하는 것입니다. 맵리듀스가 인기있는 이유는 하둡때문입니다.

하둡이 등장하기 이전의 분산처리는 어떻게 분배해야 하는지 프로그램을 어떻게 원격에 전송하고 나눈 작업을 어떻게 스케쥴링해야하는지에 대해서 고민해야 했지만 하둡의 등장으로 어떻게 Map을 작성하고 Reduce를 작성하는지만 고민하면 나머지는 하둡이 다 알아서 해줍니다. 그래서 슈퍼개발자가 아니러도 분산처리를 할 수 있게 되었고 분산이 유행하게 되었습니다. 하둡은 자바로 만들어졌지만 HadoopStreaming을 이요하면 어떤 언어에서도 사용할 수 있습니다. HadoopStreaming에 관심을 가진 업체는 Yelp인데 이 회사는 사장부터 파이썬 매니아라서 mrJob이라는 라이브러리를 만들었습니다. mrJob을 사용하면 하둡없이도 로컬에서 테스트할 수 있고 runner부분만 바꾸어 주면 하둡에서 동작하게 할 수 있습니다.

분산프로그래밍을 하려면 많은 머신이 필요한데 회사에 머싱이 많지 않다면 아마존의 ElasticMapReduce가 좋은 대안이 될 수 있습니다. 아마존이 OS와 하둡을 설치해 놓아서 비용만 지불하면 이용할 수 있습니다. 가격도 저렴해서 라지인스턴스 기준으로 7.5G 메모리에 4CPU 100대를 한시간 써도 6불만 지물하면 된다. ElasticMapReduce도 mrJob에서 지원하고 있어서 runner만 emr로 바꾸면 자동으로 ElasticMapReduce에서 실행한뒤에 결과를 S3로 전송해 줍니다.

원래는 이 시간대에 다른 세션을 들으려고 했습니다. 클라우드에는 관심이 있었지만 파이썬은 할 줄 몰랐기 때문에 제가 들을 만한 세션인지 잘 몰랐기 때문이지요. 하지만 컨퍼런스 몇일전부터 트위터에서 이 세션이 엄청 재밌다는 홍보가 많이 있었고 주위사람들도 들으러 간다기에 같이 들어갔습니다. 들어가고 보니 안들어왔으면 엄청나게 후회했을 좋은 세션이었습니다.

기본적으로 내용이 탄탄하고 좋았습니다. 설명을 너무 잘하셔서 내년에는 파이썬을 배워보고 싶은 마음이 들 정도였습니다. 파이썬과 분산프로그래밍의 연결에서 흐름과 예제까지 자연스럽게 잘 구성이 되어 있어서 몸이 지친 마지막 세션이었음에도 집중해서 들을 수 있었습니다. 더군다나 중간에 개그를 계속 하셨는데 개그가 완전히 제 코드라서 너무 재밌게 들었습니다. 좋은 내용에 적절한 개그까지 발표스타일이 너무 맘에 들더군요.

Epilogue
개인적으로 너무나 흡족한 컨퍼런스였습니다. 처음하는 세미나라고 믿기 어려울 만큼 컨퍼런스가 좋아서 상당한 기간동안 열심히 준비했다는 것을 느낄 수 있었습니다.


H3에서 가장 인상깊었던 것은 바로 이 책입니다. 이 책은 (모든 세션은 아니지만) 발표자들이 세션의 내용을 글로 적은 내용을 책으로 묶은 것입니다. 단순히 발표자료를 프린트해서 한 것이 아닌 글을 자세히 새로 적었습니다. 이는 제가 생각하는 발표라는 방향과도 부합하는데 사실 발표자료는 발표를 돕는 역할이기 때문에 발표없이 발표자료만 보면 이해하기가 어려운게 사실이고 그냥도 볼 수 있는 발표자료를 만들려면 원래 의도에 제대로 맞출수 없습니다. 발표는 발표로 하고 자세한 내용을 읽어볼 수 있도록 이렇게 제공했다는 점에서 이번 컨퍼런스를 얼마나 열심히 준비했는지 알수 있습니다.

저는 컨퍼런스나 세미나는 한두가지 인사이트나 괜찮은 세션정도면 만족하는 편인데 H3에서는 대부분의 세션에 만족감을 느낄정도로 퀄리티가 좋았습니다. 이는 대부분 보안이라고 감추는 사내에서 직접 업무를 하면서 고민했던 부분과 개발한 부분을 그대로 공개했기 때문에 세션들이 무척 실용적이면서도 내용이 탄탄했습니다.

그리고 많은 사람들이 트위터에 H3의 만족감에 대한 트윗을 올라서 30일 타임라인에서 최대의 이슈였던것 같습니다. 그런 글 중에 많은 글에서 xguru님으로 인해 달라진 KTH에 대한 얘기가 많이 있었는데 제 생각은 약간 다릅니다. xguru님이 KTH에 오신 이후로 대외적으로 많이 알려진 것은 사실이지만 이번 컨퍼런스를 통해서 KTH가 겉으로 드러나는 부분만이 아닌 다양한 부분에서 오랫동안 탄탄히 준비한 것이 느껴졌습니다. 그리고 이 뒤에는 KTH 부사장인 박태웅님이 있다고 생각하고 있습니다. 지금 이 수많은 개발자들을 끌어들이며 KTH가 순신간에 영향력을 가지게 된 것은 박태웅님이 그 주역이라고 생각하고 사실 xguru님을 끌어들인것도 부사장님인걸로 알고 있습니다.

꽤전에 KTH에서 전사원들에게 엄청나게 열심히 기술을 전파하는 부사장님 얘기를 들은적이 있었지만 사실 그다지 신경쓰진 않았습니다. 실제로 어떤지는 제가 알 수 없었고 대부분의 윗분들은 기술을 잘 모르는데다가 사실 이해하려는 마음도 그다지 없이 주변에서 주위들은 기술지식만으로 섣부르게 몰아쳐서 피곤해지는 경우가 훨씬 많았기 때문입니다. 그러면서 트위터를 통해서 많은 얘기나 요즘은 직원분들과 얘기하는 것을 많이 보았는데 제가 아는 범위에서는 거의 유일할 정도로 비기술자이면서 기술에 대한 제대로된 관점을 가진 임원입니다. 기술자가 아님에도 기술자와 비슷한 관점을 가지고 있고 이제는 그 기술에 대한 판단을 제대로 해줄 능력있는 개발자들까지 갖추어진 상태입니다.(나중에 혹시 이력서를 쓸지도 모를 상황을 위해서 아부하려는 것은 아닙니다. ㅡㅡ;;)

암튼 H3컨퍼런스내내 상당히 즐거웠습니다. 최근 KTH가 유명한 개발자들을 많이 데려가면서 저는 이러한 최근행보를 아주 좋게 보고 있고 꼭 성공(?)하길 바라고 있습니다. 그래야 그런 분위기가 다른 곳으로도 퍼질 수 있을테니까요. 사실 과거에는 KTH는 IT에서 그다지 안중에도 없는 회사였지만 최근에는 NHN, Daum과 어깨를 견줄 수준까지 올라온듯 합니다. 컨퍼런스 얘기는 안하고 회사얘기만 한참 했네요. ㅎㅎ 오랜만에 좋은 컨퍼런스를 갔다왔더니 기분이 좋군요.



2016년 3월 10일 목요일

[EP]자바 커뮤니티 공동 세미나 "자바 개발자를 위한 ‘共感(공감)’을 찾아서" #1..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Adobe에서 진행한 "자바 개발자를 위한 ‘共感(공감)’을 찾아서"세미나에 갔다가 왔습니다. 세미나 주제들이 괜찮아 보여서 바로 신청하기는 했었지만 약간은 의외의 컨셉의 세미나였습니다. 이번행사는 OKJSP, JBoss User Group, KSUG가 공동주최하고 Adobe에서 후원하였는데 처음 세미나 공지를 보았을때 "왜? 어도비가 자바세미나를?"이라는 생각이 들더군요. BlazeDS때문인가 싶기도 했는데 딱히 그런 언급은 없었습니다. 머 의도야 어쨌든 이렇게 좋은 세미나를 무료로 진행해 주니 감사한 마음에 갔다가 왔습니다.

공감을 찾아서 세미나 홍보페이지

자바 개발자를 위한 공감을 찾아서


자바와 Flex의 만남 - Adobe Community Champion 엄진영(블로그)
부재로는 "스프링과 연동한 BlazeDS 활용"이라는 이름이 붙어 있었습니다만 실제로는 Blaze에 대한 언급은 거의 없었습니다. 개발의 기술발전의 히스토리들(주로는 엄진영님이 접하게 된 시점위주로)을 설명하면서 RIA가 플래시가 왜 필요한가에 내용이었습니다.

Flex는 이제 Flash라는 이름으로 통일이 되고 있습니다. 그동안은 Flex라는 개념의 혼동때문에 Flash와 Flex의구분을 고객들에게 설명하기 위해서 어려움들이 있었지만 이젠 모두 Flash로 통일되고 있고 Flex builder도 Flash Builder 4로 변경이 되었습니다. 서버사이드는 보통 자바가 많이 쓰이고 기술과 트랜드는 계속 바뀌고 있습니다. 과거 프로그램을 자주 변경해야 되는 상황이 생기면서 그동안 사용하던 C언어보다는 스크립트 언어를 선호하게 되었지만 곧 만들어야 하는 프로그램의 크기가 커지면서 스크립트 언어로써의 한계에 부딪히게 됩니다. 스펙을 정해놓고 사용하게 되는 엔터프라이즈로 넘어가게 되었는데 실제 개발은 서버보다는 UI를 많드는데 훨씬 많은 시간이 소비되게 되었습니다.

자바와 플래시의 만남 세션발표하시는 엄진영님 기술 흐름도

그래서 프로세스의 혁신이 필요해지게 됩니다. 프로세스의 혁신이란 것은 야근등으로 개발자의 능력치를 최대한 끌어냈으나(엄진영님은 "이미 쪽쪽 빨아서"라고 표현을ㅎㅎ) 더이상 끌어낼수 없을때 필요해 지는 것입니다. 초보개발자도(싸니까) 만들수 없을까? 하는 고민을 하면서 프레임워크로 초점이 넘어가고 그후에는 퍼시스턴스에 관심을 가지게 됩니다. 2007년부터 UI에 대한 고민을 시작하게 되고 그전에는 브라우저전쟁에서 승리한 IE에 맞춰서 개발하다가 브라우져마다 약간씩 다르기 때문에 다른 브라우저에 맞추는 추가적인 작업을 하게 됩니다. 국내시장에서는 깔끔하게 IE외의 브라우져는 포기해버렸습니다.

이 상황에 Ajax도 등장하여 서버에 직접 접근하게 되고 엔터프라이즈급 UI를 Javascript만으로 하는 것이 개발자에게 너무 힘든 일이 되어버립니다. 그래서 Needs에 따라 쓰는 방식은 그대로 유지하면서 Flash를 위한 Flex가 등장하게 됩니다.

RIA의 장점은 플랫폼이 독립적이고(자바도 목적은 그랬지만 현실적으로 그러지 못했습니다.) 기존 기술과 유사하여 배우기가 용이하면서 대규모 시스템 개발이 가능하다는 것이었습니다. 그리고 가장 중요한 것은 UI부분이 서버와 투명하게 분리가 가능하게 된 것이었습니다. Ajax덕분에 클라이언트가 서버에 직접 접속하게 되면서 서버에 종속적으로 묶여버렸습니다. 플래시앱(.swf)는 서버와 HTTP 원격객체호출을 할수 있고 HTTP 서비스, 메시징 서비스, 웹서비스를 할수 있으며 Ajax에 비해 binary 데이터를 주고 받을 수 있다는 큰 장점도 있습니다.

히스토리야 어느정도 알고 있는 내용이니 공감은 하고 있었지만 Flash Platform에 대한 당위성에 대한 공감은 좀 약하지 않았나 싶습니다. 여러 연구들과 프레임워크들의 등장으로 인하여 UI가 서버에 종속된다는 것은 공감이 잘 안되기도 했고 (기술적이든 사용상의 문제이든 간에)실제 플래시를 사용하는데에 대한 trade off가 존재하는 것은 사실이라고 생각하고 있습니다. Flash가 등장한 이래 가장 큰 위기감을 최근 느끼고 있다고 생각하는데 Flash가 통짜로 올라가면 화려하긴 진짜 화려하긴 하지만 무겁기도 하고 그렇게 화려할 필요가 있는가에 대한 고민도 하게 되죠.

Apache Hadoop으로 구현하는 상품추천서비스 - JBoss User Group 김병곤
추천검색은 은근히 여기저기 많이 쓰이고 있습니다. 메론, Amazon, 네이버 인물 검색등 알게 모르게 추천검색이 다 적용되어 있습니다. 실제로 추천검색을 적용해 보면 30%정도가 구입을 하는데 이는 엄청난 적중률입니다. 추천시스템을 구현하는 방법에는 사용자로부터 얻은 기호정보를 토대로 예측하는 협업필터링(Collaborating Filtering), 상품간의 연관성을 분석하여 다른 사용자에게 구매하지 않은 상품을 추천하는 연관규칙(Association Rule), 비슷한 대상들끼리 묶은 군집을 이용하는 클러스터링(Clustering)등이 있습니다. 

웹2.0의 많은 서비스들이 추천시스템을 사용하고 있고 우리가 하는 모든 행동은 로그가 남고 있고 우리는 엄청난 데이터 속에서 살고 있으며 이 엄청난 데이터는 Hadoop이 아니면 다룰 수가 없습니다. 데이터가 너무 엄청나기 때문에 데이터베이스로 다룰려면 데이터를 데이터베이스롤 올리는데 시간이 다 가버릴 정도입니다.

패러다임의 전환이 필요합니다.

로직이 데이터에 접근하지 말고 데이터가 있는 곳으로 로직을 옮겨라!
데이터가 쪼개지고 로직도 각 데이터로 분산된 다음에 합칩니다.

왜 데이터베이스가 적합하지 않은가 하면 대용량 파일은 Import하는 것도 어렵고 리소스소비가 심하여 온라인 작업과 배치작업을 분리해야 하는 문제가 있습니다. 그리고 비싼 장비와 SW비용이 필요합니다. 대신 대용량에 Apache Hadoop가 적합한 이유는 로그정보가 수십Tera에 이를 정도로 매우 크고 I/O집중적이면서 CPU도 많이 사용하는 작업입니다. 또한 장비를 증가시킬수록 성능은 향상되고 Intel Core머신은 가격이 아주 쌉니다. 인텔컴퓨터 하나 사서 추가하면 용량이 늘어나기 때문에 개발자는 관리가 힘들어지더라도 운영자입장에서는 당연히 하둡을 선택하게 됩니다. 이런 것을 보면서 이제 데이터베이스는 사라지는 것이 아니냐고도 하는데 Hadoop은 데이터베이스를 대체할 기술이 아니라 공존할 기술입니다.

Hadoop은 "파일을 올리는 것"과 "처리하는 것" 딱 이 2가지가 전부입니다. 즉 File System(HDFS:Hadoop Distributed File System)과 프로그래밍모델(MapReduce)입니다. HDFS는 파일을 64M단위로 나누어 장비에 저장하는 방식이고 사용자에게는 하나의 파일로 보이지만 실제로는 나누어져 있습니다. MapReduce는 HDFS의 파일을 이용하여 처리하는 방법을 제공합니다.

나누어서 처리할 때의 가장 큰 문제는 합치는 것이고 대표적인 것이 소팅입니다. 맵과 리듀스의 개념을 이해하는 것이 코딩보다도 더 중요합니다. Hadoop은 무조건 Key - Value의 데이터 구조 이 한가지 밖에 없습니다. 이 Key - Value로 된 데이터들이 합쳐지면서 같은 Key의 Value는 배열로 묶어줍니다.

연관 규칙(Association Rule)의 예로 간단한 마켓의 상품으로 추천시스템을 적용하는 예를 보여주셨습니다. 연관규칙에는 트랜잭션, 지지도, 신뢰도, 향상도가 있습니다.(이건 좀 통계적인 개념) 몇개의 상품별로 각 값들을 계산하고 이를 Hadoop으로 어떻게 Map과 Reduce가 진행되는 지에 대한 보여주었습니다. 추천시스템의 상품조합은 많으질수록 성능이 급격히 저하되므로 보통 2개의 조합만 사용하며 이 예에서는 맵과 리듀스를 단 2번만 실행하였는데 Hadoop에 대한 개념은 다 들어가 있으면서 한눈에 이해될 정도의 간단한 예제였습니다.

그럼 Hadoop는 언제 써야 하는가 하면 통계에 아주 좋습니다. 또한 데이터에서 필요없는 부분을 제거하는 ETL(Extract, Transform, Load)이나 데이터 마이닝, 로그파일분석, 인공지능에 적용하기가 좋습니다. 하지만 Hadoop은 무식한 배치성 작업이 아주 강하고 인터렉티브하지 않기 때문에 최종적으로는 RDBMS가 필요합니다. Hadoop으로 추출된 최종데이터만 RDBMS로 올리면 됩니다. 이전에는 이것을 디비가 했지만 이제는 개발자가 해야하는 시대가 되었습니다.

처음에 시작할때 초등학생도 이해할 수 있는 수준이라고 말씀하셨는데 사실 Hadoop은 개념이 약간 어려워서 그닥 믿지 않았는데 진짜 여태들은 설명중 최고로 명쾌한 설명이었습니다. 어떻게 하둡을 이렇게 간결하게 설명할 수 있을까 하는 생각이 들 정도였습니다. Hadoop에 대해서 급 관심이 갔으며 막상하면 여러가지 어려움이 있겠지만 오히려 너무 쉽게 설명을 해주셔서 해보면 금방 하겠는데 하는 착각(?)이 들 정도였습니다. ㅎㅎㅎ Hadoop을 어느정도 이해한 것만으로도 아주 큰 수확중의 하나라고 할 수 있겠네요.

2016년 3월 4일 금요일

[Book] 구글을 지탱하는 기술..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

구글을 지탱하는 기술 - 8점
니시다 케이스케 지음, 김성훈 옮김, 전병국 감수/멘토르

어쨌든 현재 최고의 IT기업이라고 할 수 있는 구글이 사용하는 기술에 대해서 설명된 책입니다. 웹에 몸담고 있는 사람이라면 웹개발자라면 한 번쯤은 생각해 보았을 만한 구글은 어떻게 이 많은 데이터를 이럴게 빨리 검색해 줄까, 어떻게 크롤링하는 걸까? 이 많은 데이터를 어떻게 유지할까? 하는데에 대한 궁금증을 풀어줄 만한 책입니다.

책의 초기에는 IT지식이 없는 사람도 읽을 수 있게 쉽게 쓰여져 있다고 하지만 상당히 쉽게 작성된 것은 사실이지만 사실 개발의 기반 지식이 없다면 많은 부분은 이해하기 어려울 것 같습니다. 아무래도 데이터베이스, 분산시스템등의 대한 얘기이므로 전문적인 얘기등은 상당히 들어가 있지만 깊은 지식이 없어서 "아~ 이렇구나"하는 정도로는 이해할 정도로 쉽게 쓰여져 있기는 합니다. 물론 기술을 파헤쳐서 지식을 얻는 책은 아니기 때문에 소설책 읽는 기분으로 간단히 읽는 정도로는 괜찮다고 생각합니다.

구글의 기술에 대해서 많은 부분이 공개되지는 않았지만 그동안 내놓은 많은 논문을 토대로 저자가 여러가지 연구를 통해서 구글의 기술에 대해서 정리해 놓았습니다.

구글의 대표적인 것은 아무래도 검색이기 때문에 검색에 대해서 간단히 설명한 뒤에 구글이 가진 분산기술들인 분산파일시스템 GFS, 분산스토리지 시스템 Bigtable, 분산잠금시스템 Chubby에 대해서 설명하고 이름도 유명한 MapReduce와 분산처리용 프로그래밍 언어 Sawzall에 대해서 설명하고 있습니다.

책의 마지막에서는 구글의 운용비용에 대해서 설명해주고 있습니다. 대충 구글만 보아도 이거 운영하는데 장난아니겠다는 생각이 들기는 하지만 구체적으로 구글이 짓고 있는 데이터센터를 중심으로 하드웨어는 어떻게 구성하고 얼마나 드는지 진기료는 얼마나드는지 데이터센터를 유지하기 위해서 어떤 노력을 하고 있고 비용은 얼마나 드는지에 대해서 설명하고 있습니다.

평소 구글에 대해서 궁금증을 가지고 있었다면 한번 읽어볼 만한 책인듯 합니다. 특히 Hadoop도 보면서 내용파악하기가 쉽지 않았었는데 구글의 분산기술을 오픈소스로 구현하는 프로젝트가 Hadoop이기 때문에 Hadoop에 관심이 있다면 참고용으로 읽어볼만한 책입니다.