ORM / ODM

ORM(Object Relational Mapping) 이란?

코드에 여러가지 오브젝트가 있다면 이것을 데이터베이스에 저장하기위해서 스스로 어떻게 테이블로 변환할건지, 어떻게 스키마를 만들고 분할할건지, 그리고 데이터베이스에서 어떻게 데이터를 읽어와서 오브젝트 형태로 변환할건지 직접 고민하고 처리해줘야한다.

이러한 번거러움을 해결해주는 것이 ORM 이다.

ORM 이라는 엔진 (혹은 라이브러리)를 활용하게 되면 코드상에서 작성한 오브젝트를 자동으로 데이터베이스에 스키마를 만들고, 자동으로 데이터를 저장하고 읽어와서 코드로 변환해주기도 한다.

‘Sequalize’ 라는 ORM을 이용하면, 코드상으로 스키마가 어떻게 보여지는지 정의해놓고 코드를 실행하면 자동으로 테이블을 만들어주고, 코드상에 있는 데이터를 테이블에 넣어준다.

이처럼 데이터베이스를 어떻게 만들고, sql 쿼리를 어떻게 사용하는지 전혀 몰라도 코드상으로 모든 것을 해줄 수 있게 도와주는 것이 ORM 이다.

즉 ORM은 데이터베이스를 한단계 감싸는, 추상화를 해주는 유용한 api를 제공한다.


ORM을 사용했을 때의 장단점

  • 장점
    • 데이터베이스 쿼리를 신경쓰지 않고, 어플리케이션의 Business Logic에 초점을 두고 개발할 수 있도록 도와준다.
    • 쿼리를 반복해서 사용하는 것을 줄여준다.
    • 데이터베이스 추상화를 도와준다. (ORM을 사용하면 다른 sql 데이터베이스를 사용해도, 쿼리가 달라지는 점을 걱정하지않고 ORM 만 이용하면 편하게 사용할 수 있다.)
    • 스키마가 변경되더라도 migration을 이용하여 처리가 가능하다.
  • 단점
    • ORM에서 제공해주는 api 만으로는 상세한 쿼리가 불가능하다. 또, SQL 에 대해 깊숙히 알 필요가 없기때문에 효율적인 쿼리가 불가능함
    • ORM의 api만으로는 복잡한 쿼리가 불가능하다.
    • ORM 특성상, 모든 행에 있는 데이터를 다 읽어와서 코드에서 필터링을 해야하기때문에 실제로 데이터베이스만을 이용했을때의 정말 빠른 성능, 메모리의 최적화 등은 아쉬울 수 있다.
    • 성능이 정말 중요한 어플리케이션의 경우, 그냥 데이터베이스와 sql을 사용하는게 더 효율적일 수 있다.

많이 사용되는 ORM


ODM (Object Document Mapper)

MongoDB와 같이 document 형태로 관리되는 NoSQL은 ‘mongoose’ 라는 오브젝트를 Document로 맵핑을 해주는 ODM이 있다.