개발 · 프로그래밍

/

개발 · 프로그래밍 기타

대규모 시스템 설계 Part 1

유명한 논문, 책, 아티클을 통해 글로벌 스케일의 서비스의 공통적인 컴포넌트를 학습해요.

(4.9) 수강평 9개

수강생 256명

Thumbnail

초급자를 위해 준비한
[개발 · 프로그래밍, 백엔드] 강의입니다.

이런 걸
배워요!

  • 시스템설계

  • 컴퓨터공학

  • 분산시스템

복잡하고 어려워 보이는 분산 시스템,
사실 해결 방법에 패턴이 있다는 거 아시나요? ⭐

이런 고민 해보셨나요?

대규모 시스템을 경험한 적 없는데, 이직하고 싶은 회사는 대규모 시스템 지식을 요구하네...

분산 시스템을 공부해 보고 싶은데 어디서부터 시작해야 하지?

대규모 시스템을 만들어야 하는데, 어떤 문제가 있을지, 어떻게 해결하는 게 좋을지 모르겠어.

알쏭달쏭 대규모 시스템,
이렇게 공부해 보세요! 📖

분산 시스템은 정말 어려운 영역이에요. 분산 시스템으로 구성된 서비스가 100개가 있다면 각 서비스는 상황에 맞게 모두 다른 전략으로 분산 시스템을 활용하고 있습니다. 하지만 분산 시스템에서 해결해야 하는 문제는 일반적인 패턴을 따르는 경우가 많아요. 따라서 문제를 해결하는 방법도 패턴화되어 있어요.

강의에서는 Planet-scale의 서비스들이 어떤 고민을 하면서 개발됐을지 유명한 논문을 통해 공부해요. 대규모 서비스에서 만날 수 있는 공통적인 문제를 유명한 책, 논문, 아티클을 통해 학습합니다.

Scaling Memcache at Facebook 논문
Dynamo 논문

지식공유자 제이스 님의 한마디 🧑‍💻

제가 주니어 때 회사 시니어분에게 "제가 대규모 시스템을 개발해 본 적이 없으니, 지금 만들고자 하는 것이 좋은 방법인지 잘 모르겠어요."라는 얘기를 한 적이 있어요.

시니어분은 저에게 "아무도 현재 상황을 정확히 경험해 본 적은 없어요. 대규모 시스템은 회사마다 마주하는 디테일한 문제가 다르거든요. 그래서 우리는 비슷한 문제를 어떻게 해결했는지 깊게 공부해서 우리에 맞는 해결책을 찾아야 해요."라는 말을 해주셨습니다.

저는 이런 문제들을 공부하기 시작했고 이 과정에서 어떻게 공부하면 엔지니어로서 성장할 수 있다는 걸 알게 됐습니다. 제 강의를 통해 주니어 개발자 여러분들이 깊이 있게 공부하는 방법을 알 수 있게 되면 좋겠네요.


강의 특징 ✨

  • ✔️ 복잡한 분산 시스템에서 반복적으로 등장하는 컴포넌트에 대해 학습할 수 있어요.
  • ✔️ 구체적인 컴포넌트들이 실제 시스템에서 어떻게 활용되는지 논문, 책, 오픈소스, 사례 등을 바탕으로 설명합니다.
  • ✔️ 컴포넌트 용어집을 제공합니다. 용어집은 분산 시스템을 이해하고 설계할 수 있도록 제작되었어요.
  • ✔️ 강의 유닛별 수업 노트를 확인해 주세요. 강의 내용에 대한 소개와 읽을거리가 포함되어 있습니다.

학습 내용 📚

강의에서는 분산 시스템의 기본적인 내용인 Replication, Sharding, Consistent Hashing 등 컴포넌트를 배웁니다. 이후, 배운 컴포넌트들이 적용된 유명한 실제 사례를 학습합니다.

섹션 0 Introduction

강의 전반을 소개합니다. 강의 목표 및 수강 대상, 강의 주요 내용 및 진행 방식을 확인할 수 있습니다. 

섹션 1 대규모 시스템 기본 이론

시스템 설계의 대전제인 CAP 이론과 분산 저장기법인 레플리케이션, 파티셔닝, 샤딩을 학습합니다.

섹션 2 분산 시스템의 컴포넌트

분산 시스템 설계 시 자주 접하게 되는 컴포넌트인 Consistent Hashing, Rate Limiter(처리율 제어), Unique ID Generator를 학습합니다.

섹션 3 Case Study

논문을 바탕으로 글로벌 기업인 아마존, 페이스북, 인스타그램의 분산시스템 구현 사례를 살펴봅니다.

