목차배경이커머스에서 상품 주문 중 재고 수량 체크와 차감은 필수적이다. 이때 동일한 상품에 대해 동시 재고 차감 요청이 발생할 수 있고, 이를 제어하기 위해서는 다양한 락 전략을 적용할 수 있다. 예를 들어 동시성 제어를 위해 비관적 락을 적용할 수 있다. 이때 요청이 무한정 대기하여 리소스를 소모하는 것을 방지하기 위해 락 획득 요청 유효시간을 설정할 필요가 있는데, 락 획득 요청 유효시간 테스트 과정에서 발생했던 DBMS별로 상이한 동작으로 인한 HikariCP와 Jpa의 처리 한계와 Spring을 통한 해결 방법을 다룬다.내용사용자가 주문을 요청하면, 요청 수량만큼 재고가 남아있는지 확인하고 가능하다면 재고를 차감하여 주문을 진행한다. 이는 아래와 같이 작성할 수 있다. (Kotlin + Spri..

목차캐시와 Jpa네트워크를 통해 데이터베이스 접근하는 시간 비용은 애플리케이션 서버 내부에서 메모리에 접근하는 시간 비용보다 수만~수십만 배 이상 비싸다. 따라서 조회한 데이터를 메모리에 캐시하여 데이터베이스 접근 횟수를 줄이면 성능을 획기적으로 개선할 수 있다. Jpa에서 캐시를 제공하는 방법으로 1차 캐시와 2차 캐시가 있다. Jpa 1차 캐시@Transaction으로 DB 트랜잭션을 사용하는 경우, 대상 엔티티는 영속성 컨텍스트에 포함된다. 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있다. 이를 1차 캐시라고 한다. 데이터베이스 기본 키로 기준으로 캐시되어 있는지 확인한다. 트랜잭션을 커밋하거나 플러시를 호출하면 1차 캐시에 있는 엔티티의 변경 내역을 데이터베이스에 반영(동기화)한다. (=..