2 분 소요

ORM(Object Relational Mapping)이란?

ORM이란 객체와 관계형 데이터베이스 매핑의 줄임말이다.
우리가 OOP(Object Oriented Programming) 에서 쓰는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블을 매핑(연결)하는 것을 의미합니다.

OOP(Object Oriented Programming)란?

객체지향프로그래밍이란 의미이다.

객체란?

객체지향이 말하는 객체란 프로그램 동작의 주체가 되는 요소를 의미한다. 이 객체는 유/무형을 가리지 않는다. 실체가 명확한 것일 수도 있고, 무형의 개념일 수도 있다. 모든 객체는 상태와 동작을 가진다. 예를 들면, 노트북을 구매한다고 했을 때 대부분 사람들은 노트북의 디자인, 성능, 가격등을 적절히 고려하여 노트북을 구매할 것이다. 이 노트북의 색,크기, 가격 등은 노트북이 가진 상태라고 볼 수 있고, 노트북으로 인터넷, 게임, 문서작업 등은 기능이라고 볼 수 있다.
이렇게 모든 객체에는 상태와 동작이 존재한다.

객체지향?

앞에서 말한 객체를 통해 코드를 구성하는 것이 방법론으로 정의할 수 있다. 이게 객체지향이라고 할 수 있다. 모든 객체는 각 객체의 특성에 부합하는 상태와 동작을 가지며, 이를 통해 객체 간의 상호작용을 코드로 나타낼 수 있다. 객체지향은 이러한 객체의 상호작용을 코드로 나타낸다.
즉 다시 말하면 JAVA라는 언어를 사용한다면 String, HashMap 등 모든 요소를 객체(Object)로 다루는데 이 때 우리는 JAVA로 필요한 객체를 메모리에 할당하고, 객체가 가진 변수나 메소드를 사용해서 코딩을 한다. 이러한 프로그래밍 방식이 객체지향프로그래밍이다.

장점? 단점? 왜쓸까?

장점

  • 코드 재사용성
    모듈화된 객체를 기반으로 코드가 작성되기 때문에, 해당 객체의 특징을 비슷한 다른 로직에도 적용해서 사용하거나, 다른 개발자가 구현한 객체를 가져와 쓰기에 용이하다
  • 간편한 유지보수
    객체를 수정할 경우, 해당 객체를 사용하는 모든 로직에 일괄적으로 적용되니, 중복 코드에 대한 관리가 간단해진다. 혹은 객체나 동작이 변경될 경우, 해당 객체나 동작과 연관된 객체만을 찾아 수정하면 된다.
  • 큰 규모의 프로그래밍의 유리
    객체, 모듈 단위로 구분되는 특징으로 인해 업무 분장이 쉽고, 각 모듈의 연관성을 도식하기 용이하다.

객체-관계 간의 불일치

  1. 세분성(Granularity) 경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.

  2. 상속석(Inheritance) OOP(개체지향프로그래밍)에서는 상속 개념이 있으나, 관계형 데이터베스에서는 상속 개념이 없습니다. 따라서 해당 테이블의 상속 관례를 표현하기가 쉽지 않게 됩니다.

  3. 일치(Identity) RDBMS에서는 기본키(Primary Key, 식별자)를 통해서 동일한 개념(데이터)인지 정의할 수 있습니다. 하지만 객체에서는 주소 값이 같은지를 체크해야 하기 때문에 (a==b)뿐만 아니라 (a.equals(b))를 모두 정의해야 합니다.

  4. 연관성(Associations) 객체지향 언어는 방향성이 있는 객체의 참조(reference)를 사용하여 연관성을 나타내지만 RDBMS는 방향성이 없는 외래키(foreing key)를 이용해서 나타낸다. 여기서 발생하는 차이가 있는데 만약 객체 간의 관계가 양방향일 경우엔 연관 정보를 두 번 참조시켜야 합니다. 하지만 RDBMS에서는 한 개 Column으로 관계를 나타낼 수 있습니다.

  5. 탐색(Navigaiton) 자바와 RDBMS에서 객체를 접근하는 방법이 근본적으로 다르다.
    자바는 그래프형태로 하나의 연결에서 다른 연결로 이동하며 탐색하지만 RDBS는 일반적으로 SQL문을 최소화하고 Join을 통해 여러 엔티티를 로드하고 원하는 대상을 SELECT 명령어를 통해서 조회(탐색)하는 방식입니다.

ORM의 장점,단점은?

장점은?

  • 완벽한 객체자향적인 코드
  • 재사용, 유지보수, 리팩토링 용이성
  • DBMS 종속성 하락
    → 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있음.
  • RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 축소

객체 모델만을 이용해서 프로그래밍을 하는데 집중할 수 있고, 불필요한 코드 로직 작성 비중이 감소합니다. 다시 말하면 복잡한 SQL문을 다룰 필요 없이 entity 작성만으로 객체 간의 데이터 관계를 매핑할 수 있습니다.

단점은?
ORM은 사용하는 것이 매우 편리하지만 그만큼 신중하게 설계할 필요가 있습니다. 프로젝트 복잡성이 높아질수록, 난이도 또한 비례하게 됩니다. 자칫 잘못하면 속도 저하 및 일관성을 무너뜨리는 등 문제가 발생할 수 있습니다.

참고자료 및 블로그