분류
개발 · 5쪽
DB·백엔드에서 실제로 터지는 문제와 USB·CD 굽기 교과서를 모았다. 느린 쿼리, 락과 트랜잭션, 장애와 확장, 배포와 관측은 태그로 나눠 찾는다.
96편 · 글 80 · 강 16 · 마지막 글 2026.09.28
교과서굽기 16강
개발 글
96편 중 49–60
pgbouncer transaction 모드로 바꿨더니 SET 이 사라진다
커넥션을 아끼려고 pgbouncer 설정 하나를 바꿨더니 앱이 가끔 이상해졌다. 다시 보내면 성공해서 재현도 안 된다. 세션에 걸어 둔 설정이 에러도 없이 사라지고 있었다.
장애인지 30분째 따지고 있다면 SLO 가 없는 것이다
사용자는 느리다는데 평균 응답 시간은 평소와 같다. 그래서 30분째 장애가 맞는지부터 따지고 있다. 무엇이 정상인지 장애가 나기 전에 한 문장으로 적어 두지 않아서다.
2년 만에 기능 플래그가 200개가 됐다
기능 플래그를 2년 쓰다 보니 200개가 됐고, 뭐가 켜져 있는지 아무도 모른다. 지우자니 무섭다. 만들 땐 이득이 바로 보이는데 지울 땐 위험만 보인다.
카나리를 통과한 배포가 전체 확대 뒤에 터졌다
카나리에서 30분을 지켜보고 통과한 배포가 전체로 넓힌 뒤에 터졌다. 통과했으니 배포 탓은 아니라고 믿는 바람에 원인 찾기도 늦어졌다.
로그는 초당 수천 줄인데 요청 하나를 못 찾는다
로그는 초당 수천 줄씩 쌓이는데, 장애 때 특정 사용자의 요청 하나를 못 찾아 몇 시간을 헤맸다. 남기는 것과 찾을 수 있는 건 다르다.
분산 추적이 큐만 지나면 끊긴다
분산 추적을 붙였는데 하필 시간이 제일 오래 걸리는 큐와 워커 구간에서 추적이 끊겼다. 추적 문맥은 스레드에 묶여 있어서, 경계를 넘을 때 아무도 안 옮겨 주면 사라진다.
타임아웃 값 하나 바꿨는데 서비스가 무너졌다
콘솔에서 타임아웃 값 하나 바꿨을 뿐인데 서비스가 무너졌다. 되돌리려니 이전 값이 뭐였는지 아무도 몰랐다. 설정은 코드보다 쉽게 바뀌는데 영향은 더 클 때가 많다.
컬럼 이름 하나 바꿨는데 배포 중에 오류가 쏟아졌다
컬럼 이름 하나 바꾸고 배포했을 뿐인데 운영에서 몇 분간 오류가 쏟아졌다. 스테이징에선 멀쩡했다. 배포 중에는 옛 코드와 새 스키마가 잠깐 같이 산다.
알림이 하루 200개면 진짜 장애도 묻힌다
알림을 꼼꼼히 걸었더니 하루 200개씩 와서 아무도 안 보게 됐다. 진짜 장애 알림도 그 사이에 묻혔다. 알림이 많다는 게 안심의 근거였는데.
user_id 라벨 하나에 모니터링이 죽었다
디버깅하기 쉬우라고 지표에 사용자 ID 라벨을 붙였다. 몇 시간 뒤 모니터링 시스템이 메모리를 다 쓰고 죽었다. 서비스는 멀쩡한데 아무것도 안 보였다.
조건에 맞는 글이 없다. 브루니가 숨었나 보다.