프로그램을 실행하는 동안 그 안에서는 많은 데이터들이 사용되고, 만들어진다.
우리는 이 데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 것이 필요한데, 이 개념이 바로 영속성(Persistence)이다.
이는 Layered Architecture에서 다음과 같이 도메인 모델과 데이터베이스 사이에 존재하며, 프로그램의 객체정보를 DB에 저장하고, DB의 정보를 객체로 담아와 사용할 수 있도록 한다.
자바에서는 데이터의 영속성(Persistence)를 위한 JDBC를 지원해주는데, 그림에서 보이는 프로세스와 같이 JDBC에서 DB에 접근하여 SQL을 수행하고, 결과값을 다시 dataType으로 매핑시켜주는 작업을 개발자가 일일히 수행해야 하는 번거로움이 있다.
SQL Mapper와 ORM은 개발자가 직접 JDBC Programming을 하지 않도록 기능들을 제공해주는 Persistence Framework 종류이다.
SQL Mapper
: Object와 SQL의 필드을 매핑하여 데이터를 객체화하는 기술.
객체와 테이블간의 관계를 매핑하는 것이 아니라, SQL문을 직접 작성하고 쿼리 수행결과를 어떠한 객체에 매핑하여 줄 지 바인딩하는 방법. 즉 SQL 의존적인 방법이다.
ex) JdbcTemplate, Mybatis
o MyBatis
: SQL을 xml파일로 분리하여 관리하고, SQL결과와 객체 인스턴스의 매핑을 도와주는 역할을 수행.
동적쿼리를 지원하여 다이나믹하게 변경되는 쿼리 작성가능.
--> SQL을 개발자가 직접 작성하는 문제.
--> DBMS에 종속적인 문제.
--> 비슷한 쿼리를 반복적으로 작성해야하는 문제
--> 객체와 관계형 테이블 구조간 패러다임 불일치 발생.
ORM (Object Relation Mapping)
: Object와 DB테이블을 매핑하여 데이터를 객체화하는 기술.
CRUD 관련 메소드를 사용하면 자동으로 SQL이 만들어져 개발자가 반복적인 SQL을 직접 작성하지 않아도 되고, DBMS에 종속적이지 않다. 또한 복잡한 쿼리의 경우 JPQL을 사용하거나 SQL Mapper를 혼용하여 사용할 수 있다.
Java ORM 기술에 대한 인터페이스 표준을 JPA라고 하고, 이를 구현한 가장 대표적인 기술이 Hibernate이다.
ex) Hibernate, EclipseLink, DataNucleus
--> DBMS에 의존하지 않음으로써 도메인과 비즈니스 로직 설계에 더 집중할 수 있는 장점
--> 요구사항 변화에 빠른 대처 가능한 장점
--> 복잡한 통계성 쿼리보다는 실시간 처리용 쿼리에 적합
[참고] 자바 ORM 표준 JPA 프로그래밍, 김영한 저자
'Programming > JPA' 카테고리의 다른 글
JPA로 CRUD 구현하기_(4)비즈니스 로직 수행 (0) | 2021.08.20 |
---|---|
JPA로 CRUD 구현하기_(3)CRUD 구현 (0) | 2021.08.20 |
JPA로 CRUD 구현하기_(2)객체와 테이블 매핑 (0) | 2021.08.20 |
JPA로 CRUD 구현하기_(1)프로젝트 생성 (0) | 2021.08.20 |