[책 리뷰] 클라우드 시스템을 관리하는 기술

해당 리뷰는 “한빛미디어”에서 제공하는 도서를 이용하여 리뷰를 진행하였습니다.

딱 책을 받았을 때의 첫 느낌은… “어렵겠다” 였습니다. 일단 목차만 봐도 실제로 굉장히 많은 내용을 담고 있는 것으로 보이고, 저자가 구글에서 “Site resilience Engineer” 로 일했기 때문에, 구글 내부의 특별한 기술들을 가지고 있지 않을까 생각했습니다.(외국은 업무에 따라서 부르는 명칭이 많이 다른데, 위의 직종은 시스템이 장애가 나더라도 잘 운영될 수 있도록 하거나, 서비스의 확장에 무리없도록 해주는 서버 엔지니어를 말합니다. – DevOps 쪽 역할이라고 할수 있습니다.)

일단 내용 자체는 첫 느낌 그대로 방대하고 어렵습니다입니다. 저 역시 서버 엔지니어로 경력이 조금 있긴 하지만, 한번에 제대로 이해하기는 어려운 내용들이었습니다.(실제 내용이 Software Engineer 보다는 System Engineer 쪽에 좀 더 취중해 있는 내용이라, 어떻게 보면 모르는게 당연합니다.)

