[JPA] 쓰기 지연의 장점 등
쓰기 지연의 장점데이터베이스의 락의 최소화 Uploaded by N2T
- 자바/JPA
- · 2023. 11. 19.
문제가 되는 상황두 사용자가 동시에 같은 데이터를 수정하는 경우 발생사용자 A와 B가 동시에 같은 데이터를 수정A가 먼저 커밋한 후 B가 커밋시A의 변경 사항은 사라지게 되며B의 변경 사항만 남게됨.해결 방안마지막 커밋만 ㅇㅈ 하기최초 커밋만 ㅇㅈ 하기병합충돌을 갱신하는 내용을 병합..개발자가 직접 구현해야함?그런데 이런 상황이 정상인가..마지만 커밋만 ㅇㅈ은 기본적인 방식이다.하지만 최초 커밋은 JPA 의 @Version 기능을 이용하여 원본 버전의 엔티티만 살릴수있다.그냥 낙관적 락 방식이라고 생각하면 된다.최초에 수정된 내용 반영 → 버전 변경이후의 트랜잭션이 수정 불가능이다 .책에서 너무 어렵게 설명해놓은거 아닌가 싶다 Uploaded by N2T
트랜잭션의 ACID 속성1. 원자성(Atomicity)트랜잭션 내의 모든 작업은 하나로 간주된다.트랜잭션안의 작업은 모두 성공하거나, 모두 실패해야한다..2. 일관성 (Consistency)트랜잭션이 실행되기 전과 후에 DB 의 상태는 일관되어야 함.예시데이터베이스 무결성 제약조건이 항상 충족되어야 함.3. 격리성 (Isolation)동시에 수행되는 여러 트랜잭션이 서로 영향을 주지 않도록 격리다른 트랜잭션이 중간 결과에 영향을 받지 않도록 한다.예시@Transcational isolation 속성 ..4. 지속성 (Durability)트랜잭션이 성공적으로 완료되면, 이후에 발생하는 시스템 장애나 오류에도 영향을 받지 않고 영구적으로 저장된다.ANSI 표준 4 가지 트랜잭션 격리 수준READ UNCOMM..
스칼라 타입으로 조회엔티티로 조회 대신 스칼라 타입 ( 기본 데이터 타입 ) 으로 필드 조회영속성 컨텍스트가 결과 관리 X 메모리 사용을 줄일 수 있다.select o.id, o.name, o.price from Order o읽기 전용 쿼리 힌트org.hibernate.readOnly` 힌트 사용시 엔티티를 읽기 전용으로 조회 가능하다.스냅샷의 저장단계를 생략할 수 있다고 한다.스냅샷?Hibernate 가 엔티티를 로드하는 경우 초기의 엔티티의 상태를 말한다고 한다.해당 스냅샷은 트랜잭션이 종료되는 경우 (자동 혹은 명시적인 플러시 시점) 엔티티가 변경되었는지 체크하는 과정에서 사용된다고 한다.더티체킹 라는 부분을 수행하지 않는다고 생각하면 된다.엔티티의 변경감지하는 로직을 수행하지 않는다.TypedQu..
쓰기 지연과 JDBC 배치JDBC 배치 기능INSERT 시 마다 DB와 통신이 발생함.네트워크 IO 비용이 있기에.. 성능에 부정적인 영향을 미친다.JDBC 배치로 SQL 명령을 한 번에 DB로 보내 성능을 극대화 할 수 있다.JPA 플러시 기능 활용JPA 는 내부적으로 플러시 기능으로 DB와 통신함.JPA 는 JDBC 의 SQL 배치 기능을 보다 효과적으로 사용이 가능하다.하이버네이트의 설정hibernate.jdbc.batch_size 속성을 50 으로 설정하면최대 50건의 데이터를 모아서 SQL 배치를 수행함쓰기 지연의 작동 방식같은 종류의 SQL 명령을 모아서 배치 처리함.em.persist(new Member()); // 1 em.persist(new Member()); // 2 em.persis..
쓰기 지연의 장점데이터베이스의 락의 최소화 Uploaded by N2T
DEPARTURE("DEPARTURE", "배송지시"), DELIVERING("DELIVERING", "배송중"), FINAL_DELIVERY("FINAL_DELIVERY", "배송완료"),enum 에 위에 해당하는 한글 값이 들어가는 것은 왠만하면 권장되지 않는 행동이라고한다.또한 상수값과 value 인 DEPARTURE 는 문자가 동일하다…이런 이유때문에 삭제가 권장되긴하는데나는 enum 에 별도의 value 로 검색할 수 있는 기능이 별도 존재해야한다고 생각하기도하며만약 상수값이 변경된다면 데이터베이스에 저장되는 의미까지 변질될 가능성이 있다고 생각되기에, 유지보수의 면에서 별도 value 표기는 필수적이라고 생각된다. public void removeOrderProducts(long orderId..