TECH NOTES
기술노트
현장에서 검증된 개발 지식을 기록합니다.
14131211109876543
Backend
Graceful Shutdown — 배포할 때마다 뜨는 502를 없애는 법
배포 때마다 502가 튀는 진짜 이유는 프로세스를 그냥 죽여서입니다. readiness 전환부터 드레이닝 대기까지 올바른 종료 순서를 코드와 쿠버네티스 설정으로 정리했습니다.
Backend
2단계 커밋(2PC) — 분산 트랜잭션의 원자성과 그 대가
여러 시스템에 걸친 트랜잭션을 전부 커밋 아니면 전부 롤백으로 만드는 2PC의 원리와 치명적 블로킹 문제, 그리고 사가·아웃박스 같은 현대적 대안을 비교합니다.
Backend
CDC(변경 데이터 캡처) — DB 변경을 실시간 스트림으로 흘려보내기
DB의 삽입·수정·삭제를 트랜잭션 로그에서 뽑아 실시간 스트림으로 내보내는 CDC. 폴링 대 로그 기반 비교, Debezium, 아웃박스 패턴, 도입 주의점을 정리했습니다.
Backend
HyperLogLog — 수억 개의 유니크를 12KB로 세는 법
수억 개의 유니크 방문자를 12KB로 추정하는 HyperLogLog. 앞자리 0 개수라는 직관부터 메모리·오차 맞교환, 병합(union)의 위력까지 실무 관점으로 풀었습니다.
Backend
램포트·벡터 시계 — 분산 시스템에서 사건의 순서를 세는 법
물리 시계로는 분산 사건의 순서를 믿을 수 없습니다. 램포트 타임스탬프와 벡터 시계로 인과관계와 동시성을 판별하는 원리를 코드와 비교표로 설명합니다.
Backend
리더 선출(Leader Election) — 분산 시스템에서 대장 하나를 안전하게 뽑기
여러 노드 중 리더 하나를 안전하게 뽑는 법. 스플릿 브레인의 원인과 리스·펜싱 토큰·정족수로 막는 방법, etcd·쿠버네티스 실전 도구까지 다뤘습니다.
Backend
블룸 필터(Bloom Filter) — 12MB로 1천만 개를 훑는 확률적 집합
'없음'은 확실하고 '있음'은 확률적인 블룸 필터. 적은 메모리로 값비싼 조회를 걸러내는 원리와 거짓 양성률 조절, 삭제 불가 같은 함정까지 짚었습니다.
Backend
일관성 해싱(Consistent Hashing) — 노드가 늘어도 캐시가 무너지지 않는 이유
노드 하나 추가에 캐시 전체가 날아가는 hash%N의 함정과, 해시 링·가상 노드로 재배치를 K/N으로 줄이는 일관성 해싱의 원리를 코드와 함께 정리했습니다.
Backend
로그 레벨과 구조화 로깅 — 디버깅이 쉬워지는 로그 쓰기
console.log만 흩뿌리면 정작 장애 때 원하는 로그를 못 찾는다. ERROR·WARN·INFO·DEBUG 구분과 JSON 구조화 로깅으로 검색 가능한 로그 만들기.
Backend
우아한 종료(graceful shutdown) — 배포할 때 요청 끊기지 않게
배포로 서버를 재시작할 때 처리 중이던 요청이 뚝 끊기면 사용자는 에러를 본다. SIGTERM을 받아 새 요청은 막고 진행 중인 건 마무리하는 법.
Backend
타임존 지옥 — UTC로 저장하고 변환해서 표시하기
"서버에선 맞는데 사용자에겐 9시간 어긋난다"는 타임존 문제의 정석 해법. 저장은 UTC, 표시할 때만 변환. 흔한 함정까지 정리한다.
Etc
개발자 정규식 실전 — 이메일·URL·날짜 검증 패턴
실무에서 가장 많이 쓰는 검증 정규식을 모았다. 이메일·URL·비밀번호·날짜·전화번호를 "너무 엄격하지도 느슨하지도 않게" 짜는 법.