[IT]Zero-MG
JPA :: CRUD와 Transaction(트랜잭션) 본문
JPA를 공부하며 벌써 2주가 흘렀다..
시간이 너무 야속할 정도로 빠르게 흐른다....ㅠㅠ
포스팅 할 것들을 매번 메모하여 가지고 있다보니 이제 포스팅을 쓴다..
JPA의 CRUD 기본 함수
'Member'라는 Entity객체를 가지고 있다는 가정 하에, 간략하게 설명하겠다.
저장: jpa.persist(member);
조회: Member member = jpa.find(member_id);
수정: member.setName("변경할 이름);
삭제: jpa.remove(member);
JPA의 트랜잭션(Transaction) or 쓰기지연
JPA를 활용적으로 하려면 트랜잭션을 이해하고
쓰기지연을 사용하여 한번의 네트워크 연결로 더 빠르고 생산적인 기능으로 구현이 가능하다.
JPA의 Query가 실행되는 것에는 2가지가 있다.
즉시로딩, 지연로딩
우리가 위 CRUD 함수를 쓰자마자 실행되는 것이 즉시로딩
CRUD 함수를 썻을때 트랜잭션 안에서 가지고 있다가
트랜잭션이 커밋하는 시점에 Query를 실행하는 것이 지연로딩
이게무슨말이냐?
아래 코드를 보며 설명해보겠다.
// 트랜잭션을 시작한다.
transaction.begin();
// em은 Entity Manager
em.persist(memberA); // memberA 저장을 예약
em.persist(memberB); // memberB 저장을 예약
em.persist(memberC); // memberC 저장을 예약
// 이 때 까지는 실제로 아직 함수가 실행 되지 않고
// 커밋이 이루어 질 때 함수가 같이 실행됨.
// 트랜잭션 커밋
transaction.commit();
위와 같이 .begin()으로 트랜잭션 영역의 시작을 알린 후
필요한 JPA 함수를 적어준 뒤,
.commit(); 으로 위 JPA함수를 일괄적으로 실행한다.
즉시로딩을 할 경우, 네트워크를 총 3번을 타는 반면에,
지연로딩은 네트워크를 1번 타며 내가 실행할 쿼리문을 한번에 실행해주는 장점이 있다.
그리고 JPA로의 특징으로는 한번 불러왔던 값을 다시 불러올 경우,
데이터베이스에 접근 하지 않고 JPA 자체적으로 가지고 있는 컨텍스트*에서 가져온다.
위 컨텍스트*를 1차 컨텍스트 라고 하며, 영속성 컨텍스트에 담겨져 있다고도 말 한다.
JPA가 요즘 Mybatis를 뚫고 전세계적으로 JPA가 수용량이 많아지고 있는 추세에 따라
JPA공부를 소홀히 하지 않고 있고, 막상 써보니 많이 어렵긴 하지만 굉장히 편리하고 신박하다.
아직 Mybatis를 쓰고 계신다면 시간을 조금 투자해서 JPA로 프로젝트를 한번 해보는 것이 어떨까 한다.
'백엔드 기록 > JPA' 카테고리의 다른 글
JPA 병합(merge)과 변경감지 :: Update 방법 (0) | 2022.08.08 |
---|