ORM(Object Relational Mapping)
객체와 관계형 데이터베이스의 데이터를 자동으로 연결해주는 것을 말한다.
객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다. 이때 객체 모델과 관계형 모델 간에 불일치가 존재하는데,
ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성한다.
결과적으로 객체를 통해 간접적으로 데이터베이스 데이터를 다룰 수 있다.
-
ORM의 장점
- 선언문, 할당, 종료 같은 부수적인 코드가 없거나 많이 줄어든다.
- 각 객체에 대한 코드를 별도로 작성하기 때문의 코드의 가독성을 올려준다.
- 재사용 및 유지보수의 편리성이 증가한다.
- ORM은 독립적으로 작성되어 있어 해당 객체들을 재활용 할 수 있다.
- DBMS에 대한 종속성이 줄어든다.(대부분 ORM은 DB에 종속적이지 않음)
- 개발자는 Object에 집중함으로써 극단적으로 DBMS를 교체하는 거대한 작업에도 비교적 적은 리스크와 시간이 소요된다.
- java를 통해 가공할 경우 java의 기능을 이용할 수 있고, 간결하고 빠른 가공이 가능하다.
-
ORM의 단점
- ORM만으로는 완전한 서비스를 구현하기가 어렵다.
- 사용하기는 편하지만 설계는 매우 신중하게 해야한다.
- 프로젝트의 복잡성이 커질 경우 난이도가 올라갈 수 있다.
- 잘못 구현된 경우에 속도 저하 및 심각한 경우에는 일관성이 무너지는 문제점이 생길 수 있다.
ORM으로써의 연관성(Associations)
- 객체지향 언어는 객체 참조(reference)를 사용하는 연관성을 나타내는 반면, RDBMS는 연관성을 외래키(foreign key)로 나타낸다.
- java에서의 객체 참조는 방향성이 있다.
- One-To-One, One-To-Many, Many-To-One Relationship 등 java에서 양방향 관계가 필요한 경우 각 객체에서 연관을 두번 정의해야 한다.
- RDBMS는 방향성이 없어 관계형 데이터베이스 연결을 자연스럽게 만든다.