반응형

JPA 를 사용하지 않고 SQL 을 직접 다루게 되면, CRUD (Create, Read, Update, Delete) 기능 개발을 위해 SQL 을 작성하고, JDBC API (Java DataBase Connectivity API) 를 사용해 SQL 을 실행하고, 실행한 결과를 Java 의 객체로 매핑해야 한다. 하나의 기능을 위해서 이렇게 하는 것은 크게 불편하지 않을 수 있지만 여러 테이블을 다루고자 한다면, 매번 이 과정을 반복하는 것이 지루해질 수 있다. 또한 이렇게 개발한 시스템에서 데이터베이스에 추가적인 데이터를 저장하고자 한다면 SQL 부터 객체까지 모든 내용을 수정해야 한다.

 

비즈니스 요구 사항을 모델링한 객체를 Entity 라 칭하는데, SQL 에 의존한 개발 환경에서는 개발자들이 Entity 를 신뢰하고 사용할 수 없게 된다. 대신 DAO (Data Access Object) 를 열어 어떤 SQL 이 실행되고 어떤 객체들이 조회되는 지를 확인해야 한다. 이는 진정한 의미의 계층 분할이라 할 수 없다. 물리적으로는 SQL / JDBC API 를 DAO 에 숨겼을 지라도 논리적으로는 Entity 와 강한 의존관계를 갖게 되어 CRUD 기능 개발을 위해서나, 테이블의 필드 구성이 변경되었을 때 DAO 의 코드와 SQL 을 수정해야 한다.

 

JPA 를 사용하게 되면, 위의 문제를 간단하게 해결할 수 있다. 개발자는 직접 SQL 을 작성하지 않고 JPA 가 제공하는 API 를 사용할 수 있다. 그러면 JPA 가 개발자 대신 적절한 SQL 을 생성해 데이터베이스에 전달한다.

 

JPA 를 사용하는 간단한 예제는 다음과 같다.

 

// 저장 기능
jpa.persist(object);

// 조회 기능
String objectId = "id1";
Object object = jpa.find(Object.class, objectId);

// 수정 기능
Object object = jpa.find(Object.class, objectId);
object.setName("newName");

// 연관된 객체 조회
Object object = jpa.find(Object.class, objectId);
Group group = object.getGroup();

 

JPA (Java Persistence API) 는 Java 객체와 관계형 DB 사이에서 Data 를 접근, 관리하기 위한 Java 스펙이다. JPA 는 현재 Java 환경에서 ORM Standard 역할을 하고 있다. JPA 는 존재하는 어떤 상품이 아니라 단순한 Spec 이기 때문에, 그 자체로는 Interface 만 제공이 된다.

 

 

- Reference

[WikiBooks] What is JPA ? https://en.wikibooks.org/wiki/Java_Persistence/What_is_JPA%3F

 

Java Persistence/What is JPA? - Wikibooks, open books for an open world

The Java Persistence API (JPA) is a Java specification for accessing, persisting, and managing data between Java objects / classes and a relational database. JPA was defined as part of the EJB 3.0 specification as a replacement for the EJB 2 CMP Entity Bea

en.wikibooks.org

[Book] 자바 ORM 표준 JPA 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=9252528 

 

자바 ORM 표준 JPA 프로그래밍

자바 ORM 표준 JPA는 SQL 작성 없이 객체를 데이터베이스에 직접 저장할 수 있게 도와주고, 객체와 관계형 데이터베이스의 차이도 중간에서 해결해준다. 이 책은 JPA 기초 이론과 핵심 원리, 그리고

book.naver.com

 

'Study > Java' 카테고리의 다른 글

[Java] Annotation 이란?  (0) 2021.11.03
[Java] 서블릿 (Servlet) 과 JSP (Java Server Page)  (0) 2021.09.30
Java Version 별 차이점 정리  (0) 2021.07.04

+ Recent posts