MySQL 데드락 실전 분석: SHOW ENGINE INNODB STATUS 읽는 법
데드락 로그를 직접 만들어 줄 단위로 해부합니다. 갭 락과 삽입 의도 락이 왜 서로 다른 값을 넣는데도 충돌하는지까지.
JPA와 영속성 컨텍스트, Redis 캐싱, 데이터베이스 락과 쿼리 성능 등 데이터를 다루는 계층의 설계와 문제 해결을 정리합니다.
데드락 로그를 직접 만들어 줄 단위로 해부합니다. 갭 락과 삽입 의도 락이 왜 서로 다른 값을 넣는데도 충돌하는지까지.
@ManyToOne은 fetch join으로 끝납니다. 컬렉션은 다릅니다. 페이징·두 개 이상·카티션 곱에서 막히는 걸 쿼리 수로 측정했습니다.
Spring Data JPA에서 엔티티를 삭제할 때 Batch update returned unexpected row count from update [0]; actual row count: 0; expected: […]
백엔드 시스템의 성능을 최적화하는 과정에서 가장 가성비가 좋고 즉각적인 효과를 볼 수 있는 기술은 단연 ‘캐싱(Caching)‘입니다. 관계형 데이터베이스(RDBMS)는 디스크 I/O를 […]
지난 포스팅에서 우리는 JPA의 낙관적 락과 비관적 락을 통해 데이터베이스 레벨에서 동시성 문제를 해결하는 방법을 배웠습니다. 하지만 서비스의 규모가 커져 […]
백엔드 개발자가 로컬 환경에서 혼자 개발하고 테스트할 때는 절대 마주칠 수 없는, 하지만 운영 환경에 배포되자마자 서비스의 신뢰도를 바닥으로 떨어뜨리는 […]
지난 포스팅에서 우리는 JPA의 꽃이라 불리는 변경 감지(Dirty Checking)에 대해 알아보았습니다. 트랜잭션 안에서 엔티티의 값을 수정하기만 하면, JPA가 알아서 UPDATE 쿼리를 날려주는 […]
Spring Data JPA를 사용하다 보면 신기한 경험을 하게 됩니다. 데이터베이스에서 객체를 조회한 후, setter 메서드로 값을 변경하기만 했는데 별도로 save()나 update() 메서드를 호출하지 않아도 DB에 […]
소프트웨어 개발, 특히 데이터베이스를 다루는 백엔드 개발이나 사용자 경험을 중시하는 프론트엔드 개발에서 “성능 최적화”는 영원한 숙제와도 같습니다. 우리는 항상 “어떻게 […]
OpenEntityManagerInView (OEIV)는 Spring Framework와 JPA(Java Persistence API)를 함께 사용할 때 발생하는 지연 로딩(Lazy Loading) 문제를 웹 환경에서 해결하기 위해 설계된 패턴이자 Spring에서 […]