리더 기반 복제 (Leader-Based Replication)리더(Primary)가 쓰기 작업을 처리하고, 팔로워(Replica)는 리더의 로그를 따라감 일관성을 비교적 쉽게 유지할 수 있는 구조장점 쓰기 순서를 리더가 결정하므로 순차성 보장 클라이언트는 리더로만 쓰기 요청 → 충돌 방지단점 리더 장애 시 리더 선출 필요 (합의 알고리즘 필요) 팔로워가 리더와 동기화되지 않으면 최신 데이터 보장 안 됨클라이언트 쓰기 옵션 리더에게만 쓰기 팔로워 읽기 허용 vs 제한 (Read Your Writes 등 보장 여부)일관성 모델 (Consistency Model)어떤 시점에 어떤 노드가 어떤 데이터를 읽을 수 있는가에 대한 규칙강한 일관성 (Strong Consistency) 모든 노드가 항상..
분산 시스템에서 일관성을 유지하는 것은 매우 어려운 과제이다. 이 장에서는 분산 환경에서 흔히 발생하는 문제들과 그 원인을 다룬다.1. 부분 장애 (Partial Failure) 단일 시스템에서는 전체가 성공하거나 실패하지만,분산 시스템에서는 일부 노드, 일부 네트워크 링크 등만 실패하는 부분 장애가 일반적이다. 장애 감지는 어렵고, 실패인지 지연인지 구분하기 힘들다. 복구 가능한 실패인지 여부도 알 수 없는 경우가 많다. 2. 신뢰할 수 없는 네트워크 분산 시스템은 비동기 네트워크 위에서 동작하며,패킷 지연, 손실, 재정렬, 중복 전송 등의 문제가 발생할 수 있다. 메시지가 수신되지 않았다고 해서, 전송되지 않은 것은 아니다. 타임아웃과 재시도를 통한 실패 감지는 부정확하다. 3. 신뢰할 수..
1. 트랜잭션이란?여러 데이터베이스 연산을 하나의 논리적 작업 단위로 묶는 개념중간 상태 없이 전부 성공하거나 전부 실패해야 함예: 은행 송금 시 출금과 입금은 함께 성공하거나 함께 롤백되어야 함2. ACID 속성Atomicity (원자성): 모든 연산이 전부 실행되거나 전부 실행되지 않아야 함Consistency (일관성): 트랜잭션 전후의 데이터 상태가 일관성을 유지해야 함Isolation (격리성): 동시 실행되는 트랜잭션들이 서로 간섭하지 않아야 함Durability (지속성): 트랜잭션 완료 후 변경 내용은 영구적으로 저장되어야 함3. 격리 수준 (Isolation Level)격리 수준이 높을수록 일관성은 보장되지만 성능은 낮아짐Read Uncommitted커밋되지 않은 데이터도 읽을 수 있음더..
복제 방식에는 크게 두 가지가 있음1. 리더-팔로워 복제리더가 모든 쓰기를 처리함.팔로워는 리더의 데이터를 따라감.대부분의 데이터베이스가 이 방식을 씀.읽기를 팔로워로 분산하면 성능은 좋아짐.근데 리더 장애 시 복구가 어려울 수 있음.또 팔로워의 데이터가 최신이 아닐 수도 있었음.2. 멀티리더 복제여러 노드가 동시에 쓰기 처리함.충돌이 발생할 수 있음.충돌 해결 정책이 필요했음.지리적으로 분산된 시스템에서 유용함.3. 리더 없는 복제모든 노드가 동등하게 읽기/쓰기 처리함.높은 가용성을 가짐.일관성 유지가 어려움.애플리케이션이 충돌을 감수하거나 직접 해결해야 했음.복제를 하면 생기는 문제도 있었음. • 복제 지연 때문에 읽었을 때 최신 데이터가 아닐 수 있었음. • 팔로워가 리더보다 뒤처질 수 있었음. •..
1. 파티셔닝이란?파티셔닝은 데이터를 여러 파티션 또는 샤드로으로 나누어 저장하는 방법입니다. 각 파티션은 독립적인 저장소이자 처리 단위가 되어, 분산 시스템에서 데이터 작업을 병렬로 수행할 수 있게 해준다.예:트위터는 유저 ID 기준으로 트윗을 파티셔닝하여 수억 명의 사용자 트윗을 분산 저장MySQL의 샤딩된 테이블은 서로 다른 서버에 분산되어 트래픽을 나눔2. 파티셔닝 키 (Partitioning Key) 선택파티셔닝에서 가장 중요한 결정은 어떤 필드를 기준으로 데이터를 나눌 것인지입니다. 이 필드를 샤딩 키라고 부른다.좋은 파티셔닝 키의 조건:균등 분산: 특정 키에 데이터가 몰리지 않아야 함쿼리 효율성: 자주 조회되는 쿼리가 해당 키로 빠르게 조회 가능해야 함불변성: 파티셔닝 키는 한 번 저장된 후..
5장. 복제 (Replication)1. 복제를 사용하는 이유데이터 복제는 하나의 데이터를 여러 서버에 저장하여 다음과 같은 목적을 달성하기 위해 사용된다.내결함성 향상: 하나의 서버가 장애를 일으켜도 다른 복제본을 통해 서비스 지속 가능지연 시간 단축: 사용자와 가까운 지역의 서버에서 응답 제공 가능읽기 처리량 확장: 읽기 요청을 여러 서버에 분산하지만 복제는 동기화 지연, 일관성 문제, 충돌 처리와 같은 복잡한 문제도 함께 수반한다. 2. 리더-팔로워 복제구조리더 서버에서만 쓰기 가능팔로워 서버는 리더의 데이터를 복제하여 읽기만 수행리더의 변경 사항은 로그를 통해 팔로워로 전달데이터 흐름클라이언트가 리더에게 쓰기 요청리더가 데이터를 변경하고 로그에 기록리더가 변경 로그를 팔로워에게 전송팔로워가 로그를..
1장. 신뢰할 수 있고, 확장 가능하며 유지 관리가 쉬운 애플리케이션 설계1. 애플리케이션의 역할 변화예전에는 애플리케이션이 단순히 데이터를 입력받아 저장하고 조회하는 역할이었지만,지금은 수많은 사용자, 데이터, 외부 서비스와 통신하는 복잡한 시스템이 됨.이런 변화 속에서, 애플리케이션의 핵심 품질 속성 세 가지를 기준으로 설계해야 함.2. 신뢰성 (Reliability)장애가 발생해도 시스템이 올바르게 동작하는 것.장애의 예:하드웨어 오류 (디스크 불량, 서버 다운 등)소프트웨어 오류 (버그, 예외 처리 실패)사람의 실수 (잘못된 설정, 운영 실수 등)이를 대비하는 방법:복제(replication): 데이터를 여러 곳에 복사해 장애 시에도 접근 가능리트라이와 타임아웃: 일시적 오류에 대비모니터링과 알림..
회고를 시작하며 2023년은 나에게 많은 일이 있던 해였다. 이룬것도 많았고 놓친것도 많았다. 말고 많고 탈도 많았던 2023년을 되돌아보자. 팀 이동 줌인터넷 재직 당시 다른 팀에서 진행하는 스터디에 합류해서 같이 공부해 보자는 제안을 받았다. 평소 다른 팀들과 친해질 수 있는 계기가 없기 때문에 좋은 기회라고 생각되어 가상 면접 사례로 배우는 대규모 시스템 설계 기초 라는 책을 같이 학습하였다. 단순히 책을 읽는 것으로 끝나지 않고, 각자 생각하는 설계를 화이트보드에 적어가면서 토론하는 방식으로 진행되었는데 새삼스레 다른 팀 문화를 느낄 수 있어 좋은 경험이었다. 스터디를 진행하던 도중 파트장님이 같이 근무해 보자는 제안을 먼저 해주셨고, 몇 차례의 면담 끝에 핀테크개발팀 에 합류하게 되었다. 사내에..
회고를 시작하며 2022년 하반기는 개인의 성장보다는 회사 업무에 집중했던 시기였다. 이직 후 회사 업무 프로세스에 적응이 필요하기도 했고 보상 심리가 생겨 나름대로 휴식도 많이 취했다. 스스로 만족스럽지 못한 2022년 하반기 회고를 시작해보자 파일럿 프로젝트 사내 신규 입사자들은 입사 후 파일럿 프로젝트를 진행하는 문화가 있다. 입사 시기에 맞춰 파일럿 프로젝트 과제를 준비해주셨고 내가 진행했던 과제는 기존 회원 구조를 통합 회원으로 개선하는 것이었다. 통합 회원을 간단하게 설명하면 하나의 계정이 여러 개의 소셜 아이디와 연동하는 것을 의미한다. 단기간에 기존 회원 구조를 파악하면서 개선하는 것은 생각보다 쉽지 않았다. 인수인계를 해주신 파트장님도 다른 파트에서 근무하고 계셨고, 회원 서비스 담당 기..
회고를 시작하며 올해를 맞이하며 처음으로 정했던 첫 목표는 회고 작성하기 였다. 자신을 아무리 잘 알고 있다고 해도 스스로 칭찬과 피드백을 글로 남긴다면 지속적인 성장에 도움을 줄 수 있으리라 생각했다. 2022년 상반기는 선택과 집중 이 필요한 시기였고 나에게 많은 변화가 있던 시간이었다. 시나브로 모르는 사이에 조금씩 조금씩 라는 의미를 가진 순우리말이다. 나는 올해의 키워드를 시나브로 로 정했다. 출퇴근 시간, 평일 저녁, 주말에 꾸준히 공부하는 습관을 길들였다. 이렇게 꾸준히 공부하는 습관은 시나브로 어느샌가 머릿속에 지식으로 축적되리라 생각했고 매일 공부하기 위해 노력하였다. 1일 1커밋 문화는 지속해서 공부하는 습관을 길들이기에 효과적이라고 생각한다. 시각적으로 재미도 있고, 공부한 내용을 p..