본문 바로가기

소프트웨어,IT,컴퓨터공학 도서리뷰/마이크로서비스 아키텍처(MSA)

가상 면접 사례로 배우는 대규모 시스템 설계 기초. [6/7][인사이트] [대규모 시스템]

서비스를 지탱하는 대규모 시스템 설계.


대규모 시스템을 다루는 회사들의 내부 설계를 들여다 보다. [표면적으로]

 


정말 까다로운 영역인 시스템 디자인.

추천도 : 6/7

★★★★★★☆

읽은 기간 📅 : 2021년 11월 22일 ~ 12월 7일

 

이 책을 추천하는 이들 👨‍👧

  • 대규모 시스템을 들여다 보고 싶은 사람들.
  • 백엔드 개발자분들.
  • 시니어 개발자분들.
  • 소프트웨어 아키텍트가 꿈인 분들.

 

난이도 🦈

중상. [ 대규모 시스템 개발에 참여한 경험이 있다면 정말 재미있게 읽었을 듯 하다. ]

 

관련된 책들 📚

  1. 설계와 관련된 도서들

 

한 줄 평 ✍️

구글, 페이스북, 트위터, 위챗 글로벌 서비스를 지탱하는 아키텍처의 뼈대를 살펴보다.


해시, 키-값 저장소, URL 단축기, 웹 크롤러, 알림, 채팅, 뉴스 피드, 검색어, 비디오 스트리밍 사이트, 구글 드라이브까지.. 서비스의 뒷 무대를 살펴보다.

 

1장과 2장에서는 수백 ~ 수천만명의 사용자를 감당할 수 있도록 서비스를 설계하는 기본 템플릿을 살펴본다.

 

개인적으로 1장의 내용은 상당히 중요하다고 생각하는 편이다.

 

1장에서 설명한 시스템 디자인이 이후의 서비스들에서 계속 등장하기 때문이다.

 

모놀리식 아키텍처에서 시작해서 개별 마이크로서비스 아키텍처로 변환하여 사용자 트래픽에 안정적인 시스템으로

설계하는 것 그렇게 대규모 시스템 설계의 기초를 만드는 것이다.

[ 모든 서비스들은 모놀리식에서 시작하는 것이 바람직하다. ]

 

요청 트래픽을 로드 밸런서로 부하를 나누는 것. 

 

서비스를 처리하는 서버들이 요청 트래픽에 맞게 유연하게 확장 축소할 수 있는 구조(보통 클라우드 환경)를 갖추게 만드는 것.

 

서비스에 적합한 DB(관계형 vs 비관계형)를 사용하는 것.

 

DB의 과부하가 고려된다면 쓰기용 DB(관계형)와 읽기용 DB(NoSQL)를 분리하는 것.

 

그리고 DB의 샤딩 혹은 master-slave 구조로 관계형 DB를 관리하는 것.

 

응답의 효율성을 얻기 위해서 캐싱 DB를 두고, 클라우드 컴퓨팅 업체에서 제공하는 CDN을 사용하는 것.

 

글로벌 서비스의 경우 서비스의 가용성을 위해서 리전을 두어서 관리하는 것.

 

이 책을 "마이크로서비스 아키텍처" 카테고리에 둔 이유는 대규모 시스템 설계가 많은 부분에서 MSA와 맞닿았기 때문이다.

 

안정 해시 설계, 키-값 저장소 설계, 분산 시스템을 위한 유일 ID 생성기 설계, URL 단축기 설계는

 

대규모 시스템을 "위한" 기술로 볼 수 있고

 

이후의 웹 크롤러부터 구글 드라이브 설계까지는 실제 대형 IT 업체들의 기술을 기반으로 설계를 해석해볼 수 있다.

 

현재 회사에 있는 상태가 아니라서 나에겐 정말 재밌는 이야기처럼 느껴지는 시스템 디자인들이 많았다.

 

해당 책은 공부도 공부지만 서비스 너머를 살펴볼 수 있는 유쾌한 시야를 제공해주기도 한다.

 

~~부분에 ~~알고리즘이 적용되는 것이었구나!!

 

해시 함수가 이런 용도로도 사용되는 구나.

 

대형 IT 서비스들의 뒷 무대를 구경하면서 입이 떡 벌어졌다.

 

나중에는 공부로 접근하기 보다는 시스템 설계의 이야기를 듣는 것으로 접근하게 되었다.

 

저자가 남겨준 마지막의 기술 블로그와 실세계 설계의 정보들에는 값진 정보들이 있을 것이라 생각한다.

 

그런 점에서 보면... 미국의 IT회사들은 진짜 외계의 영역처럼 느껴지기도 한다. [ 세상의 모든 천재가 모인 느낌.. ]

 


대규모 시스템을 위한 접근.

 

각 장의 설계 부분은 접근법이 명쾌하다.

 

1. 문제를 이해하는 것. 그리고 설계 범위를 확정하는 것.

 

2. 개략적 설계안을 제시하고 면접관에게서 동의를 구하는 것.

 

3. 상세 설계로 접근하면서 특별하게 처리해야 하는 부분에 강점을 두는 것.

 

이 접근법은 어딜가나 중요하다. 특정 기술을 먼저 떠올리는 것이 아니라 "문제"를 이해하는 것이다.

 

해당 서비스의 사용자는 어떤 서비스를 받는 것인지.

 

몇명의 사용자 수가 고려되는 지.

 

해당 사용자의 활동을 어느정도의 시간으로 예측되는지.

 

특별한 예외 상황은 없는지.

 

이후 개략적인 틀을 잡고 하나하나 블록을 추가하면서 세부적으로 만들어간다.

 

대규모 서비스들 뒷편에는 어떤 구조가 존재하는지 궁금한 분들에게 추천하고 싶은 책이다.

 

인사이트 출판사 책은 믿고 본다. [ 최고다 ]

 

멋진 저서를 번역해준 이병준 옮긴이 분에게 감사를 표한다.

 

나중에 취업하게 되면 다시 꼭 읽어보고 싶은 책이다. 

 

반응형