1. 객체지향적인 코드
- 개발자가 SQL문이 아닌 클래스의 메소드를 통해 DB를 조작할 수 있어 객체모델로 구현하는데 집중할 수 있다.
- 선언문, 할당, 종료 같은 부수적 코드가 없거나 급격히 줄어든다.
- SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적 접근으로 생산성이 증가한다.
2. 재사용, 유지보수, 리팩토링 용이
- ORM은 독립적으로 작성되어있고 해당 객체들을 재활용할 수 있다.
- Model에서 가공된 데이터를 컨트롤러에 의해 뷰와 합쳐지는 형태이므로 디자인 패턴을 견고히 할 수 있다.
- 매핑 정보가 명확하며 ERD 보는 것에 대한 의존도를 낮출 수 있다.
3. DBMS 종속성 하락
- 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하기에 RDBMS의 데이터 구조와 OOP의 객체 지향 모델 사이의 간격을 좁힐 수 있다.
- 대부분 ORM 솔루션은 DB에 종속적이지 않다.(구현 방법 뿐만 아니라 자료형 타입까지 유효하다.
- 개발자는 Object에 만 집중할 수 있으므로 거대한 작업에도 적은 리스크와 시간이 소요된다.
1. ORM으로만 완벽한 서비스를 구현하기는 힘들다.
- 프로젝트의 복잡성이 커질 수록 난이도가 올라간다.
- 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨릴 수 있다.
- 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하므로 결국 SQL문을 써야한다.
2. 프로시저가 많은 시스템에선 ORM의 객체 지향적 장점을 활용하기 어렵다.
- 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.