흰 스타렉스에서 내가 내리지

트랜잭션을 지원하는 "쓰기 지연"의 진짜 장점⭐️ 본문

JPA

트랜잭션을 지원하는 "쓰기 지연"의 진짜 장점⭐️

주씨. 2024. 4. 28. 04:51
728x90
  • 트랜잭션을 지원하는 쓰기 지연과 변경 감지 기능 덕분에 성능과 개발의 편의성의 장점을 얻었다.
  • 하지만 진짜 장점은 데이터베이스 row 에 lock 이 걸리는 시간을 최소화한다는 점이다.
  • 이 기능은 트랜잭션을 커밋해서 영속성 컨텍스트를 플러시하기 전까지는 데이터베이스에 데이터를 등록, 수정, 삭제하지 않는다.
  • 따라서 커밋 직전까지 데이터베이스 로우에 락을 걸지 않는다.

 

update(member);    // UPDATE SQL A
logicA();                   // UPDATE SQL ...
logicB();                    // UPDATE SQL ...
commit();

 

  • JPA 를 사용하지 않고 SQL 을 직접 다루면 update(member) 를 호출할 때 UPDATE SQL 을 실행하면서 데이터베이스 테이블 로우에 락을 건다.
  • 이 락은 logicA(), logicB() 를 모두 수행하고 commit() 을 호출할 때까지 유지된다.
  • 보통 데이터베이스에 현재 수정 중인 데이터를 수정하려는 다른 트랙잭션은 락이 풀릴 때까지 대기한다.

 

  • JPA 는 커밋을 해야 플러시를 호출하고 데이터베이스에 수정 쿼리를 보낸다.
  • 예제에서 commit() 을 호출할 때 UPDATE SQL 을 실행하고 바로 데이터베이스 트랜잭션을 커밋한다.
  • 쿼리를 보내고 바로 트랜잭션을 커밋하므로 결과적으로 데이터베이스에 락이 걸리는 시간을 최소화한다.

 

  • 사용자가 증가하면 서버를 증설하면 된다.
  • 하지만 데이터베이스 락은 서버 증설만으로는 해결할 수 없다
  • 오히려 서버를 증설해서 트랜잭션이 증가할수록 더 많은 데이터베이스 락이 걸린다.
  • JPA 의 쓰기지연 기능은 데이터베이스에 락이 걸리는 시간을 최소화해서 동시에 더 많은 트랜잭션을 처리할 수 있는 장점이 있다.