Blockchain Layer 2

L2에서 트랜잭션을 처리하는데, 왜 다시 L1에 기록하는 걸까? L2는 확장성 트릴레마를 정말 해결한 걸까? L2 아키텍처: 핵심 컴포넌트 L2의 동작을 이해하려면 네 가지 핵심 컴포넌트를 먼저 알아야 한다. 시퀀서(Sequencer) L2에서 트랜잭션의 순서를 결정하…

· 16분 읽기

All Posts

Database Index Strategy

인덱스는 DB 성능 최적화의 가장 기본적인 도구이다. 하지만 "일단 인덱스 걸면 빨라지겠지"라는 접근은 오히려 성능을 악화시킬 수 있다. 인덱스가 해결하는 문제 인덱스가 없으면 D…

· 5분 읽기

Change Data Capture

Change Data Capture(CDC)는 데이터베이스의 변경 사항을 외부 시스템에 실시간으로 전파하는 기술이다. Outbox 패턴에서 폴링 대신 CDC를 사용하면 지연 없이…

· 6분 읽기

Hot Key

분산 시스템은 데이터를 여러 노드에 분산하여 부하를 나눈다. 그런데 특정 키에 요청이 집중되면 분산의 이점이 사라진다. 하나의 노드에만 부하가 몰리고, 나머지 노드는 유휴 상태가…

· 8분 읽기

Redlock 과 Fencing Token

분산 시스템에서 동시에 하나의 프로세스만 특정 자원에 접근하도록 보장하는 것은 어렵다. Redis의 SET NX로 간단히 락을 구현할 수 있지만, 장애 시나리오를 파고들면 빈틈이…

· 7분 읽기

Distributed Transaction Patterns

모놀리식 아키텍처에서는 하나의 DB 트랜잭션으로 정합성을 보장할 수 있다. 그러나 서비스가 분리되면 "서비스 A에서 잔고 차감하고, 서비스 B에서 잔고 추가하는데, 중간에 실패하면…

· 4분 읽기

Gossip Protocol vs Raft

분산 시스템에서 노드 간 정보를 전파하는 방식은 크게 두 가지로 나뉜다. 모든 노드가 평등하게 소문을 퍼뜨리는 Gossip Protocol과, 리더를 선출하여 합의를 이끄는 Raf…

· 6분 읽기

Redis Stream vs Kafka

Redis Stream과 Kafka는 모두 메시지 큐로 사용할 수 있지만, 내부 동작과 보장 수준이 다르다. 클러스터 레벨의 차이는 이전 글에서 다뤘고, 이 글에서는 메시지 큐로…

· 6분 읽기

Redis Cluster vs Kafka

Redis Cluster와 Kafka는 모두 데이터를 여러 노드에 분산하는 시스템이지만, 설계 철학이 근본적으로 다르다. Redis는 "메모리에서 최대한 빠르게"를, Kafka는…

· 11분 읽기

Go sync.Pool

고빈도로 생성되고 짧은 수명을 가지는 객체는 GC에 큰 부담을 준다. sync.Pool은 이런 객체를 재사용하여 할당과 GC 압력을 줄이는 Go 표준 라이브러리의 동시성 안전한 객…

· 6분 읽기

Kubernetes, CoreDNS

CoreDNS는 Kubernetes 클러스터 내부의 DNS 서버로, Service 이름을 IP 주소로 변환하여 Service Discovery를 가능하게 한다. Service Di…

· 7분 읽기

Kubernetes, Control Plane

Control Plane은 Desired State를 받아들이고, Actual State를 감시하며, 두 상태를 일치시키기 위한 결정을 내린다. Architecture 모든 컴포넌…

· 6분 읽기

Raft Consensus Algorithm

분산 시스템에서 여러 노드가 하나의 일관된 상태에 합의하는 것은 가장 어려운 문제 중 하나이다. Raft는 이 문제를 이해 가능한 방식으로 해결하기 위해 설계된 합의 알고리즘이다.…

· 12분 읽기

Solidity 101

Solidity는 이더리움 가상 머신(EVM) 위에서 실행되는 스마트 컨트랙트를 작성하기 위한 정적 타입 프로그래밍 언어이다. 본 글은 Solidity의 기본 문법, 동작 방식,…

