스프링 트랜잭션 개념 정리 — 전파, 격리 수준, 그리고 프록시가 실제로 하는 일
@Transactional 하나로 커밋/롤백을 대신 처리해주는 스프링 트랜잭션의 동작 원리를 개념 위주로 정리했습니다. 전파(Propagation) 7가지, 격리 수준(Isolation)과 3대 이상현상, 롤백 규칙, 그리고 AOP 프록시 기반으로 동작하기 때문에 생기는 self-invocation 함정까지 다룹니다. 실습 검증은 다음 글로 이어집니다.
@Transactional 하나로 커밋/롤백을 대신 처리해주는 스프링 트랜잭션의 동작 원리를 개념 위주로 정리했습니다. 전파(Propagation) 7가지, 격리 수준(Isolation)과 3대 이상현상, 롤백 규칙, 그리고 AOP 프록시 기반으로 동작하기 때문에 생기는 self-invocation 함정까지 다룹니다. 실습 검증은 다음 글로 이어집니다.
Author-Book 1:N 연관관계로 N+1을 직접 재현하고, fetch join·EntityGraph·DTO projection·default_batch_fetch_size 네 가지 해결책을 같은 데이터로 비교했습니다. 컬렉션 두 개 이상 조회, 페이징까지 얹었을 때 각 방법이 어디서 깨지는지도 정리한 학습 노트입니다.
회사에 이미지 기반 상품 정보 추출 기능(Gemini Vision API 연동)을 실제로 붙이기 전에, WebFlux가 이 문제를 감당할 수 있을지 미리 검증해보려고 만든 테스트 프로젝트 기록입니다. Mono가 실제로 뭘 의미하는지, WebClient/TimeLimiter/CircuitBreaker/Bulkhead를 어떤 순서로 엮어야 하는지, Net...
파티션 개수가 왜 병렬 처리량을 결정하는지, 컨슈머 그룹이 파티션을 어떻게 자동 배분하고 리밸런싱하는지, 메시지 순서는 언제 보장되고 언제 안 되는지, 컨슈머가 죽었다 살아나면 어떻게 되는지를 직접 확인해본 실습 노트입니다.
docker-compose로 Zookeeper 기반 카프카 브로커 3대를 직접 띄우고, 토픽을 만들어 Leader/Replicas/ISR이 실제로 어떻게 배치되는지, 프로듀서/컨슈머 처리량은 어느 정도 나오는지 확인해본 실습 노트입니다.
서비스 하나가 느려지거나 죽었을 때 그 장애가 호출자 쪽으로 옆으로 번지는 걸 막는 Circuit Breaker 패턴의 동작 원리와 Resilience4j 설정, 그리고 Retry와 조합할 때 fallback 위치에 따라 재시도가 통째로 무력화되는 실제 버그 사례를 정리한 학습 노트입니다.
재고보다 많은 요청이 한꺼번에 몰리는 선착순 이벤트에서 오버부킹을 막는 세 가지 방법 — 비관락(SELECT FOR UPDATE), 낙관락(@Version), Redis 분산락(Redisson)을 직접 구현하고 동시 요청 1000건으로 실측 비교한 학습 노트입니다.
DB 하나로는 왜 읽기 트래픽을 못 버티는지부터, 로컬 캐시·Redis·CDN을 쌓는 다계층 캐싱, Cache Stampede 방지, DB와 검색엔진(Elasticsearch)을 동기화하는 방법까지 정리한 학습 노트입니다.
외부 기관 API와 연동하는 기능을 개발하면서, 왜 한 클래스에 다 넣지 않고 비즈니스 로직·어댑터·API Client로 계층을 나눴는지 정리했습니다.
평소 초당 1000건을 받던 서버가 느려지기 시작하면 무슨 일이 벌어질까요. 타임아웃, 재시도, 그리고 그 재시도가 서버를 더 죽이는 악순환에 대한 학습 노트입니다. Retry Storm을 실제로 재현해서 naive 재시도와 Exponential Backoff+Jitter를 숫자로 비교했습니다.