본문 바로가기
728x90

JPA7

JPA - 트랜잭션 매니저3 전파 속성 @Transaction 속성 @Transaction 에 설정할 수 있는 속성은 다음과 같습니다. @Transaction 속성 중에 이번 포스트에서 Propagation 속성을 살펴보겠습니다. Propagation 속성 Propagation 은 전달 또는 전파라고 하며, 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 위와 같이 전파 속성은 총 7가지 설정이 존재합니다. 사용 예시는 다음과 같습니다. @Transactional(propagation = Propagation.REQUIRED) @Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagatio.. 2022. 3. 25.
JPA - 트랜잭션 매니저1 개요 트랜잭션이란? 트랜잭션이란 insert, update, delete 등 DB 변경에 해당하는 SQL 문을 처리하는 작업의 단위입니다. 기본적으로 SQL 명령문 하나를 실행하는 것에서부터 서비스 내 메소드 전체가 트랜잭션의 단위가 될 수 있습니다. 부모 트랜잭션 내부에 자식 트랜잭션이 있는 경우에 부모 트랜잭션으로 트랜잭션 단위가 묶이게 됩니다. 트랜잭션의 속성(ACID) 트랜잭션은 4가지 속성(ACID)을 기반으로 작동합니다. Atomicity 원자성 원자성 - 부분적인 성공을 허용하지 않습니다. all or nothing 트랜잭션 내에 있는 모든 작업이 완료되거나 모든 작업이 완료되지 않아야 한다. 즉, 트랜잭션 내의 작업 중 하나라도 exception이 발생하면 트랜잭션 내의 모든 작업은 롤백(rol.. 2022. 3. 25.
JPA - 트랜잭션 매니저2 독립성(격리) 속성 @Transaction 속성 @Transaction 에 설정할 수 있는 속성은 다음과 같습니다. @Transaction 속성 중에 이번 포스트에서 isolation 속성을 살펴보겠습니다. Isolation 속성 Isolation 은 트랜잭션에서 독립성 혹은 격리성이라고 부릅니다. Isolation 은 Transaction 에서 일관성이 없는 데이터를 허용하도록 하는 수준이며, 여러 Transaction들이 다른 Transaction의 방해로부터 보호되는 정도를 나타냅니다. 격리성에는 격리 레벨(수준)이 존재합니다. 격리 레벨이 높은 수록 데이터의 정합성을 보장해주는 대신에 동시 처리하는 수행능력(성능)이 떨어지게 됩니다. 반대로, 격리 레벨이 낮을 수록 성능은 좋아지지만 데이터의 정합성이 떨어지게 됩니다.. 2022. 3. 25.
JPA - Entity Listener JPA에서 제공하는 Entity Listener의 종류와 쓰임에 대해서 정리해보았습니다. Entity Listener는 JPA가 동작하는 이벤트 구간을 관찰하고 있다가 발생하면 특정 동작을 실행하는 메소드라고 볼 수 있습니다. Entity Listener Annotation @PrePersist: entity manager persist operation(insert 작업)가 실행되기 전 @PreRemove: entity manager remove operation(delete 작업)가 실행되기 전 @PreUpdate: database의 update 작업이 실행되기 전 @PostPersist: database의 insert 작업이 실행된 이후 @PostRemove: database의 delete 작업이 .. 2022. 3. 25.
JPA - 연관 관계 연관 관계의 주인 두 객체(A, B)가 양방향 관계, 다시 말해 단방향 관계 2개(A→B, B→A)를 맺을 때, 연관 관계의 주인을 지정해야 합니다. 연관 관계의 주인을 지정 하는 것은 두 단방향 관계(A→B, B→A)중, 제어의 권한(외래 키를 비롯한 테이블 레코드를 저장, 수정, 삭제 처리)을 갖는 실질적인 관계가 어떤 것인지 JPA에게 알려준다고 생각하면 됩니다. 연관 관계의 주인은 연관 관계를 갖는 두 객체 사이에서 조회, 저장, 수정, 삭제를 할 수 있지만, 연관 관계의 주인이 아니면 조회만 가능합니다. 연관 관계의 주인이 아닌 객체에서 mappedBy 속성을 사용해서 주인을 지정해줘야합니다. 일반적으로 외래 키가 있는 곳을 연관 관계의 주인으로 정합니다. 일반적인 프로그래머의 객체지향적 관점에.. 2022. 3. 25.
JPA - Entity의 기본 속성 @GeneratedValue 내부에 GenerationType이 존재합니다. IDENTITY 전략 @GeneratedValue는 primary key로 사용할 프로퍼티에 적용합니다. Mysql의 identity 속성과 같이 auto increment를 사용하여 unique한 키값을 만듭니다. 다만, 이로인해 transaction이 끝나기 전에 키값을 증가시켜, transaction이 정상적으로 끝나지 못한 경우 다음 transaction에서는 키 값이 하나 더 증가한 값이 반영됩니다. SEQUENCE 전략 transaction이 종료된 시점에서 insert 쿼리에 key값을 채워서 실행됩니다. TABLE 전략 db의 종류와 상관없이 id 값을 관리하는 별도의 테이블을 만들어주고 그 테이블에서 id 값을 .. 2021. 12. 3.
JPA - JPA 관련 용어 소개 JPA 관련 용어 소개 ORM(Object Relational Mapping) 어플리케이션과 데이터 베이스를 연결해 놓은 것이 ORM이라는 개념입니다. 객체와 데이터간의 관계를 연결시켜주는 것이 ORM이다. ORM을 통해서 우리가 정의한 객체를 사용하는 것만으로 데이터를 연결해서 사용할 수 있게 된다. 만약 ORM 없이 직접 데이터들을 핸들링해야한다면, select 쿼리로 일일이 매핑해서 사용해야 합니다. JPA(Java Persistence API)이란 자바 진영에서는 ORM을 표준 스펙으로 정의한 것이 JPA입니다. 자바에서 JPA를 데이터를 접근하기 위한 데이터의 규격으로 정의한 것입니다. ORM이 전체적인 개념이라면 JPA는 ORM을 구체적으로 그 기능을 정의한 스펙입니다. Hibernate JP.. 2021. 11. 30.
728x90