728x90
SQL 중심적인 개발의 문제점
- 애플리케이션을 개발할 때 보통은 객체지향언어로 개발을 한다.
- 데이터베이스는 보통 관계형 DB를 사용한다.
- 즉, 객체를 관계형 DB에 관리한다.
- 이를 위해서는 수많은 SQL을 사용해야 한다.
- 무한 반복되는 SQL 쿼리, 지루한 코드
- 자바 객체 -> SQL
- SQL -> 자바 객체
- 하지만, 관계형 데이터베이스를 사용하기 위해서는 SQL에 의존적인 개발을 피할 수 없다.
- 따라서 객체를 관계형 데이터로 바꿀 때 누군가 SQL을 작성해야 한다.(SQL 매퍼)
- 객체답게 모델링을 할수록 매핑 작업이 엄청나게 늘어난다.
- 객체를 자바 컬렉션에 저장하듯이(쉽게 넣다 뺄 수 있는) DB에 저장할 수 없을까?
- -> JPA
JPA까지의 역사
EJB- 엔티티빈(자바 표준)
- 기술이 너무 복잡하고 성능이 좋지 않아 개발자들이 사용하지 않았음
하이버네이트(Hibernate)(오픈 소스)
- 게빈 킹과 그의 동료들이 엔티티빈의 실용성에 불만을 품고 직접 오픈 소스를 제작하여 만든 자바 진영의 ORM 프레임워크로, 객체 지향 도메인 모델을 관계형 데이터 베이스 모델로 매핑하기 위한 프레임워크를 제공한다.
JPA(Java Persistence Application)
- 자바 진영에서 기존의 엔티티빈을 대체하는 새로운 표준 사양을 만들기 위해 게빈 킹을 영입하였다.
- 게빈 킹이 개발한 덕분에 기존의 하이버네이트와 거의 흡사하다.
- 자바 진영에서 사용하는 ORM 기술의 표준 사양(또는 명세)이 되었다.
- JPA는 인터페이스의 모음이며, JPA2.1 표준 명세를 구현한 대표적인 구현체로는 하이버네이트, EclipseLink, DataNucleus가 있다. 그러나 대부분 구현체로 하이버네이트를 쓴다.(하이버네이트를 만든 개발자가 만들었으니 당연한 결과인 듯)
- 따라서 JPA를 학습한다는 말은 JPA 표준사양을 구현한 구현체에 대해 학습한다는 의미이다.
- JPA는 JAVA 애플리케이션과 JDBC 사이에서 동작한다.
- 엔티티를 JPA에 던지면 JPA가 엔티티를 분석하고, INSERT SQL을 생성하며, 패러다임의 불일치를 해결해 준다.
ORM이란?
- Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.
- ORM 프레임워크가 이를 중간에서 매핑한다.
- 대중적인 언어에는 대부분 ORM 기술이 존재한다.
왜 JPA를 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심적인 개발로
- 생산성, 유지보수성, 성능 향상
- 패러다임 불일치 해결
- 데이터 접근 추상화와 벤더 독립성
- 무엇보다 표준임
JPQL
- JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.
- SQL 문법과 유사하며, SELECT, FROM, WHERE, GRUOP BY, HAVING, JOIN을 지원한다.
- SQL이 데이터베이스 테이블을 대상, JPQL은 엔티티 객체를 대상으로 한다.
- SQL을 추상화하여 특정 데이터베이스 SQL에 의존하지 않는다.
- JPQL을 한마디로 정의하면 객체 지향 SQL임
참고
김영한 - 자바 ORM 표준 JPA 프로그래밍
728x90
'[JAVA] > JPA' 카테고리의 다른 글
JPA - 필드와 컬럼 매핑 (0) | 2022.11.27 |
---|---|
JPA - 객체와 테이블 매핑 (0) | 2022.11.27 |
JPA - flush(플러시) (0) | 2022.11.26 |
JPA - 영속성 컨텍스트 (0) | 2022.11.26 |
JPA 애노테이션 정리 (0) | 2022.11.25 |