SERIES

서버가 멈추는 이유

10 Posts·Last updated on September 06, 2026

Backend

커넥션 풀 고갈 — 멀쩡한 서버가 멈추는 진짜 이유

August 16, 2026

안녕하세요, 자바파커입니다. 서버 CPU는 20%, 메모리도 여유롭고, DB 부하도 평소와 같습니다. 그런데 응답이 안 옵니다. 그리고 잠시 뒤 로그에 이게 찍힙니다. 결론부터 말씀드리면 — 커넥션 풀 고갈은 DB가 느려서 생기는 문제가 아닙니다. 대부분은 애플리케이션이 커넥션을 필요 이상으로 오래 붙잡고 있어서 생깁니다. 그래서 DB 지표를 아무리 봐…


Backend

경쟁 상태와 락 — 2000이 나와야 하는데 1847이 나오는 이유

August 16, 2026

안녕하세요, 자바파커입니다. 스레드 둘이 각각 1000번씩 했습니다. 결과는? 1847입니다. 다시 돌리면 1923이고, 또 돌리면 1786입니다. 코드는 그대로인데 매번 다릅니다. 결론부터 말씀드리면 — 는 한 동작이 아닙니다. 읽고, 더하고, 쓰는 세 동작입니다. 그 사이에 다른 스레드가 끼어들면 증가 하나가 통째로 사라집니다. 증가가 사라지는 순간…


Backend

GC는 무엇을 지우나 — 안 쓰는 객체가 아니라 닿지 않는 객체

August 18, 2026

안녕하세요, 자바파커입니다. "메모리는 GC가 알아서 정리해 주는 거 아닌가요? 그런데 왜 가 나죠?" 정리해 줍니다. 다만 여러분이 생각하는 기준으로 정리하지 않습니다. 결론부터 말씀드리면 — GC는 "안 쓰는 객체"를 지우는 게 아니라 "닿을 수 없는 객체"를 지웁니다. 이 둘은 다릅니다. 그리고 그 차이가 메모리 누수의 정체입니다. 참조 하나가 끊기…



Backend

트랜잭션 격리 수준 — 같은 쿼리를 두 번 했는데 값이 다른 이유

August 20, 2026

안녕하세요, 자바파커입니다. 트랜잭션 안에서 같은 를 두 번 했습니다. 첫 번째는 , 두 번째는 . 저는 아무것도 안 바꿨습니다. 버그인가요? 버그가 아닙니다. 설정한 대로 동작한 겁니다. 결론부터 말씀드리면 — 격리 수준은 "내 트랜잭션이 도는 동안 남이 한 일을 얼마나 보게 할 것인가"를 정하는 다이얼입니다. 남을 덜 볼수록 결과가 안정적이고, 대신 …


Backend

데드락(교착 상태) — 락을 거는 순서만 통일하면 사라집니다

August 23, 2026

안녕하세요, 자바파커입니다. 요청이 멈췄습니다. CPU도 한가하고 DB 부하도 평소와 같습니다. 그리고 로그에 이게 찍힙니다. 멈춘 게 아닙니다. 서로를 기다리고 있는 겁니다. 결론부터 말씀드리면 — 데드락은 고리입니다. T1이 T2를 기다리고, T2가 다시 T1을 기다리면 둘 다 영원히 못 갑니다. 그리고 이 고리는 락을 거는 순서만 통일하면 만들어지…


JavaScript

이벤트 루프 — setTimeout(0)이 Promise보다 늦게 나오는 이유

August 24, 2026

안녕하세요, 자바파커입니다. 출력 순서를 맞춰 보세요. 답은 입니다. 가 인데 맨 뒤로 갑니다. 결론부터 말씀드리면 — 자바스크립트는 한 번에 하나만 합니다. 그리고 기다리는 줄이 하나가 아닙니다. 이 두 문장이 위 순서를 전부 설명합니다. 가 큐에 앉아 순서를 기다리는 장면을 눈으로 보고 싶으시면 47초 영상으로도 정리했습니다. 토큰 넷이 코드에서 …


Backend

메시지 큐란? 일을 빨리 하는 게 아니라 안전하게 기다리게 한다

August 25, 2026

안녕하세요. 자바파커입니다. 초당 요청이 100건 들어오는데 서버는 20건밖에 처리하지 못한다고 해보겠습니다. 직접 호출이라면 20건은 처리되고 나머지는 타임아웃이나 오류가 됩니다. 그 사이에 메시지 큐를 넣으면 어떻게 될까요? 서버가 빨라지는 것은 아닙니다. 처리하지 못한 80건이 실패 대신 대기가 됩니다. 이것이 메시지 큐의 핵심입니다. 메시지 큐는 …



Backend

캐시 스탬피드란? 적중률 99%인데 DB가 터지는 1초

August 27, 2026

안녕하세요. 자바파커입니다. 캐시 적중률이 99%인데 DB가 갑자기 멈췄습니다. 캐시를 더 많이 쓰고 있었는데 왜 장애가 났을까요? 원인은 인기 키 하나의 만료 시각이었습니다. 캐시가 없어서가 아니라, 모두가 같은 순간 캐시가 없다는 사실을 발견해서 터집니다. TTL이 이 되는 순간 요청이 DB로 폭발하고, 락 하나로 다시 한 줄이 되는 과정은 52초 영…


Backend

서킷 브레이커란? 재시도가 전체 장애를 만드는 순간

August 28, 2026

안녕하세요. 자바파커입니다. 결제 서버 하나가 느려졌습니다. 주문 서버는 친절하게 세 번 재시도했습니다. 잠시 뒤 주문·재고·알림 서버까지 모두 느려졌습니다. 실패를 줄이려던 재시도가 왜 전체 장애를 만들었을까요? 서킷 브레이커는 실패를 없애는 장치가 아닙니다. 실패가 다른 서비스로 번지는 것을 막는 장치입니다. 요청이 쌓이다 차단기가 열리고, 시험 요청…


DevOps

Raft 리더 선출 원리 — Leader 장애 후 과반수가 결정하는 과정

September 06, 2026

안녕하세요. 자바파커입니다. Raft 클러스터의 모든 노드는 같은 역할로 고정되지 않습니다. 한 노드는 Leader로 동작하고 나머지는 Follower가 됩니다. Leader가 멈추면 운영자가 새 리더를 지정하는 것이 아니라 노드들이 투표로 선출합니다. Raft의 리더는 가장 빠른 서버가 아니라, 현재 Term에서 과반수의 동의를 얻은 서버입니다. 이 글…