본문 바로가기
Back-end/JPA 개념

0. JPA를 사용하는 이유

by devraphy 2022. 3. 21.

0. 개요

- Spring과 Spring MVC를 익혔다면 이제는 JPA를 배울 차례다.

- JPA는 현재 현업에서 가장 활발히 사용되는 기술이다. 

- 그렇다면 왜 JPA를 사용하는지 알아보자.

 

1. SQL 중점적 개발의 문제점

 

a) 무엇이 문제일까? 

- 다양한 종류의 DB가 존재하지만, 아직까지 관계형 DB가 중점적으로 사용되고 있다.

- 그러므로 대부분의 애플리케이션은 OOP를 통해 관계형 DB를 처리 및 관리하는 형태의 구조를 갖는다.

 

- 큰 흐름을 보면 웹 애플리케이션은 프런트와 백엔드의 네트워킹을 이용한 데이터 처리과정이다.

- 그리고 그 처리과정 내부에는 DB를 필수적으로 거치게 된다.

 

- 아무리 백엔드를 화려한 Java 코드로 만들었더라도, 결국 DB가 이를 이해할 수 있어야 한다.

- 그러므로 사실 DB를 거치는 모든 기능은 SQL에 의해 처리되는 것이다.

 

- 즉, 객체지향이 아니라 SQL 중점적인 개발을 하고 있는 것이다.

 

b) 비효율성

- SQL 중점적인 개발은 다음과 같은 비효율성을 갖는다.

 

  → 중복적인 SQL 작성이 많다. (= DB 테이블마다 CRUD 작성)

  → 객체 또는 테이블의 내용을 수정하면 SQL도 수정해야 한다. (= 중복적 유지보수) 

  → 객체를 SQL로, SQL을 객체로 변환하는 과정이 복잡하고 어렵다. 

 

- 왜 이와 같은 비효율이 발생하는 것일까? 

 

c) OOP와 RDB의 괴리

- OOP와 RDB는 함께 등장한 개념이 아닌, 애초에 태생이 다른 개념이다.

- 서로 다른 두 개념을 같이 사용하다 보니 다양한 문제가 발생하고, 이는 비효율의 원인이 된다.

 

1. 객체를 RDB에 저장 및 조회하는 과정의 문제

   - 객체를 RDB에 저장하기 위해서는 객체 → SQL로 변환해야 한다.

   - 반대로 RDB의 데이터를 사용하기 위해서는 SQL → 객체로 변환해야 한다.

 

2. 관계의 표현 방식이 다르다.

   - 객체에는 상속 관계가 존재하지만, RDB에는 상속관계가 존재하지 않는다. 

   - 객체에는 참조가 존재하지만, RDB에는 FK가 존재한다. 

   - 이를 설명한 이유는 객체의 관계 ↔ RDB의 관계로 상호 간의 전환이 매우 어렵다는 것이다.

   - 즉, 관계의 표현방식이 다르므로 데이터를 조회하는 과정에서 문제가 발생한다. 

 

3. SQL은 고정적인 탐색 범위를 갖는다.

   - Java 객체는 상속이나 선언을 통하여 다른 객체의 값을 쉽게 조회할 수 있다.

   - 그러나 이 조회 과정을 SQL의 입장에서는 불가능하다.

   - 왜냐면 작성된 SQL은 이미 탐색범위가 테이블 단위로 결정되어있기 때문이다.

   - 그러므로 상속을 SQL로 풀어내려면 Join을 사용해야하는데, Java는 Join을 이해할 수 없다.  

 

d) 결론

- 위에서 설명한 것 외에도, OOP와 RDB의 차이(differences)로 인해 다양한 문제가 발생한다.

- 결론적으로 객체지향 중심적인 프로그래밍을 할수록 SQL 매핑이 복잡해진다.

- 그러므로 객체지향 보다 SQL 중점적인 설계 및 프로그래밍을 하게 되는 것이다.

 

- 어떻게 해야 OOP와 RDB의 괴리를 줄일 수 있을까?

- OOP 중점적 설계에서 RDB를 잘 사용할 수 있는 방법은 무엇일까?

- 여기에 대한 모든 해결책을 JPA가 가지고 있다. 

 

- 이와 같은 이유로 JPA를 사용한다. 

'Back-end > JPA 개념' 카테고리의 다른 글

5. Field(칼럼) Mapping  (0) 2022.03.28
4. Entity Mapping  (0) 2022.03.25
3. JPA의 내부구조와 동작  (0) 2022.03.24
2. JPA의 기본 구조와 기능  (0) 2022.03.23
1. JPA의 등장  (0) 2022.03.22

댓글