JPA 란? 이론

Yoon·2023년 2월 19일
0

JPA란 무엇인가?

JPA(Java Persisitence API)는 자바 진영의 ORM 기술 표준.
어플리케이션과 JDBC 사이에서 동작

ORM (Object Relational Mapping)

객체와 테이블을 매핑해서 패러다임의 불일치를 개발자 대신 해결 해준다.

즉, 평상시에는 Mybatis(ibatis)를 사용하고 VO(DTO)를 제작해서 DB와 JAVA를 연결 해 주었었다.

private String name;
private String dept;

위와같이 VO와 getter, setter를 만들어서 DB랑 연결해서 썼었다.
만약 예약어 (NEW, SET..등) 때문에 이름을 사용할 수 없다면
resultMap 으로 별칭을 만들어서 연결을 해 주었었다!!

JPA는 그러한 불편함을 해결하기 위해 등장하였음..


객체를 저장하는 코드

jpa.persist(member); // 저장

객체를 조회하는 코드

Member member = jpa.find(memberId); // 조회


JPA의 장점

  1. 개발이 편리하다
  • 웹 애플리케이션에서 반복적으로 작성하는 기본적인 CRUD용 SQL을 직접 작성하지 않아도 된다.
  1. 데이터베이스에 독립적인 개발이 가능하다.
  • JPA는 특정 데이터베이스에 종속적이지 않기 때문에 데이터베이스와 관계없이 개발 할 수 있다.
  • DB가 변경되더라도 JPA가 해당 DB에 맞는 쿼리를 생성 해줌.
  1. 유지보수가 쉽다
  • Mybatis와 같은 매퍼 프레임워크를 사용해서 데이터베이스 중심의 개발을 하면 테이블이 변경될 경우 관련된 코드를 모두 변경해야 한다.
  • 그렇지만 JPA를 사용하면 객체(JPA의 엔티티)만 수정하면 된다.

JPA의 단점

  1. 학습곡선(learning curve)이 크다
  • 기존의 데이터베이스 위주의 개발방식에 비해서 배워야 할 것들이 많다.
  • 또한 SQL을 직접적으로 작성하지 않기 때문에 튜닝 등을 할 때도 어려움을 겪는다.
  1. 특정 데이터베이스의 기능을 사용할 수 없다.
  • JPA를 사용할 때 특정 데이터베이스에 종속적인 기능은 쓰지 않는 것이 좋다.
  • 특히 오라클은 강력한 함수를 많이 제공하는데, 이와 같은 데이터베이스에 종속적인 기능을 사용할 경우 데이터베이스에 독립적인 개발이 불가능 해 진다.
  • 이 경우 데이터베이스에 독립적인 개발이 가능한 JPA의 장점을 잃는다.
  1. 객체지향 설계가 필요하다.
  • 데이터베이스 중심의 개발에서도 객체지향적 설계가 필요하다.
  • 그렇지만 객체 위주의 설계보다 데이터베이스의 테이블을 설계하고 그에 맞춰서 객체 및 비즈니스 로직이 설계, 개발되기 때문에 객체지향적인 설계가 어려울 수 있다.

Spring DATA JPA 란?

스프링 데이터 JPA란 JPA를 스프링에서 쉽게 사용할 수 있도록 해 주는 라이브러리 이다.

스프링 데이터 JPA는 Repository라는 인터페이스를 상속받아 정해진 규칙에 맞게 메서드를 작성하면 개발자가 작성해야 할 코드가 완성 된다.

그리고 내부적으로는 실제 기능을 담당하는 JPA의 구현체인 JPA 프로바이더로 하이버네이트를 사용한다.

하이버네이트를 모르더라도 프레임워크가 하이버네이트를 이용해서 적절한 코드를 생성하기 때문에 JPA를 쉽게 사용할 수 있다.

profile
나의 공부 일기

0개의 댓글