Global DNS 시스템을 구성하는 방법이라든지…(Kakao의 Anycast 와 유사합니다. http://tech.kakao.com/2014/05/29/anycast/) 또는 소프트웨어 로드 밸런서가 좋을지 하드웨어 로드 밸런서가 좋을지 등등 굉장히 여러부분을 다루고 있습니다.

이쪽 계통에서 일을 하고 있는 사람이나, 관심이 있는 사람이나 충분히 읽어보면 꽤 도움이 될만한 서적입니다.(초급자보다는 어느정도 지식이 있는 사람들에게 좀 더 좋을듯 합니다.) 다만, 워낙 많은 내용을 다룰려고 하다보니, 아주 상세한 내용보다는, 이런것들을 이런데 쓴다 정도의 개념만 설명하고 넘어가는 경우가 많습니다.

읽다보면 “사례 연구” 라고 해서 회색으로 표시된 부분들이 있는데, 자세히 읽어보고 넘어가시는게 좋습니다. 실제로 대규모 서비스를 운영하는 곳에서, 어떤 문제들이 있는지에 대해서 아주 가볍게 말하고 넘어가는데… 꼭 알아두어야 하는 부분들이지만, 반대로… 왜 그런가에 대한… 이유가 충분히 나오지는 않는… 경우도, 또한 구글의 엔지니어였기 때문에, 구글 수준에서는 쉽게 해결할 수 있겠지만, 일반적인 경우에는 해결하기 어려운 문제들도 꽤 있습니다.

결론적으로 내용이 방대하고 어려운부분(기반지식이 없다면…) 이 이 책의 장점이자, 단점이지 않을까 싶습니다. 그러나, 실제로 이정도 규모의 서비스를 경험해보기가 쉽지 않기 때문에, 그리고 이정도로 방대하게 풀어낸 책은 아직 없는듯 합니다. 꼭 이해하지 못하더라도 한번 읽어보고, 이해할려고 노력해보는 것이 필요한 책입니다.

[책 리뷰] 초보자를 위한 안드로이드 스튜디오

[해당 리뷰는 한빛미디어에서 진행하는 한빛리더스모임에 의해서 제공받은 책으로 진행했습니다.]

 

먼저 이 책은, “따라하기” 식으로 구성되어 있습니다. 처음부터, 끝까지 따라가면 안드로이드 스튜디오에 대한 기본적인 지식을 익히면서, 간단한(정말 간단하지는 T.T) 앱들을 구현하고, 실제 구글스토어에 올려볼 수 있습니다.

따라하기 식이다 보니, 안드로이드 프로그래밍 자체에 대해서 깊은 지식을 알려주지는 않지만 반대로,  쉽게 간단한 프로그램을 만들 수 있습니다.(좀 더 깊은 지식이 필요하다면 안드로이드 프로그래밍 전문서를 읽는 것을 추천합니다.)

그런데 뭔가 이상한걸 느끼지 않으셨나요? 이 책의 제목은 “초보자를 위한 안드로이드 스튜디오” 입니다. 제목만 보면 안드로이드 스튜디오만 설명할 것 같지만… 실제로 책의 앞부분에는 안드로이드 스튜디오를 이용한 방법이 많이 설명되고 있고, 책 전체적으로 따라하기가 안드로이드 스튜디오를 통해서 이루어지고 있습니다. 그렇지만, 안드로이드 개발에 대해서도 다루고 있는 책입니다.

책의 원서를 찾아보면, 실제로 제목이 안드로이드 스튜디오를 이용한 안드로이드 개발의 교과서 라는 이름입니다.(읽다보니, 웬지 개발서적인데… 이름이 이상해서 결국 인터넷 검색을 통해서 원서를 찾아봤습니다. 역시… 원서이름은… 둘다 포함하는)

원서는 여기서(http://www.amazon.co.jp/Android-Studio%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BAndroid%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%EF%BD%9EAndroid-Studio-%E6%95%99%E7%A7%91%E6%9B%B8%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/483995643X/ref=sr_1_7?ie=UTF8&qid=1456153918&sr=8-7&keywords=Android+Studio)

그렇다고, 완전 초보자용 도서도 아닙니다. 내용을 제대로 이해하기 위해서는
안드로이드에 대한 기본적인 지식이 필요합니다. 실제 예제도 채팅 클라이언트와 간단한 벽돌깨기 같은 게임을 만드는 예제가 있습니다.

실제로 예제를 설명하면서 필요한 지식도 어느정도 잘 설명하고 있습니다.(일본 서적들이 대부분 이런 부분에서 강점을 보여주더군요.) 채팅앱의 경우에, 사실 네트웍 동작이나, 실제 내부 저장같은 부분은 다 빠져있고, 실제 화면에 보이는 부분들만 있는게 좀 아쉽긴 합니다. 반대로 음성인식 API 사용이 있으니 이건 좋네요.

마지막으로 해당 앱을 구글스토어에 어떻게 올리는지에 대해서도 설명하고 있습니다. 코드 사이닝을 하고, 각 해상도에 맞는 아이콘을 등록하고, 이미지를 올리는… 이런게 귀찮지만, 꼭 알아둬야만 하는 내용들인데… 그런 것도 꼼꼼히 알려주고 있습니다.

 

[책 리뷰] 글로벌 소프트웨어를 말하다.

김익환님의 새 책인 “글로벌 소프트웨어를 말하다.”가 나왔다. 이전 작품인 “글로벌 소프트웨어를 꿈꾸다.” 라는 책을 꽤나 재미있게 읽은 편이라, 이번 책도 나름 집중해서 읽어 보게 되었다.

먼저 제목부터 생각해보면, “글로벌 소프트웨어” 라 멋지지 않은가? 제목에서 부터, 두 가지를 의미한다고 본다. 정말 글로벌한 소프트웨어를 만드는 것과 아직 우리나라에서는 “글로벌 소프트웨어”를 만들기 어렵다라는 부분…

실제로 전작인 “글로벌 소프트웨어를 꿈꾸다” 부터 신작인 “글로벌 소프트웨어를 말하다” 역시, 강하게 동의하는 부분도 있지만, 또한 역시 강하게 동의하기 어려운 부분도 많은 책이다. 그러나, 내가 동의하지 않는다고 해서, 틀렸다고 말하기는 어렵고, 다른다고 말해야 하지 않을까?

이전 책에서 가장 맘에 들던 내용은 실리콘 밸리쪽에서는 70점 부터 시작하지만, 우리나라는 2~30점 부터 시작하기 때문에, 거기에 대한 격차가 벌어진다는 것… 내가 여러 회사를 다닌 것은 아니지만, 그래도 소스 관리 툴등은 기본적으로 사용하는 회사에서 다녔고, 회사의 정책에 따라서, QP활동(정적분석툴, 소스 리뷰) 등도 해봤지만, 이게 문화로 자리잡는게 정말 어렵다는 걸 알고 있기 때문에, 정말 공감이 가는 얘기였다. 또한 내가 경험해보지 못한 영역인 SRS에 대한 강조는 나로서는 또한 이해하기 어려운… 그 취지에는 공감이 가지만, 그게 전부라고 말하는 것은 아직 내 경험상 이해하기 어려운 일이었다.

이번 신작에서는 “손자 병법”이 손무가 오자서에 의해 등용되기 전에 쓰여졌다는 부분… 즉, 알고 있는 것과, 이를 제대로 이해해서 실천하는 것의 큰 차이가 있다는 부분에 다시 한번 크게 동의했다. 사실 대규모 서비스에 들어가는 기술들도 대부분은 우리가 이미 알고 있는 것들이다. 정말 특별하다고 할 것은 없지만… 이를 제대로 구현하고 디테일하게 챙기는 것이 쉽지가 않다는 것… 개발자가 이에 대해 알아야 하는 것도 많고… 개인적으로 클라우드나 로컬 서버에 따라서 설계가 바뀌는 것은, 그 환경이 다름을 이해하면, 당연히 고려해야할 문제들일 수 있다. 전통적인 환경보다 더 장애가 많을 수 있고, 반대로 디플로이가 빠르고 환경에 따라서 쉽게 확장이 가능한 장점도 있다.

반대로, 약간 인터넷 포털의 입장보다는 솔루션 소프트웨어 개발쪽의 의견이 더 강하다는 느낌이 들었다. 페북/구글, 라인/카카오/네이버는 소프트웨어 업체라기 보다는 인터넷 포털이나 서비스 업체라고 보는게 더 강한데, 이런 곳에서의 릴리즈는 하루에도 열두번씩도 발생할 수 있고, 요구 상황도 상황에 맞춰서 자주 바뀌게 되는데, “일년에 릴리즈를 세번 이상 하는게 나쁜 회사라고 하기는 어렵다.”(물론 릴리즈가 조금 다른 의미이겠지만…)

외국 회사의 면접 이야기…(하루에 6번 정도 면접을 보면… 정말 피가 마르고, 머리는 멍해진다. 그것도 영어로 보니 한국인의 입장에서는 더더욱 힘든…)

전체적으로 앞부분은, 전작에서 하지못한 다른 이야기, 뒷부분은, 약간 다른 이야기들을 하고 있다. 약간, 국내보다 실리콘 밸리는 무조건 잘하고 있다라는 느낌도 적지 않지만… 그래도 “많은 개발자들의 꿈인 해외 취업” 을 하고 오신 선배님의 재미난 이야기로 생각하면, 꽤 도움이 될 내용들이 많다는 것… 그리고 자신의 경험에 비추어 본다면, 꽤 도움이 될것 같다.

내식대로 내용을 살짝 재해석 한다면…
1. 소스 관리 툴은 뭐든지 일단 도입하자(VSS, CVS, SVN, GIT)
2. Jenkins 등의 CI로 빌드는 항상 확인하자(github이라면 travis CI 같은…)
3. Jira형태의 이슈 관리 툴을 사용하자. 꼭 Jira가 아니더라도, 기록이 잘 남고, 검색이 되면 좋다.
4. 소스 코드 리뷰는, 자신의 실력향상을 위해서 필요하다. 남을 지적질 할 생각이 아니라, 어떻게 짰는지 보고 배우는 형태로…
5. test가 품질을 올려주지는 못하지만, 리그레이션 테스트는 꼭 도입하자.
6. 자신이 알게된 새로운 내용은 팀원들하고 항상 공유하자.

개인적으로 좋은 소프트웨어를 만들어낸다는 가정하에, “개발이 재미있어야 한다.”에 한마디를 더 하고 싶다. “스칼라는 모르지만…” 트위터가 자바로 가지않고 스칼라를 선택한 이유가 개발자의 재미를 위해서였다는 것은… 참 멋진 일이라고 생각한다.

[책 리뷰] 실전 클라우드 인프라 구축 기술 – 도움이 안되겠지만, 큰 도움이 되는 책…

사실, 클라우드니, 빅데이터라는 타이틀을 드는 책들을 보면, 공통적으로 드는 생각이 있다. “별로 도움이 안된다.” 라는 것이다. 왜냐하면, 이런 것들은, 책만 보고 겨우 장비 1~2대에서 실습을 해봤자, 아무런 도움이 되지 못하기 때문이다. 그럼에도 불구하고, 이 책을 봐야하는 이유는 말 그대로 “시행착오”를 줄이기 위해서라고 할 수 있다. 사실, 이런 분야는 규모가 있어야만 발생하는 문제들이 많기 때문에, 규모가 적을 때는 아무런, 문제가 안보이는 경우가 “대부분”이기 때문이다.

결국 위의 이유로, 내부의 소스를 본다든지, 기반 지식들을 제대로 쌓아야만, 제대로 구축이 가능하거나, 트러블 슈팅을 하거나, 서비스를 할 수가 있는데, 밑바닥부터 이런것들을 전부 시작할려고 하면 엄청난 시간이 걸리기 때문이다.

사실… 이 책에 있는 각각의 내용들이, 전부 책 한권으로도 부족할 수 밖에 없는 내용들이기도 하고, 책에서 설명하고 있는 OS 버전들과 ceph 라든지 glusterfs 역시 버전을 맞추지 않으면, 사실 실행도 못해보고 끝나버리게 되는 경우가 발생하게 된다.(사실 혼자서 glusterfs를 깔다가 버전이 서로 안맞아서 엄청나게 삽질한 적도 많은…)

물론, 장담을 하자면, 여기에 있는 내용들을 다 숙지한다고 해도, 실제 서비스를 한다면, 엄청나게 많은 삽질을 더 하게 될거라는 것을… 확언하지만… 잘 모른다면, 몇십배로 더 고생할 것이, 확실하다라고 말할 수 있다. 한가지 팁이라면… 중간 중간 나오는 팁들을 유심히 살펴보기를 원하는데, 예를 들어, 13장의 팁을 보면… VDI 서비스를 구축할 때, I/O(네트워크, 스토리지) 에 신경을 써야 한다라는 얘기가 나오는데, 이런 것들이 실제로 겪어야만 알 수 있는 문제를 미리 막아준다고 할 수 있다.(다만, 팁이, 1챕터당 하나가 안된다는 슬픈현실이…)

결국 이책은… “도움이 안되겠지만, 큰 도움이 되는 책이라고 할 수 있다.”(좋은 책이지만, 이 분야가 그런거라… 어찌 할 수가 없는…)

테스트를 못짜는 사람의 비겁한 변명 – Effective Unit Testing

이 책을 읽으면서 느낀 생각이지만, 내가 하고 있는 말이 “테스트를 못짜는 사람의 비겁한 변명”이 아닐까라는 생각이 들었다. 사실 안드로이드 개발을 하면서, “테스트를 만드는 것이 굉장히 힘든 일”이라고 생각하게 되었고(솔직하게는, 원래 테스트에 약한?) 거기에 대해서 계속 어려움을 격지만, 무시하고 넘어가고 있었다.

책을 보면서 내내 들었던 또 다른 생각중에 하나는 내가 하고 있는 실수들이 대부분 예시에 등장한다는 것이다. 중간에 나왔던, “주석으로 변한 테스트”의 경우, 구조의 변경이나, 해당 기능의 변경등으로, 필요없는 코드나, 테스트들을 단순히 주석처리만 해두는 경우가 많다. 그런데 사실 이런 경우는 큰 문제는 안되지만… 문제가 되는 케이스는, 그 테스트가 필요없어서가 아니라, 지금 구조에 맞게 테스트 하는 방법을 몰라서 그냥 “주석” 처리하는 것이 가장 나쁜 예가 아닐까 싶다.

또한 항상 어려움을 겪는, 테스트명을 제대로 작성하지 않는다라든지… 나의 가슴에 송곳처럼 찌르는 내용들이 꽤 많았다.(전부 나의 잘못!!!)

– 특정 조건일때만 검사가 되는 조건부 테스트라든지…
– 절대 실패하지 않는 테스트라든지…
– 아주 단순한 결과만 체크한다든지…
– 과잉 보호 테스트라든지…

그리고 테스트를 작성하면, 클래스의 인터페이스등이 그냥 생각하고 짤 때보다 훨씬 실용적이 된다고 할까?, 테스트를 잘 만들기 위해서는 인터페이스의 전달이라든지, 파라매터의 전달이 훨씬 깔끔해지는 것도 사실이다.

또한, 테스트는 좋은 샘플로의 가치도 있다. 함수의 사용법이나, 이런게 어려울 때, 테스트 코드가 많으면, 이를 어떻게 써야하는지 알 수 있는 경우가 많다.(나도 이렇게 만들어야 하는데…)

다만, 책을 읽는 분들이, “유닛 테스트”가 전부라는 생각은 안하는 것이 좋지 않을까 싶다. “유닛 테스트”를 만들면 모든 버그가 사라지는 것은 아니다. “테스트”라는 것의 개발자의 사고에 의해서 그 범위가 제한 당하기 때문에, 모든 케이스를 생각해서 테스트를 만드는 것은 어렵다. 다만, 어느 정도 제대로 된 테스트 셋이 있으면, “리그레이션 테스트”로써 상당히 많은 도움을 줄 수 있다라고 할 수 있다는…

전에서 팀에 한분이 거의 대부분에 대한 “외부 테스트”를 만들어 주셨고, 이를 통해서, 코드 전체가 바뀜에도 거의 큰 문제 없이(도리어 이걸 만들면서 이전의 케케묵은 버그들을 찾을 수 있었다는) 넘어갈 수도 있었다.

특히, 주변의 얘기를 들어보면, DBMS 같은 경우 그 테스트셋이 상당히 중요한 가치가 있다고 한다.

횡설 수설 했지만, 읽으면서, 새해에는 테스트를 이래이래해서 못짰습니다라는 비겁한 변명은 하지 않아야 겠다라는 생각이든다.(흑흑흑 안드로이드 테스트는 어떻게 헤야할까?)

[책 리뷰] Head First Data Analysis – 데이터 분석의 시계로 딥 다이빙

개인적으로 Head First 시리즈를 상당히 좋아하는데, 읽기 쉬워보이지만, 항상 이해하기는 어려운 책이라고 생각한다.(다만, Head First 가 가장 이해하기 쉬운 책들이라는 ㅎㅎㅎ)

개인적으로 데이터 분석이라는 것에 흥미는 가지고 있지만, 통계학 서적을 볼때마다 생기는 머리속의 인지부조화와 수식에 대한 근원적인 두려움 때문에 아직까지 시작만하고 거의 모른다고 볼 수 있다.

솔직하게 말해서 “Head First Data Analysis”를 단순히 읽었다고 해서는 데이터 분석의 세계로 발을 담을거라고 말할 수 도 없지만, 그래도 나름 가장 효과적으로 접근하는 길이 아닐까 싶기도 하다.

Head First Data Analysis를 보면서 가장 좋았던 부분은 5장을 보면서 “가설 검증을 어떻게 할것인가?” 였다.(나머지 부분들도 정말 좋지만!!!)
이런 책을 찾는 사람들의 대부분의 심리는, 사실 통계학적인 어떤 이론에 대한 이해를 원하기도 하겠지만, 이런 시작 부분에서, 자신의 생각이 논리적 타당성을 찾고 싶어하는게 아닐까 싶다.(그래서 6장의 베이지안 통계라는 이름을 가지고 있지만, 주 내용은 거짓 양성(음성) 이라는게 ㅎㅎㅎ)

여러가지 가설중에, 추가되는 증거들로, 가장 적합한 가설을 선택하는 것…(물론, 책에 있는 사건처럼 단순하게 결정되는 것들은 거의 없겠지만…) 을 어떤식으로 진행해야 할지에 대해서 알게되었다고 할까? 뒤로 가면, 실제로 만들어낸 모델의 오류 수정을 어떻게 할 것인가까지로 발전되는, Head First 시리즈의 가장 특징점이라고 할 수 있는, 그런 부분이, 데이터 분석 쪽에서 시작하려고 하는 사람에게는 큰 도움이 될것 같다.

다만… 데이터 분석이라는 분야 자체가 어려운것이라… 이 책을 읽어도 나처럼 고민하게 되는 분들이 꽤 많은 것 같지만…(그건 이 책의 단점은 아니라고 생각한다.) 그래도 데이터 분석이라는 분야에 대한 두려움을 아주 약간은 줄여주는 효과가 있다.

[책 리뷰] 전문가를 위한 C++

일단 C++  서적이라는게 굉장히 고무적이었다. 최근에 특히 고급 C++ 책이 안나오는 경향으로서는… 다만 먼저 “C++11, STL, 템플릿, 디자인 패턴, 객체지향의 원리를 만나는 유쾌한 방법” 이라는 부제는 음… 위의 내용을 모두 소개하기는 하지만, 유쾌하다고 하기는 애매했지만, 그러나 C++ 11 에 대한  여러가지 내용이 있다는 것만으로도 C++을 좋아하는 사람들에게는(또는 업으로 먹고사는 사람들에게는 유쾌한(?) 일이 아닐까 싶다.)

솔직하게 말하면, 최근에 C++ 책들이 많이 나와서 “전문가를 위한 C++(한빛미디어)”와 “C++ 표준 라이브러리(에이콘)” 을 하나라고 생각하는 큰 실수를 하고 있었는데, C++ 표준 라이브러리는 “The C++ Standard Library” 라는 까무잡잡한 책을 소개하는 STL 책이고,  “전문가를 위한 C++” 은, C++ 문법서라고 하기에는 애매하지만 C++ 11에 대해 소개하고, 또한 프로그래밍 전문서라고 하기는 애매하지만, 또한 여러가지 기법들이 나와있는 책이다.

예를 들어, 기존 C++ 에 있던 stl의 auto_ptr이 deprecated 되고 shared_ptr 을 사용하라는 내용이 나오는데, 이는 auto_ptr 자체는 container 계열에서는 사용할 수 가 없기 때문이라는 것을, “전문가”가 모를리는 없겠지만, 당연히 모르는 사람에게는 꼭 알아야 할 부분이기도 하다.  “전문가를 위한 C++”이 1,2권으로 나뉘어져 있는데, 1권은 좀 더 기본적인 부분의 내용이 많고 2권은 좀 더 심화적인 내용(?)들이 있는데, 이 사이 사이에 C++ 11의 변화를 같이 설명해준다. 아마 실제로 읽어보면, “전문가를 위한 C++”이라는 제목보다는, 초보에서 중급사이를 넘어갈려고 하는 사람들이 주 대상이지 않을까 싶다.(개인적으로 C++ 관련 전문서적이라 함음… Modern C++ Design 이런 책이라…)

다만, 나처럼 C++의 탈을 쓴 C로 주로 개발한 개발자나 C++ 11을 간단히 보고 싶은 사람들, 또는 초급 내용들은 모두 알지만, 실제 개발에서 어떤 것들을 봐야할지에 대해서 궁금한 사람들이 딱 읽기에 적당한 대상인것 같다라는 느낌을 받게 되었다.

사실, 본인으로서는 최근에는 거의 C++ 개발을 하지 않지만…( 거의가 아니라 아예인가? ) C++ 이라는 건 뭔가 아련한 향기를 품고 있다.(잘 하지는 못하지만…) 그래서 C++ 11의 변경 사항에 대해서 잘 설명하는 책도 필요하고, C++ 개발을 어떻게 할 것인가에 대한 책들도 필요하다. 전문가를 위한 C++은 이걸 적절히 잘 mix한 느낌인데, 반대로 어떻게 되면, 양쪽 모두를 만족시키기 살짝 애매한 위치에 있다고 해야할지도… 하지만, “전문가” 자체를 위한 서적은 아니라고 생각하지만, “초중급자”에게는 꽤나 유용한 책이라는 느낌이 드는 책이다.

리뷰를 위해서 좀 간략하게 읽었지만, 이제 다시 처음부터 정독을 해야겠다.