📢 수강 전 확인해 주세요!

  • 기초적인 네트워크 및 데이터베이스에 대한 지식을 설명하는 강의는 아닙니다. 하지만 너무 걱정하실 필요는 없어요. TCP, Transaction 등 정말 기본적인 용어에 대해 익숙하다면 괜찮아요.
  • 본 강의는 실습수업을 포함하지 않습니다. 분산 시스템은 장애 예측과 해결이 더 중요하기 때문에, 강의에서 해당 내용을 경험하는 게 어렵다는 점 참고해 주세요.

수강 타겟/강의 목적 🙆‍♀️

대규모 시스템 설계를 경험해 본 적 없는 주니어 개발자

분산 시스템의 컴포넌트를 공부하고 싶은 개발자

복잡한 시스템을 거시적이고 이론적으로 공부하고 싶은 분

백엔드 시스템을 개발하는 1~3년 차 백엔드 개발자

📌 이 강의와 함께해요!

  • 대규모 시스템에서 생길 수 있는 문제와 이 문제를 어떻게 해결할 수 있는지 알 수 있어요.
  • 대규모 시스템을 설계할 때 Best Practice를 설득력 있게 설명할 수 있어요.
  • 더 심화된 분산 시스템을 학습하기 위한 좋은 이론적 배경들을 습득할 수 있어요.
  • PPT 학습 자료 및 심화 학습 자료 링크를 전달해드려요.

예상 질문 Q&A 💬

Q. 컴퓨터 공학을 잘 모르더라도 괜찮을까요?

기본적인 CS 지식이 요구되긴 합니다. 어느 정도를 기본이라고 말씀드리기 어렵지만, Backend 엔지니어로 일할 수 있는 정도라면 나머지 부족한 지식은 질문과 검색으로 해결할 수 있을 것으로 예상돼요.

Q. 실습이 있나요?

이 강의는 이론 강의입니다. 분산 시스템을 간단히라도 개발해 보는 것은 정말 유의미한 공부 방법이지만, 분산 시스템이 어려운 이유는 장애 상황 때문이라고 생각합니다. 알 수 없는 네트워크 장애를 시뮬레이션해 보는 환경까지 구축하기는 쉽지 않기 때문에 이 강의에서는 구현 실습이 없습니다. 대신 실제 사례가 어떻게 장애를 해결했는지 학습할 수 있어요.

Q. 이 강의를 들으면 어떤 걸 기대할 수 있을까요?

이 강의 시리즈는 주니어 개발자분들이 분산 시스템 지식의 용어집처럼 사용되길 바랍니다. 분산 시스템에서 사용되는 정말 공통적이고 유명한 문제와 솔루션을 이 강의로부터 습득하고 유사한 문제를 만나거나 해결하도록 설계를 할 일이 있을 때 이 강의 내용을 떠올릴 수 있습니다. 또는 시스템 설계를 요구하는 면접에서도 설득력 있는 주장을 할 수 있어요.


이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 주니어 백엔드 개발자

  • 분산 시스템을 공부하고 싶은 사람

선수 지식,
필요할까요?

  • 기본 네트워크 지식과 용어

  • 기본 데이터베이스 지식과 용어

안녕하세요
Jayce입니다.

안녕하세요. 저는 Jayce입니다. 현재 유니콘 스타트업의 플랫폼 엔지니어로 일하고 있습니다.

저는 창업도 하고 대규모 서비스를 위한 개발도 하고 개발자를 위한 플랫폼을 만들기도 하면서 짧은 시간 동안 서비스 개발자라고 불리는 역할도 수행해보고 플랫폼 엔지니어라고 불리는 역할도 수행했습니다. 그 과정에서 "잘하는 Software Engineer는 어떤 특징이 있고 어떻게 해야 그런 사람이 될 수 있구나"를 나름대로 정립할 수 있었습니다.

저는 짧게 말해서 Deep Dive 하는 사람들을 함께 일하는 엔지니어로서 매력적이라고 느낍니다. 단순히 주어진 일을 기계처럼 쳐내는 사람은 어떤 상황에 대한 최선의 선택을 내리기까지 비교적 오랜 시간이 걸리는 것 같아요. 반면 왜 이런 결정을 해야하는지 기술 내면의 공학적인 이유를 파고들며 이해하는 사람들은 금방 다른 의사 결정에서도 공학적으로 설득력 강한 주장을 할 수 있는 사람이 됩니다.

제가 만드는 강의는 새로운 기술을 얕게 익히는 것을 목표로 하지 않습니다. 저는 주니어 개발자들이 훌륭한 팀 동료, 매력적인 개발자, 단단한 기술자가 될 수 있는 방법을 알려주고 싶습니다. 더욱 매력있는 엔지니어가 되기 위해 조금 더 깊은 내용을 공부해보고 싶은 사람들에게 적합한 강의를 제 최선의 노력으로 만들어보겠습니다. 🙂

커리큘럼

전체

14개 ∙ (2시간 10분)

수업 자료

가 제공되는 강의입니다.

  • 사용자 수에 따른 규모 확장

    13:33

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!