본문 바로가기

TIL

6/9[TIL] ORM 사용의 장점과 단점은?

프로젝트 중 백엔드 부분을 구축하면서 자연스레 ORM이라는 것을 사용해보고 정말 편리했던 기억이 난다.

 

ORM(Object Relational Mapping)이란?

 

DB와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환, 맵핑(연결)하는 프로그래밍 기법이다.

이는 객체(클래스)와 관계(관계형 데이터베이스)와의 설정을 의미하고 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용한다. 여기서 객체 모델과 관계형 모델 간의 불일치가 존재하는데 이를 객체 간의 관계를 바탕으로 SQL을 자동생성하여 불일치를 해결 해주는 것이 ORM이다.

Object 와 DB의 데이터 사이에서 맵핑(연결)해주는 매개체 역할이라고 보면 될 것 같다.

 

 

출처 : https://media.vlpt.us/images/ppaimar16/post/c7b49ed1-cbd4-4995-80d9-5db4e7e87377/Screenshot%20from%202020-12-08%2022

 

ORM을 사용함에 있어서 생기는 장 / 단점에는 어떠한 것들이 있을까?

 

장점

 

1. 별도의 SQL문을 사용하지 않아도 객체 지향 프로그래밍 언어로 구현이 가능하며 이는 곧 생산성 증가로 이어진다.

대량의 SQL Query를 쓰지 않고도 객체간의 관계를 풀어낼 수 있기 때문에 개발자가 좀 더 직관적으로 객체간의 관계를 파악할 수 있다.

 

2. 재사용 및 유지보수가 편리하다.

매핑하게 되면 정보가 명확해지기 때문에 ERD를 보는 것에 대한 의존도를 낮출 수 있다.

ORM은 독립적으로 작성이 되어 있고 해당 객체들은 재사용이 가능하다.

 

3. DBMS에 대한 종속성이 줄어든다.

대부분의 ORM 프레임워크들은 DB에 종속적이지 않다. 그러므로 개발자들은 객체에 집중함으로써 DBMS를 교체하는 극단적인 작업에도 비교적 적은 리스크와 시간이 소요된다. (여기서 종속적이라는 것은 프로그램 구조가 데이터 구조에 영향을 받는 것을 의미한다)

 

4. DB의 마이그레이션을 쉽게 할 수 있다.

 

 

단점

 

1. 직접 SQL문을 작성하는 것보다 상대적으로 복잡할 수가 있고 프로젝트의 복잡성이 높아질 경우 난이도가 그 만큼 올라간다.

모든 것을 ORM을 통해서만 구현하는 것은 힘들다. 잘못 구현된 경우에 속도 저하 및 심각할 경우 일관성이 무너지는 문제점이 생길 수도 있다. 

 

2. 기존의 기업들은 ORM을 고려하지 않은 DB를 사용하고 있어 ORM에 적합하게 변환하려면 많은 시간과 노력이 필요로 한다.

 

3. DB와 바로 연결하는 것보다 초기설정이 더 많아지거나 복잡해 질 수있다.

 

4. DB와 ORM 프레임워크, 내부코드에 대한 충분한 이해가 없는 경우 문제 해결이 힘들다.

 

5. DB에 직접 Query문을 보내는 것이 아니기 때문에 성능저하가 발생한다.

 

 

프로젝트를 하면서 Sequelize와 typeOrm, Prisma 이렇게 3가지 정도를 사용해 보았지만 ORM은 정말 유용한 것이라고 생각했다. 개발 환경에 있어서 많은 시간 절약을 해주는 것 같고 프레임워크들도 정말 많아서 프로젝트의 성격에 맞는 프레임워크를 선택해서 잘 활용한다면 좋을 것이다.