본문 바로가기
개인 공부/JPA (자바 ORM 표준 JPA 프로그래밍)

자바 ORM 표준 JPA 프로그래밍 : JPA 소개 (1장)

by 희조당 2022. 8. 12.
728x90


📌 SQL을 직접 다룰 때 발생하는 문제점

✔️ 반복, 반복 그리고 반복

  • DB는 객체 구조와는 다른 데이터 구조를 가져 객체를 DB에 직접 저장하거나 조회할 수 없다. 따라서 개발자가 직접 애플리케이션과 API 중간에서 변환 작업을 직접 해야 한다.
  • 객체를 DB에 CRUD하려면 너무 많은 코드를 작성해야 한다. 즉, 비슷한 일을 계속 반복해야 한다.

✔️ SQL에 의존적인 개발

  • 기능을 모두 개발하고 나서 추가적인 요청이 들어왔을 때 너무 많은 코드(등록, 수정, 연관 객체 등)를 수정해야 한다.
  • 엔티티를 신뢰하고 사용할 수 없다. 일일이 확인해야 한다.
  • 강한 의존관계를 가져 진정한 의미의 계층 분할이 아니다.

✔️ JPA와 문제 해결

  • JPA를 사용하면 객체를 데이터베이스에 저장하고 관리할 때 JPA가 제공하는 API를 사용한다.
  • persist() : 저장 기능. 객체와 매핑 정보를 보고 적절한 INSERT SQL을 생성해서 전달한다.
jpa.persist(member); // 저장
  • find() : 조회 기능. 객체와 매핑 정보를 보고 적절한 SELECT SQL을 생성해서 데이터베이스에 전달하고 그 결과로 객체를 생성해서 반환한다.
String memberId = "helloId";
Member member = jpa.find(Member.class, memberId) // 조회
  • JPA에서는 별도의 수정 메서드는 제공하지 않지만 객체를 조회해서 값을 변경하면 트랜잭션을 커밋할 때 데이터베이스에 적절한 UPDATE SQL이 전달된다.
Member member = jpa.find(Member.class, memberId);
member.setName("이름변경") // 수정
  • JPA는 연관된 객체를 사용하는 시점에 적절한 SELECT SQL을 실행한다. 쉽게 연관된 객체를 조회할 수 있다.

📌 패러다임의 불일치

데이터베이스에서는 객체지향의 추상화, 상속, 다형성 같은 개념이 없다.

객체와 관계형 데이터베이스는 지향하는 목적이 서로 달라 기능도 표현법도 다르다. → 패러다임의 불일치

 

✔️ 상속

  • 데이터베이스에서는 상속이 없어 JDBC API를 이용해 표현하려면 부모 객체에서 데이터를 꺼내고 자식 객체에서 데이터를 꺼내는 과정이 필요하다. 
  • JPA는 Java 컬렉션에 저장하듯 사용하면 된다. 

✔️ 연관관계

  • 객체는 참조로 다른 객체와 연관관계를 가지고 참조에 접근해 연관된 객체를 조회한다.
  • 반면에 테이블은 외래 키로 연관관계를 가지고 인을 사용해서 연관된 테이블을 조회한다.
  • 객체를 테이블에 맞춰 모델링하면 저장과 조회가 쉽다. 하지만 좋은 모델링을 기대하기 어렵고 결국 객체지향의 특징을 잃어버리게 된다.
  • 반대로 객체지향 모델링을 하면 저장과 조회가 어렵다. 중간에 개발자가 변환 역할을 해야 한다.
  • JPA는 관계를 설정하고 저장하면 된다. 알아서 참조를 외래키로 변환해 SQL을 전달한다.

✔️ 객체 그래프 탐색

  • 객체 그래프 탐색이란? 객체에서 참조를 사용해 연관된 객체를 찾는 것.
  • SQL을 직접 다루면 SQL에 따라 탐색할 수 있는 범위가 정해지는 큰 제약이 생긴다. 로직에 따라 객체 그래프가 다르기 때문이다.
  • JPA는 연관된 객체를 신뢰성 있게 조회할 수 있다. 이 기능은 실제 객체를 사용하는 시점까지 데이터베이스의 조회를 미룬다고 해서 지연 로딩이라고 한다.

✔️ 비교

  • 객체를 구분하는 방법과 테이블의 로우를 구분하는 방법은 너무 차이가 나서 같은 인스턴스를 반환하도록 구현하는 것은 쉽지 않다.
  • JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.

📌 JPA란 무엇인가?

JPA(Java Persistence API)는 Java 진영의 ORM 기술 표준.

JDBC API와 SQL

JDBC(Java Database Connectivity) : Java에서 DB를 접속하는 JAVA API

ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻.

ORM 프레임워크가 개발자 대신 패러다임의 불일치 문제를 해결해준다.

 

✔️ JPA 소개

  • EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준을 만들었다. 그게 JPA
  • JPA를 구현한 ORM 프레임워크는 Hibernate, EclipseLink, DataNucleus가 있다.

✔️ 왜 JPA를 사용해야 하는가?

  • 생산성 : 반복적인 일을 대신 처리해준다.
  • 유지보수 : SQL과 JDBC API 코드를 대신 처리해줘서 코드 수가 줄어든다.
  • 패러다임의 불일치 해결
  • 성능 : 애플리케이션과 데이터베이스 사이 성능 최적화 기회를 제공한다.
  • 데이터 접근 추상화와 벤더 독립성 : 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.

 

댓글