Object-Relational Mapping : 객체와 RDB 매핑, 객체와 DB의 테이블이 매핑을 이루는 것
객체가 데이터베이스의 테이블과 매핑 시키는 프레임워크
프로그램 복잡도를 줄이고 자바 객체와 쿼리를 분리할 수 있음
트랜잭션 처리나 기타 데이터 베이스 관련 작업을 편리하게 처리
SQL Query가 아닌 직관적인 코드로 데이터 조작 가능
Java Persistence API
Java에서 ORM을 사용하기 위한 인터페이스를 모두 모아둔 것
JPA는 기술의 명세
대표적으로 JPA를 구현한 구현체는 Hibernate
JPA는 특정 라이브러리가 아닌 인터페이스(Interface) 이기 때문에 구현체가 필요
Java Application에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 한 방법
생산성이 뛰어나고 유지보수가 용이
객체지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와줌
SQL을 직접 작성하지 않고 객체를 사용하여 동작하기 때문에 유지보수가 간결하고 재사용성 증가
컬럼의 추가에 있어서 테이블이나 SQL 수정하는 과정이 많이 줄어듦
객체에 대한 코드를 별도로 작성하여 코드의 가독성도 증가
어려움
JPA의 장점을 잘 살리는데 학습비용이 큼
복잡한 쿼리를 사용할때는 불리함
기존 데이터베이스 중심으로 되어 있는 환경에서는 JPA를 사용하기 어려움
잘못사용할 경우 실제 SQL 문을 작성하는 것보다 성능이 떨어질 수 있음
대용량 데이터 기반의 환경에서도 튜닝이 어려워 상대적으로 기존방식보다 성능이 떨어질 수 있음
초기에는 JDBC API를 직접 사용하여 개발
JDBC API를 직접 사용하여 개발하다가 MyBatis를 이용해서 SQL Mapper를 통해 JDBC 코드를 많이 줄일 수 있었음
하지만, 여전히 CRUD에 대해서 SQL을 반복적으로 작성해야함.
이 문제를 해결해주는 것이 ORM 이고, Java 진영의 ORM 표준인 JPA가 해답.