TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
212019181716151413121110
Database
Postgres로 작업 큐 만들기 — SELECT … FOR UPDATE SKIP LOCKED 실전 가이드
별도 브로커 없이 Postgres 하나로 신뢰성 있는 작업 큐를 만드는 실전 가이드. SKIP LOCKED 원자적 클레임 쿼리, 가시성 타임아웃, 재시도·지수 백오프, dead letter, VACUUM 이슈, 그리고 전용 큐로 넘어갈 시점까지 SQL과 함께 정리했다.
Backend
사가(Saga) 패턴 — 분산 트랜잭션과 보상 트랜잭션
마이크로서비스에서 여러 서비스에 걸친 작업을 사가와 보상 트랜잭션으로 일관성 있게 처리하는 법. 코레오그래피 vs 오케스트레이션, 멱등성까지 실전 정리.
Backend
캐시 스탬피드(Thundering Herd) — 인기 캐시 만료가 DB를 죽일 때
인기 캐시가 만료되는 순간 요청이 DB로 쏟아지는 캐시 스탬피드 현상. 뮤텍스 락, 확률적 조기 만료, stale-while-revalidate 세 가지 방어법을 비교합니다.
Backend
커넥션 풀 사이징 — 크게 잡을수록 느려지는 역설
DB 커넥션 풀을 키울수록 오히려 느려지는 이유와 적정 크기를 잡는 법. 풀 고갈·커넥션 누수, HikariCP 공식, 서버리스와 PgBouncer까지 실전 정리.
Backend
데드레터 큐(DLQ) — 독약 메시지가 큐를 막지 않게
처리 못 한 메시지가 큐 전체를 마비시키는 독약 메시지 문제와 DLQ로 격리·재처리하는 법. max receive count, redrive, 멱등 재처리까지 정리했습니다.
Backend
트랜잭셔널 아웃박스 패턴 — 이중 쓰기 문제를 없애는 법
DB 저장과 메시지 발행 사이의 이중 쓰기 문제를 outbox 테이블로 푸는 법. 폴링과 CDC 릴레이, at-least-once와 멱등 소비자까지 실전 관점으로 설명합니다.
Backend
타임아웃 예산과 데드라인 전파 — 유령 작업을 없애는 법
서비스 체인에서 각자 타임아웃을 잡으면 생기는 유령 작업 문제. 데드라인 전파와 Go context로 남은 시간을 넘겨 자원 낭비를 막는 법을 정리했습니다.
Backend
재시도 지수 백오프와 지터(Jitter) — 재시도 폭풍을 막는 법
고정 간격 재시도가 서버를 무너뜨리는 이유와 지수 백오프·지터로 재시도 폭풍을 막는 법. Full Jitter, Retry-After, 재시도 예산까지 실전 정리.
Backend
낙관적 락 vs 비관적 락 — DB 동시성 제어 두 가지 전략
같은 행을 여러 요청이 동시에 고칠 때 쓰는 낙관적 락과 비관적 락. SELECT FOR UPDATE와 버전 컬럼의 차이, 언제 무엇을 골라야 하는지 실무 기준으로 비교합니다.
Backend
백프레셔(Backpressure) — 빠른 생산자와 느린 소비자의 흐름 제어
생산자가 소비자보다 빠를 때 서버가 터지는 이유와 백프레셔로 흐름을 제어하는 법. Node.js 스트림, pull 모델, 드롭 전략까지 실전 관점으로 정리했습니다.
Backend
Go 1.24 제네릭 실전 — 5가지 실무 패턴과 4가지 안티패턴 완전 정리
Go 1.24 제네릭의 실무 도입 전략. 진짜 유용한 5가지 패턴(컬렉션·Result·Option·Repository·Constraints)과 피해야 할 4가지 안티패턴을 코드로 정리한다.
Backend
API 버전 관리 전략 — URL vs Header vs Content Negotiation
REST API 버전 관리의 세 가지 주요 전략을 비교하고, 프로젝트 특성에 맞는 최적의 방식을 선택하는 기준을 제시합니다.