3 minute read

구글 엔지니어는 이렇게 일한다 ( Software Engineering At Google )

한빛미디어 ‘나는 리뷰어다’ 활동을 위해서 책을 제공받아 작성된 서평입니다.




0. 소개


우리는 대학에서 프로그래밍 언어를 배우고 작게나마 SW를 만들줄 알게 되고, 졸업을 하고 취업을 하여 조금 더 규모의 SW의 일부 혹은 혼자서 개별 SW를 만들게 되는 일반적인 Path를 걷게 됩니다.


오랫동안 반복적인 SW 개발을 하면서 소프트웨어 엔지니어링이라는 말을 자주 듣게 되지만, 뭔가 전혀 다른 세상의 뜬구름 잡는 듯한 느낌만 들고 구체적으로 어떤 일을 하는지에 대해서는 잘 알지 못합니다.


물론 주위에 소프트웨어 엔지니어라고 말하는 사람도 보기 힘듭니다.


곰곰히 생각해 보면 소프트웨어 엔지니어링이라는 말에 대한 약간의 거부감(?)같은 것도 가지고 있는 것 같습니다.


소프트웨어 개발만 빠르고 버그없이 하면 되지 엔지니어링이라는 개념까지 쓸 필요가 있을까 ?


이런 생각을 오랫동안 나 자신도 알게 모르게 해오면서 굳어버린 사고를 조금씩 하게 된 시점에 이 책을 보게 되었습니다.


‘구글 엔지니어는 이렇게 일한다’ 제목부터 관심을 확 끌더군요.


우리가 흔히 알고 있는 그 ‘구글’의 수많은, 재능이 반짝반짝 거리는 천재들은 도대체 어떻게 SW를 개발하고 관리하고 있을까?


무척 궁금했습니다. 그들은 거의 무한에 가까운 자원을 가지고 원한다면 무엇이든지 할 수 있는 사람들일 것입니다.


그들은 우리가 지금 사용하고 있는 훌륭한 서비스와 소프트웨어를 어떻게 개발, 유지보수를 하는 걸까


또한, 내가 반감과 함께 뜬구름과 같은 ‘소프트웨어 엔지니어링’을 어떻게 정의하고 그들의 소프트웨어 개발에 어떻게 적용하고 있을지 궁금했습니다.



1. 프로그래머와 소프트웨어 엔지니어의 차이점?


가장 첫번째 Chapter에 이런 말이 있더군요.


‘구글에서는 소프트웨어 엔지니어링은 흐르는 시간 위에서 순간순간의 프로그래밍을 모두 합산한 것이다’ 라고…


뜬구름이 실제로 제 손에 잡히는 듯한 느낌이었습니다. 매일 단순히 반복하던 프로그래밍에 ‘시간’ 축이 더해지자 모든 것이 명확해지는 듯한 느낌이었습니다.


‘시간’과 프로그램의 결합이라…


소프트웨어 엔지니어링은 시간의 흐름에 따라 소프트웨어 개발에 필요한 요소들, 예를 들면 소프트웨어 개발 컨셉, 일정, 테스트 등과 같은 사항들을 고려해야 하고 더 나아가 유지보수, 기능 변경/추가, 최종적으로는 소프트웨어의 적절한 폐기까지 고려하는 것입니다.


이 책은 소프트웨어 조직이 설계, 아키텍쳐 잡기, 코드 작성시 명심해야 한다고 믿는 세 가지 기본 원칙을 강조한다.

  • 시간(time)과 변경(change) : 코드가 수명을 다할 때까지 새로운 요구사항에 잘 적응하려면 어떻게 해야 하는가 ?

  • 규모(scale)와 성장(growth) : 커져가는 규모에 발맞춰 조직은 어떻게 진화해야 하는가 ?

  • Trade Off와 비용(cost) : 시간과 변경, 규모와 성장에서 얻은 교훈들을 바탕으로 조직은 어떻게 의사결정을 내려야 하는가 ?


이러한 관점으로 볼 때 우리가 알고 있는 그 ‘구글’은 과연 위의 문제들을 어떻게 발전시켜왔으며 어떻게 구글에 만든 SW에 적용해 왔는지 현장감 있고 생생한 이야기들을 잘난 척 없이 담백하게 담아내고 있습니다.


이 책은 크게 문화 / 프로세스 / 도구, 이렇게 3개의 주제로 나누어서 구글의 소프트웨어 엔지니어링에 대해서 이야기 합니다.


‘문화’ 부분에서는 자유롭게 그리고 조직 전체가 소프트웨어 엔지니어링에 익숙해 지도록 분위기를 잡는 방법에 대해서 이야기한다.


개발자 개개인의 코드에 대한 마음가짐, 남의 코드에 대한 태도, 생산성 측면 뿐만 아니라 심리적인 부분까지 ‘문화’ 전반적인 부분을 아우른다.



‘프로세스’ 부분에서는 코딩 스타일이나 코드 리뷰 방법, 코드에 대한 Documentation, 코드의 Test, 마지막으로 코드를 폐기하기까지의 일련의 Life Cycle에 프로세스에 대해서 이야기합니다.


마지막으로 구글에서 소프트웨어 엔지니어링을 위해 사용하는 다양한 ‘도구’ 들에 대해서 소개합니다.


흔히 가장 많이 접하고 사용하고 있는 버전관리 & 브랜치 관리 Tool부터 시작해서, 구글에서 만들어진 방대한 Code들을 쉽게 검색할 수 있는 도구, 효율적인 빌드 방법과 그들만의 철학이 담긴 내용도 볼 수 있습니다.


더욱 완벽한 Code를 위한 정적 분석 도구, Open Source 환경에서 가장 골칫거리인 의존성 관리, 오래된 코드 베이스를 갈아엎는 그들만의 노하우, 만들어진 제품을 사용자들에게 쉽게 배포할 수 있는 도구들 등등


이 장에서는 일반 개발자가 궁금해 하거나 평소 어려움을 겪었던 문제들에 대한 구글의 처리 방식을 엿볼 수 있는 좋은 기회가 될 것 입니다.



2. 대상 독자


평소 구글에서는 어떤 식으로 Code를 만들고 검증하며 테스트하고 배포하고 폐기하는지에 대해서 궁금해 하는 사람들이 많을 거라고 생각합니다.


세계 최고의 SW 회사에서는 어떤 도구로 사용하고 어떤 프로세스로 그들만의 품질을 유지하는지에 대해서 궁금한 모든 독자들에게 이 책을 권합니다.


또한, 저처럼 ‘소프트웨어 엔지니어링’이라는 것 자체에 대한 궁금증을 해소하기 위해서도 이 책은 최고인 것 같습니다.


애매하지만 뭔가 손에 잡힐듯 한 ‘소프트웨어 엔지니어링’ 개념을 잡아줄 좋은 가이드가 되어줄 것입니다.