JPA란 무엇인가?
JPA (Java Persistence API) 는 자바 진영의 ORM 기술 표준이다.
ORM이란 무엇인가?
ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다.
ORM 프레임워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 해결해준다.
예를 들어, 객체를 데이터베이스 저장할 때 INSERT SQL를 직접 작성하는 것이 아니라, ORM 프레임워크에 저장하면 된다.
jpa.persist(member)를 사용하여 객체를 저장하면 된다.
ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달해주는 것뿐만 아니라 앞서 이야기한 다양한 패러다임 불일치 문제들도 해결해준다.
따라서 객체 측면에서 정교한 객체 모델링을 할 수 있고, 관계형 데이터베이스는 데이터베이스에 맞도록 모델링하면 된다.
자바 진영에 다양한 ORM 프레임워크가 있는데 대표적으로 사용되는게 Hibernate 이다.
JPA는 자바 ORM 기술에 대한 표준 API 명세다.
다시 말하면, 인터페이스를 모아둔 것이다.
따라서 JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야 한다.
왜 JPA를 사용해야 하는가?
- 생산성
JPA를 사용하면 자바 컬렉션에 객체를 저장하듯 JPA에게 저장할 객체를 전달하기만 하면 된다.
즉, JDBC API를 사용하는 지루하고 반복적인 CRUD용 SQL을 개발자가 직접 작성하지 않아도 JPA가 대신 처리해준다.
-> 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다. - 유지보수
SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 관련된 등록, 수정, 조회 SQL과 결과를 매핑하기 위한 JDBC API 코드를 모두 변경해야 한다.
반면에 JPA를 사용하면 이런 과정을 JPA가 대신 처리해주므로 수정해야할 코드가 줄어든다.
또한, JPA가 패러다임 불일치 문제를 해결해주므로 객체지향 언어가 가진 장점들을 활용해야 유지보수하기 좋은 도메인 모델들 관리하고 설계할 수 있다. - 성능
JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기능을 제공한다.
예를 들어,
JDBC API를 사용해서 해당 코드를 직접 작성했다면, SELECT SQL이 두 번 불려진다.String memberId = "id"; Member member1 = jpa.find(memberId); Member member2 = jpa.find(memberId);
하지만, JPA는 한 번만 데이터베이스에 전달하고 두 번째는 조회한 회원 객체를 사용한다. - 데이터 접근 추상화와 벤더 독립성
관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다.
예를 들어, 페이징 처리는 데이터베이스마다 달라 사용법을 각각 배워야 한다.
결국 애플리케이션은 처음 선택한 데이터베이스에 종속되게 된다.
JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다.
만약 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.
즉, 로컬 개발 환경은 H2, 개발이나 배포 환경은 Oracle, MySQL 데이터베이스를 사용할 수 있다.
'Spring JPA' 카테고리의 다른 글
영속성 관리 - 6 (0) | 2021.06.29 |
---|---|
영속성 관리 - 5 (0) | 2021.06.26 |
JPA 시작 - 4 (0) | 2021.06.25 |
JPA 소개 - 2 (0) | 2021.06.22 |
JPA 소개 - 1 (0) | 2021.06.22 |
댓글