본문 바로가기

개발중/Java Persistence API (JPA)

(27)
[JPA] 낙관적 락(Optimistic Lock)과 비관적락 (Pessimistic Lock) 이란 ? 낙관적 락 ( Optimistic Lock ) 비관적 락 ( Pessimistic Lock ) 선택 기준 충돌 발생 확률이 낮은 상황에서 주로 사용됩니다. 이 방식은 데이터가 대부분의 시간 동안 변경되지 않을 것이라는 '낙관적' 가정 하에 작동합니다. 충돌이 자주 발생할 것으로 예상되는 상황, 예를 들어, 동시에 여러 트랜잭션이 같은 데이터를 변경할 가능성이 높은 경우에 사용됩니다. 충돌 대응 데이터를 업데이트하는 시점에서만 충돌을 확인합니다. 만약 충돌이 발견되면, 일반적으로 트랜잭션을 재시도하거나 오류를 반환합니다. 데이터에 접근하기 전에 먼저 락을 걸어 다른 트랜잭션의 접근을 차단합니다. 이로써 충돌을 예방합니다. 사용 방법 낙관적 락은 버전 관리(Versioning) 등의 방법을 통해 구현할 수 ..
JPA Bulk Insert 로 성능 향상 시키기 기존에 데이터 다중 삽입 할 때의 방식 public void insertMultipleV2vFailWord(List entities) { for (V2vFailWord entity : entities) { jm.em.persist(entity); } } 아래와 같이 insert 쿼리문이 반복적으로 발생하기 때문에 성능 저하가 발생할 수 밖에 없다. JPA 는 Bulk Insert 가 안될까 ? 여기 참조하니까 아래와 같이 답변이 나와있다. Transactional write-behind Hibernate tries to defer the Persistence Context flushing up until the last possible moment. This strategy has been traditi..
[JPA] Entity 가 Update 되는 과정에 대해서 아니 JPA 에서 UPDATE 되는 과정 JPA(Java Persistence API)에서 업데이트 과정은 다음과 같이 이루어집니다: 1. 엔티티 조회 먼저 업데이트할 엔티티를 데이터베이스에서 조회합니다. 이는 주로 `EntityManager`를 사용하여 해당 엔티티를 조회하는 쿼리를 실행하는 방식으로 이루어집니다. 2. 엔티티 수정 조회한 엔티티를 수정합니다. 이때 JPA는 영속성 컨텍스트(Persistence Context)에서 관리하는 엔티티를 수정합니다. 수정은 엔티티의 필드를 변경하거나 메소드를 호출하여 이루어질 수 있습니다. 3. 트랜잭션 커밋 업데이트된 엔티티를 데이터베이스에 반영하기 위해 트랜잭션을 커밋합니다. 이때 JPA는 변경된 엔티티를 감지하고 해당 엔티티에 대한 UPDATE SQL 문을 ..
[JPA ERROR] No qualifying bean of type 'org.springframework.transaction.TransactionManager' available 트랜잭션을 사용하려하는데 트랜잭션이 하나 이상일 때 발생하는 에러라고 한다. 트랙잭션에 우선순위를 @Primary @Qualifier 어노테이션을 사용해 부여할 수도 있지만 설정 파일에 트랜잭션 참조 설정을 추가해주는 방식으로 해결했다. @Configuration @PropertySource({ "classpath:application.properties" }) @EnableJpaRepositories( entityManagerFactoryRef = "pomsEntityManagerFactory" , transactionManagerRef = "pomsTransactionManager" , basePackages = "com.rsn.test.api.*.dao.*" ) public class PomsJpa..
[JPA] 다른 컬럼명을 참조하는 연관관계에 대한 궁굼점 (referencedColumnName) ❓ 다른 컬럼명을 참조하는 연관관계에 대한 궁굼점 JPA 를 공부하며 궁굼한게 있어 질문 드립니다 ! 아래와 같은 테이블이 존재한다고 가정한다. QNA 테이블에 존재하는 Q_REG_USER , Q_UPD_USER 는 USER.U_SEQ 이다. 이렇게 서로 다른 컬럼명을 참조하고 있을경우 어떻게 대처해야 할지몰라 방법을 찾아본 후 referencedColumnName 를 사용해 명시를 해준 후 매핑을 해주니 내가 원하는 결과가 잘 나왔다. 하지만 실무에서 실제로 어떻게 쓰이는지 몰라 맞는 방법을 몰라 조언을 구합니다. 이런 경우에 이런 식으로 매칭을 시켜주는게 맞는지, 또한 어떻게 사용하는지도 알려주시면 감사할 것 같습니다 ! 위의 질문을 보고 구한 답은 아래와 같다. 답변 1 답변 2
Criteria API 에 대해 알아보기 - Criteria 란 ? Criteria 는 JPQL 의 작성을 도와주는 빌더 클래스이다. 문자열로 JPQL 을 작성하면 런타임이 되어야 문법 오류를 알 수 있지만 Criteria 는 자바 코드 기반이기 때문에 안전하게 JPQL 을 작성할 수 있다. 하지만 코드가 복잡해서 직관적으로 이해하기 힘들다는 의견도 있다. 대부분의 내용이 JPQL 과 중복되므로 사용법위주로 살펴보자. - Criteria 의 장점 문자가 아닌 query,select(m).shere(...) 처럼 프로그래밍 코드로 JPQL 을 사용할 수 있다. 컴파일 시점에 오류를 발견할 수 있다. IDE 를 사용하면 코드 자동 완성을 지원한다. 동적 쿼리를 작성하기 편하다. - Criteria 의 단점 이것만 보면 Criteria가 가진 장점이..
JPA ( Java Persistence API ) Transaction 🧐 트랜잭션이란 ? DB 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들 🧐 JPA 트랜잭션 격리수준 트랜잭션이 보장해야하는 ACID 중 격리성과 관련된 내용인데 격리성을 완벽히 보장하려면 동시성 처리 성능이 매우 나빠진다. 이런 문제로 인해 ANSI 표준은 트랜잭션의 격리 수준을 4단계로 나누어 정의했다. Atomicity; 원자성 트랜잭션 내의 작업들은 모두 성공 또는 모두 실패한다. Consistency; 일관성 모든 트랜잭션은 일관성 있는 DB 상태를 유지한다. (ex: DB의 무결성 제약 조건 항상 만족) Isolation; 격리성 동시에 실행되는 트랜잭션들은 서로 영향을 미치지 않는다. (ex: 동시에 같은 데이터 수정 X) D..
JPA ( Java Persistence API ) JPA ( Java Persistence API ) ▶ 개념 • 자바 진영에서 ORM( Object - Relational Mapping ) 기술 표준으로 사용되는 인터페이스 모음 • 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크 • JPA 를 구현한 대표적인 오픈소스로는 Hibernate가 있다. JPA 구현체 ※ ORM( Object - Relational Mapping ) • 객체와 관계형 데이터베이스의 데이터를 자동으로 Mapping( 연결 ) 해주는 것을 의미한다. • 객체지향 프로그래밍 - 클래스 사용 / 관계형 데이터베이스 - 테이블 사용 객체 모델과 관계형 모델간의 존재하는 불일치를 ORM을 통해 객체간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치 해결한다. ▶ JPA 동작..