dev notes

Mingi Cho

HR SaaS 백엔드 개발자

Spring · LLM 에이전트 · Kafka · MySQL · JVM

유니크 제약 걸고 재조회하면 되잖아 — 같은 트랜잭션 안에서는 안 됩니다

첫 로그인 JIT 프로비저닝의 경합을 유니크 제약 + 재조회로 막았다고 생각했는데, E2E에서 500이 떴다. Duplicate entry 로그 아래 딸려온 AssertionFailure 한 줄, 그 괄호 속 문장에서 Hibernate 세션 상태와 스프링 rollback-only까지 따라 내려간 기록. Hibernate 6.6.18 소스와 격리 하네스 20/20 재현으로 뒷받침했다.

2026-07-2333 min read
Kafka 컨슈머 group id를 제대로 설정하지 않으면 벌어지는 일

여섯 개의 독립 서비스가 같은 group id 리터럴을 하드코딩하는 바람에 하나의 메가 컨슈머 그룹으로 묶였고, 리밸런싱 generation이 16,453까지 올라가 있었습니다. group id가 왜 격리 경계인지, 폭발 반경이 어떻게 중복 소비로 번지는지 원리부터 정리했습니다.

2026-07-0728 min read
간헐적으로만 실패하는 계약 생성 — Kafka 크로스 토픽 순서 race 포렌식

retry가 우연히 맞아떨어져 돌아가던 이벤트 파이프라인. 두 토픽 사이의 순서 race를 로그로 재구성하고, 새 토픽 없이 발행자 게이트로 해결한 과정

2026-07-0236 min read
Text-to-SQL에서 암호화된 컬럼에 대응하는 법과 성능 비교

평문 vs 딕셔너리 vs @태그 — 225회 실험으로 검증한 Fail-Silent의 함정

2026-04-2422 min read
일급 컬렉션에 HashMap 인덱스를 넣으면 규약 위반인가 — 성능과 설계 원칙의 충돌

운영 코드에서 O(K×N) 탐색을 O(1)로 개선하려다 일급 컬렉션 규약과 부딪힌 경험. 원전부터 뒤져보고, 우회 방법과 트레이드오프를 정리한다

2026-04-2025 min read
4개월째 반복된 ECS CPU spike — JSON_EXTRACT full scan 해결기

레거시 multi-tenant SaaS에서 반복되던 CPU spike를 추적하고 Generated Column으로 해결한 과정

2026-04-1713 min read