티스토리 뷰

_JPA 란

  • Java Persistence API
  • 자바에서 DB 데이터 CRUD 편하게 해주는 API

  • 자바표준 ORM 프레임워크

    • Object relational mapping > 객체 관계 맵핑 > 객체와 테이블의 맵핑

  • JPA는 인터페이스의 모음

 

_JPA 사용하는 이유 / 장점

DB를 사용하면서 자바 객체 ↔ SQL 변환하는 코드가 반복될 수 밖에 없다.

이 변환을 조금 더 쉽게해주는 것이 JPA이다.

 

JPA를 사용하는 이유가 돋보이는 예제로 같이 설명하겠다.

public class Student {
	String name;
    String studentNumber;
    
    public Student(String name, String studentNumber) {
    	this.name = name;
    	this.studentNumber = studentNumber;   
    }
}

위 Student 객체로 SQL 쿼리를 이미 다 작성한 후에, 필드가 하나 더 추가된다면 쿼리문을 다 수정해야할 것이다.

하지만 JPA를 사용하면 쿼리 업데이트(?)가 쉽다. 

 

1) 생산성

  • 저장 : jpa.persist(Student)

  • 조회 : Student student = jpa.find(studentId)

  • 수정 : student.setName("홍길동")

  • 삭제 : jpa.remove(student)

CRUD가 간단하게 가능하다

 

2) 유지보수

위에 Student를 예로 든것처럼, 필드가 추가될 때 쿼리까지 같이 수정할 필요가 없다.

 

_JPA 동작방식

  • 저장

    • StudentDAO > JPA - JDBC API > INSERT SQL > DB

      • JPA가 적절한 INSERT 쿼리를 생성 (개발자가 쿼리 생성하는 것이 아님)

      • 패러다임의 불일치를 해결해줌

  • 조회

    • StudentDAO > find(id) > JPA - JDBC API > SELECT SQL > DB > Entity Object > StudentDAO

      • JPA가 적절한 SELECT 쿼리를 생성 (개발자가 쿼리 생성하는 것이 아님)

      • 패러다임의 불일치를 해결해줌

 

_JPA 성능

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

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

String studentId = "20181234"
Student s1 = jpa.find(Student.class, studentId); // SQL
Student s2 = jpa.find(Student.class, studentId); // 캐시

print(s1 == s2) // true

위의 경우 SQL이 1번만 실행됨

 

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

transaction.begin();

em.persist(studentA);
em.persist(studentB);
em.persist(studentC);

transaction.commit();

트랜잭션을 마지막에 커밋할 때까지 INSERT SAL을 모으고, 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보냄

 

3) 지연로딩과 즉시로딩

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

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

 

 


Spring/JPA 공부하면서 정리 목적으로 남기는 포스팅입니다.

문제가 있을 시, 댓글로 남겨주시면 수정하겠습니다.

 

참고자료

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

서적 : <자바 ORM 표준 JPA프로그래밍> 김영한

 

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

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

www.inflearn.com

 

댓글
댓글쓰기 폼