필독! 개발자 온보딩 가이드
지속 가능한 소프트웨어와 원활한 협업 문화를 이해하는
프로페셔널 개발자의 탄생
크리스 리코미니, 드미트리 리아보이 지음 | 장현희 옮김
376쪽 | 25,000원 | 2023년 5월 31일 출간 | 152*224*18 | ISBN 9791189909529 (93000)
판매처 | [교보문고] [YES24] [알라딘] [영풍문고] [인터파크] + 전국 교보문고 매장
전자책 판매처 | [교보문고] [YES24] [알라딘] [리디북스] | 7월 20일 출간 | ISBN 9791189909543 | PDF 포맷
* 원서: The Missing README (저자진 인터뷰 라디오 방송: https://youtu.be/7qQQMtVj-Cw)
★ 정오표: https://www.onlybook.co.kr/entry/onboarding-errata
“드디어 소프트웨어 개발자가 됐다. 그런데 이제 뭘 어떻게 해야 하지?” _신입 개발자
“오늘 우리 회사에 신규 입사자가 들어왔다. 뭐부터 가르쳐야 하지?” -_초보 팀장
실용적인 개발자, 성장하는 개발자, 성공적인 개발자란 대체 어떤 모습이며, 어떻게 해야 완성될 수 있을까? 대부분의 신입 엔지니어는 어느 정도의 기술 기반은 갖추고 시작하지만 실제 현장 경험은 거의 없다. 이 책에서는 새로이 첫발을 내딛는 개발자나 초보 팀장이 IT 개발 현장에서 곧 맞닥뜨릴 모든 일을 알려주며, 성공으로 향하기 위해 필요한 핵심 정보가 가득 담겨 있다.
코딩, 설계, 배포, 코드리뷰, 테스트, 기업문화, 협업, 경력 계발 등 전반적인 소프트웨어 개발 수명주기에 따라 현업 실무를 이제 막 시작하거나 팀장으로서 직무를 수행해야 하는 개발자가 꼭 알아야 할 신규 입사 개발자와 경력 개발자 모두를 위한 필독 가이드다. 개발자를 준비하는 취업준비생과 사회초년생은 물론, 팀을 이끌어야 하는 시니어 엔지니어도 다시 한번 짚어야 할 금과옥조 같은 이야기가 가득하다.
저자진이 실리콘밸리에서 현업 개발자로 일하며 IT현장에서 겪었던 눈물 쏙 빠지게 재밌는 에피소드와 경험담도 읽는 재미를 부추기며 각 장 말미에는 개발자가 꼭 따라야 하거나 반드시 피해야 할 ‘개발자의 필수 체크리스트’도 수록했다.
이 책에서 다루는 내용
- 처음 회사에 입사해 업무를 시작할 때 벌어질 일
- 기술 부채를 해소하고 방지하며, 소프트웨어를 작성하고 안전하게 배포하고, 의존성을 관리하는 방법
- 레거시 코드 변경 알고리즘을 이용해 처음보다 더 코드를 깔끔하게 유지하는 방법
- 로깅, 지표, 설정, 방어적 프로그래밍을 통해 운영 환경을 고려한 코드를 쓰는 방법
- 결정적 테스트를 구축하고 코드 리뷰를 수행하며 다른 프로그래머의 코드를 평가하는 방법
- 다른 개발자와 코드를 리뷰하고 테스트하며 동료, 팀장, 상사와 효율적으로 협업하는 방법
- 실험과 문제의 정의, 문서화 및 협업을 비롯해 기술 설계 절차에 대한 전반적인 단계
- 긴급대응 온콜 업무 중 프로덕션 환경에서 발생하는 장애를 처리하는 방법
- 아키텍처적 기법을 적용해 코드를 더 쉽게 변경하는 방법
- 스프린트 계획, 스탠드업 미팅, 회고 등 애자일 방법론을 활용하는 방법
- 시니어나 그 이상의 직책으로 자연스럽게 승진하는 방법 등 경력 관리와 대인관계 기술
이 책의 대상 독자
취업준비생, 사회초년생, 신규 입사자, 이직자, 경력 개발자 등 IT 조직에 몸담거나 소프트웨어 엔지니어로 살아가는 모든 개발자. 그리고 개발자를 이해해야 하는 비개발 관리조직 직군
추천의 글
보통 이직을 하거나 신규 입사자가 들어왔을 때, 흔히들 초반 3개월 정도에 잘하는 모습을 보여주기만 하면 그 이미지가 오래가므로 혹여 나중에 실수를 하더라도 좋은 이미지가 계속 유지된다고 말하곤 합니다. 하지만 초반 3개월 만에 신규 입사자가 좋은 이미지를 보여주는 것은 사실 쉽지가 않습니다. 회사에 적응하기에도 바쁜데 그 시간에 좋은 모습까지 보여준다는 건 쉬운 일은 아니죠. 마침 『필독! 개발자 온보딩 가이드』의 추천사를 부탁받아 책을 읽다 보니, 평소에 제가 주변에 해주던 얘기들이 그대로 담겨 있었습니다. 정확하게는 그것보다 훨씬 더 좋은 얘기들이 말이죠.
‘좋은 이미지를 쌓는다’는 것은 ‘신뢰할 수 있는 기여자’가 된다는 것인데, 이를 위해서는 질문하는 것을 두려워 하면 안 된다는 것, 회사의 문서를 탐독하고 회사의 코드를 계속 읽어야 한다는 것, 개인적으로도 계속 학습을 해야 한다는 것, 질문은 하되 질문하기 전에 꼭 스스로 문제를 해결하려고 노력해야 하며 그리고 거기에 제한시간을 꼭 정해서 너무 오래 고민하지 말라는 것까지, 평소에 제가 주변에 얘기하는 것들이 더 자세히 적혀 있었습니다.
제목은 ‘온보딩 가이드’지만, 앞으로 개발자로서 어떻게 행동해야 하는지, 어떻게 발전해야 하는지가 가득 들어 있어서 아주 재밌게 책을 읽었으며, 특히 신입으로 시작하는 개발자들만이 아니라 제 주변 시니어들도 읽어보면 좋을 듯합니다. 개발자 생활을 하면서 좋은 사수를 만나 직접 가르침을 받으면 더 없이 좋겠지만, 하지 않아도 될 수많은 시행착오를 줄이는 것은 이 책 한 권으로도 충분합니다.
- 강대명 / 레몬트리 CTO
이 책을 보기 전까지는 당신을 개발자로 인정하지 않으려 한다.
훌륭한 개발자로 성장하려면 기술 전문성 이외에도, 실행력, 의사소통, 리더십 등을 반드시 갖춰야 한다. 안타깝게도 대학을 포함한 대부분의 개발자 육성 과정은 기술 전문성을 갖추는 것에만 집중하고 있으며, 시중에 넘쳐나는 기술 전문 서적 또한 다르지 않다. 이 책 또한 코딩의 방법, 운영이 가능한 코딩 전략, 테스트 코드 작성 방식 등의 기술적인 내용을 담고 있다.
하지만 이 책의 백미는 자신의 역량을 높이기 위해 개발자들이 어떤 노력을 해야 하며, 동료들과 소통은 어떻게 해야 하는지, 문제가 생겼을 때 어떻게 대응하는 것이 좋은지에 대한 내용을 다루고 있다는 점이다. 마치 수십 년간 개발을 이어온 노련한 선배로부터 어렵사리 전해 들을 수 있는 조언이나 지침과도 같다. 이런 내용을 담고 있는 책은 흔치 않다. 개발자라면 반드시 읽어야 할 필독서다.
- 김명신 / NHN 클라우드 CTO
이 책은 우리가 흔히 맥가이버 칼이라 부르는 다기능의 스위스 아미 나이프와도 같습니다. 개발자가 필수적으로 알아야 하는 내용과 더불어 고급 개발자로 한 단계 성장하기 위해 오랜 시간에 걸쳐 체득해야 하는 많은 사항을 포함하고 있기 때문입니다. 마치 오랜 경험에서 우러나오는 마음 따뜻한 선배의 실용적인 조언과 같이 개발자의 마음가짐은 물론, 코딩과 코드 리뷰에서부터 소프트웨어 아키텍처와 개발 프로세스, 그리고 경력 관리까지 다양한 내용을 다룹니다.
초보 개발자가 한 단계 성장하기 위한 시간을 줄여주고 가야 할 방향을 알려주는 필독서이지만 이미 적지 않은 경험을 쌓아온 개발자나 관리자 들에게도 소프트웨어 개발에 대한 전반적인 내용을 업데이트하기 위한 좋은 레퍼런스가 될 것입니다.
좋은 책은 좋은 친구와 같다고 합니다. 이 책은 개발자로 성장하는 데 있어 훌륭한 가이드 역할을 해 줄 수 있는 든든하고 친절한 벗일 뿐만 아니라, 소프트웨어 개발에 대한 좀 더 넓은 시야를 갖는 데 많은 도움이 될 것입니다. 소프트웨어 개발과 관련된 작업을 하고 있다면 꼭 한 번 읽어보기를 강력하게 추천합니다.
- 김영기 / 삼성전자 네트워크사업부 SE그룹 수석엔지니어
개발을 ‘할’ 수 있는 사람과 개발을 ‘잘할’ 수 있는 사람은 다릅니다. ‘개발을 잘하는 사람’에 대해서는 여러 가지 정의가 있을 수 있겠지만, 보편적으로 여러 사람이 협업해 결과물을 내는 것을 개발이라 하므로 개발 결과물을 만들기 위한 과정과 그 결과물에 대한 신뢰도가 높아 믿고 맡길 수 있는 사람이라는 의미로 보는 것이 타당하겠습니다.
이 책에서는 개발자가 좋은 개발 결과물을 만들기 위해 어떤 것들을 놓치면 안 되는지에 대해 다년간의 경험에서 우러나온 “찐” 노하우를 다양하게 다룹니다. 그 범위는 어떻게 해야 코드의 품질을 높일 수 있는지부터 코드를 작성하는 좋은 습관과 같이 실제 현업에서 일하는 분들이 어떤 태도를 취해야 하는지에 이르기까지, 그가 초보 개발자일 때, 중견 개발자일 때, 팀장일 때 등 다양한 스펙트럼에서의 지침을 폭넓게 담고 있습니다. 좋은 개발자가 되고 싶은 분은 물론, 좋은 개발자를 육성해야 하는 팀장, 좋은 개발자를 영입해야 하는 비개발 직군의 관리자에게까지 훌륭한 가이드가 될 것입니다.
- 류형규 / 주식회사 컬리 Head of Product, CTO
개발자의 길을 걷기 시작했을 때 혼자 학습하고 삶의 방향을 설정하며 걸어왔기 때문일까? 나는 개발자의 학습 로드맵이나 이정표를 다루는 류의 책을 그리 좋아하지 않는다. 그럼에도 불구하고 지금 나는 이 책을 추천하고, 평소 많은 교육에서 늘 학습 로드맵과 개발자의 성장 로드맵을 주제로 이야기한다.
맞다. 모순이다.
모순임을 알면서도 이 책을 추천하는 이유는 혼자만의 힘으로 삶을 개척해 나가는 길이 얼마나 힘들고 외로운 길인지 알기 때문이다. 자신만의 길을 찾고 묵묵히 걸어가라. 적극 지지한다. 그렇게 길을 걷다 외로움과 막막한 감정이 밀려드는 순간 이 책에서 마음이 끌리는 곳을 읽어라. 이 책은 개발자의 삶 전반에 걸쳐 쌓아야 할 역량을 다루고 있다. 따라서 현 상태에서 다음 단계(넥스트스텝)로 도전할 거리를 던져줄 것이라 믿기 때문이다.
- 박재성 / (주)넥스트스텝 대표이사, (주)우아한형제들 우아한테크코스 캡틴
이 책은 대학교나 학원에서 알려주지 않지만 실무에서 반드시 필요한 지식을 일목요연하게 정리해 알려주는 구성 방식을 따른다. 컴퓨터공학이나 컴퓨터과학 커리큘럼에 등장하는 자료 구조나 알고리즘과 같은 기초 지식을 비전공자 대상으로 알기 쉽게 설명하는 책은 시중에 많이 나와 있지만, 실제 소프트웨어 개발에 들어가서 코드를 작성하는 바로 그 순간에 필요한 공학적인 지식이나 실무 팁을 다루는 책은 생각 외로 찾기 어렵기에 이 책의 가치를 더욱 높게 평가할 수 있다.
팀장이나 리더라면 자신들의 시간을 아껴준 이 책을 진심으로 환영할 것이고, 신규 입사자라면 불투명한 앞길에 조명을 비춰주는 이 책을 역시 환영할 것이다. 주사 맞기 전에 “따끔합니다”라는 가벼운 경고 성격이 강한 이 책을 읽으면서, 실무에서 벌어지는 다양한 상황과 대응 방안을 사전에 인지하고 개인적으로 사고 실험을 수행하고 알게 된 사실을 주변 사람들과 토론하다 보면 한결 마음의 여유가 생길 것이다. 그리고 이런 지식을 바탕으로 차근차근 실무의 문제들을 해결하다 보면 어느 순간 이 책에 나온 용어와 개념에 대한 이해도가 한 단계 높아질 것이며, 이때가 바로 여러분이 성장한 순간이라고 보면 틀림없을 것이다. 아무쪼록 여러분이 이 책과 더불어 탄탄한 공학적인 기본기와 협업 마인드를 갖추고 멋진 소프트웨어도 만들어내면 좋겠다.
- 박재호 / ‘컴퓨터 vs 책’ 블로그, 『클린 코드, 이제는 파이썬이다』 역자
제가 근무했던 전 직장(피보탈 랩)이 좋은 소프트웨어를 위한 협업을 위해 각 개발자에게 요구했던 마인드는 “Be kind!”였습니다. 협업 과정에서는 서로 다른 기술 수준, 도메인에 대한 이해 수준의 격차가 언제나 발생하고 그렇기에 서로 친절해지기가 꽤 어렵습니다. 그래서 피보탈 랩의 중요한 채용 기준은 공감력(empathy)을 확인하는 것이기도 했습니다. 주니어는 잘 모르고 시니어는 잊고 지내는, 이해와 기대 수준의 불가피한 차이로 인해 개발 협업을 하다 보면 소통의 어려움이 발생합니다. 원활한 소통을 통해 이 기대 수준의 차이를 인식하고 좁혀나가야만 서로 공감대를 형성하여 결국 ‘Be kind’를 동작시킴으로써 좋은 품질의 소프트웨어 결과물을 함께 만들어나갈 수 있습니다.
추천사를 부탁받고 이 책을 읽으며, 당시 피보탈 랩에서 수행했던 여러 방식이 소개돼 있어 매우 반갑고 놀라웠습니다. 이 책은 초보 개발자는 물론, 시작이 어땠는지를 잊고 지내는, 그래서 ‘라떼’만을 추억하는 시니어 및 CTO, CDO의 임원까지 모두 함께 읽어야 합니다. 현실 세계의 어려움을 책 한 권에 다 말할 수는 없겠지만, 시니어는 "내가 이런 걸 모를 때가 있었지."라던 주니어 시절을 회상해보고, 주니어는 "아, 시니어가 되려면 이런 것들이 중요하구나."라는 깨달음을 얻을 수 있는 진정한 개발자의 필독서로 추천드립니다. 신입 개발자가 어떻게 성장해야 하는가에 대한 커리어 지표를 쌓는 지식은 덤입니다.
- 정윤진 / 포커스미디어 CTO
이 책은 코딩 외에도 신입 소프트웨어 엔지니어가 성공적인 경력을 위해 배워야 할 다양한 스킬을 심도 있게 설명하는 아주 인상적인 책이다. 이제 갓 대학을 졸업하고 경력을 시작하는 입장에서 앞으로 어떤 일들이 벌어질지 궁금해 하는 사람들에게 매우 적합한 책이다.
- 카미유 푸르니에 / 전 골드만삭스 부사장, 『개발 7년차, 매니저 1일차』 저자
내가 소프트웨어 엔지니어로 첫발을 내딛을 때 이 책이 있었다면 어땠을지 생각해본다. 현명한 조언과 가치를 형언할 수 없는 이야기들을 재미있게 읽었다. 적절한 질문을 준비할 필요가 없다는 점을 빼면 마치 시니어 멘토와 커피 한잔을 즐기는 기분이었다. 신입 개발자는 물론 자신이 무엇을 놓치고 있는지 알고 싶은 시니어 엔지니어에게도 정말 유용한 책이다.
- 그웬 샤피라 / 컨플런트의 엔지니어링 리더
21세기 소프트웨어 엔지니어링 분야에서 매일 일어나는 일상을 소개하는 정말 실용적인 책이다. 운영 환경에서 동작하는 시스템을 구현하고 배포하고 운영하는 팀에 효율적인 일원이 되기 위해 필요한 기본적인 스킬과 기법, 휴리스틱을 모두 다룬다.
- 애디웨일 오시나이) / 구글의 개발자 애드보컷, 『프로그래머의 길, 멘토에게 묻다』 공저자
이 책은 이제 막 시작하는 엔지니어가 혼자 스스로는 결코 학습할 수 없는 모든 것을 다룬다. 정보가 잘 정리돼 있어 수월하게 읽을 수 있었다. 우리 회사의 인턴과 갓 졸업한 직원들에게 한 권씩 나눠줘야겠다.
- 토마스 핸리 / 시니어 엔지니어링 매니저
소프트웨어 엔지니어가 되기 위한 실용적인 내용을 빠짐없이 다루는 훌륭한 가이드다. 사용 백서 같은 스타일로 명쾌하게 적힌 책이라, 인턴 직원부터 CTO에 이르기까지 모든 소프트웨어 엔지니어를 위한 참고서로 삼기에 충분하다.
- 팀 번스 / 데이터 아키텍트
신규 입사자는 물론 경력 개발자에게도 실용적이면서도 실행 가능한 인사이트를 제공한다. 재직 중인 회사의 규모에 관계없이 소프트웨어 개발자가 마주할 수 있는 모든 장애물에 효과적으로 대응하는 방법을 상세히 설명해준다. 이 책이야말로 우리 모두가 필요로 하는 개발자 필독 가이드다.
- 조지 D. / 전문 리뷰어
책을 다 읽고 나니 유용한 팁은 물론 늘 나를 격려해주는 멘토를 한 명 갖게 된 느낌이 든다. 저자들은 서문에서 모든 직장이나 모든 상황을 다루지는 않는다고 했지만 실제로는 주니어 엔지니어는 물론 이미 어느 정도 경력을 쌓은 엔지니어에게도 매우 유용한 내용으로 가득하다. 대학의 학부생에게는 소프트웨어 엔지니어링 수업에서 미처 배우지 못한 내용으로 가득한 교과서 같은 책이다.
- 매리 무어 / 웨스트버지니아 대학교 컴퓨터정보시스템 교수, 전문 리뷰어
책 속으로
- 인터넷에서 올바른 답을 얻는 가장 좋은 방법은 질문을 올리는 것이 아니라 잘못된 답을 게시하는 것이다. - 커닝햄 법칙 _p37
- 코드는 결코 거짓을 전하지 않는다. 하지만 주석은 간혹 거짓을 말할 때가 있다. - 론 제프리스 _ p49
- 기술 부채는 성공의 표시일 수 있다. 프로젝트가 지저분해질 정도로 오래 살아남았다는 뜻이기도 하니까. _ p71
- 대부분의 엔지니어는 규칙의 가치에 대해서는 과소평가하고 규칙을 무시하는 행위의 가치는 과대 평가하는 경향이 있다. _ p82
- 코드 재작성은 그에 들어가는 비용보다 장점이 클 때만 시도해야 한다. _ p89
- 엔지니어는 항상 코드 재작성이 얼마 안 걸릴 거라 예상한다. _p89
- 예외는 애플리케이션 로직을 제어하는 용도가 아니라 실패를 처리할 때만 사용해야 한다. _p101
- 경험이 많은 프로그래머가 새로운 코드베이스를 만날 경우 코드를 이해하기 위해 가장 먼저 읽는 것이 테스트 코드다. _p153
- 코드 리뷰는 여러분이 얼마나 똑똑한지 증명하는 기회가 아닐 뿐더러 상대방이 관료주의적인 장애물이라고 낙인 찍는 기회도 결코 아니다. _p182
- 글을 명확하게 쓸 수 있으면 여러분의 삶은 더 수월해진다. _p271
- 코드를 간결하게 유지하는 가장 쉬운 방법은 모든 것을 한꺼번에 작성하지 않는 것이다. _p291
- 코드의 유연성을 유지하는 가장 좋은 방법은 코드의 양을 최대한 줄이는 것이다. _p293
- 주니어 엔지니어는 기능을 구현하고 태스크를 완료하는 반면 시니어 엔지니어는 불확실성과 모호성을 주로 다룬다. _p362
- 이직을 자주 하면 여려분의 결정이 장기적으로 어떻게 작용하는지 확인할 길이 없어 시니어 엔지니어로서 필요한 직관을 늘리는 데 방해가 된다. _p369
- 현재 맡은 업무가 아닌 과거 업적에서 여러분의 가치가 드러난다면 이는 여러분의 성장에 방해가 될 수 있다. _p370
- 하룻밤 수면 부족으로 인해 품질은 50%나 감소한다. _p371
- 여러분의 경력은 단거리 달리기가 아닌 장거리 마라톤이다 _p371
지은이
크리스 리코미니(Chris Riccomini)
페이팔(PayPal), 링크드인(LinkedIn)을 비롯해 JP 모건 에 속한 위페이(WePay) 등 주요 기술 기업에서 경험을 축적한 소프트웨어 엔지니어다. 데이터 과학자, 스태프 소프트웨어 엔지니어, 디스팅귀시드 소프트웨어 엔지니어 등의 직책을 거쳤다. 아파치 삼자(Apache Samza)를 개발하는 등 오픈 소스에 대한 기여는 물론 스타트업의 투자 및 자문 역할도 하고 있다.
드미트리 리아보이(Dmitriy Ryaboy)
2000년대 초부터 소프트웨어 엔지니어와 관리자로 일해왔다. 기업 소프트웨어 스타트업(클라우데라(Cloudera)), 소비자 인터넷 기업(애스크닷컴(Ask.com), 트위터), 연구 기관(로렌스 버클리 국립 연구소) 등에서 재직했다. 또한 아파치 파케이(Apache Parquet)를 비롯한 여러 오픈 소스 프로젝트를 시작하고 성장시켜왔다. 현재는 자이머젠(Zymergen)의 소프트웨어 엔지니어링 VP로 재직 중이다.
여러분은 이제 어려운 문제를 해결하고 고품질의 코드를 작성하며 그렇게 만든 작품을 스스로 사용해 볼 수 있는 개발자라는 새로운 직업을 갖게 됐다. 얼마나 멋진 일인가! 축하한다. 모쪼록 흥미로운 과제를 해결하고, 멋지고 똑똑하며 열정적인 동료들과 함께 유용한 것을 앞으로 만들어내길 바란다.
하지만 여러분은 프로그램을 작성하는 일(컴퓨터를 이용해 문제를 해결하는 일)이 전부가 아니라는 점을 곧 알아채게 되거나, 어쩌면 이미 파악했을 수도 있다. 프로그램 작성은 효율적인 소프트웨어 엔지니어가 되기 위한 정말 중요한 스킬 중 하나지만, 학교에서는 절대 가르쳐주지 않는 다른 스킬들도 갖춰야 한다. 이 책은 그런 스킬을 배울 수 있는 책이다.
이 책에서는 프로덕션 소프트웨어를 구현하고 테스트하며 실행하기 위한 현대적인 사례들을 소개한다. 또한 강력한 팀과 더 나은 팀 동료를 구축하기 위한 행동 양식과 방법도 설명한다. 타인에게서 도움을 얻는 법, 설계 문서를 작성하는 법, 레거시 코드를 다루는 법, 긴급 대응을 수행하는 법, 작업 계획을 세우는 법 그리고 여러분의 관리자나 팀과 소통하는 법 등에 대한 실용적인 조언을 제공할 것이다.
물론 이 책이 여러분이 알아야 할 모든 것을 담지는 못한다. 그럴 수도 없을 뿐더러 만일 다 담았다 해도 읽다가 지칠 것이다. 대신 우리는 컴퓨터공학 학부과정에서는 일반적으로 다루지 않는 가장 중요한 정보를 제공하는 것에 초점을 맞춘다. 이런 주제는 깊이가 있으므로 여러분이 더 많은 정보를 원할 경우 권장하는 추가 자료를 제공하는 ‘레벨업을 위한 읽을거리’ 절을 각 장 말미에 추가했다.
처음 몇 개 장은 여러분이 회사에서 개발자로서 경력을 시작할 때 어떤 것을 기대할 수 있는지를 설명한다. 중반부터는 기술적인 내용으로 넘어가 프로덕션 환경에 적합한 품질의 코드 작성, 효율적인 테스트, 코드 리뷰, 지속적 통합과 전달, 설계 문서, 아키텍처상의 권장 기법 등을 소개한다. 마지막 3개 장은 애자일 계획, 관리자와의 협업, 경력 관리에 대한 조언 등 조금 더 소프트한 스킬을 다룬다.
이 책은 벤처캐피탈의 투자를 받아 빠르게 성장한 실리콘밸리의 여러 비상장 기업을 거치며 팀을 구축해온 우리의 경험을 바탕으로 집필했다. 여러분이 각자 처한 상황은 이 책에서 다루는 내용과 다를 수 있지만 그래도 괜찮다. 회사마다 구체적인 사항은 달라도 기본은 크게 다르지 않기 때문이다.
우리가 신입으로 처음 경력을 시작할 때 이 책이 있었다면 좋았을 것 같다. 실제 우리 팀에 합류하는 신입 엔지니어에게 이 책을 선물로 주기로 했다. 이 책을 다 읽고 덮을 때쯤 여러분은 전문 소프트웨어 엔지니어가 되려면 어떻게 해야 하는지를 알게 될 것이다.
옮긴이
장현희
지난 10년간 호주와 캐나다에서 시니어 엔지니어 및 스태프 엔지니어로 경험을 쌓았으며 현재는 프린시펄 소프트웨어 엔지니어(principal software engineer)로서 소프트웨어 개발은 물론 성공적인 엔지니어링 팀과 문화의 구축에 힘을 쏟고 있다. 지금까지 총 30권의 개발 관련서를 집필/번역하면서 책이라는 매개체로 멀리서나마 국내 개발자들과 꾸준히 소통하고 있으며 대표적인 번역서로는 『스태프 엔지니어』(길벗, 2022), 『SRE를 위한 시스템 설계와 구축』(한빛미디어, 2022), 『구글 빅쿼리 완벽 가이드』(책만, 2020), 『엔터프라이즈 데이터 플랫폼 구축』(책만, 2020), 『사이트 신뢰성 엔지니어링』(제이펍, 2018), 『클라우드 네이티브 자바』(책만, 2018) 등이 있다.
한국과 호주, 미국, 캐나다 등 여러 나라의 기업에서 소프트웨어 엔지니어로 일하면서 공통적으로 경험했던 한 가지는 좋은 엔지니어링 문화를 구축하는 것은 언어와 문화를 막론하고 어렵다는 점입니다. 사실 좋은 소프트웨어 엔지니어링 문화라는 것의 정의 또한 그다지 구체적이지는 않지요. 그럼에도 불구하고 이 분야는 끊임없는 연구와 노력, 발전을 거듭하며 좋은 소프트웨어 엔지니어링 문화의 정의를 조금씩 구체화해 갔습니다. 그리고 그렇게 구체화된 문화를 소개하고 있는 책이 바로 이 책입니다.
한국에서 태어나 한국에서 소프트웨어 엔지니어로 성장한 저는 이 책에서 소개하는 내용이 지금 국내 기업의 소프트웨어 엔지니어링 문화와 아직은 많은 차이가 있다고 느낍니다. 이는 단지 엔지니어링 팀의 문제라기보다는 전반적인 기업 마인드의 차이에서 오는 문제라고 생각하고요. 저는 약 10년간 해외 생활을 하다가 최근 한국의 기업에서 프린시펄 소프트웨어 엔지니어로 1년 남짓한 시간을 보냈습니다. 이 기간에 제가 추구했던 엔지니어링 팀의 문화는 이 책에서 소개하는 내용과 거의 일치합니다. 이 책이 조금 더 일찍 출간되어 저의 동료들의 손에 쥐여줬더라면 제가 원했던 문화를 구축하는 것이 조금은 더 수월하지 않았을까 하는 아쉬움도 있지만 그건 모를 일이지요.
좋은 엔지니어링 문화를 개인의 노력만으로 구축하기란 거의 불가능에 가깝기 때문입니다. 좋은 문화를 경험한 리더가 아무리 좋은 문화를 만들려 해도 동료들이 이해하고 따라주지 않으면 소용이 없습니다. 좋은 문화를 경험한 동료가 아무리 좋은 문화를 만들려 해도 리더가 그 뜻을 지지해주지 않으면 그 또한 소용이 없고요. 어쩌면 이 책을 읽는 여러분도 그런 경험을 했을지도요. 그렇기에 이 책은 비단 이제 막 소프트웨어 엔지니어링 분야에 발을 디딘 신입 엔지니어뿐만 아니라 시니어 엔지니어, 엔지니어링 리드, 나아가 CTO에 이르기까지, 효율적인 의사소통으로 서로 존중하며 함께 목표를 이루기 위해 노력하는 엔지니어링 문화를 팀에 들여오고자 하는 모두에게 강력히 권장할 만한 책입니다. 게다가 엔지니어링 조직 전체가 이 책에서 소개하는 문화를 도입하기 위해 함께 노력한다면 그 영향력과 효과는 더욱 강력해질 테지요.
저는 지금 새로운 곳에서 또 다른 목표에 도전하기 위한 시점에 와 있습니다. 이 책이 앞으로의 저는 물론 여러분께도 훌륭한 지침과 가이드가 되어줄 것이라고 믿어 의심치 않습니다.
차례
1장 여정을 시작하며
>>> 개발자로서의 첫 출발, 앞으로 어떤 길이 펼쳐질까
목표를 세우자
여정을 위한 지도
__초보자
__질풍노도의 성장
__신뢰할 수 있는 기여자
__운영의 바다
__능력자의 땅
전진, 앞으로!
2장 역량을 높이는 의식적 노력
>>> 경쟁력을 갖춘 개발자가 되기 위해 스스로 해야 할 일
실전에 앞서 익혀야 할 자기주도 학습 방안
__본격적인 학습을 위한 몸풀기
__직접 부딪혀보며 배우자
__코드 동작을 이해하기 위해 다양한 실험을 해보자
__문서 읽는 습관은 몸에 배야 한다
__발표 영상을 찾아서 보자
__때로는 밋업과 컨퍼런스도 참여하자
__시니어 엔지니어의 업무를 체험하고 협업하자
__개인 프로젝트 활동에서도 배움을 얻을 수 있다
제대로 질문하자
__스스로 문제를 해결해보자
__제한 시간을 정하자
__자신이 시도한 방법을 공유하자
__동료를 방해하지 말자
__비동기식 멀티캐스팅 의사소통을 시도하자
__동기식 요청은 한 번에 보내자
성장의 장애물을 극복하자
__가면 증후군
__더닝 크루거 효과
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
3장 코드와 함께 춤을
>>> 레거시 코드에 임하는 우리의 자세
소프트웨어 엔트로피는 늘어나게 마련이다
결코 피할 수 없는 기술 부채
__기술 부채를 상환하는 방법
코드 변경으로 인한 고통을 조금이라도 줄이려면
__레거시 코드 변경 알고리즘을 활용하자
__코드는 처음보다 더 깔끔하게 유지하자
__점진적으로 변경하자
__리팩터링은 실용적으로 진행하자
__IDE를 활용하자
__버전 제어 시스템의 권장 기법을 활용하자
소프트웨어 개발에서 빠지기 쉬운 함정을 최대한 피하려면
__되도록 검증된 기술을 사용하자
__제발 악동은 되지 말자
__업스트림 커밋 없이 포크만 하는 것은 금물이다
__코드 재작성에 대한 욕구를 견디자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
4장 운영 환경을 고려한 코드 작성
>>> 개발 환경과 프로덕션 환경은 엄연히 다르다
장애에 대비하기 위한 방어적 프로그래밍 방안
__null 값 사용은 피하자
__불변 변수를 사용하자
__타입 힌트와 정적 타입 검사를 사용하자
__입력값을 검사하자
__예외를 활용하자
__예외는 구체적으로 정의하자
__예외는 일찍 던지고 최대한 나중에 처리하자
__재시도는 현명하게
__시스템에 멱등성을 부여하자
__리소스를 해제하자
문제 원인을 찾기 위한 로깅 방안
__로그 레벨을 사용하자
__로그는 원자적으로 작성하자
__로그는 신속하게 기록하자
__민감한 데이터는 로그에 기록하지 말자
애플리케이션 동작 측정을 위한 지표 활용 방안
__표준 지표 라이브러리를 사용하자
__모든 것을 측정하자
오늘날 분산 환경에서 더욱 중요해진 추적
설정으로 런타임 동작을 손쉽게 조정하려면
__지나치게 창의적인 설정은 금물이다
__모든 설정을 로그에 기록하고 검증하자
__기본값을 제공하자
__관련된 설정을 그룹화하자
__설정도 코드처럼 테스트하자
__설정 파일은 깔끔하게 유지하자
__배포된 설정은 변경하지 말자
때로는 도구가 운영의 성패를 결정짓기도 한다
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
5장 피할 수 없는 코드 의존성의 관리
>>> 복잡한 프로그램을 짜봐야 비로소 깨닫는 의존성의 진실
의존성 관리를 이해하기 위한 필수 개념
__시맨틱 버저닝
__이행적 의존성
현업이면 누구나 한 번은 겪는 의존성 지옥
__의존성 지옥에서 탈출하자
__의존성을 격리하자
__의존성은 신중하게 추가하자
__버전을 고정하자
__의존성의 범위를 좁히자
__순환 의존성에 주의하자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
6장 테스트! 개발자의 든든한 지원군
>>> 업무 부하를 낮추면서 시스템 동작도 검증하는 테스트 방안
테스트를 꼭 해야 할까
테스트의 유형과 기법
다양한 테스트 도구
__모킹 라이브러리
__테스트 프레임워크
__코드 품질 보증 도구
개발자 스스로 직접 테스트를 작성하자
__테스트는 깔끔하게 작성하자
__과도한 테스트는 삼가자
테스트 결정성: 항상 동일한 테스트 결과를 만들려면
__난수생성기에 적절한 시드값을 사용하자
__단위 테스트에서 원격 시스템을 호출해서는 안 된다
__클럭을 주입하자
__슬립과 타임아웃의 사용을 삼가자
__네트워크 소켓과 파일 핸들을 닫자
__0번 포트에 바인딩하자
__파일과 데이터베이스에 대해 고유한 경로를 생성하자
__이전 테스트의 상태를 격리하고 해제하자
__테스트의 실행 순서에 의존하지 말자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
7장 올바로 주고받는 코드 리뷰
>>> 원활한 팀 협업과 높은 코드 품질을 목표로
코드 리뷰는 왜 필요한가
코드 리뷰를 제대로 받는 방법
__코드 리뷰를 받을 때 준비해야 할 사항
__리뷰 초안이 있으면 위험을 낮출 수 있다
__테스트 실행을 위한 리뷰 제출은 금물이다
__코드 변경사항이 많을 때는 좀 더 면밀하게
__자신의 코드에 너무 집착하지 말자
__공감력을 갖되 무례함은 참지 말자
__주도적으로 행동하자
코드 리뷰를 제대로 해주는 방법
__리뷰 요청을 선별하자
__리뷰를 위한 시간을 마련하자
__코드 변경사항을 이해하자
__포괄적인 피드백을 제시하자
__좋은 점은 인정하자
__이슈, 제안, 사소한 흠결은 잘 구분하자
__대충대충 리뷰는 금물
__웹 기반 리뷰 도구에만 의존하지는 말자
__테스트 리뷰도 잊지 말자
__어떻게든 결론을 맺어야 한다
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
8장 고객 앞으로! 소프트웨어 전달
>>> 마침내 프로덕션 환경에 안착시킬 소프트웨어의 종착지
소프트웨어 전달의 4가지 단계
효과적인 버전 제어를 위한 브랜칭 전략
빌드 단계
__패키지에 버전을 명시하자
__리소스는 각각 별도로 패키징하자
릴리스 단계
__릴리스를 남의 일로 여기지 말자
__패키지를 릴리스 리포지토리로 발행하자
__릴리스는 불변성을 갖게 하자
__자주 릴리스하자
__릴리스 일정은 투명하게 공유하자
__변경 로그와 릴리스 노트를 발행하자
배포 단계
__배포를 자동화하자
__배포는 원자적으로 수행하자
__애플리케이션을 독립적으로 배포하자
롤아웃 단계
__롤아웃을 모니터링하자
__기능 플래그를 활용하자
__서킷 브레이커를 이용해 코드를 보호하자
__서비스 버전은 병렬로 올리자
__다크 모드로 론칭하자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
9장 긴급대응 온콜 업무
>>> 언제 일어날지 모르는 장애에 대응하는 절차와 방안
긴급한 비상상황에 대응하는 온콜 업무
반드시 갖춰야 할 온콜 스킬
__항시 언제라도 대응할 준비를 갖추자
__주의를 늦추지 말고 집중하자
__업무 우선순위를 정하자
__명확하게 의사소통하자
__업무 진척사항을 추적하자
장애 처리의 5가지 단계
__선별
__조율
__완화
__해결
__후속 조치
지원 업무도 엄연한 온콜 업무다
영웅이 되려 하지는 말자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
10장 견고한 소프트웨어를 위한 기술 설계 절차
>>> 대규모 변경에 적합한 소프트웨어 설계와 문서화 기법
고깔형의 기술 설계 절차
올바른 기술 설계를 하려면
__문제를 정의하자
__해결 방법을 조사하자
__다양한 실험을 해보자
__충분한 시간을 투자하자
의사소통을 위한 설계 문서 작성 방안
__중요한 변경사항은 문서화해두자
__설계 문서를 작성하는 이유를 이해하자
__글쓰는 법을 배우자
__설계 문서는 최신 상태로 유지하자
설계 문서 템플릿의 기본 구조
__개요
__현재 상태와 컨텍스트
__변경해야 하는 이유
__요구사항
__고려할 수 있는 해결책
__채택하려는 해결책
__설계와 아키텍처
__테스트 계획
__롤아웃 계획
__미결 사항
__부록
설계 과정에서도 협업은 중요하다
__팀의 설계 리뷰 절차를 이해하자
__갑작스런 상황은 만들지 말자
__설계를 논의하며 브레인스토밍을 하자
__설계에 참여하자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
11장 소프트웨어 수명주기를 고려한 진화하는 아키텍처 구현
>>> 성장하고 발전하는 소프트웨어를 만들기 위한 핵심 원칙
복잡도를 이해하자
진화하는 아키텍처를 위한 설계 원칙
__YAGNI 원칙: 당장 필요치 않다면 구현하지 말 것
__최소 충격 원칙: 사용자를 놀래키지 말 것
__도메인 지식은 캡슐화돼야 한다
진화하는 API를 위한 설계 원칙
__API 크기는 작게 유지하자
__잘 정의한 서비스 API를 노출하자
__API 변경에는 호환성을 유지하자
__API의 버전을 관리하자
진화하는 데이터를 위한 설계 원칙
__데이터베이스를 격리하자
__스키마를 사용하자
__스키마 마이그레이션을 자동화하자
__스키마 호환성을 유지하자
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
12장 효율적인 협업을 위한 애자일 문화
>>> 모두가 알지만 실천하기는 쉽지 않은 애자일
애자일 선언문
애자일 방법론 프레임워크
스크럼으로 하는 애자일 개발 방안
__사용자 스토리
__태스크
__스토리 포인트
__백로그 분류
__스프린트 계획
신속한 업무 공유를 위한 스탠드업 회의
진솔한 피드백이 오가야 하는 리뷰
재평가와 조정을 위한 회고
중장기 계획을 위한 로드맵 수립
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
13장 관리자, 팀장, 상사와 함께 일하기
>>> 한마음 한뜻으로 공동의 목표를 향해
관리자들이 하는 일
성공적인 업무 수행과 평가를 위한 절차를 마련하자
__일대일 회의
__PPP 회의
__OKR
__성과 평가
팀장이나 상사도 여러분의 관리가 필요하다
__팀장의 피드백이 적을 경우 적극 요청하자
__팀장도 여러분의 피드백을 원한다
__여러분의 목표에 대해 팀장과 허심탄회하게 논의하자
__다 시도해봤는데도 안 된다면
개발자의 필수 체크리스트
레벨업을 위한 읽을거리
14장 경력 관리에 대한 조언
>>> 경력 관리는 빠를수록 좋다
시니어 엔지니어, 그리고 더 높은 곳을 향해
진로에 대한 조언
__T자형 인재가 되자
__개발자를 위한 다양한 프로그램에 참여하자
__승진을 원하다면 이렇게 하자
__이직은 신중하게
__다만 번아웃을 경계하라
마치며
'+ 펴낸 책' 카테고리의 다른 글
모던 리눅스 교과서 (3) | 2023.10.11 |
---|---|
자바 알고리즘 인터뷰 with 코틀린 (10) | 2023.09.12 |
게임 시스템 디자인 입문 (0) | 2023.03.24 |
제품의 탄생 (0) | 2022.11.30 |
클린 코드, 이제는 파이썬이다 (5) | 2022.08.04 |
댓글