# ORM Framework가 무엇인지 설명해주세요.
### 정의
- ORM이란 Object Relational Mapping의 줄임말
- 객체 지향 프로그래밍과 관계형 데이터베이스간에 통신시 발생하는 **패러다임 불일치 문제를 해결**하고자 **객체와 관계형 데이터베이스 간에 데이터를 자동으로 매핑해주는 기술**을 의미
### 장점
1. **별도의 SQL문을 사용하지 않아도** 객체 지향 프로그래밍 언어로 구현이 가능하며 이는 곧 생산성 증가로 이어진다.
- 대량의 SQL Query를 쓰지 않고도 객체간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체간의 관계를 파악할 수 있다.
2. **재사용 및 유지보수가 편리하다.**
- 매핑하게 되면 정보가 명확해지기 때문에 ERD를 보는 것에 대한 의존도를 낮출 수 있다.
- ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능하다.
3. **DBMS에 대한 종속성이 줄어든다.**
- 대부분의 ORM 프레임워크들은 DB에 종속적이지 않다.
- 그러므로 개발자들은 객체에 집중함으로써 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다. (여기서 종속적이라는 것은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미한다.)
4. DB의 마이그레이션을 쉽게 할 수 있다.
### 단점
- 완벽한 ORM 으로만 서비스를 구현하기가 어렵다.
- 모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다.
- DB에 직접 Query문을 보내는 것이 아니기 때문에 성능저하가 발생한다.
- DB와 ORM 프레임워크, 내부코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.
- DB와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해 질 수있다.
---
# 참고
### ORM, JPA, Hibernate, Spring Data JPA를 각각 비교해보세요.
- ORM
- 객체 지향 프로그램과 관계형 데이터베이스 간에 통신시 발생하는 **패러다임 문제를 해결**하기 위해 **데이터를 자동으로 매핑해주는 기술**을 의미
- JPA
- 자바 진영의 ORM을 위한 명세를 의미
- Hibernate
- Java 진영의 ORM 명세인 **JPA를 구현한 여러 구현체 중 하나**를 의미.
- JPA 구현체로써 Hibernate 외에도 EclipseLink나 DataNucleus 등이 존재
- Spring Data JPA
- Spring 환경에서 JPA를 편리하게 사용할 수 있도록 Repository 기반으로 추상화 시킨 스프링 서브 프로젝트이다.
- Spring Data JPA는 JPA 사용시 발생하는 수 많은 boilerplate를 없애주고 pagination이나 Query Method 등의 다양한 기능을 지원한다.
###### tags: `ORM-JPA`