Database Index Strategy
인덱스는 DB 성능 최적화의 가장 기본적인 도구이다. 하지만 "일단 인덱스 걸면 빨라지겠지"라는 접근은 오히려 성능을 악화시킬 수 있다. 인덱스가 해결하는 문제 인덱스가 없으면 D…
L2에서 트랜잭션을 처리하는데, 왜 다시 L1에 기록하는 걸까? L2는 확장성 트릴레마를 정말 해결한 걸까? L2 아키텍처: 핵심 컴포넌트 L2의 동작을 이해하려면 네 가지 핵심 컴포넌트를 먼저 알아야 한다. 시퀀서(Sequencer) L2에서 트랜잭션의 순서를 결정하…
인덱스는 DB 성능 최적화의 가장 기본적인 도구이다. 하지만 "일단 인덱스 걸면 빨라지겠지"라는 접근은 오히려 성능을 악화시킬 수 있다. 인덱스가 해결하는 문제 인덱스가 없으면 D…
Change Data Capture(CDC)는 데이터베이스의 변경 사항을 외부 시스템에 실시간으로 전파하는 기술이다. Outbox 패턴에서 폴링 대신 CDC를 사용하면 지연 없이…
분산 시스템은 데이터를 여러 노드에 분산하여 부하를 나눈다. 그런데 특정 키에 요청이 집중되면 분산의 이점이 사라진다. 하나의 노드에만 부하가 몰리고, 나머지 노드는 유휴 상태가…
분산 시스템에서 동시에 하나의 프로세스만 특정 자원에 접근하도록 보장하는 것은 어렵다. Redis의 SET NX로 간단히 락을 구현할 수 있지만, 장애 시나리오를 파고들면 빈틈이…
모놀리식 아키텍처에서는 하나의 DB 트랜잭션으로 정합성을 보장할 수 있다. 그러나 서비스가 분리되면 "서비스 A에서 잔고 차감하고, 서비스 B에서 잔고 추가하는데, 중간에 실패하면…
분산 시스템에서 노드 간 정보를 전파하는 방식은 크게 두 가지로 나뉜다. 모든 노드가 평등하게 소문을 퍼뜨리는 Gossip Protocol과, 리더를 선출하여 합의를 이끄는 Raf…
Redis Stream과 Kafka는 모두 메시지 큐로 사용할 수 있지만, 내부 동작과 보장 수준이 다르다. 클러스터 레벨의 차이는 이전 글에서 다뤘고, 이 글에서는 메시지 큐로…
Redis Cluster와 Kafka는 모두 데이터를 여러 노드에 분산하는 시스템이지만, 설계 철학이 근본적으로 다르다. Redis는 "메모리에서 최대한 빠르게"를, Kafka는…
고빈도로 생성되고 짧은 수명을 가지는 객체는 GC에 큰 부담을 준다. sync.Pool은 이런 객체를 재사용하여 할당과 GC 압력을 줄이는 Go 표준 라이브러리의 동시성 안전한 객…
CoreDNS는 Kubernetes 클러스터 내부의 DNS 서버로, Service 이름을 IP 주소로 변환하여 Service Discovery를 가능하게 한다. Service Di…
Control Plane은 Desired State를 받아들이고, Actual State를 감시하며, 두 상태를 일치시키기 위한 결정을 내린다. Architecture 모든 컴포넌…
분산 시스템에서 여러 노드가 하나의 일관된 상태에 합의하는 것은 가장 어려운 문제 중 하나이다. Raft는 이 문제를 이해 가능한 방식으로 해결하기 위해 설계된 합의 알고리즘이다.…
Solidity는 이더리움 가상 머신(EVM) 위에서 실행되는 스마트 컨트랙트를 작성하기 위한 정적 타입 프로그래밍 언어이다. 본 글은 Solidity의 기본 문법, 동작 방식,…
What's Foundry? Foundry는 Paradigm이 개발한 Rust 기반 이더리움 개발 툴킷이다. Solidity 코드를 Solidity로 테스트한다는 철학 아래, 빠른…
위상정렬(Topological Sort)은 방향 비순환 그래프(DAG)의 정점들을 간선 방향을 거스르지 않도록 나열하는 알고리즘이다. 위상정렬은 방향 그래프의 모든 간선 (u, v…
kubelet은 Pod를 실행하고, Container Runtime은 컨테이너를 관리하며, kubeproxy는 네트워크 트래픽을 라우팅한다. kubelet kubelet은 모든 W…
마이크로서비스 아키텍처에서 서비스 간 통신은 빠르게 복잡해진다. Istio는 이 복잡성을 인프라 레벨에서 해결하는 서비스 메시(Service Mesh) 플랫폼이다. Service…
Kubernetes(K8s)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 오케스트레이션 플랫폼이다. 본 글은 Kubernetes 의 기본 컴포넌트들에 대해…
Rate Limiting은 일정 시간 내 허용되는 요청 수를 제한하는 메커니즘이다. Rate Limiting 은 특히나 대용량 트래픽을 목표로 하는 서버에서는 필수적으로 들어가는…
MSA 에서 하나의 서비스 장애가 전체 시스템으로 전파되는 것을 Cascading Failure 라 한다. Circuit Breaker는 이를 방지하는 패턴이다. Circuit B…
비트코인이 처음 등장했을 때부터 현재까지 주소 형식은 지속적으로 발전해왔다. 초기의 P2PK(PaytoPublicKey)에서 시작하여 P2PKH, P2SH를 거쳐, 2017년의 S…
ERC20 등 토큰 스마트 컨트랙트에서 토큰이 전송되면 Transfer 이벤트가 발생한다. 이더리움의 Event 는 단순히 상태 변화를 기록하는 메커니즘이 아니다. 온체인과 오프체…
이더리움 생태계에서는 Full Node와 Archive Node라는 두 가지 주요 노드 유형이 존재하며, 각각의 특성과 용도가 명확히 구분된다. Full Node 는 최신 블록체인…
2019년, 캐나다 최대 암호화폐 거래소 QuadrigaCX의 창업자 Gerald Cotten이 갑작스럽게 사망했다. 그의 죽음과 함께 1억 9천만 달러 상당의 고객 자산에 대한…
블록체인은 투명하고 공정한 금융 시스템을 약속한다. 하지만 그 이면에는 일반 사용자들이 인지하지 못하는 채 지불하고 있는 "보이지 않는 세금"이 존재한다. 바로 MEV(Maxima…
UTXO UTXO 는 Unspent Transaction Output 의 약자로, 직역하면 “미사용 트랜잭션 출력” 이다. 현실에서 지갑에 10,000원짜리 지폐 한 장, 5,00…
이더리움에서 트랜잭션을 전송하면 실제로 어떤 일이 일어나는가? Defi 프로토콜처럼 실제 자금을 다루는 시스템을 개발하는 경우, 트랜잭션 라이프사이클을 정확하게 이해하는 것은 필수…
초기값 0 1 (배포 시 설정) 증가 조건 트랜잭션 전송 시 CREATE 실행 시 사용 목적 Replay 방지, 순서 보장 컨트랙트 주소 결정 접근 방법 eth_getTransac…
지갑은 본질적으로 Key Pair 를 관리하는 시스템이다. 지갑은 Private Key 를 안전하게 보관하고, 이를 사용해서 트랜잭션에 서명하며, 대응하는 Public Key 와…
이더리움에서 모든 연산은 공짜가 아니다. 스마트 컨트랙트 실행, 토큰 전송, NFT 민팅 등 모든 작업에는 Gas 라는 비용이 발생한다. Gas 란 무엇인가 Gas 는 이더리움에서…
블록체인에서 합의 알고리즘이 왜 필요할까? 블록체인은 중앙 관리자 없이 여러 참여자가 동일한 데이터에 합의해야 하는 분산 시스템이다. 하지만 분산 환경에서는 두 가지 핵심 문제가…
Mempool을 이해하기 위해서는 블록체인 및 블록 그리고 채굴에 대한 이해가 필요하다. 블록체인은 블록과 블록이 체인(링크드 리스트)형태로 연결된 자료구조이다. 블록체인의 원소…
HTTP/1.1 과 HTTP/2 의 차이에 대해서 묻는 질문은 엔지니어 면접에서 자주 등장한다. 당연히 단순히 HTTP/2 가 빠르다는 대답을 듣기 위해서는 아닐 것이다. 각 버전…
Meta transaction (ERC2771) 에 대해서 알아보자. 메타 트랜잭션(meta transaction)이란 개념이있다. 일반적으로, 블록체인을 처음 접하는 사용자가 D…
데이터베이스 트랜잭션은 여러 연산을 하나의 논리적 작업 단위로 묶어 데이터 일관성을 보장하는 핵심 메커니즘이다. 트랜잭션이 중요한 이유는 단순하다. 은행 계좌 이체를 생각해보면,…
BSON MongoDB의 Go 드라이버에서 사용하는 BSON(Binary JSON) 타입은 4가지가 있다. bson.M 범용 맵 타입 bson.M은 map[string]interf…
연결을 성립하고 해제하는 과정을 말한다. TCP 는 연결 수립과 종료 과정에서 각각 3way handshake 와 4way handshake 라는 메커니즘을 사용한다. 보통 단어들…
CPU Bound, I/O Bound, Thread, Process, Web server 웹 서버를 만들 때 스레드 또는 프로세스의 개수를 정하는 것은 성능과 안정성에 중요한 영향…
“google.com 을 브라우저에 입력하면 어떤 일이 일어나나요?” 같은 질문은 소프트웨어 엔지니어 면접에서 자주 등장하는 고전적인 질문이다. 보고자 하는 깊이가 지원자의 연차에…
분산 시스템, CAP 이론 분산 시스템 현대 시스템 설계에서 분산 시스템은 자주 등장하는 개념이다. 분산 시스템은 여러 대의 컴퓨터가 네트워크를 통해 상호 작용하여 하나의 시스템처…
Goroutine과 GMP 모델: Go 런타임의 스케줄링 아키텍처 Go 언어의 가장 강력한 특징 중 하나는 경량 동시성 스레드로 불리는 Goroutine 이다. 수십만 개의 Gor…
데이터베이스 성능 최적화에서 인덱스는 가장 중요한 요소 중 하나다. 수백만 건의 데이터에서 특정 레코드를 찾을 때 인덱스가 없다면 전체 테이블을 순회해야 하지만, 적절한 인덱스가…