자라선

[자바 ORM 표쥰 JPA 프로그래밍] 3일차 - JPA 란? 본문

Develop/JPA

[자바 ORM 표쥰 JPA 프로그래밍] 3일차 - JPA 란?

자라선 2021. 3. 13. 02:25

1. JPA 란?

ORM(Object Relational Mapping)객체와 데이터베이스와의 매핑을 도와주는 것을 말하며
JPA(Java Persistence API)자바 진영의 ORM 표준 기술이다.

 

웬만한 객체지향언어들은 각각 ORM프레임워크를 지원하고 있으며

자바는 그중 JPA라는 기술 표준 명세를 정립하여 ORM 프레임워크들의 인터페이스를 정의한 것이다.

 

ORM 프레임워크는 다양한 종류가 있는데 가장 많이 사용되고있는 Hibernate, EclipseLink, DataNucleus 등이 있다.

 

JPA의 기준을 맞춘 ORM 프레임워크를 사용하기 때문에 특정 구현에 대한 의존성을 줄여주며 다른 구현 기술로 쉽게 마이그레이션 할 수 있다는 장점을 갖게된다.

쉽게 말해 ORM 프레임워크들은 JPA의 인터페이스에 맞춘 프레임워크라는 것

 

2. JPA을 왜 사용해야 하나?

2.1 생산성

일반적으로 JDBC API를 사용하여 DB의 요청을 보내게 된다면 개발자가 해야할 순서는 다음과 같다.

 

1. 개발자가 SQL를 작성

2. JDBC API로 SQL 생성

3. JDBC API가 DB로 SQL 요청

4. 반환된 결과값을 객체에 저장

 

비교적 반복적인 작업이 많아지는데 이것을 JPA를 사용하게 된다면 다음과 같아진다.

 

1. 자바 컬렉션을 JPA로 전달

2. 반환된 객체를 사용

 

JPA를 사용하게 된다면 별도로 SQL를 사용할 필요도 없을 뿐더러 반환된 결과값을 객체에 저장할 수고도 덜게 되어

생산성에서 큰 효과를 보게 된다.

 

Java 와 JPA의 DB 연동 간단 모델링

2.2 유지보수성

각 테이블의 컬럼이 추가되거나 스키마가 변경된다면 일반적인 SQL를 사용할때 쿼리 수정과 객체 매핑을 전부 수정해줘야하는 번거로움이 있다.

 

JPA는 객체와 데이터베이스를 매핑해왔기 때문에 별도로 개발자가 수정해줄 필요가 덜게되어

유지보수 수준에서도 대단한 효과를 보게된다.

 

2.3 성능

만약 하나의 트랜잭션에서 2번 SELECT 를 하려고 한다면

JDBC API에서 동일한 SQL를 2번 요청보내어 각각 반환 받아야한다.

 

하지만 JPA는 동일한 요청을 보내게 된다면 2번째부터 요청하는 동일한 쿼리에 대해서는

조회한 객체를 재사용게 된다.

String memberId = "userId";
Member m1 = jpa.find(memberId);
Member m2 = jpa.find(memberId);	// m1 과 비슷한걸 재사용

 

2.4 마이그레이션 용이성 및 벤더 독립성

각 관계형 데이터베이스 별로 SQL를 사용하지만 DB에 따라 모든 SQL의 표준이 같지가 않다.

ORACLE, Mysql, H2 등 각각 데이터베이스 마다 쿼리가 다를 수 있는데 개발자가 SQL를 작성하여 개발을 하고

나중에 DB가 변경된다면 개발할때 작성한 모든 SQL를 전부 수정해주어야한다.

 

하지만 JPA는 각 DB에 따라 기술이 종속되지 않도록 하여 SQL를 작성해 줄 필요도 없이 설정에서만 사용할 DB를 JPA에게 말해주기만 하면 된다.

또한 이러한 장점을 사용하여 개발환경에서는 인메모리 DB H2를 사용하여 개발하다가 운영할때는 ORACLE를 사용하는 등 하여 개발환경과 운영환경의 사용 DB가 다르게 하여 개발환경 구성을 쉽게 구축할 수 있다.

Comments