ORM(Object Relation Mapping)에 대해서
ORM
객체관계매핑(Object Relation Mapping)
RDBMS는 테이블을 사용하고 객체지향언어는 클래스를 사용하여 서로 다른 구조를 가지고 있다.
이 둘 사이의 불일치를 해결해주는 SQL문을 자동으로 생성하여 데이터를 서로 주고받을 수 있도록 한 것이 ORM
클래스 <== 매핑 ==> 테이블
ORM의 장점
-
객체지향적인 코드로 더 직관적이고 비지니스 로직에 집중할 수 있게 해준다.
ORM을 사용하면 SQL Query를 사용하지 않고 메서드를 통해 관리되므로 객체모델을 다루는데 집중할 수 있게 해준다.
SQL과 관련된 과정들을 다루는 코드를 생략할 수 있고 각종 객체에 대한 코드를 별도로 작성하므로 가독성을 높여준다. -
재사용 및 유지보수에 용이하다
각 모델들을 객체로 관리하므로 재사용성이 좋다.
매핑정보가 명확하여 ERD 의존도를 낮춘다. -
DBMS에 대한 종속성이 줄어든다 객체간의 관계를 통해 ORM이 자동으로 SQL문을 생성해주기 때문에 데이터베이스와 객체지향언어 간의 간격을 좁힐 수 있다.
따라서 데이터베이스의 교체와 같은 작업도 용이하다.
ORM의 단점
- 순수 ORM만으로는 구현에 명확한 한계가 존재한다.
- 프로젝트의 복합성이 커질경우 구현 난이도가 높아질 수 있다.
- 일부 대형 쿼리의 경우 속도를 위해 별도의 튜닝이 필요할 수 있다.
- 이미 프로시저가 많은 경우 이를 객체함수로 재구성해야하는 번거로움이 있다.
특징
- 세분성 RDBMS는 1개의 테이블이지만 JAVA는 여러개의 클래스로 나눌 수 있다.
- 상속 RDBMS에는 상속의 개념이 없다.
- 일치 RDBMS는 sameness라는 하나의 개념으로 정의되지만 JAVA는 객체식별(a==b)과 객체동일성(a.equals(b)) 등의 개념이 존재한다.
- 연관성 JAVA는 객체참조를 통해 연관성을 나타내며 이에 방향성이 존재하지만 RDBMS는 외래키를 통해 나타내며 방향성이 없다.
- 탐색/순회 JAVA는 하나의 연결에서 다른 연결로 이동하며 탐색하지만 RDBMS는 join을 통해 각 연결을 모두 불러온 다음 원하는 엔티티를 선택한다.