ORM (Object Relational Mapping) 이란?
- 객체와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체지향적으로 사용하게 해주는 기술
- 객체와 RDB를 별개로 설계하고 중간에서 ORM이 매핑해주는 역할을 한다.
- 즉, ORM은 SQL문이 아닌 RDB의 데이터 그 자체와 매핑하기 때문에 SQL을 직접 작성하지 않는다.
- RDB 테이블은 객체지향적 특징 (상속, 다형성, 레퍼런스) 등이 없어서 Java와 같은 객체 지향적 언어로의 접근이 쉽지 않지만, 이럴때 ORM을 사용하면 보다 객체 지향적으로 RDB를 사용할 수 있다.
- Java에서 사용하는 대표적인 ORM으로는 JPA와 그의 구현체인 Hibernate가 있다. (JPA가 등장하기 전에는 MyBatis라는 Object Mapping 기술을 이용했었다. MyBatis는 Java 클래스 코드와 직접 작성한 SQL 코드를 매핑시켜주어야 한다.)
- 따라서 JPA라는 ORM 기술에 의해 DB에서 조회된 데이터들이 객체로 연결되어 있고, 객체의 값을 수정하는 것은 DB의 값을 수정하는 것이라고 할 수 있다.
JPA (ORM)
- 자바 ORM의 기술 표준
- 대표적인 오픈 소스 Hibernate
- CRUD 메소드 기본 제공
- 쿼리를 만들지 않아도 됨
- 1차 캐싱, 쓰기 지연, 변경감지, 지연로딩 제공
- MyBatis는 쿼리가 수정되어 데이터 정보가 바뀌면 그에 사용되고 있던 DTO와 함께 수정해주어야 하는 반면에,
JPA는 객체만 바꾸면 된다. - 즉, 객체 중심으로 개발 가능
- 하지만, 복잡한 쿼리는 해결이 어렵다.
MyBatis (SQL Mapper)
- 자바에서 SQL Mapper를 지원해주는 프레임워크
- SQL문을 이용해서 RDB 접근, 데이터를 객체화 시켜줌
- SQL을 직접 작성하여 쿼리 수행 결과를 객체와 매핑
- 쿼리문을 xml로 분리 가능
- 복잡한 쿼리문 작성 가능
- 데이터 캐싱 기능으로 성능 향상
- 하지만, 객체와 쿼리문을 모두 관리해야 한다. CRUB 메소드를 직접 다 구현해야 함.
ORM과 SQL Mapper 비교
| ORM | SQL Mapper |
| - Object와 DB 테이블을 매핑하여 데이터를 객체화하는 기술 -> 개발자가 반복적인 SQL을 직접 작성하지 않음 -> DBMS에 종속적이지 않음 -> 복잡한 쿼리의 경우, JPQL을 사용하거나 SQL Mapper을 혼용하여 사용 가능 |
- Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술 -> 객체와 테이블 간의 관계를 매핑하는 것이 아님 -> SQL문을 직접 작성하고 쿼리 수행 결과를 어떠한 객체에 매핑할지 바인딩 하는 방법 -> DBMS에 종속적인 문제 -> ex) JDBCTemplate, MyBatis |
ORM의 개념, JPA와 MyBatis 차이
데이터들이 프로그램이 종료되어도 사라지지 않고 어떤 곳에 저장되는 개념을 영속성(Persistence) 이라고 한다.자바에서는 데이터의 영속성을 위한 JDBC를 지원해주는데, 이는 매핑 작업을 개발자
velog.io
'Spring Boot' 카테고리의 다른 글
| Spring 과 Spring Boot의 차이 (2) | 2024.01.27 |
|---|---|
| String to Enum (1) | 2024.01.14 |
| Fegin (1) | 2024.01.10 |
| 자주 사용하는 Lombok 어노테이션 (1) | 2024.01.08 |