Be ready to study forever - 개발자 꿈나무

[JPA] JPA란? 본문

Programming/JPA

[JPA] JPA란?

루눌룹 2021. 1. 22. 17:48

1. JPA의 등장배경

JPA가 등장하게 되었지?

Java의 객체지향 패러다임과 관계형 DB의 패러다임의 차이 때문에 개발자들은 항상 객체지향적인 코드를 짜기 보다 관계형 DB에 맞게 매핑하는 방법을 중심으로 코드를 짜게 되었다.

  객체지향으로 설계 코드
관계형  DB 에 맞게 설계한 코드(객체가 아닌 team의 id를 가지고 있다 - Query에 외래키에 매핑하기 위해서)

그로 인해 객체지향 언어인 자바를 객체지향적으로 활용할 수가 없는 일이 생겼다. 예를 들면, 객체를 상속하거나, 그래프 탐색, 컬랙션에 담아서 관리 하는 등을 할 수가 없었다. 이러한 괴리를 보안하기 위해서 JAVA 어플리케이션과 JDBC사이에서 매핑해주는 JPA가 등장 하게 되어따

그림과 같이 JDBCJava어플리케이션 사이에서 객체와 관계형DB를 매핑해준다.

 

사실 JPA

JPA는 사실 인터페이스의 모음이고 구현체는 Hibernate, EclipseLink, DataNucleus이다. 이렇게 된 배경에는 사실 JPA등장 이전에 쓰이던 EJB가 너무 안 좋아서 Hibernate를 오픈소스로 다른 누군가가 구현했고 Hibernate가 인기를 끌면서 Hibernate를 기준으로 JPA가 만들어 졌기 때문이라고

객체지향 언어 VS 관계형 DB

객체와 관계형 DB의 차이점은 크게 4가지가 있는데, 상속, 연관관계, 데이터 타입, 데이터 식별방법이 있다. 그렇지만 가장 큰 차이는 상속과 연관관계이다.

상속)

객체지향에서는 상속을 통해서 다형성이나 코드의 재사용성을 높이지만 관계형DB에서는 상속을 구현하기가 쉽지 않다(구현을 할 수는 있지만, 완벽한 의미의 상속이 아님, 뒤에 연관관계 매팡과 값타입에 대해서 언급할 때 구체적으로 설명할 예정)

그림처럼 DB도 상속관계처럼 비슷하게 구현할 수 있다.

연관관계)

JPA를 이해하는데 객체와 관계형DB의 차이를 이해하는게 매우 중요하다. 관계형DB는 외래키를 이용해서 양방향으로 서로 연결이 가능하지만(SELECT * FROM table_a a INNER JOIN table_b b/ SELECT * FROM table_b b INNER JOIN table_a a 처럼 조인해서) 하지만, 객체는 단방향으로 양쪽에서 연결해야한다. 예를 들면 Member 객체는 Team 객체를 가지고 있어야 하고 Team 객체는 Member객체를 가지고 있어야 서로 team->member/ member->team 양방향에서 접근이 가능하다. 이러한 차이를 추후에 배우겠지만 JPA는 연관관계 매핑으로 객체와 관계형DB의 괴리를 잡아준다.

그림과 같이 객체는 단방향/ 테이블은 양방향 연관이다.

2.JPA의 장점

그렇다면 JPA를 써야하는 이유에 대해서 알아보자. JPA를 사용할 경우 생기는 이득은 생산성, 유지보수의 이점, 가장 중요한 객체와 관계형DB의 패러다임 불일치를 해결해 준다는 점이다

-      생산성

기본적인 CRUD를 쿼리를 직접 날릴 필요없이 JAVA코드로 해결 할 수있다.

-      유지보수의 이점

쿼리를 하나하나 수정할 필요없이 @Entity표시를 해준 객체만 변경해줘도 Query-level까지 수정할 필요가 없다

-      패러다임 불일치 해결

JPA는 상속, 연관관계, 객체의 그래프 탐색, 앤티티의 신뢰관계(영속성 컨택스트에서 설명예정) 등의 패러다임 불일치를 해결해 준다.

 

'Programming > JPA' 카테고리의 다른 글

[JPA] 고급 매핑 - 3  (0) 2021.01.23
[JPA] 다양한 연관관계 매핑-2  (0) 2021.01.23
[JPA] 연관관계 매핑 기초 - 1  (0) 2021.01.23
[JPA] 영속성 컨텍스트란?  (0) 2021.01.23
[JPA]실행하기  (0) 2021.01.22
Comments