까다로운 분산 시스템 다루기
분산 시스템은 상호 연결된 여러 노드 또는 서버가 서로 협력해 공통의 목표를 달성하는 소프트웨어 아키텍처입니다. 하지만 분산 시스템은 다루기 까다롭기로 악명이 높습니다. 내재하는 불확실성으로 인해 어떤 일이 일어나고 있는지 파악하기조차 어렵고 문제가 생겼을 때 해결책을 찾아 적용하기도 어렵습니다. 해결책으로 도입한 방법이 또 다른 고민거리를 안겨 주기도 합니다. 예를 들어 데이터를 단일 서버에서 처리하기 어려워 여러 서버에 나눠 저장하려고 하면 “여러 서버에 존재하는 데이터를 어떻게 동기화할 것인가”와 같은 까다로운 문제가 생깁니다.

패턴을 알면 분산 시스템이 보인다
2017년에 저자는 서티미터망원경(Thirty Meter Telescope)이라는 대형 광학망원경에 들어가는 소프트웨어 시스템 개발에 참여하고 있었는데, 핵심 프레임워크와 다양한 하위 시스템에서 사용하는 여러 서비스 구축이 필요했습니다. 망원경 생태계의 독특한 특성상 기성 분산 시스템 제품이나 프레임워크를 사용할 수 없었습니다. 결국 저자는 밑바닥부터 핵심 프레임워크는 물론, 핵심 프레임워크의 다른 하위 시스템에서 사용할 서비스를 스스로 구축해야 했습니다. 평소 제대로 이해했는지 확인하는 가장 좋은 방법은 코드 작성이라고 믿던 저자는 분산 시스템의 코드 블록을 검토하면서 이들 코드 사이에는 유사점이 많다는 점, 즉 패턴을 발견합니다.
일반적으로 패턴이라 함은 소프트웨어 시스템에서 마주치는 특정 문제와 실제 코드로 구현 가능한 구체적인 해결 방안을 설명하는 방법론입니다. 패턴의 주요 강점은 직관적인 이름과 코드 수준으로 제공하는 상세함에 있습니다. 저자는 서티미터망원경 프레임워크를 만들면서 확인했던 다양한 패턴들에 대한 연구가 분산 시스템 이해에 도움을 주리라는 생각으로 이 책을 기획합니다.
책에서 패턴으로 구현한 일반적인 문제와 코드 수준의 해결책을 연구하면 분산 시스템의 설계 원리와 동작 방식에 대한 탄탄한 기초를 다질 수 있습니다.
이 책의 구성
책은 총 6부로 구성되어 있고 개념적으로는 크게 두 부분으로 나뉩니다. 먼저 첫 번째 부분인 1부는 분산 시스템 설계의 핵심 주제를 다룹니다. 1부를 구성하는 두 개의 장은 분산 시스템을 설계할 때 발생하는 도전 과제와 그 해결책을 개략적으로 다룹니다. 분산 시스템을 밑바닥부터 구현했던 자신의 경험을 기반으로 저자는 시스템 설계 과정에서 발생할 수 있는 다양한 패턴을 점진적인 방법으로 설명합니다. 1부를 여러 번 정독하면 분산 시스템의 기초적인 설계 문제를 이해하게 됩니다.
분산 시스템 설계의 상세한 해결책은 패턴으로 구성한 두 번째 부분(2부에서 6부)에서 제시합니다. 이 패턴들은 분산 시스템의 핵심 빌딩 블록으로 복제(Replication), 파티션(Partition), 클러스터 관리(Cluster Management), 분산 시간(Distributed Time), 네트워크 통신(Network Communication) 등 총 5개의 범주로 구분되어 있습니다. 30개의 패턴마다 실질적인 구현 코드를 보여 줌은 물론 실제로 상용되고 있는 다양한 제품에서의 적용 사례도 함께 소개하고 있습니다.
문제 해결의 시작, 30가지 핵심 패턴…
쓰기 전 로그 | 분할 로그 | 로우 워터마크 | 리더 팔로워 | 하트비트 | 과반수 정족수 | 세대 시계 | 하이 워터마크 | 팍소스 | 복제 로그 | 단일 갱신 큐 | 요청 대기 목록 | 멱등 수신자 | 팔로워 읽기 | 버전화 값 | 버전 벡터 | 고정 파티션 | 키 범위 파티션 | 2단계 커밋 | 램포트 시계 | 하이브리드 시계 | 시계 제한 대기 | 일관성 코어 | 리스 | 상태 감시 | 가십 전파 | 자생적 리더 | 단일 소켓 채널 | 묶음 요청 | 요청 파이프라인
《30가지 패턴으로 배우는 분산 시스템 설계와 구현 기법》은 다음 서점에서 구입하실 수 있습니다.
교보문고 YES24 알라딘