Recent Posts

Backend & Spring·7월 21, 2026

롤백돼도 남아야 하는 기록: 트랜잭션을 REQUIRES_NEW로 쪼갠 이유

완공된 창고 일러스트. 정문에는 방명록 받침대가 놓였고, 쓰기 문 위에는 CCTV가, 측면의 좁은 뒷문 위에는 보완 카메라가 달려 있다.

“실패한 시도도 남겨라” 내가 운영에 참여하는 시스템(농산물 생산 이력 관리, 규제 산업)의 감사 로그 요구에는 처음 들으면 갸웃하게 되는 조항이 하나 있었다. 실패한 시도도 남겨라. 로그라는 건 보통 '일어난 일'의 기록인데, 이 요구는 일어나다 만 일 — 시도됐지만 실패해서 데이터에는 아무 흔적도 남기지 못한 일 — 까지 적으라고 말한다. 규제 산업에서는 '누가 무엇을 시도했고 실패했는가'도 … 더 읽기

Backend & Spring·7월 17, 2026

남의 이름으로 기록된 로그인: ThreadLocal에 남은 유령

청소가 생략된 호텔 객실에 새 투숙객이 들어와, 금고 안에 남아 있는 이전 투숙객의 반투명한 신분증을 발견하는 일러스트.

고백부터 하겠다 우리 시스템은 한동안, 어떤 로그인을 남의 이름으로 기록하고 있었다. B가 로그인했는데 기록에는 A가 남는 식으로. 먼저 말해두면 이 결함은 원인 규명과 수정이 끝난 '과거 사례'다. 그러니 이 글은 취약점 공지가 아니라 부검 기록 — 사고의 경위와 원인, 재발 방지책을 남기는 포스트모템이다. 시리즈 이름에 SQL이 붙어 있지만 이번 범인은 SQL이 아니다. 그래도 이 시리즈가 … 더 읽기

Backend & Spring·7월 3, 2026

SQL을 직접 짜본 게 언제였더라: AI의 리팩토링 계획을 뒤집은 날

읽기 문과 쓰기 문이 나란히 달린 창고 앞에 두 직원이 서 있는 일러스트. 한 명은 통역용 헤드셋을, 한 명은 SQL 쪽지를 들고 있다.

편리함의 청구서 오늘 하루 짠 코드를 돌아보자. repository.save()를 몇 번 호출했고, findBy로 시작하는 메서드 이름을 몇 개 지었는가. 그리고 SQL은 몇 줄 직접 썼는가. 나는 마지막 질문 앞에서 오래 멈췄던 적이 있다. 메서드 이름만 지으면 쿼리가 알아서 만들어진다. 복잡한 조회는 이미 있는 XML을 복사해 조건 하나만 바꾼다. 막히면 AI에게 물어본다. 요즘 백엔드의 데이터 접근은 대개 … 더 읽기