[Spring] ORM, JPA, Hibernate

1. ORM (Object Relational Mapping)
1) ORM 이란?
- ORM은 객체 관계 매핑을 의미
- 객체와 RDB의 테이블을 자동으로 매핑하는 방법
- 클래스와 RDB의 테이블의 불일치를 해결하는 역할
- SQL 작성이 아닌 Java 코드로 데이터를 조작할 수 있게 해준다.

2) ORM의 장점
- 객체지향적으로 DB에 접근할 수 있어 가독성이 좋다.
- ORM의 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용이 용이하다.
- 객체들은 각 클래스로 나뉘어 있어 유지보수가 용이하다.
- ORM을 통해 자동으로 생성된 SQL은 객체를 기반으로 DB 테이블을 관리하기 때문에 DB에 종속적이지 않다.
3) ORM의 단점
- 복잡한 쿼리의 경우 ORM만을 사용하여 코드로 구현하기 어렵다.
- 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생한다.
2. JPA (Java Persistence API)
- JPA는 Java 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음이다.
- JPA의 구현체는 대표적으로 하이버네이트(Hibernate), 이클립스 링크(EclipseLink), 데이터 뉴클리어스(DataNucleus)로 3가지가 있다. 그중 하이버네이트가 가장 많이 사용된다.
3. Hibernate와 Spring Data JPA
- 하이버네이트는 JPA 구현체 중의 하나이다.
- 이 하이버네이트의 기능을 개발자가 더욱 편하게 사용하도록 모듈화 한 것이 Spring Data JPA이다.
