JPA | 정의편

DoItDev·2021년 1월 26일
0
post-thumbnail

Jpa ( Java Persistence API ) 자바 영속성 API

Java ORM 기술에 대한 표준 명세이다.
기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다.
Java 에서 제공을 한다. ( 스프링에서 제공해주는 것이 아니다)
Java 에서 제공을 하는 관계형 데이터 베이스를 사용하는 방식을 정의한 인터페이스이다
Jpa 는 특정한 기능을 하는 라이브러리가 아닌 인터페이스를 의미한다.
( 스프링에서 표준 인터페이스를 정의하는데 ORM을 사용하기 위해서 만든 인터페이스가 JPA 이다)
ORM 때문에 Java Class에서 DB Table 을 매핑 시킨다.

R1280x0

ORM ( Object Relational Mapping )

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.

R1280x0-2

ORM 장단점

장점

  • 개발자가 비지니스로직에 대한 집중도가 높아진다
  • 쿼리문이 아니라 메소드를 사용하는 방식이기 때문에 객체 모델링 프로그래밍을 하는데 집중이 가능
  • 할당 , 선언문 , 종료 등 부수적인코드가 없어진다.
  • 객체에대한 별도의 코드로 작성을 하기 때문에 가독성이 높아진다.
  • SQL 의 절차(순차) 적인 접근 방식이 아닌 객체 지향적인 접근방식으로 작성을 할 수 있다.
  • 재사용성과 유지보수의 편리성이 증가한다.
  • DBMS의 종속성이 줄어든다. ( CRUD 에대한 것이 JPA 인터페이스에 다 들어있다 )

단점

  • 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
  • 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
  • 프로젝트의 복잡성이 커질경우 난이도 또한 올라갈 수 있다.
  • 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수 있다.
  • 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다. ( 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며하고 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다)

JPA 이외 사용법

  1. JPQL ( Java Persistence Query Language )

JPQL 관계형 데이터베이스에 저장된 엔티티에 대한 쿼리들을 작성한다.
쿼리들은 구문에서 SQL 쿼리와 유사하지만, 데이터베이스 테이블에 직접적으로 처리하지 않고 엔티티 개체에 대하여 처리된다.

  1. JPA Criteria

Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API이다.
Criteria를 사용하면 문자가 아닌 코드로 JPQL를 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있다.
Criteria를 사용해서 개발하다보면 코드가 복잡하고 장황하며 직관적으로 이해하기 힘들다는 단점

  1. Querydsl

Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다.
문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다.

  1. 네이티브 SQL

일반적으로 사용하는 SQL 구문을 의미 ( Inert , Select , Delelet , Update )를 의미한다.

profile
Back-End Engineer

0개의 댓글