woowacourse-study / 2022-jpa-study

🔥 우아한테크코스 4기 JPA 스터디 (22.06.13~22.07.02) 🔥
5 stars 1 forks source link

[섹션 1, 섹션 2, 섹션 3] 헌치 제출합니다 #6

Closed BETTERFUTURE4 closed 2 years ago

BETTERFUTURE4 commented 2 years ago

섹션 1 : JPA 소개

1. JPA 도입 배경

현재는 객체관계형DB에 저장하는 시대이다!

1) SQL 의존적 개발

2) 패러다임의 불일치

1] 객체 vs 관계형데이터베이스(RDB)

2] 객체 그래프 탐색

image 출처 : https://bros.tistory.com/m/16

3) 객체 동일성 보장 X

2. JPA란?

자바 진영의 ORM 표준 기술

1) ORM

2) JPA

3) JPA의 장점

1] 생산성 향상

jpa.persist(member) //저장
Member member=jpa.find(memberId) // 조회
member.setName(“변경할 이름”) //수정
jpa.remove(member) //삭제

2] 유지보수

3] 패러다임의 불일치 해결

4] 엔티티 계층을 신뢰

class MemberService {
    //...
    public void process() {
        Member member = memberDAO.find(memberId);
        member.getTeam(); //자유로운 객체 그래프 탐색
    }
}

5] 성능 최적화

섹션 3 : 영속성 컨텍스트

1. 영속성 컨텍스트(PersistContext)

1) 엔티티의 생명주기

1] 비영속(new/transient)

Member member=new Member("1L", "헌치");

2] 영속(managed)

EntityManager em=emf.createEntityManager();
em.getTransaction().begin();
em.persist(member); //객체를 저장

3] 준영속(detached)

em.detach(member);

4] 삭제(removed)

em.remove(member);

2. 영속성 컨텍스트의 이점

1) 1차 캐시 코드 조회(사실 성능 이점이 크진 않음)

  1. 조회 시 우선 1차 캐시에서 조회
  2. 1차 캐시에 없으면 DB에서 조회
  3. 조회된 값을 1차캐시에 저장
  4. 반환

2) 영속 엔티티의 동일성 보장

3) 트랜잭션을 지원하는 쓰기 지연

  1. transaction.begin(); : 트랜잭션 시작
  2. em.persist(memberA); : SQL 저장소에 데이터들을 저장
  3. transaction.commit(); : 커밋 시 한번에 DB에 전송

4) 변경 감지(Dirty Checking)

// 영속 엔티티 데이터 수정
memberA.setUsername("hi");
memberA.setAge(10);
//-> 커밋 시 자동으로 데이터 업데이트

3. 플러시

1) 플러시 발생

  1. 변경 감지
  2. 수정된 엔티티를 바로 DB에 저장

2) 플러시 호출 방법

3) 플러시 모드

4. 준영속

1) 준영속 상태 만드는 법