[JPA] JPA 소개

Updated:

들어가며

해당 글은 자바 ORM 표준 프로그래밍을 정리한 글입니다.

JPA 소개에서는 SQL 베이스로 개발을 해왔을 때에 대한 문제점과 JPA로 넘어왔을 때에 대해서 간략한 소개를 담고 있다. 책에서 나온 내용을 내가 이해한 대로 다시 써보려고 한다. 틀린 부분이 있을 수 있으니 지적 해주시면 감사하겠습니다.😊

SQL을 직접 다룰 때 발생하는 문제점

SQL을 직접 다룬 다는 부분은 insert, update, delete 등 DML 관련 query를 직접 작성하면서 개발 한다는 것을 의미한다. 따라서 기존에 사용하던 모델이 변경될 때 마다 SQL에 대해서도 같이 변경이 발생 할 수 있다. 또한, 모델이 추가될 때 마다 insert, select와 같은 query는 반복적으로 생성을 해줘야 한다.

JPA를 사용하게 되면 엔티티로 정의된 모델을 바탕으로 알아서 SQL을 작성해 주기 때문에 매번 SQL을 작성하지 않아도 된다. 변경된 모델에 대해서도 매번 SQL을 변경하는 것이 아닌 모델에 정의 된 값을 보고 JPA에서 알아서 생성 해준다.

패러다임의 불일치

해당 책에서 나오는 패러다임의 불일치가 나오는데 정확하게 이해를 하지 못 했다. 그래도 내가 이해한 바로는 객체 모델(Entity)와 관계형 데이터베이스(ERD) 간에 차이를 설명하고 있는 것 같다.

객체 모델간에 참조를 하기 위해서는 객체를 기반으로 참조해야 하고 데이터베이스에서는 외래키 값만 알고 있어도 해당 값에 대해서 참조가 가능하다.

이러한 문제를 개발자가 극복을 해야 하는데 JPA에서 해당 문제를 해결 해주고 정교한 객체 모델링을 유지하게 도와 준다.

JPA란 무엇인가?

JPA(Java Persistence API)는 자바 진영의 ORM(Object-Relational Mapping) 기술 표준이다. JPA와 JDBC

JPA는 Java 애플리케이션에서 JDBC API를 랩핑하여 DB와 통신을 한다.

persist ORM 객체(Entity)와 관계형 데이터베이스를 매핑해서 INSERT SQL을 생성하여 JDBC를 이용해 DB와 통신한다.

entity_find JPA에서 제공하는 repository interface를 통해서 SELECT SQL을 생성하여 DB에서 데이터를 조회 후 Entity에 맵핑 해준다.

JPA를 이용하면 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 손쉽게 해결해준다.

JPA 소개

  • 자바 ORM 기술에 대한 API 표준 명세
  • 하이버네이트(Hibernate), EclipseLink, DataNucleus 등 ORM 프레임워크는 많으나 하이버네이트가 가장 대중적이다.

JPA를 사용해야 하는 이유

1. 생산성

지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다. 더 나아가 CREATE TABLE과 같은 DDL 문을 자동으로 생성해 주는 기능도 있다.

2. 유지보수

SQL을 직접 다루면 엔티티에 필드가 추가되었을 때 SQL을 사용하고 있던 부분을 전체적으로 수정을 해줘야 했지만 JPA를 사용하면 JPA가 대신 처리해주기 때문에 수정해야 할 코드가 줄어든다.

따라서 SQL을 직접 다룰 때 보다 유지보수가 쉬워진다.

3. 패러다임의 불일치 해결

JPA는 개발자가 처리를 해줬어야 하는 부분을 대신 처리해주는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해준다.

4. 성능

같은 모델을 2번 조회했을 때는 JDBC API를 통해서 데이터베이스와 2번을 통신했을 텐데 JPA에서는 SELECT 한번으로 데이터베이스에서 조회 후 해당 데이터를 재 사용한다.

5. 데이터 접근 추상화와 벤더 독립성

DB 자체를 변경하더라도 JPA에서는 해당 데이터베이스에 종속되지 않게 구현되어 있으므로 원하는 환경으로 손쉽게 변경 가능하다

6. 표준

JPA는 자바 진영의 ORM 기술 표준으로 표준을 사용하면 다른 구현 기술로 손쉽게 변경 가능하다.

마치며

JPA 소개에서는 SQL 베이스로 작업을 했을 때의 문제점과 JPA에 대한 설명 및 사용해야 하는 이유에 대해서 설명 하였다.

실제로 mybatis를 이용해서 개발을 하다 보면 테이블을 추가하고 모델을 추가하고 insert, select query를 추가해야 했다. 이러한 작업들이 JPA에서는 JpaRepository를 이용하게 되면 반복적인 과정을 줄이고 다른 작업에 시간을 투자할 수 있어 생산성을 높일 수 있을 거라 생각한다. (JpaRepository는 차후에 자세하게 작성 예정)

JPA를 도입하기 위해서는 기본적인 공부는 필수로 해야 한다는 것을 명심해야 한다.👍



Leave a comment