본문 바로가기

Develop/ORM

ORM 의 이해

ORM 이란?
객체와 관계형 table 사이의 mapping을 처리해 주는 것을 Object Relational Mapping ( ORM ) 이라고 한다.

ORM 이 제공하여야 하는 기능
ORM 은 객체를 table에 저장해 주고, table에 저장된 data로 부터 객체를 생성해 주는 기능을 제공한다.

  • Metadata를 사용하여 object 와 table 사이의 mapping 정보를 지정할 수 있어야 한다.
    • 손쉽게 mapping 정보를 변경할 수 있도록 해야 한다.
  • class 상속, 객체 사이의 연관 등을 객체 modeling을 지원해야 한다.
  • class 와 class의 property를 사용하여 객체를 조회할 수 있어야 한다.
  • 객체 값 변경을 자동으로 database에 반영해야 한다.
  • 상황에 따라 성능을 개선할 수 있는 방법을 제공해야 한다.
    • Lazy loading
    • join 기반 조회
    • native query
    • cache

ORM의 장점.

  • 생산성 향상
    • SQL query를 작성하고 그 query 실행 결과로 부터 객체를 생성하는 코드를 작성하는 시간이 줄어들어 business logic 에 집중할 수 있다.
  • 유지보수 용이
    • JDBC, ADO.NET API 를 사용한 코드 축소
    • 코드가 business logic 위주로 작성되기 때문에 이해도 상승
    • 리펙토링 용이
  • 특정 DBMS에 종속적이지 않다.
    • 대부분의 ORM 솔루션은 DBMS에 종속적이지 않다.

ORM의 단점

  • DAO 패턴에 익숙한 개발자에게는 초반 접금이 어렵다.
    • 객체 지향적으로 class 설계하는 것은 쉽지 않다.
  • ORM 을 잘못 사용할 경우 성능을 저하시킬 수 있다.
    • ORM 솔루션들은 자체적으로 cache와 같이 성능을 향상 시킬 수 있는 기능을 제공하고 있기 때문에 ORM 자체의 성능은 나쁘지 않다. 그러나 부적절하게 ORM 을 적용할 경우 성능 저하를 유발할 수 있다.
  • 객체 지향적 프로그래밍이 아니라면 별다른 효과를 볼 수 없다.
    • OLAP 이나 프로시져가 많은 시스템과 같은 곳에서는 ORM 을 사용한다 하더라도 객체 지향적인 장점을 활용할 수 없다.