#Spring
총 7편
캐시 테이블 불일치 로 인한 전자계약 발송 실패 - Spring Cache의 숨겨진 함정
Spring Cache를 쓰다가 실제 DB와 캐시가 불일치하여 전자계약 발송이 실패했습니다. 문제를 발견한 과정과 캐시 무효화 전략으로 해결한 방법을 정리합니다.
로그 한 줄 없이 서버가 멈췄다 - Virtual Thread와 커넥션 풀 Starvation
JDK 21 Virtual Thread 100개와 HikariCP 커넥션 10개의 충돌. 커넥션을 기다리던 가상 스레드가 캐리어 스레드를 붙잡는 Pinning이 겹쳐 로그 한 줄 없이 서버가 멈춘 원인 추적부터 해결까지. 실제 장애 기록.
멀티 벤더 IoT 연동 설계하기 (2편) - Event-Driven Architecture로 확장하기
IoT 다중 벤더 환경에서 이벤트 드리븐 아키텍처를 적용한 경험을 공유합니다. Kafka 기반 이벤트 스트림으로 서비스 간 결합도를 낮추고 확장성을 확보한 설계를 소개합니다.
멀티 벤더 IoT 연동 설계하기 (1편) - Adapter 패턴으로 통합하기
네 제조사의 IoT 연동을 공통 계층으로 묶고 구독 만료 문제를 해결한 경험. 신규 제조사 온보딩과 장애 복구의 경계를 정리합니다.
시니어도 헷갈리는 @Transactional 실수 5가지
@Transactional을 잘못 사용하면 데이터가 롤백되지 않는다는 걸 장애 후에 알았습니다. 자체 호출, checked exception, readOnly 오해 등 실수 유형과 올바른 사용법을 정리합니다.
실무에서 바로 쓰는 JPA (1편) - N+1 문제 해결
JPA N+1 문제를 실무에서 마주치면 어떻게 해결할까요? Fetch Join, EntityGraph, Batch Size 세 가지 방법을 성능 측정 결과와 함께 비교하고, 상황별로 어떤 방법을 선택해야 하는지 정리합니다.
AWS Lambda + AOP로 분산 캐시 무효화하기
다중 서버 환경에서 캐시가 각각 달라지는 문제를 AWS Lambda + AOP로 해결한 경험을 공유합니다. 이벤트 기반 캐시 무효화로 일관성을 유지하는 구조를 설명합니다.