ORM 이란?
객체와 관계형 table 사이의 mapping을 처리해 주는 것을 Object Relational Mapping ( ORM ) 이라고 한다.
ORM 이 제공하여야 하는 기능
ORM 은 객체를 table에 저장해 주고, table에 저장된 data로 부터 객체를 생성해 주는 기능을 제공한다.
객체와 관계형 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 을 사용한다 하더라도 객체 지향적인 장점을 활용할 수 없다.