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 |
댓글