SQL Mapper와 ORM
Persistence Framework는 SQL Mapper와 ORM으로 나뉜다.
- ORM은 데이터베이스 객체를 자바 객체로 매핑함으로써 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해주지만, SQL Mapper는 SQL을 명시해줘야 한다.
- ORM은 관계형 데이터베이스의 관계를 Object에 반영하는것이 목적이라면, SQL Mapper는 단순히 필드를 매핑시키는 것이 목적이라는 점에서 지향점의 차이가 있다.
SQL Mapper
ORM
- 객체를 통해 간접적으로 데이터베이스를 다룬다.
- 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말한다.
- Persistence API라고도 할 수 있다.
JDBC(Java Database Connectivity)
JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API이다. 모든 Java Data Access 기술의 근간으로 모든 Persistence Framework는 내부적으로 JDBC API를 사용한다.

JPA(Java Persistent API)

- 자바 ORM 기술에 대한 API 표준 명세로 Java에서 제공하는 API이다.
- 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리를 표현하는 자바 API이다.
- 즉, JPA는 ORM을 사용하기 위한 표준 인터페이스를 모아둔 것이다.
- 기존 EJB에서 제공되던 엔티티 빈을 대체하는 기술이다.
- JPA 구성요소
- javax.persistence 패키지로 정의된 API 그 자체
- JPAL(Java Persistence Query Language)
- 객체/관계 메타데이터
- 사용자가 원하는 JPA 구현체를 선택해서 사용할 수 있다.
- JPA의 대표적인 구현체로는 Hibernate, EclipseLing, DataNucleus, OpenJPA, TopLink, Essestials 등이 있다.
- 이 구현체들을 ORM Framework라고 부른다.
- 장점
- 객체 간의 관계를 바탕으로 RDB 테이블에 자동으로 영속화하여 SQL Mapper와 달리 쿼리를 관리하지 않아도 된다.
- 단점
- ORM의 경우 복잡한 SQL을 수행하기 힘들고 쿼리 성능의 최적화가 어렵다.
- 복잡한 쿼리는 결국 SQL을 짜야함(native SQL이 아닌 객체 중심 SQL을 위한 JPQL, querydsl 기술도 있음)
Spring Data JPA
JPA를 사용하기 편하게 만들어놓은 모듈. JAP를 한 단계 더 추상화시킨 Repository를 제공함으로서, 실제 코드 작성 시 Repository를 구현하는 클래스에 정해진 규칙대로 메서드를 입력하면 Spring이 알아서 이름에 적합한 쿼리를 날리는 구현체를 만들어 Bean으로 등록한다.

Mybatis

- 개발자가 지정한 SQL, 저장 프로시저 그리고 몇 가지 고급 매핑을 지원하는 SQL Mapper이다.
- JDBC로 처리하는 상당 부분의 코드와 파라미터 설정 및 매핑을 대신해준다.
- 데이터베이스 record에 원시 타입과 Map 인터페이스, 그리고 자바 POJO를 설정해서 매핑하기 위해 xml과 Annotation을 사용할 수 있다.
- 장점
- SQL에 대한 모든 컨트롤을 하고자 할 때 매우 적합하다.
- SQL 쿼리들의 최적화가 잘 되어 있을때 유용하다.
- 단점
- 애플리케이션과 데이터베이스 간의 설계에 대한 모든 조작을 하고자 할 때는 적합하지 않다. 왜냐하면 애플리케이션과 데이터베이스의 구조화가 잘 되도록 많은 설정 부분을 변경해야 하기 때문이다.
JPA vs Mybatis
