🧩 ORM이란
Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 우리가 일반적으로 알고 있는 애플리케이션
class
와 RDB
의 테이블을
매핑(연결)한다는 뜻이며, 기술적으로 어플리케이션의 객체를 RDB
테이블에
자동으로 영속화 해주는 것이라고 보면 된다.
장점
SQL문
이 아닌 Method
를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을
이용하여 비지니스 로직을 구성하는 데만 집중 할 수 있음
(내부적으로는 쿼리를 생성하여 DB를 조작함. 하지만 개발자가 이를 신경쓰지
않아도 됨)
- Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어,
각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임
- 객체지향적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면
되기 때문에 생산성 증가
- 매핑하는 정보가
Class
로 명시 되었기 때문에 ERD
를 보는 의존도를
낮출 수 있고 유지보수 및 리팩토링에 유리
- 예를 들어 기존 방식에서 MySQL 데이터베이스를 사용하다가
PostgreSQL
로
변환한다고 가정해보면, 새로 쿼리를 짜야하는 경우가 생김. 이런 경우에
ORM을 사용한다면 쿼리를 수정할 필요가 없음
단점
- 학습비용이 비쌈
- 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저항 및
일관성을 무너뜨리는 문제점이 생길 수 있음.
- 복잡하고 비지니스 로직에 종속적인 쿼리는 속도를 위해 별도의 튜닝이
필요하기 떄문에 결국 SQL문을 써야할 수도 있다.
🧩 JPA?
Java Persistence API
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한
인터페이스
- 자바 진영의 ORM 기술 표준
- JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때,
개발자가 직접 SQL을 작성하지 않아도 된다.
- JPA가 개발자가 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로
Mapping 해준다.
🧩 데이터베이스 방언
- JPA는 특정 데이터베이스에 종속 X
- 각각의 데이터베이스가 제공하는 SQL문법과 함수는 조금씩 다름
- 가변 문자 :
MySQL -> varchar / Oracle -> varchar2
- 문자열을 자르는 함수 :
SQL표준 -> SUBSTRING() / Oracle -> SUBSTR()
- 페이징 :
MySQL은 LIMIT, oracle rownum
- 방언 :
SQL표준을 지키지 않는 특정 데이터베이스만의 고유한 기능
- oracle 이라고 하는 사투리를 써서 쿼리를 작성해 라는 뜻