ORM은 왜 쓰는 걸까요?

처음 ORM을 배울 때는 '이걸 왜 쓰는 거지?' 하는 질문을 수 없이 던지곤 했다.
'잘 알면 쓰기 편하다'라고는 하는데, 솔직히 잘 알면 SQL도 쓰기 편한 거 아닌가...?

사실 ORM에 대한 논쟁은 해외 다른 개발자들 사이에서도 분분한 듯 하다.
아는 미국의 개발자분에게 여쭤보니 ORM 사용을 나쁘게 생각하진 않지만 ORM 사용은 프로젝트의 성격에 달려있다는 애매한 답변을 받았다.
어떤 개발자의 경우 복잡한 쿼리문이 요구되는 어플리케이션의 경우 ORM이 아닌 Raw 쿼리를 사용한다고 한다.
실제로 ORM을 이용한 프로젝트를 두 차례 진행해본 결과 약간 이해가 되는 듯하다. 간단한 쿼리문을 작성할 때는 ORM이 간편하긴 하다. 별도의 언어가 아닌 프로젝트에 사용하고 있는 프로그래밍 언어로 바로 데이터를 뽑아오니 편하게 쿼리를 작성할 수 있었다. 하지만 여러 개의 테이블을 조인 테이블로 만들고 여러 가지 조건을 붙이며 쿼리를 해야 할 때는 극악의 난이도를 느낄 수 있었다. 심지어 어떤 팀원분은 조인 테이블을 만들기가 힘들어 데이터베이스 스키마를 변경하자는 의견까지 제시했다.
그렇다면 오늘 포스팅에서는 ORM과 ORM의 장단점에 대해 알아보자.
ORM
Object Relational Mapping: 객체 관계 매핑이라는 이름에서 ORM의 개념이 잘 표현되어 있다. ORM은 객체를 관계형 데이터베이스 쿼리문으로 매핑(연결) 시켜주는 역할을 한다. 즉, 프로그래밍 언어로 객체를 만들어 ORM에게 주면 ORM은 이를 관계형 데이터베이스 쿼리문으로 바꿔 쿼리를 진행하도록 하는 것이다.
장점
- 객체지향적인 코드
- 재사용, 유지보수, 리펙토링 용이성
- DBMS 종속성 하락
단점
- 복잡한 쿼리문의 경우 오히려 SQL문이 직관적이고 효율적
- 별도의 ORM 문법을 학습해야 함