이 책을 추천하고 싶은 사람
● 시스템 아키텍터
● 체계적인 서비스를 개발하고자 하며 이를 위한 환경 구축에 관한 정보를 얻고 싶은 사람
● 마이크로서비스 경험이 있으며 마이크로서비스 전반에 관하여 더 명확한 정보와 인사이트를 원하는 사람
● IT 서비스 기획자 (1~3챕터의 입문 파트 한정)
이 책을 추천하고 싶지 않은 사람
● 주니어 개발자 (나)
Summary
'마이크로서비스 입문, 구축, 활용까지 한 권에'라는 표현으로 소개된 이 책은 말 그대로 마이크로서비스 아키텍처에 관한 개론서라 할 수 있습니다.
마이크로서비스 그리고 아키텍트에 관한 기본적인 이론부터 (1~3 챕터)
통합, 기존의 모놀리스식 단일 덩어리 서비스 분해를 통한 구축(4~5 챕터)
배포(CI), 테스팅(유닛 테스트, end to end), 모니터링, 보안 (6~9 챕터)
심화 (10~12 챕터)
4 파트로 구분할 수 있는 이 책은 IT 전문서로서 상당히 얇아 보이는 외관에도 불구하고 정말 많은 내용을 담고 있습니다. 많은 오렐리 책들이 그러하지만, 선택적 독서에 매우 유리한 구성을 하고 있으며 내용적으로도 충분한 사전 지식만 있다면 굳이 순차적으로 읽을 필요 없이 자신의 필요에 따라 읽기 좋은 책입니다. 읽고자 하는 챕터가 무슨 내용인지 빠르며 요약적으로 보고 싶다면 모든 챕터 마지막에 있는 '마치며'부분을 살펴보시길 바랍니다. 모든 챕터에 있는 '마치며'부분은 해당 챕터의 내용을 쉽고 요약적으로 정리해 제시해주기에 각각의 챕터를 읽기 전에 이 '마치며'를 먼저 읽고 챕터를 읽는 것도 좋은 독서 방법이 될 것 같습니다. 그리고 각 챕터의 '마무리'에 이어 12챕터의 종합 정리에 이르기까지 정리와 마무리가 매우 좋은 책이라 할 수 있습니다.
광범위한 내용을 담고 있으며, 정말 많은 주석을 가지고 있지만, 설계라는 수준 높은 개발 분야를 담고 있다는 점에서 상당한 경험과 충분한 사전 지식이 필요로 하는 책입니다. 저의 경우에 입문, 구축의 내용까지는 충분히 이해하며 읽어나갈 수 있었으나 배포, 테스팅에 들어가면서부터는 이해에 정말 많은 노력이 필요했었습니다.
한빛 미디어의 소개 페이지를 보면 상당히 아기자기하며 귀여운 이미지가 연상되지만, 저는 뭐랄까 되게 뛰어난 교수님을 만나 뵙고 온 느낌이었습니다.
위의 소개 사진은 매우 아기자기하지만, 실제 내용은 표지처럼 현실적이며, 잔혹합니다 ㅠ
Why
서적은 한빛 미디어 리더스 활동의 일환으로 한빛 미디어로부터 제공받게 되었습니다. 여러 서적 중 이 책을 고른 이유는 지난 개발자 커뮤니티 데이에서 '마이크로서비스로 구축하는 채팅서비스'라는 세션을 통해 처음 접했을 때 느꼈던 좌절감을 극복하기 위함이었습니다. (그리고 얻게 된 또 다른 좌절)
Content
저자인 샘 뉴먼은 경험 있는 아키텍트로서 마이크로서비스에 관하여 명확하며 확정적인 관점으로 자신의 지식을 풀어나갑니다. 명확하게 장단점을 분리해 제시하거나, 원리 원칙을 선행적으로 제시하며 이를 위한 지침을 제안하기도 합니다. 작가의 서술 방식에 있어서의 가장 큰 장점은 문제 제시를 명확하게 하며 그에 대한 자신의 답변 또한 매우 확정적이며 명확하다는 것입니다. 그리고 챕터마다 저자의 끝을 알 수 없는 지식과 경험의 깊이를 느낄 수 있기에 그의 답변에 대한 신뢰도 또한 매우 높습니다. 안타까운 점은 아무래도 압축적으로 제안하기 때문에 설명이 제한적이며, 여러 부분에서 상당한 지식과 경험이 가정되었다는 점입니다. 여기에 번역투 문장으로 인해서 이해를 위해 많은 노력과 집중이 필요했습니다.
1~3챕터는 입문 파트로 마이크로서비스, 아키텍트, 서비스에 기본적 지식과 소개가 주를 이룹니다.
1챕터의 마이크로서비스의 철학과 특징, 장점과 단점이 소개됩니다.
2챕터는 아키텍트와 아키텍처에 관한 내용으로 저에게는 꽤나 특이했으며 인상 깊었던 챕터였습니다. 개발에 입문한지 얼마 되지 않았고 모바일 앱 수준의 개발만 하던 저는 아직 아키텍처나 아키텍트에 관한 직접적 경험이 없습니다. 본 챕터를 통해서 일종의 상상의 동물처럼 느껴지는 아키텍트에 관하여 살펴보는 좋은 경험을 할 수 있었습니다. 이 챕터에서 'Trade Off'라는 단어가 매우 강조되었고 전체 책에서 제가 가장 핵심적인 단어로 꼽고 싶은 단어이기도 합니다. 'Trade Off'란 '기회의 비용' 정도로 표현하면 좋을 것 같습니다. 어떠한 선택에 따라 발생하는 비용(단점, 손실 등)으로 매우 당연한 이야기이지만 개인적으로는 개발 시 그렇게 고려해보지 못했던 부분이었습니다.
3챕터는 서비스에 관한 내용으로 소비자에게 제공되는 것으로 보면 좋을 것 같습니다. 여기서 소비자란 고객뿐만 아니라 어떠한 기능을 사용하는 존재로서 전체 서비스 내 다른 구성요소 또한 기능을 사용한다면 소비자라 할 수 있습니다. 3챕터를 읽어가면서 계속 떠올랐던 단어는 '객체지향'이었습니다. 직접적으로 나오는 단어는 아니지만 좋은 서비스의 조건인 '느슨한 결합, 강한 응집력'이 '좋은 객체지향'의 조건과 유사했기 때문입니다.
입문 파트는 개인적으로 읽어감에 있어서 큰 어려움은 없었습니다. TradeOff와 같은 깨달음을 얻기도 하였으며 여러 부분에서 많은 공감과 함께 매우 재밌게 읽어 나갔습니다. 이 부분은 개발자뿐만 아니라 어느 정도의 개발 지식이 있는 기획자분들이 읽어도 상당히 좋을 것 같습니다.
4~5챕터는 실질적인 마이크로 서비스 구축에 관한 내용입니다. 통합과 기존 모놀리스식 서비스 분리 두 주제가 각각의 챕터를 담당하고 있습니다.
통합을 주제로 하는 4챕터는 마이크로서비스가 '느슨한 결합, 강한 응집력'을 특징으로 하는 독립적인 서비스로 구현되는 만큼 서비스와 서비스 간의 연결점, '통신'이 강조되었습니다. 이어 버전관리와 직접적으로 고객과 이어진 사용자 인터페이스 서드파티와의 통합으로 내용이 구성됩니다. 아무래도 저는 사용자 인터페이스와 관련된 부분이 가장 흥미로웠습니다. 현재 Node.js로 백엔드도 공부하는 상황과도 맞 떨어지면서 매우 집중도 있게 읽었습니다. 당시 읽어나갈 때 '이 기회를 통해 느슨하게 결합과 강한 응집력을 기본으로 한 좋은 서비스를 구현해보자!'라고 생각을 했는데 결론적으로 저자는 '섣부른 분리의 추가 비용'을 경고하며 '모놀리스식 구현 후 분리'라는 방법을 통한 마이크로서비스 구축을 추천하며 저를 말렸습니다.
5챕터의 모놀리스 분해는 실제로 구현 작동하는 하나의 거대한 서비스를 어떠한 기준으로 분리하여 마이크로서비스를 구축하는 방법을 제시합니다. 특히 분리 기준과 요령을 비교적 명확하게 제시해줍니다. 이 부분부터는 개인적인 경험과 지식 부족으로 점차 이해와 공감에 있어서 어려움이 발생하기 시작했습니다....
6~9챕터는 구축을 넘어서 배포, 테스트, 모니터링, 보안과 같은 활용에 관한 내용으로 구성되어있습니다. 전체적으로 다양한 기술 스택을 넓게 다루는데 초점이 맞춰져 있었습니다. 아무래도 개론서이기에 깊이 있는 구현보다는 실행에 있어서의 포인트와 주의사항이 주요 요소였습니다.
최근 개발에 있어서 테스트에 많은 관심을 갖고 있었기에 챕터 7은 매우 주의 깊게 읽었으며 다른 파트에 비해 이해하기 수월했습니다. 테스트의 종류 구분부터 시작하여 테스트 구성에 있어서의 주의사항 그리고 해결책으로서의 소비자 주도 테스트를 제시하고 있습니다.
챕터 4부터 9까지는 실제 구현과 관련된 내용들로서 실제 서비스, 스택과 관련한 용어가 매우 많이 나옵니다. 충분한 사전적 지식이 부족한 저로서는 읽어나감에 있어서 많은 애로사항들이 있었습니다.
10~12챕터는 일종의 '부록'과 같았습니다. 콘웨이 법칙과 사례 제시, 대규모 마이크로 서비스(앞의 내용이 대규모가 아니었다니...) , 마지막으로 종합 정리로 마무리됩니다. 개인적으로 챕터 12의 종합 정리 부분은 매우 활용도가 좋은 부분이라 생각이 됩니다. 이 책이 스스로가 찾는 책인지 확인하기에도 좋은 파트이며, 책을 읽은 후 방대한 내용을 정리하기에도 매우 좋은 파트라고 생각합니다. 책이 정말 많은 내용을 다루는 만큼 독자가 내용을 정리할 수 있는 기회가 매우 중요한데, 각 챕터별로 있는 마무리 파트부터 책 마지막의 마무리까지 매우 만족도 있는 정리가 있어 좋았습니다.
Conclusion
저에게 이 책은 '읽는 시점에 따라 보이는 것이 바뀔 책'이란 측면에서 '꽃들에게 희망을'과 같은 책이었습니다. 지금의 제가 이 책으로 얻은 것은 '마이크로 서비스에 대한 입문적 지식', '아키텍트','Trade off', 그리고 '개발자로서의 미숙함과 한계 그리고 부끄러움'이었습니다. 뭔가 기술 지식서를 읽고 자기계발서와 같은 느낌을 얻게 된 것이 이상하긴 하지만...그런책이었습니다. 책은 상당히 얇고, 별도의 소스코드도 없기에 처음에 꽤나 가벼운 마음으로 읽기를 시작했으나 장을 넘어갈수록 특히 입문에 해당하는 3장을 넘어가면서 매 페이지마다 스스로의 한계를 느끼게 되었습니다. 마이크로서비스에 관한 책이며 여러 아키텍처와 관련한 교훈과 CI, 테스트에 관한 지식들도 얻을 수 있었지만, 저에게 남는 가장 큰 인상, 교훈은 '나의 한계'였던 책입니다.
1년 뒤 그리고 가능하다면 3년 뒤 다시 읽어보려 합니다.