[SpringStudy] 1. JPA 란?

진주·2022년 3월 23일
0

SpringStudy

목록 보기
1/3
post-thumbnail

JPA?

JPA(Java Persistence API) 는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.

즉, 실제로 구현된 것이 아니라 구현된 클래스와 매핑해주기 위해 사용되는 프레임워크이다.

JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.


ORM(Object-Relational Mapping)

일반적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결) 한다는 뜻이며,
기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화(Persistence) 해주는 것이다.1)

장점 ?

  1. SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는 것에만 집중할 수 있다.
    (내부적으로는 쿼리를 자동으로 생성하여 DB를 조작하지만, 개발자는 이를 신경 쓰지 않아도 된다.)

  2. Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어든다.
    즉, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다.

  3. 객체 지향적인 코드 작성이 가능하여 생산성이 증가한다.

  4. 매핑하는 정보가 Class로 명시되어 있으므로 ERD를 보는 의존도를 낮출 수 있으며, 유지보수 및 리팩토링에 유리하다.

단점 ?

1) 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다.

2) 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.


JPA를 사용하는 이유?

JPA는 반복적인 CRUD SQL문을 처리해준다.

JPA는 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데,
개발자는 어떤 SQL이 실행될지 생각만 하면 되고 예측도 쉽게 할 수 있다.

추가적으로는 JPA는 네이티브 SQL이란 기능을 제공해주는데,
관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL문을 직접 작성하여 사용할 수 있다.

JPA를 사용하여 얻을 수 있는 가장 큰 것은 SQL이 아닌 객체 중심으로 개발할 수 있다는 것이다.

이에 따라 생산성이 증가하고, 유지보수도 수월해진다.

뿐만 아니라 JAVA에서는 부모클래스와 자식클래스와의 관계,
상속 관계가 존재하는데 DB에서는 이러한 객체의 상속 관계를 지원하지 않는다

이런 상속관계를 JPA는 아래와 같은 방식으로 해결하였다.


위의 구조에서 Album 클래스를 저장한다고 가정해보자.

jpa.persist(album);

그러면 JPA는 위의 코드를 아래의 쿼리로 변환해서 실행한다.

INSERT INTO ITEM (ID, NAME, PRICE) VALUES (...);
INSERT INTO ALBUM (ARTIST) VALUES (...);

위와 같이 저장하면, 조회할 때에도 ITEM과 ALBUM 테이블을 엮어서 가져오게 된다.

// JAVA 코드
String albumId = "id1";
Album album = jpa.find(Album.class , albumId);

// 변환된 쿼리
SELECT I.*, A.*
	FROM ITEM I
    JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID;

연관 관계

위와 같이 상속 관계에 대한 접근도 제공해주는데, 객체 지향에는 연관관계라는 것도 있다.

코드로 따지면 Class에서 또 다른 Class Type을 필드 변수로 가지고 있는 것이다.

위의 그림은 Member 클래스가 Team 타입의 team 필드 변수를 가지고 있는 형태이다.

class Member{
	Long id;
    String userName;
    Team team;
}

class Team{
	Long id;
    String teamName;
}

Spring 수업 때 사용한 Student, Major 클래스를 통해 이해해보자.

Student 클래스는 private Major major 를 통해 Major 타입의 major 필드 변수를 가지고 있다.


출처 : https://dbjh.tistory.com/77

profile
진주의 코딩일기

0개의 댓글