JPA는 자바에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이라고 합니다!
인터페이스의 특징 때문에 실제적으로 구현된 것이 아니라 구현한 클래스에 매핑(DB와 연결)을 해주기 위해 사용되는 프레임워크입니다.
ORM은 쉽게 설명하면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational Database)에서 사용하는 테이블을 자동으로 연결(매핑)하는 것을 의미합니다.
하지만 클래스와 테이블은 서로가 처음부터 호환가능성을 보고 만들어진 것이 아니기 때문에 불일치가 발생한다고 합니다!
그래서 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결합니다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요가없는 편의성을 가지게 됩니다!
완벽한 객체지향적인 코드
ORM사용시 SQL문이 아닌 클래서의 메서드를 통해 데이터베이스를 조작할 수 있어서 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게합니다.
즉 SQL문, 선언문, 할당, 종료 같은 부수적인 코드가 사라지거나 줄어서 코드의 가독성을 높일 수 있습니다.
재사용, 유지보수, 리펙토링 용이성
ORM은 기존 객체와 독립적으로 작성되어있고, 객체로 작성되었기 때문에 재활용할 수 있습니다!
또한 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출수 있습니다!.
시스템의 엔티티(테이블)들이 무엇이 있는지 어떤 관계가 있는지를 나타내는 다이어그램입니다!
DBMS(DataBase Management System) 종속성 하락
객체 간의 관계를 가지고 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있습니다. 즉 객체에만 집중할 수 있기 떄문에 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간이 줄어듭니다.
ORM은 만능이 아니다!
ORM을 사용하는 것은 매우 편리하지만 그만큼 신중하게 설계해야합니다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있습니다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있습니다.
패러다임 불일치란?
두 그림을 비교해보면 자바에서는 관계를 상속으로 표현하고 있습니다. RDB는 이에 반해 상속이란 표현이 없습니다.
즉 자바에서 RDB를 사용할려고 하면 이 상속관계를 관계 표현으로 바꿔주는 코드를 짜야되는데 이것이 바로 패러다임 불일치를 해결하기 위한 개발자가 소모하는 비용입니다.
즉 JPA가 내부 연산으로 대신 해주기 때문에 패러다임 불일치를 위한 개발자가 소모하는 비용을 없어지게 됩니다.
위의 장점과 같이 기존의 SQL중심의 개발에서는 객체에 필드를 추가하면 그와 관련되 CRUD SQL을 모두 수정해야 했다고 합니다!
그래서 아래 코드와 같이 모델링할수록 매핑 작업이 늘어나기 때문에 생산성이 매우 떨어졌다고 합니다.
// 필드 추가 전 Person 클래스
public class Person {
private String personId;
private String name;
}
// SQL
INSERT INTO PERSON(PERSON_ID, NAME) VALUES (?, ?)
SELECT PERSON_ID, NAME FROM PERSON WHERE PERSON_ID = ?
UPDATE PERSON SET .....
public class Person {
private String personId;
private String name;
private String age;
private String tel;
}
// SQL을 추가된 필드만큼 모두 수정이 일어난다.
INSERT INTO PERSON(PERSON_ID, NAME, AGE, TEL) VALUES (?, ?, ?, ?)
SELECT PERSON_ID, NAME, AGE, TEL FROM PERSON WHERE PERSON_ID = ?
UPDATE PERSON SET .....
JPA는 SQL 중심적인 개발에서 객체 중심의 개발을 가능하게 해주어 이에 따른 얻어지는 이점이 굉장히 많아 진다고 합니다.