📗 JPA
😡 SQL을 직접 다룰 때 발생하는 문제점
반복되는 작업들
- 반복되는 CRUD 코드 작성
- JAVA 애플리케이션은 JDBC API를 사용해 DB와 통신하며 데이터를 CRUD 합니다.
- 개발자는 애플리케이션과 DB 사이에서 SQL 및 JDBC API 코드를 작성해야 합니다.
- 연결해야하는 테이블 및 데이터가 늘어날수록 반복적인 CRUD 코드들을 계속해서 반복해서 작성해주어야합니다.
- SQL에 의존적인 개발
- 엔티티에 변경점이 발생하면 관련된 모든 SQL을 수정해야합니다.
- DAO를 열어서 어떤 SQL이 실행되는지 직접 확인하고 수정해야합니다.
- 이와 관련된 자바 CRUD 코드들도 수정을 해주어야합니다.
- 이러한 변경이 잦아지면 변경할 코드도 많아지고 관리하기가 어렵습니다.
- 엔티티에 변경점이 발생하면 관련된 모든 SQL을 수정해야합니다.
패러다임의 불일치
- 자바와 관계형 데이터베이스 간의 패러다임 불일치
- 자바와 RDB 간의 차이점이 존재
- 자바는 객체, RDB는 테이블을 기준으로 데이터를 관리합니다.
- 상속, 연관관계, 객체 그래프 탐색 , 비교 등의 차이점을 가지고 있습니다.
- 서로 연결해서 사용하려면 데이터를 변환해가며 사용해야합니다.
- 개발자가 둘 사이에서 발생하는 차이점을 해결
- 개발자는 차이점을 고려하여 데이터를 변환해주어야 합니다.
- 개발자가 비즈니스 로직을 개발하기보다는 SQL 매퍼가 되어버리는 기이한 현상이 발생합니다.
- 자바와 RDB 간의 차이점이 존재
😃 JPA란?
ORM
- 위에서 다룬 패러다임의 불일치를 해결하고자 나온 것이 Object-Relational Mapping 입니다.
- ORM이란 객체와 관계형 데이터베이스를 매핑하는 것을 의미합니다.
- ORM 프레임워크가 개발자 대신 객체와 테이블을 매핑하여 패러다임의 불일치 문제를 해결해줍니다.
- 개발자는 직접 SQL을 작성할 필요없이 자바 컬렉션을 사용하는 것처럼 객체를 사용하면 ORM 프레임워크가 알아서 SQL을 생성해 데이터베이스와 연결해주고 객체로 변환까지 해줍니다.
- 개발자는 ORM프레임워크에 둘을 어떻게 매핑해야하는지만 알려주면 됩니다.
JPA
- 자바 ORM 기술에 대한 API 표준 명세입니다.
- JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야합니다.
- Hibernate
- 가장 많이 사용되고 있습니다.
- EclipseLink
- DataNucleus
- Hibernate
JPA를 사용해야하는 이유
- 생산성
- 데이터베이스를 자바 컬렉션 사용하듯이 사용할 수 있습니다.
- JPA가 개발자 대신 SQL을 작성해주고 JDBC API를 사용해 줍니다.
- 반복되는 코드 및 작업을 줄일 수 있습니다.
- 유지보수
- SQL을 직접 다루면 엔티티에 필드 하나만 추가하여도 수많은 코드 변경을 해야하지만 JPA가 대신 처리해주므로 유지보수해야할 코드 수가 줄어듭니다.
- 패러다임 불일치 해결
- 상속, 연관관계, 객체 그래프 탐색, 비교 등과 같은 관계형 데이터베이스와 객체 지향 프로그래밍 간의 패러다임 불일치문제를 해결해줍니다.
- 성능
- 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공합니다.
- 예를들어, 직접 JDBC API를 사용하여 동일한 데이터를 두번 조회한다면 데이터베이스와 두번 통신하지만 JPA는 한번 조회하면 조회한 객체를 재사용합니다.
- 데이터 접근 추상화와 벤더 독립성
- 관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많습니다.
- JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 도와줍니다.
- 데이터베이스를 변경하더라도 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 됩니다.
- 표준
- 자바 진영의 ORM 표준 기술이기 때문에 다른 구현 기술로 손쉽게 변경할 수 있습니다.
'Spring Framework > JPA' 카테고리의 다른 글
Transaction (트랜잭션) (0) | 2022.06.10 |
---|---|
엔티티 매핑 (0) | 2022.06.10 |
영속성 관리 (0) | 2022.06.10 |
데이터베이스 방언 (Dialect) (0) | 2022.06.10 |
Test용 H2 DB application.yml 설정 (0) | 2022.06.09 |
댓글