JPA 소개(자바 ORM 표준 JPA 프로그래밍 - 기본편)

2022. 12. 21. 15:55·BackEnd/자바 ORM 표준 JPA 프로그래밍

저번 강의에서 왜 JPA를 공부해야 하는지 배웠다. 이번 강의에서는 JPA가 무엇인지 배웠다.

JPA란? 

Java Persistence API로 자바 진영의 ORM 기술 표준이다.

  • ORM이란?

Object-relational mapping(객체 관계 매핑)이라는 뜻으로

객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다는 뜻이다.

ORM프레임워크가 중간에서 매핑을 해준다. 대중적인 언어에는 대부분 ORM 기술이 존재한다.

 

JPA 동작

  • 저장

위 그림은 강의 시간에 배운 JPA를 사용하여 저장할 때 JPA가 처리하는 과정을 보여준다. JPA가 SQL로 구현해야 할 부분을 모두 처리해주는 것을 알 수 있다.

  • 조회

위 그림은 조회를 하는 부분인데 저번 시간에 배운 SQL구문을 사용하지 않고 find라는 명령어로 모든 것을 처리해 준다.

 

JPA를 왜 사용해야 하는가?

저번 시간에 SQL을 사용할 시 생기는 문제점을 대부분 처리해 준다.

SQL 중심적인 개발에서 객체 중심으로 개발 가능해진다.

 

  • 생산성

코드 짜는 게 훨씬 간편해진다.

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

 

  • 유지보수

기존에는 필드를 변경할 시 모든 SQL을 수정해야 한다. 예를 들어 객체에 전화번호를 추가할 시에 Insert, select, update 등등 모든 부분에 tel을 추가해 줘야 한다. 하지만 JPA는 JPA가 처리해 준다.

 

  • JPA와 패러다임의 불일치를 모두 해결해 준다.

1. JPA와 상속저번 강의 시간에 ITEM이라는 테이블이 슈퍼 테이블이고 그 아래 ALBUM이라는 테이블이 있을 경우 ALBUM테이블에 주키와 외래키로 ITEM테이블의 주키를 추가해줘야 한다고 했다. 이럴 경우 조회나 입력 같은 경우 매우 불편해진다고 배웠다. 하지만 JPA는  jpa.persist(album); 을 할 경우 inset into Item, insert into album 등을 모두 처리해 준다. 조회일 경우도 연관해서 계속 SQL구문에 from 부분에 추가해야 조회를 할 수 있어지만 JPA는 JPA가 모두 처리해준다.

 

2. JPA와 연관관계, 객체 그래프 탐색

//연관관계 저장
member.setTeam(team);
jpa.persist(member);

//객체 그래프 탐색
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();

원래는 null값이 나올 수 도 있고 find가 모든 table을 join 할 수 도 있는 어려움이 생길 수 있지만 JPA가 모든 것을 처리해 자유로운 객체 그래프 탐색이 가능해진다. 즉, 엔티티를 신뢰할 수 있다.

 

3.JPA와 비교하기

자바에서 get으로 값을 가져오면 엔티티가 달라져 == 구문 할 경우 false를 리턴한다. 하지만 JPA는 ==구문을 할 경우 jpa.find를 하면 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.

 

  • JPA의 성능 최적화 기능

1. 1차 캐시와 동일성 보장 

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

String memberId = "100";
Member m1 = jpa.find(Member.class, memberId); //SQL
Member m2 = jpa.find(Member.class, memberId); //캐시

위에 코드일 경우 제일 m1을 찾을 때는 SQL을 실행하지만 m2 일 때는 캐시에 저장된 데이터를 반환해준다. 결국 m1 == m2할 경우 true가 반환된다.

 

2. 트랜잭션을 지원하는 쓰기 지연 

  • INSERT

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

transaction.begin(); // [트랜잭션] 시작

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);

//여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.
//커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
transaction.commit(); // [트랜잭션] 커밋
  • UPDATE

UPDATE, DELETE 인한 로우락 신간 최소화, 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋

 

3. 지연 로딩과 즉시 로딩

지연 로딩 : 객체가 실제  사용될 때 로딩

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

 Member member = memberDAO.find(memberId);
 Team team = member.getTeam();
 String teamName = team.getName();

아래와 같은 코드르 실행한다고 할 때, 지연 로딩으로 설정한 경우 member를 조회하고 team을 조회할 때 까지 team을 select하는 구문은 사용하지 않고 기다린다. 하지만 team과 member를 계속 같이 조회해야 한다면 즉시 로딩으로 둘을 계속 같이 조회 할 수가 있다.

 

 

강의 출처 : https://www.inflearn.com/course/ORM-JPA-Basic

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

'BackEnd > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

JPA 엔티티 매핑(필드와 컬럼 매핑, 기본 키 매핑)  (1) 2022.12.22
JPA 엔티티 매핑(객체와 테이블 매핑)  (0) 2022.12.22
JPA 영속성 관리 - 내부 동작 방식  (0) 2022.12.22
JPA 시작  (1) 2022.12.22
JPA 소개(자바 ORM 표준 JPA 프로그래밍 - 기본편)  (0) 2022.12.20
'BackEnd/자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글
  • JPA 엔티티 매핑(객체와 테이블 매핑)
  • JPA 영속성 관리 - 내부 동작 방식
  • JPA 시작
  • JPA 소개(자바 ORM 표준 JPA 프로그래밍 - 기본편)
인프라 감자
인프라 감자
  • 인프라 감자
    삶은 인프라
    인프라 감자
  • 전체
    오늘
    어제
    • 분류 전체보기 (243)
      • 클라우드&인프라 (28)
        • 인프라 공부 (4)
        • AWS 구조와 서비스 (18)
        • 클라우드 공부 (4)
        • Terraform (2)
      • AWS Cloud School (13)
        • project (5)
        • Linux, Network (6)
        • Docker (2)
      • BackEnd (162)
        • JAVA 공부 (15)
        • 알고리즘 공부 (71)
        • MySQL 문제 풀기 (8)
        • 스프링 핵심 원리 - 기본편 (18)
        • 스프링 MVC 1편 (4)
        • 자바 ORM 표준 JPA 프로그래밍 (21)
        • 실전! 스프링 부트와 JPA 활용1 (8)
        • 실전! 스프링 부트와 JPA 활용2 (5)
        • 스프링 데이터 JPA (8)
        • Querydsl (4)
      • 혼자하는 프로젝트 (32)
        • 배달의 민족 클론코딩 (7)
        • 나만의 프로젝트 (10)
        • 스프링 부트로 구현한 웹 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Email
    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    중첩 선언
    정렬
    이것이 자바다
    linux
    완전탐색
    유니온 파인드
    dp
    네트워크 기본 용어
    자동 배포
    디팬스 게임
    자바
    쿼드 압축
    프로그래머스
    querydsl
    스프링 핵심 원리-기본편
    백트래킹
    VPN
    다이나믹 프로그래밍
    조합
    상속
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
인프라 감자
JPA 소개(자바 ORM 표준 JPA 프로그래밍 - 기본편)
상단으로

티스토리툴바