728x90
반응형
SMALL
ORM이란?
- Object Relational Mapping 의 줄임말, 객체와 관계형 데이터베이스 매핑의 줄임말
- 쉽게 말해서 클래스로 만들어진 인스턴스(객체)와 RDB(Relational DataBase)의 테이블과의 연결을 의미
- 위 그림처럼 객체를 통해 간접적으로 데이터베이스의 데이터를 다룰 수 있다.
- ORM을 통해서 객체간의 관계를 바탕으로 SQL문이 자동으로 생성되기 때문에 객체모델(클래스)과 관계형모델(테이블)의 불일치성을 해결해준다
Why ORM? 장단점
장점
- 객체지향적인 코드
- 더 직관적이고, 비지니스 로직에 더 집중 할 수 있다.
- 앞서 이야기 했듯이 SQL문을 자동으로 생성해주기 생산성이 증가
- 코드의 가독성을 올려줌
- 재사용성 및 유지보수의 편리성 증가
- 선언된 클래스를 통해서 ORM클래스로 지정 할 수 있고 그 클래스는 데이터베이스와 상호작용 할 수 있다.
- 만약, 테이블 스키마를 변경하고 싶다면, ORM클래스를 변경하면 된다
- 유지보수의 편리성
- ORM 클래스를 재 사용해서 객체를 생성할 수 있다.
- 재사용성
- 데이터베이스 독립성
- 데이터베이스에 대한 종속성을 줄여준다.
- ORM을 사용하면 DB를 변경하더라도 소스코드의 변경이 필요하지 않기 때문에 객체지향적 설계가 편리해진다.
- 데이터베이스에 대한 종속성을 줄여준다.
단점
- 성능
- ORM은 복잡한 쿼리를 생성하고 실행할 때 성능 문제가 발생 할 수 있다.
- 속도 저하 문제를 직면했을 경우 성능을 최적화 하기위해서는 직접적인 SQL문을 써주어야 한다.
- 제한적
- 모든 데이터베이스가 ORM을 지원하는 것은 아니기 때문에 프로젝트에서 사용 할 수 있는 데이터베이스에 제약이 될 수 있음
- 객체-관계 간의 불일치
- 클래스와 테이블은 기존부터 호환 가능성을 두고 만들어 진것이 아니기때문에 불일치가 발생한다.
불일치 되는 것들 | |
세분성 (Granularity) |
세분성이란 정보나 개념이 세분화(쪼개질?) 될수록 세분성이 높다 라는 이야기를 함 (본인은 정보의 상세한 수준이라고 이해) 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다. EX) 객체를 통해 주문(Order)와 주문 라인(Order Line) 두개의 별도의 클래스를 만들어 주문 클래스가 주문 라인 클래스를 포함하는 형태가 될 수 있지, DB의 경우 2개의 테이블을 만들어서 외래키로 연결해주어야 한다. |
상속성 (Inheritance) |
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속의 개념이 없다. 따라서, 유사한 기능을 구현하는 것으로 만족해야함 EX) 동물 클래스를 상속 받아 고양이, 강아지 클래스를 만들 수 있지만, DB의 경우, 동물, 고양이 강아지 에 대한 데이터 처리를 어떻게 해야할 지, 객체의 접근 방식이 아닌 다른 방식을 결정해야한다. |
일치 (Identity) |
RDBMS는 기본키(PK)를 이용해서 같은 데이터구나를 정의 한다. 객체 (Java)는 객체 식별 (a == b)와 동일성 (a.equals(b))을 모두 정의한다. |
연관성 (Associations) |
객체지향 언어에서 연관성은 객체의 참조(Reference) 혹은 다형성을 통해 표현 가능하다. RDBMS에서의 방향성은 외래키를 이용해서 나타낸다. |
탐색 (Navigation) |
프로그래밍 언어(자바)와 RDBMS에서 객체에 접근하는 방법이 다르다. 자바의 경우 객체간의 관계를 직접적으로 참조하거나 연결하여 탐색할 수 있음. RDBMS 의 경우 외래 키와 Join을 사용하여 관계를 탐색하게 됨. |
대표적인 ORM 프레임워크들
- JPA/Hibernate
- JPA (Java Persistence API)는 자바의 ORM 기술 표준 인터페이스의 모음이며 이러한 명세를 구현한 구현체가 Hibernate 이다.
- Sequeliz
- Promise 기반의 비동기로 동작하는 Node.js ORM
- Django ORM
- python 기반의 프레임워크인 Django에서 자체적으로 지원하는 ORM
728x90
반응형
LIST