1. ORM 등장 배경
자바 웹 애플리케이션 개발 = JAVA + RDBMS(관계형 데이터베이스)
초기 : 개발 단계에서 JDBC API + SQL에 많은 시간 할당, 운영단계에서 업무의 시작과 끝을 SQL과 함께...
과도기: iBatis나 MyBatis, Spring JDBC Template 같은 SQL Mapper의 탄생으로 JDBC API 및 SQL 작성 시간이 줄어듦
하지만 지루한 CRUD SQL을 반복하고 SQL 중심적으로 개발하는 것을 막을 수 없었다.
즉 객체 모델링이 아닌 RDBMS에 맞게 데이터 중심으로 테이블 설계 작업이 중시되었다.
또한, 말이 객체지향적 프로그래밍이지 객체는 단순히 RDBMS로 옮기기 전 그릇에 불과했다.
마지막으로 비즈니스 로직 변경에 따른 SQL 수정이 항상 동반되었다.
ORM(Object-Relational Mapping) 기술의 등장
패러다임의 불일치
[객체 연관관계]
public class Item {
Long id; //Item_id PK사용
Book book; //참조로 연관관계 설정!
public Book getBook() {
return book;
}
public Item createItem(Book book) {
Item item = new Item();
item.getBook(); // book 참조변수를 통해 Item에서 Book객체에 접근 가능
return item;
}
}
public class Book {
Long id; //Book_id PK 사용
String name; //Name 컬럼 사용
public Book createBook() {
Book book = new Book();
book.getItem(); // Error : Book에서 Item을 접근할 수 있는 참조변수가 존재하지 않음
return book;
}
}
[테이블 연관관계]
public class Item {
String id; //Item_id PK 사용
Long bookId; //Book_id FK 사용
}
public class Book {
Long id; //Book_id PK 사용
String name; //name 컬럼 사용
}
[객체 그래프 탐색 문제]
3. 정리
객체지향적 언어가 발전하면서 좀 더 객체 중심의 프로그래밍이 가능해졌지만 결국 DATA는 RDBMS를 통해 저장되기 때문에 애플리케이션이 복잡해지고 고도화될수록 객체끼리 접근이 많아지고 그렇게 되면 객체 모델링 시 패러다임의 불일치가 커진다. 그래서 개발자는 점차 다시 데이터 중심 모델링으로 바꾸게 되는 경향이 크다.
JPA는 이러한 패러 다임의 불일치 문제를 고민해 해결하면서 정교한 객체 모델링을 유지하게 도와준다. 이는 즉 개발자의 생산성을 높게 된다. 그러나 아직까지 통계성 쿼리 등 복잡한 SQL에는 JPA만으로 힘든 점이 있다. 그래서 이를 보완하기 위해 QueryDSL 라이브러리 등을 통해 보완하고 있다.