728x90
ORM이란
- 객체가 테이블이 되도록 매핑 시켜주는 프레임워크
- 객체를 통해 간접적으로 데이터베이스를 조작
Object Relational Mapping의 약자로 관계형 데이터베이스 관리 시스템(RDBMS(Relational Database Management System))와 객체 지향 프로그래밍 언어(OOP(Object Oriented Programming))간 불일치가 존재(클래스→테이블)한다. ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결하며 자동으로 연결(Mapping)해준다.
즉,
- SQL문을 짤 필요없이 객체(Class)를 통해 간접적으로 데이터베이스를 조작할 수 있다.
- 객체가 테이블이 되도록 매핑 시켜주는 프레임워크
- ex) 클래스로 스키마를 매핑하고 메소드로 쿼리를 작성하면, 객체로 이뤄진 테이블을 가져온다.
장단점
- 장점
- 별도의 SQL을 사용하지 않고 OPP 언어 그대로 사용 가능
- 객체 지향적으로 인해 직관적이다.
- 재사용 및 유지보수의 편리성이 증가
- DBMS에 대한 종속성을 줄인다.
- 단점
- ORM만으로는 구현하기 어렵다.
- 사용하기 편하나 설계에 신중해야 한다.
- 잘못 구현된 경우 속도 저하 및 일관성이 무너지는 문제점 발생
- 직접 SQL을 사용하는 것보다 복잡해질수도 있다.
- 사용하기 편하나 설계에 신중해야 한다.
- 프로시저가 많은 시스템에서는 객체 지향적인 장점을 활용하기 어렵다.(당연한 소리..)
- 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 사용할 수도 있다.
- ORM만으로는 구현하기 어렵다.
어떤 불일치가 생기는가
- Granularity 세분성
- 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.
- Inheritance 상속성
- RDBMS는 객체지향 프로그래밍 언어의 자연적 패러다임인 상속과 유사한 것을 정의하지 않는다. 상속의 개념이 없다.
- Identity 일치
- RDBMS는 기본키(primary key)를 이용하여 동일성을 정의
- Associations 연관성
- 객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreign key)를 이용해서 나타낸다.
- Navigation 탐색/순회
- 자바와 RDBMS에서 객체 접근 방법이 근본적으로 다름
- Java는 그래프 형태로 하나의 연결에서 다른 연결로 이동하면서 탐색/순회
- RDBMS에서는 일반적으로 SQL 쿼리 수를 최소화하고 JOIN을 통해 여러 엔터티를 로드하고 원하는 대상 엔티티를을 선택하는 방식으로 탐색/순회
- 자바와 RDBMS에서 객체 접근 방법이 근본적으로 다름
언어별 프레임워크 종류
- Java - Hybernate, JPA
- Node.js - Sequalize
- Django - 내장 ORM
- Flask - SQLAlchemy
Reference
728x90
'CS > Database' 카테고리의 다른 글
무결성 제약조건 (0) | 2021.10.22 |
---|---|
데이터베이스 시스템 구성 및 구조 (0) | 2021.10.15 |
Oracle, MySQL, PostgreSQL 차이점 (0) | 2021.10.08 |
macOS) Oracle DB 권한 설정 및 부여 (0) | 2021.10.01 |
macOS) Docker, Oracle DB설치, 설정 (ORA-12547 오류 해결) 및 user 생성, user 권한 부여 (4) | 2021.09.17 |
댓글