IT회사 팀사람들과 스터디 하기 3차, 가상 면접 사례로 배우는 대규모 시스템 설계 기초

     

목차

     

    🔥 스터디의 시작

     

    어느덧, 스터디 2회 차가 끝나고 3회 차에 접어들었다. 기존에 약간 프로그램 언어에 관한 것이었다면, 이번엔 이론? 설계? 에 관한 스터디를 하고 싶어 했다. 너무 코드를 많이 읽어서 그런지 그냥 쉽게 읽히면서 쉬어가는 스터디 시간? 을 갖기 위함이었다. 

     

    그렇게 선택된 책은 가상 면접 사례로 배우는 대규모 시스템 설계 기초라는 책이다. 생각보다 이곳저곳에서 이 책을 가지고 스터디를 많이 하는 것 같았다. 배민에서 진행하는 우아한 스터디에도 이 책을 가지고 스터디하는 게 있어서 나름 유명한 책인가 보다~ 생각했고, 출판일도 나름 최신이라서 최근 트렌드를 배우는데 도움이 될 것 같았다.

     

    책 표지

     

     

    📕 책 소개

     

    애초에 책을 먼저 선택하고 시작한 스터디이기 때문에 책선정은 따로 없었다. 해당 책은 여러 가지 시스템을 챕터별로 나눠서 설명하는 구성이다. 챕터는 다음과 같다.

     

    1장 사용자 수에 따른 규모 확장성
    2장 개략적인 규모 추정
    3장 시스템 설계 면접 공략법
    4장 처리율 제한 장치의 설계
    5장 안정 해시 설계
    6장 키-값 저장소 설계
    7장 분산 시스템을 위한 유일 ID 생성기 설계
    8장 URL 단축기 설계
    9장 웹 크롤러 설계
    10장 알림 시스템 설계
    11장 뉴스 피드 시스템 설계
    12장 채팅 시스템 설계
    13장 검색어 자동완성 시스템
    14장 유튜브 설계
    15장 구글 드라이브 설계
    16장 배움은 계속된다

     

    총 16장으로 구성되어 있어서 우리는 일주일에 4챕터씩 4주로 진행하기로 했다. 각 챕터가 생각보다 재밌는 내용을 다루고 있었기 때문에 앞으로 스터디가 재미있어질 것 같았다.

     

     

    📝 어떤 것을 배웠나? (기억나는 내용 위주)

     

    1장 사용자 수에 따른 규모 확장성

     

    사실 1장이 제일 재미있었다. 원래 문제집 풀 때도 1장은 열심히 하는 게 국룰이니까 

    1장은 서비스가 커지면서 시스템 구조가 어떻게 바뀌는지를 시간의 흐름으로 보여주었다. 처음에는 아주 작은 시스템이었는데, 사용자가 많아지면서 시스템이 확장되었다. 그때그때 사용되는 기술이나 설계방법 등을 보여주었는데, 현업 경험이 없는 주니어들이 보면 좋을 것 같다. 

     

    우리 팀에서 현재 회사가 첫 회사인 팀원이 있는데, 그 팀원은 당연히 이렇게 구성해야 하는 거 아닌가?라고 생각하는 내용이 책에 적혀있었다고 했다. 아무래도 처음부터 대규모 시스템을 만졌기 때문에 시스템 구조가 당연하다고 생각했다고 한다. 하지만 작은 회사나 스타트업은 결코 완벽한 시스템이 구성되어있지 않다. 따라서 아주 작은 소규모 시스템으로 부터 확장하게 되는데, 이렇게 대규모 시스템에 대한 경험이 없는 개발자들에게 아주 좋은 내용이 될 것 같다. 안 그래도 채용 조건에 '대규모 시스템 운용 경험'이라는 게 항상 있는데, 입사를 시켜줘야 대규모 시스템을 운용하지 ㅋㅋㅋ 이 책이라도 읽고 간접 경험을 하면 면접 때 정말 도움이 될 것 같다.

     

    5장 안정 해시 설계

     

    평소에 해시함수를 아주 많이 사용하지만, 실제로 안정 해시라는 개념을 책에서 처음 봤다. 해싱을 균등하게 하기 위해 해시 링을 사용하여 분배하는 방법이 아주 신선했다.

     

    안정 해시 챕터가 기억에 남는 이유는 최근에 레디스 클러스터를 사용하면서, 어떤 데이터가 어떤 클러스터에 들어가는지 어떻게 계산하는가?를 디깅 했었는데, 스프링에서 자체 라이브러리가 레디스에 데이터를 넣을 때 키를 해싱해서, 해싱된 데이터를 가지고 어떤 클러스터에 들어갈지 정하게 된다. 레디스 클러스터들에게 골고루 데이터를 분산시키기 위해서는 안정 해시를 사용해서 분배한다고 한다. 이게 생각보다 복잡한 이유가 클러스터가 추가되거나 제거될 경우에도 기존 데이터를 클러스터들이 골고루 나누어 가져야 하는데, 요것을 해결하는 방법이 생각보다 재밌다. 여기에 적기에는 너무 복잡하기 때문에 궁금하면 책을 읽어보는 걸로,,,, ㅎㅎ

     

     

    8장 URL 단축기 설계

     

    이전에 스타트업에서 일할 때 긴 URL을 짧게 줄여주는 서비스를 이용했었는데, 이 서비스가 유료 서비스였다고 한다. 무료로도 사용 가능하긴 한데, 유료로 쓰면 추가 기능들이 있다나,,, 

     

    이런 URL 단축 서비스를 설계하는 방법이 이 챕터에 나온다. 생각보다 단순.. 어떻게 URL을 단축시킬지, DB를 쓸지? 안 겹치게 어떻게 할지? 등등의 내용이 나오는데 이런 서비스 만들어서 광고 달면 돈이 되려나?라는 생각이 더 많이 들었던 것 같다 ㅋㅋㅋㅋ

     

     

    14장 유튜브 설계

     

    예전에 BTS동영상이 유튜브에 업로드 된지 1시간 만에 수백만 뷰가 찍혀서 유튜브가 어떻게 이게 가능한가에 대한 아티클을 본 것 같다. CDN을 아주 잘 활용했다는 게 주 내용이었는데, 이 챕터에서도 비슷한 내용이 나온다. 유튜브에서 어떻게 동영상을 끊임없이 스트리밍 하는가? 가 주 내용이다. 

     

    최근에 누가 email로 비슷한 질문을 물어봐서 아주 타이밍 좋게 대답을 해줄 수 있었던 기억이 난다. ㅋㅋㅋㅋ 

    유튜브 같은 시스템을 만들고 싶지만, CDN비용이 매우 매우 비싸기 때문에 적자일 것 같다. 그냥 서비스 이용하는 게 개 꿀~

     

     

     

    🙌 스터디 후기

     

    책 초반은 재밌게 읽었는데, 후반으로 갈 수록 내가 지친 건지, 책 내용이 지루한 건지 재미가 없었다.

     

    하지만 챕터 1의 내용은 정말 좋기 때문에 나중에 따로 유튜브로 만들어보면 좋을 것 같다는 생각이 든다. 간단하게 5분 정도? 하면 취준생분들이나 면접 준비자들한테 아주 좋은 내용이 될 것 같다.

     

    책의 전체적인 내용은 가상 면접을 통해 진행되긴하는데, 우리나라 회사들 중에 이렇게 높은 퀄리티의 면접을 보는 회사가 있을까?라는 생각도 들었다. ㅋㅋㅋ

     

    실리콘 밸리 정도는 되야 이런 수준의 면접을 진행하지 않을까....

     

     

    반응형

    댓글

    Designed by JB FACTORY