ORM
ORM이란?
ORM이란 Object Relation Mapping의 약자로, 객체 관계 매핑을 의미한다. Java와 같은 객체지향 언어의 객체(클래스)와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법이다.
클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재한다. ORM은 이 둘의 불일치와 제앿하항을 해결하는 역할을 한다.

ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있다.
주요 개념
- 객체(클래스) ↔ 데이터베이스 테이블 매핑
- SQL 쿼리 대신 메서드 호출로 데이터베이스 작업 수행
- 데이터베이스 독립성 확보 가능
ORM의 장점
- 데이터베이스 쿼리를 객체지향적으로 조작할 수 있다.
- 쿼리문을 작성하는 양이 현저히 줄어 개발 비용이 줄어든다.
- 객체지향적으로 데이터베이스에 접근할 수 있어 코드의 가독성을 높인다.
- 재사용 및 유지보수가 편리하다.
- ORM을 통해 매핑된 객체는 모두 독립적으로 작성되어 있어 재사용이 용이하다.
- 객체들은 각 클래스로 나뉘어 있어 유지보수가 수월하다.
- 데이터베이스에 대한 종속성이 줄어든다.
- ORM을 통해 자동 생성된 SQL문은 객체를 기반으로 데이터베이스 테이블을 관리하기 때문에 데이터베이스에 종속적이지 않다.
- 데이터베이스를 교체하는 상황에서도 비교적 적은 리스크를 부담한다.
ORM의 단점
- ORM만으로 온전한 서비스를 구현하기에는 한계가 있다.
- 복잡한 서비스의 경우 직접 쿼리를 구현하지 않고 코드로 구현하기 어렵다.
- 복잡한 쿼리를 정확한 설계없이 ORM만으로 구성하게 되면 속도 저하 등의 성능 문제가 발생할 수 있다.
- 애플리케이션의 객체 관점과 데이터베이스의 관계 관점의 불일치가 발생한다.
- 세분성(Granularity): ORM의 자동 설계 방법에 따라 데이터베이스에 있는 테이블의 수와 애플리케이션의 엔티티(Entity) 클래스의 수가 다른 경우가 생긴다. (클래스가 테이블의 수보다 많아질 수 있다.)
- 상속성(Ingritance): RBDMS에는 상속이라는 개념이 없다.
- 연관성(Associcatios): 객체지향 언어는 객체를 참조함으로써 연관성을 나타내지만 RDBMS에서는 외래키(foreign key)를 삽입함으로써 연관성을 표현한다. 또한 객체지향 언에서 객체를 참조할 때는 방향성이 존재하지만 RDBMS에서 외래키를 삽입하는 것은 앙뱡향의 관계를 가지기 때문에 방향성이 없다.
- 탐색(Navigation): 자바와 RDBMS는 어떤 값(객체)에 접근하는 방식이 다르다. 자바에서는 특정 값에 접근하기 위해 객체 참조 같은 연결 수단을 활용한다. 이 방식은 객체를 연결하고 또 연결해서 접근하는 그래프 형태의 접근 방식이다. (예: 어떤 멤버의 회사 주소를 구하기 위해 member, getOrganization(), getAddress()와 같이 접근할 수 있다.) 반명 RDBMS에서는 쿼리를 최소화하고 조인(JOIN)을 통해 여러 테이블을 로드하고 값을 추출하는 접근 방식을 채택하고 있다.
대표적인 ORM 프레임워크
Hibernate (Java)
SQLAlchemy (Python)
Entity Framework (.NET)
Doctrine (PHP)
JPA
JAP란?
JPA란 Java Persistence API의 약자로, 자바 진영의 ORM 기술 표준으로 채택된 인터페이스 모음이다. ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함한다. 즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준 명세로 생각하면 된다.
개발자가 직접 JDBC를 구현하면 SQL에 의존하게 되는 문제 등이 있어 개발의 효율성이 떨어지는데, JPA는 이 같은 문제점을 보완해서 개발자 대신 적절한 SQL을 생성하고 데이터베이스를 조작해서 객체를 자동으로 매핑하는 역할을 수행한다.

ORM의 구체화된 자바 표준 스펙인 JPA (JPA의 역할이 ORM이라고 보면 무난하다.)
주요 개념
- Java의 ORM 표준 인터페이스 제공
- 어노테이션 기반의 설정 (예: @Entity, @Id, @OneToMany 등)
- SQL 작성 없이 객체 지향적으로 데이터 관리 가능
대표적인 JPA 구현체
Hibernate (가장 널리 사용됨)
EclipseLink
DataNucleus
정리
| 구분 | ORM | JPA |
|---|
| 정의 | 객체와 데이터베이스를 매핑하는 기술 | 자바 ORM을 위한 표준 명세 |
| 역할 | ORM 기능을 직접 수행 | ORM 기능을 수행하는 API 인터페이스 제공 |
| 관계 | 기술 그 자체 | ORM 기술을 위한 인터페이스 표준 |
| 구현체 | Hibernate, MyBatis 등 | Hibernate, EclipseLink 등 (JPA 기반) |
| 종속성 | 언어나 프레임워크에 따라 다름 | Java 환경에서만 사용 가능 |