· 8분 읽기

Foundry & Hardhat

What's Foundry? Foundry는 Paradigm이 개발한 Rust 기반 이더리움 개발 툴킷이다. Solidity 코드를 Solidity로 테스트한다는 철학 아래, 빠른…

· 4분 읽기

Kahn's Algorithm

위상정렬(Topological Sort)은 방향 비순환 그래프(DAG)의 정점들을 간선 방향을 거스르지 않도록 나열하는 알고리즘이다. 위상정렬은 방향 그래프의 모든 간선 (u, v…

· 3분 읽기

Kubernetes, Node Components

kubelet은 Pod를 실행하고, Container Runtime은 컨테이너를 관리하며, kubeproxy는 네트워크 트래픽을 라우팅한다. kubelet kubelet은 모든 W…

· 6분 읽기

Istio, Service Mesh

마이크로서비스 아키텍처에서 서비스 간 통신은 빠르게 복잡해진다. Istio는 이 복잡성을 인프라 레벨에서 해결하는 서비스 메시(Service Mesh) 플랫폼이다. Service…

· 2분 읽기

Kubernetes 101

Kubernetes(K8s)는 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 오픈소스 오케스트레이션 플랫폼이다. 본 글은 Kubernetes 의 기본 컴포넌트들에 대해…

· 7분 읽기

Rate Limiting

Rate Limiting은 일정 시간 내 허용되는 요청 수를 제한하는 메커니즘이다. Rate Limiting 은 특히나 대용량 트래픽을 목표로 하는 서버에서는 필수적으로 들어가는…

· 3분 읽기

Circuit Breaker

MSA 에서 하나의 서비스 장애가 전체 시스템으로 전파되는 것을 Cascading Failure 라 한다. Circuit Breaker는 이를 방지하는 패턴이다. Circuit B…

· 4분 읽기

Bitcoin Address Formats(draft)

비트코인이 처음 등장했을 때부터 현재까지 주소 형식은 지속적으로 발전해왔다. 초기의 P2PK(PaytoPublicKey)에서 시작하여 P2PKH, P2SH를 거쳐, 2017년의 S…

· 8분 읽기

Ethereum: Event, Log

ERC20 등 토큰 스마트 컨트랙트에서 토큰이 전송되면 Transfer 이벤트가 발생한다. 이더리움의 Event 는 단순히 상태 변화를 기록하는 메커니즘이 아니다. 온체인과 오프체…

· 4분 읽기

Full Node vs Archive Node

이더리움 생태계에서는 Full Node와 Archive Node라는 두 가지 주요 노드 유형이 존재하며, 각각의 특성과 용도가 명확히 구분된다. Full Node 는 최신 블록체인…

· 3분 읽기

Shamir's Secret Sharing vs MPC

2019년, 캐나다 최대 암호화폐 거래소 QuadrigaCX의 창업자 Gerald Cotten이 갑작스럽게 사망했다. 그의 죽음과 함께 1억 9천만 달러 상당의 고객 자산에 대한…

· 5분 읽기

MEV: Maximal Extractable Value

블록체인은 투명하고 공정한 금융 시스템을 약속한다. 하지만 그 이면에는 일반 사용자들이 인지하지 못하는 채 지불하고 있는 "보이지 않는 세금"이 존재한다. 바로 MEV(Maxima…

· 6분 읽기

UTXO vs Account

UTXO UTXO 는 Unspent Transaction Output 의 약자로, 직역하면 “미사용 트랜잭션 출력” 이다. 현실에서 지갑에 10,000원짜리 지폐 한 장, 5,00…

· 5분 읽기

Ethereum Transaction Lifecycle

이더리움에서 트랜잭션을 전송하면 실제로 어떤 일이 일어나는가? Defi 프로토콜처럼 실제 자금을 다루는 시스템을 개발하는 경우, 트랜잭션 라이프사이클을 정확하게 이해하는 것은 필수…

· 11분 읽기

Nonce in Ethereum

초기값 0 1 (배포 시 설정) 증가 조건 트랜잭션 전송 시 CREATE 실행 시 사용 목적 Replay 방지, 순서 보장 컨트랙트 주소 결정 접근 방법 eth_getTransac…

· 5분 읽기

HD Wallet and Key Management

지갑은 본질적으로 Key Pair 를 관리하는 시스템이다. 지갑은 Private Key 를 안전하게 보관하고, 이를 사용해서 트랜잭션에 서명하며, 대응하는 Public Key 와…

· 5분 읽기

Gas in Ethereum

이더리움에서 모든 연산은 공짜가 아니다. 스마트 컨트랙트 실행, 토큰 전송, NFT 민팅 등 모든 작업에는 Gas 라는 비용이 발생한다. Gas 란 무엇인가 Gas 는 이더리움에서…

· 7분 읽기

Consensus Mechanisms

블록체인에서 합의 알고리즘이 왜 필요할까? 블록체인은 중앙 관리자 없이 여러 참여자가 동일한 데이터에 합의해야 하는 분산 시스템이다. 하지만 분산 환경에서는 두 가지 핵심 문제가…

· 4분 읽기

Mempool

Mempool을 이해하기 위해서는 블록체인 및 블록 그리고 채굴에 대한 이해가 필요하다. 블록체인은 블록과 블록이 체인(링크드 리스트)형태로 연결된 자료구조이다. 블록체인의 원소…

· 3분 읽기

Http(1.1, 2, 3)

HTTP/1.1 과 HTTP/2 의 차이에 대해서 묻는 질문은 엔지니어 면접에서 자주 등장한다. 당연히 단순히 HTTP/2 가 빠르다는 대답을 듣기 위해서는 아닐 것이다. 각 버전…

· 4분 읽기

Meta Transaction (ERC-2771)

Meta transaction (ERC2771) 에 대해서 알아보자. 메타 트랜잭션(meta transaction)이란 개념이있다. 일반적으로, 블록체인을 처음 접하는 사용자가 D…

· 4분 읽기

Transaction

데이터베이스 트랜잭션은 여러 연산을 하나의 논리적 작업 단위로 묶어 데이터 일관성을 보장하는 핵심 메커니즘이다. 트랜잭션이 중요한 이유는 단순하다. 은행 계좌 이체를 생각해보면,…

· 3분 읽기

MongoDB in Golang

BSON MongoDB의 Go 드라이버에서 사용하는 BSON(Binary JSON) 타입은 4가지가 있다. bson.M 범용 맵 타입 bson.M은 map[string]interf…

· 6분 읽기

TCP 3 way handshake & 4 way handshake

연결을 성립하고 해제하는 과정을 말한다. TCP 는 연결 수립과 종료 과정에서 각각 3way handshake 와 4way handshake 라는 메커니즘을 사용한다. 보통 단어들…

· 4분 읽기

Web server 를 구성할 때 Thread, Process 개수를 어떻게 정할 것인가?

CPU Bound, I/O Bound, Thread, Process, Web server 웹 서버를 만들 때 스레드 또는 프로세스의 개수를 정하는 것은 성능과 안정성에 중요한 영향…

· 2분 읽기

DNS Hierarchy

“google.com 을 브라우저에 입력하면 어떤 일이 일어나나요?” 같은 질문은 소프트웨어 엔지니어 면접에서 자주 등장하는 고전적인 질문이다. 보고자 하는 깊이가 지원자의 연차에…

· 4분 읽기

CAP theorem

분산 시스템, CAP 이론 분산 시스템 현대 시스템 설계에서 분산 시스템은 자주 등장하는 개념이다. 분산 시스템은 여러 대의 컴퓨터가 네트워크를 통해 상호 작용하여 하나의 시스템처…

· 5분 읽기

Goroutine, GMP Model

Goroutine과 GMP 모델: Go 런타임의 스케줄링 아키텍처 Go 언어의 가장 강력한 특징 중 하나는 경량 동시성 스레드로 불리는 Goroutine 이다. 수십만 개의 Gor…

· 3분 읽기

Index, B-Tree

데이터베이스 성능 최적화에서 인덱스는 가장 중요한 요소 중 하나다. 수백만 건의 데이터에서 특정 레코드를 찾을 때 인덱스가 없다면 전체 테이블을 순회해야 하지만, 적절한 인덱스가…

· 3분 읽기