[JPA] 섹션 1 : JPA 소개

헌치·2022년 7월 11일
0

JPA

목록 보기
1/4

노션 링크

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

1. JPA 도입 배경

1) SQL 의존적 개발

  • 지루한 코드
  • 필드 추가시 해당 객체를 쓰는 모든 CRUD SQL을 수정

2) 패러다임의 불일치

  • 객체지향의 특징을 제대로 활용 X

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

  • 상속 : 객체는 상속 O, 관계형데이터베이스는 상속 X
  • 연관관계 : 객체는 참조(reference), 관계형데이터베이스는 PK/FK 로 join
    • 객체와 DB 사이 불일치
    • 모델링 조회 시 일일이 데이터 연관관계 맻어주고 매핑해줘야 함

4) 객체 그래프 탐색

  • 진짜로 내가 원하는 필드가 채워져 있는가?
  • 엔티티를 신뢰할 수 X
  • 객체 여러개를 한번에 로딩하게 됨...

5) 객체 동일성 보장 X

  • 객체에서는 동일한 값들이 DB에서는 다른 엔티티가 됨

2. JPA란?

자바 진영의 ORM 표준 기술

1) ORM

  • Object-relational mapping(객체 관계 매핑)
  • 해당 프레임워크가 객체-관계형 DB 중간에서 매핑
  • 대중적 언어 대부분은 ORM 기술 존재

2) JPA

  • 구현체 프레임워크를 사용 : 하이버네이트(오픈소스)
  • 인터페이스의 모음
    • JPA2.1 표준 명세를 위한 3가지 구현체
    • 하이버네이트EclipseLinkDataNucleus

3) JPA의 장점

1] 생산성 향상

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

2] 유지보수

  • 필드만 추가하면 됨, SQL은 JPA가 처리

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

  • 위에서 언급한 상속, 연관관계, 그래프 탐색... 해결

4] 엔티티 계층을 신뢰

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

5] 성능 최적화

  • 1차 캐시와 동일성(identity) 보장
    • 같은 트랜잭션 같은 엔티티 -> 조회 성능 UP
    • Isolation Level ... Repeatable Read 보장
  • 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션 커밋 순간, JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
  • 지연 로딩, 즉시 로딩 옵션 끄고 켤 수 있음
    • 지연 로딩 : 객체가 실제 사용될 때 로딩
    • 즉시 로딩JOIN SQL로 한번에 연관된 객체까지 미리 조회

참고자료

  • [책, 강의] 자바 ORM 표준 JPA 프로그래밍(김영한)
profile
🌱 함께 자라는 중입니다 🚀 rerub0831@gmail.com

0개의 댓글