Development
-
Paxos 합의 알고리즘Development/Architecture 2026. 4. 4. 13:49
들어가며 Paxos는 Leslie Lamport가 1989년에 제안한 합의 알고리즘으로, 이런 환경에서도 단 하나의 값만 안전하게 결정되도록 보장한다.Raft, Kafka(KRaft), etcd 등 현대 분산 시스템의 합의 메커니즘을 이해하려면, 그 원조인 Paxos를 먼저 이해하는 것이 중요하다.해결하려는 문제 분산 환경에서 노드들이 "이 값을 X로 하자"라고 제안할 때, 일부 노드가 다운되거나 메시지가 지연되더라도 단 하나의 값만 최종 결정되어야 한다. 두 노드가 동시에 다른 값을 제안하더라도, 시스템 전체는 반드시 하나만 선택해야 한다.세 가지 역할Paxos에는 세 가지 역할이 있으며, 하나의 노드가 여러 역할을 동시에 수행할 수 있다.Client → Proposer → Acceptor(A, B, ..
-
Raft Figure 8 문제 파헤치기 - "과반수 복제 = 커밋"이 위험한 이유Development/Architecture 2026. 4. 4. 03:40
들어가며분산 시스템에서 합의(Consensus) 알고리즘은 여러 노드가 하나의 일관된 상태를 유지하도록 보장하는 핵심 메커니즘이다. Raft는 이해하기 쉬운 합의 알고리즘을 목표로 설계되었지만, 그 안에는 깊이 생각하지 않으면 놓칠 수 있는 미묘한 안전성 문제가 숨어 있다.그중 대표적인 것이 Figure 8 문제다. 이 글에서는 Raft 논문의 Figure 8이 보여주는 시나리오를 단계별로 분석하고, 해결 규칙이 왜 필요한지, 그리고 이것이 Kafka(KRaft)와 어떻게 다른지까지 살펴본다.Raft의 기본 커밋 규칙Raft에서 로그 엔트리가 커밋되려면 과반수(majority) 노드에 복제되어야 한다. 리더가 엔트리를 기록하고, 팔로워들에게 AppendEntries RPC로 복제한 뒤, 과반수 이상이 응..
-
Go + Fiber로 서버 초기 세팅하며 배운 것들 정리Development/golang 2026. 3. 22. 18:50
Go + Fiber로 서버 만들기: Java 개발자가 Go를 시작하며 배운 것들Go와 Fiber 프레임워크를 사용하여 고가용성 분산 시스템 서버의 초기 구조를 설계하면서 학습한 내용을 정리한다.https://github.com/icarus8050/peacock프로젝트 구조peacock/├── main.go # 진입점 (config → server → handler 연결)├── config/│ └── config.go # 환경변수 기반 설정 관리├── server/│ └── server.go # Fiber 앱 생성 + Graceful Shutdown└── handler/ ├── handler.go # 라우트 등록 중앙 관리 └── hea..
-
Endofunctor (엔도펑터), 모나드 (Monad)Development/Architecture 2026. 3. 2. 18:36
엔도펑터 (Endofunctor) 출발하는 카테고리와 도착하는 카테고리가 같은 펑터로, 그리스어 접두사 'Endo-'(내부의)와 의미와 Functor가 결합한 것이다. 프로그래밍에서 다루는 대부분의 펑터가 엔도펑터다. 가장 흔한 예시로 Maybe(or 자바의 Optional)가 있다. (F : C -> C) 엔도펑터 역시 펑터와 마찬가지로 대상 객체를 매핑하는 것 뿐만 아니라 사상 또한 매핑해야 한다. 이를 리프팅(lifting) 한다고 하며, 들어올린다고도 한다.ex) a -> b를 Maybe a -> Maybe b 로 리프팅 모나드 (Monad) 모나드는 엔도펑터 카테고리에서의 모노이드다. 즉, 결합 법칙과 항등 법칙을 만족해야 한다.펑터는 컨텍스트 안의 값을 바꾸는 함수를 적용한다.map : F ..