Recent Posts

Backend & Spring·7월 14, 2026

WITH RECURSIVE로 범인 찾기: 코드 한 줄 안 고치고 끝난 장애

탐정이 손전등으로 카드 트리를 비추는 일러스트. 말끔한 카드들 사이에서 맨 아래의 낡고 갈라진 카드 하나가 불빛에 걸려 있다.

“삭제 버튼이 안 먹어요” 운영 시스템에서 이런 신고를 받으면 머릿속에는 대개 같은 순서로 생각이 흐른다. 최근 배포에 뭐가 들어갔더라. 저 기능을 마지막으로 만진 게 누구더라 — 설마 나인가. 신고를 다 읽기도 전에 커밋 기록부터 뒤지는 것. 코드 쓰는 사람의 오래된 반사신경이고, 대개는 그 반사신경이 맞는다. 이 글은 그 반사신경이 틀렸던 어느 사건의 기록이다. 그리고 이 … 더 읽기

Backend & Spring·7월 10, 2026

잔량 컬럼은 없다: 조회할 때마다 계산되는 재고

창고 안에서 직원이 장부는 덮어둔 채 저울로 상자 무게를 직접 재는 일러스트.

장부에 없는 숫자 퀴즈 하나. 재고 관리 시스템에서 '남은 수량'은 어디에 저장돼 있을까. 대부분 stock이나 remain_qty 같은 컬럼을 떠올릴 것이다. 나도 그랬다. 그런데 내가 운영에 참여하는 시스템(농산물 생산 이력 관리, Spring Boot + JPA/Hibernate + MyBatis + PostgreSQL)에서 가장 중요한 숫자인 '건조물 잔량'은 어느 테이블에도 저장돼 있지 않다. 화면에는 매번 잘만 표시되는 그 숫자가, 데이터베이스 … 더 읽기