가상 면접 사례로 배우는 대규모 시스템 설계 기초

2022-04-24

book-cover

작년에 트위터에서 워낙 자주보이던 책이라 읽어야지 마음만 먹다가 올해 초에 드디어 구매한 책입니다. 반 정도 읽다가 말았는데 회사에서 이 책을 읽는 스터디가 열려 참가하게 되었습니다. 한 주에 3-4 챕터씩 읽어오는 빡빡한 일정으로 진행되었지만 이번에는 꼭 끝까지 읽겠다는 마음 하나로 주말내내 이 책을 붙잡고 있었습니다. 책 내용 뿐만아니라 참고 문헌에도 유용한 내용이 많아 깊게 공부하는 데에 시간이 많이 들더라구요.

그리고 지난주 드디어 5주 간의 스터디가 끝이 났습니다! 기억이 날아가기 전에 후기를 남겨보겠습니다.

좋은 질문의 중요성

이 책은 각 챕터 별로 다른 설계 시스템을 다루고 있습니다. 매번 새롭게 면접이 시작돼요. 면접이 시작되면 면접자가 질문을 시작합니다. ‘어떤 클라이언트를 지원해야 하나요?’, ‘가장 중요한 기능은 무엇인가요?’, ‘대략적인 사용자 수는 얼마나 되나요?’ 이런 질문을 통해 시스템의 요구사항을 파악하고 그에 맞는 설계를 합니다.

실무를 하면서 질문을 잘하고 있나 스스로를 돌아보게 되었습니다. 요구사항의 빈 영역을 넘겨짚어 채우던 저 자신을 반성해보게 되네요. 제가 아는 편한 설계를 하기 위해 질문을 피해온건 아닌지 책 속의 면접자를 보며 저를 비추어보게 되었습니다.

질문을 잘 하기 위해서는 스스로에게도 질문을 잘 해야 모르는 부분을 명확히 알 수 있는 것 같아요. 내가 경험해본 부분과 경험해보지 못해 실험해봐야 하는 부분을 잘 구분하여 애매한 지점을 없애야겠다는 다짐을 해보게됩니다.

다뤄보지 못한 시스템이 아직 많다

이 책에 대해 찾아보니 결제 시스템, 구글 맵, 메트릭스 모니터링 등을 다룬 2권도 있더라구요. 언제 이렇게 많은 시스템을 경험해보게 될지 조급한 마음이 들기도 합니다.

이걸 전부 경험해보는 것은 당연히 말도 안되지만, 각 시스템 설계를 간접적으로 체험하며 문제점과 해결책을 찾아가는 패턴이 좋은 훈련이 된거같아요. 2권도 곧 펼쳐보게 될것 같습니다.

함께 읽는 즐거움

책 내용이 물론 재미있고 실용적이기도 했지만 다함께 책에 대해 이야기 나누는 매주 수요일 오후 2시가 즐거웠기 때문에 책 읽기를 소홀히하지 않을 수 있었습니다.

다른 분들의 질문과 의견을 듣는 것의 재미와 소중함을 알게 되었습니다.

어떤 챕터들은 유사한 시스템을 설계해본 분들이 계셔서 더 깊이 이해하는 데 도움을 받을 수 있었어요.

각자의 경험을 나눌 수 있다는 것이 스터디의 큰 장점임을 다시한번 깨달았습니다. 저만 얻어갈 것이 아니라 동료분들에게 작은 도움이라도 되고자 더 열심히 스터디를 준비할 수 있었습니다.

나도 홍익인간이 돼야지

책 내용은 저자가 겪은 것을 바탕으로 많은 블로그 글, 논문 등을 토대로 작성되었습니다. 이런 좋은 책을 만들어 준 알렉스 쉬의 홍익인간 정신에 너무 감사합니다.

저도 경험을 잘 기록하고 나누는 사람이 되어야지 다짐해보게 됩니다.

옮긴이 이병준님과 인사이트가 한번 더 협업하여 꼭 2편도 번역본이 나왔으면 좋겠습니다.

세심한 번역

어떤 개발 서적들은 어색한 한글 번역이 많아서 읽었으나 이해할 수 없는 문장이 있기도 합니다. 번역본 구매를 선뜻 하지않는 가장 큰 이유인데요. 이 책은 개발 경험을 바탕으로 세심하게 번역이 되었다고 느꼈습니다.

한글로 번역하되 영어로도 표기해주는 질의(query) 같은 형식이 읽기 정말 편했습니다.

또한 현업에서는 영어로 더 자주 쓰이지만 한글 번역을 포기하지 않은 노력이 보입니다. divide and conquer를 각개전투로 번역한 문장에서 그런 고민의 흔적을 느꼈습니다.

쪼개서 해결하면 풀지못할 문제는 없다

시스템 설계가 복잡해질수록 컴포넌트를 쪼개는 이야기가 많이 등장합니다. 그리고 컴포넌트 사이에 큐를 둬서 느슨히 결합하는 패턴도 많이 등장합니다.

함수형 프로그래밍에 발을 담그고 있어서 그런지 큰 문제를 잘게 쪼개서 풀어나가는 모습이 함수형 프로그래밍과 비슷하다는 생각이 들었습니다.

이 책을 읽고 아무리 큰 문제라도 잘 나눈다면 해결할 수 있겠다는 자세를 더 견고히 다지게 되었습니다.

데이터 분석의 중요성

책 제목에서 알 수 있듯 이 책은 대규모 설계를 다루고 있습니다. 아무리 큰 트래픽이 와도 견딜 수 있는 설계를 해야합니다. 큰 트래픽을 다룰 수록 사용자의 패턴이 설계의 많은 부분을 결정합니다.

뉴스 피드 설계에서는 최근 사용 시점이 오래된 사용자의 피드는 온디맨드로 구성하는 방식을 택하고 있고, 구글 드라이브 설계에서는 사용자의 접근이 거의 없는 파일을 좀 더 값싼 스토리지로 이동시키는 방식을 택하고 있습니다.

이처럼 사용자의 편의성과 자원을 저울질하며 합의점을 찾을 때는 데이터 패턴을 파악하는 능력이 큰 역할을 합니다. 시스템을 설계하는 데 있어서 사용자 패턴과 컴퓨터 자원의 메트릭 패턴을 볼줄 아는 것이 큰 도움이 될 것 같습니다.