Backend/JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] JPA 소개

hsooooo 2023. 1. 2. 21:28

* 김영한 강사님의 자바 ORM 표준 JPA 프로그래밍 강의를 정리한 내용입니다.

 

JPA를 사용하면 좋은 점

  • 개발 생산성 증가
  • 개발 속도, 유지 보수가 좋다.

객체와 테이블을 생성하고 올바르게 매핑하는 방법을 알아야함

 

목표 - 객체와 테이블 설계 매핑

  •  기본 키와 외래 키 매핑
  • 1:N, N:1, N:M 매핑
  • 실무 노하우 + 성능까지 고려
  • 어떠한 복잡한 시스템도 JPA로 설계 가능

목표 - JPA 내부 동작 방식 이해

  • JPA의 내부 동작 방식을 이해하지 못하고 사용
  • JPA가 어떤 SQL을 만들어 내는지 이해
  • JPA가 언제 SQL을 실행하는지 이해

 

SQL 중심적인 개발의 문제점

  • 계속해서 쿼리를 작성해야함 ;;;; 무한 반복, 지루한 코드
  • SQL에 의존적인 개발을 피하기 어렵다.

객체 지향 프로그래밍 : 추상화, 캡슐화, 정보은닉, 상속, 다형성

객체를 영구 보관하는 저장소 => 관계형 데이터베이스

 

객체와 관계형 데이터베이스의 차이

  • 상속

  • 연관관계 : 객체는 참조, 테이블은 외래 키를 사용

이때, 객체다운 모델링을 위해서는 참조로 연관관계를 맺어야 한다.

Member에서 Team의 Id를 가져올 때, 필드설계를 Team team으로 해서 get으로 참조하게 만든다.

But, 데이터베이스에 insert하기가 까다로워진다.
진정한 의미의 계층 분할이 어렵다.

 

비교하기

  • 데이터베이스에서의 비교는 다르다.
  • 자바 컬렉션에서 비교는 같다.

객체답게 모델링 할수록 매핑 작업만 늘어난다.

따라서, 객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수는 없을까??

 

JPA(Java Persistence API) : 자바 진영의 ORM 기술 표준, JPA는 Application와 JDBC 사이에서 동작한다.

ORM(Object-relational mapping) : 객체 관계 매핑, ORM 프레임워크가 중간에서 객체와 관계형 데이터베이스를 매핑

유지보수 : 필드 변경 시, 모든 SQL을 수정해야됐다면 JPA의 경우는 필드만 추가하면 된다. SQL은 JPA가 처리한다.

 

JPA와 패러다임의 불일치 해결

  • JPA와 상속
  • JPA와 비교하기 : 동일한 트랜잭션에서 조회한 엔티티는 같음을 JPA가 보장

JPA의 성능 최적화 기능

  • 1차 캐시와 동일성(Identity) 보장

같은 트랜잭션 안에서는 같은 엔티티를 반환 (약간의 조회 성능 향상)

 

  • 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) 

트랜잭션을 커밋할 때까지 INSERT SQL을 모음, JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송

 

  • 지연 로딩(Lazy Loading) : 객체가 실제 사용될 때 로딩

즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회