About
    2026년 6월 4일
    @TransactionalEventListener(AFTER_COMMIT)에서 DB 업데이트가 반영되지 않는다
    AFTER_COMMIT 리스너는 DB 커밋이 끝난 뒤 실행돼 엔티티 변경이 반영되지 않는다. REQUIRES_NEW로 새 트랜잭션을 열어 해결한 과정을 정리했다.
    2026년 6월 1일
    JFR로 Spring Boot 애플리케이션 병목 찾기
    디버깅만으로는 찾기 어려운 Spring Boot 병목을, JFR과 JMC로 실행 흐름을 분석해 String.matches()의 Pattern 반복 컴파일 같은 성능 문제를 추적·개선한 방법을 정리했다.
    2026년 5월 30일
    Enum의 해시코드
    Enum의 hashCode()로 Redis 캐시 키를 만들면 JVM 재시작마다 값이 달라져 캐시 미스나 데이터 오반환이 생긴다. 외부 저장소 키에 hashCode()를 쓰면 안 되는 이유를 정리했다.
    2026년 5월 29일
    옵시디언에선 보이는데 블로그에선 안 보이던 mermaid 다이어그램
    Jekyll이 mermaid를 코드 블록 텍스트로만 변환해 다이어그램이 안 보이던 문제를, mermaid.min.js를 직접 포함하고 클라이언트 스크립트로 SVG 렌더링해 해결했다.
    2026년 5월 29일
    DB는 롤백됐는데 알림은 갔다: Transactional Outbox 패턴 도입기
    DB 트랜잭션과 외부 메시지 발행이 원자적으로 묶이지 않아 생기는 정합성 문제를, Transactional Outbox 패턴으로 메시지를 먼저 기록하고 별도 디스패처가 발행하도록 분리해 해결했다.
    2026년 5월 20일
    ArchTest
    Gradle 멀티모듈만으로는 완전히 막지 못하는 헥사고날 아키텍처 의존성 위반을, ArchUnit 테스트로 레이어 간 의존 방향을 강제해 해결한 방법을 정리했다.
    2025년 11월 22일
    복합키를 사용한 중복 데이터 삽입 방지(feat. MySQL, Unique Index)
    애플리케이션 레벨 중복 검사만으로는 막지 못한 다대다 관계의 중복 삽입을, MySQL 복합키 유니크 인덱스로 DB 레벨에서 원천 차단한 방법을 정리했다.
    2025년 4월 30일
    트래픽이 몰리는 상황에서 캐시와 관련한 문제점(feat. Redis)
    Redis 캐싱 도입 시 마주친 Cache Stampede·Cache Penetration·서버 장애를 TTL Jitter, Null Object Pattern, Failover로 해결한 과정을 정리했다.
© 2026 Sim Jonghan 연락처: Email · GitHub · LinkedIn </> Powered by: Jekyll · GitHub Pages · The Plain theme