개발하는 뚱이
ORM? 그거 좋은거 맞죠? 본문
백엔드 개발을 하면서 ORM을 그냥 편해서 쓰고 있는데 정작 ORM이 어떤한 점이 좋고 나쁜지 잘 모르고 있는 상태로 개발을 하고 있는 내 모습을 보았다.
그래서 오늘은 ORM이 무엇인지 알아보겠다.
ORM(Object-Relational Mapping)란?
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미한다.
이러한 ORM을 사용하면 SQL을 사용하지 않고도 쉽게 DB 테이블에 작업을 할 수 있다.
OOP에서는 클래스와 객체를 사용하여 데이터를 구조화하고 조작한다.
반면 RDB는 테이블과 행을 사용하여 데이터를 저장한다.
이 둘 사이에는 여러 가지 차이가 있어 직접적으로 매핑하기 어려운 부분이 존재하는데, 이를 객체-관계 불일치라고 한다.
그렇기 때문에 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성해 불일치를 해결한다.
ORM의 장단점
장점
- 가독성이 좋아지고 비지니스 로직에 집중이 가능
- ORM을 사용하면 SQL Query가 아닌 메서드로 데이터를 조작할 수 있고, 개발자가 객체 지향 프로그래밍하는 데 집중 가능하다.
- 유지보수가 편리
- DB 스키마 업데이트 명령어를 따로 작성하지 않고, 객체를 수정한 후 모델 업데이트를 하면 쉽게 할 수 있다.
- 협업을 할 때 직접 DB를 확인하지 않아도, 코드 기반의 모델 클래스를 보는것이 유지보수에 유리하다.
단점
- 성능 문제
- ORM에서 생성된 쿼리는 때때로 SQL Query보다 효율이 떨어져 데이터 베이스 성능에 부하를 줄 수 있습니다.
- 추상화의 한계
- 관계형 데이터베이스의 세부적인 특징을 완벽하게 추상화하지 못할 수 있다.
- 예를 들어, 복잡한 조인이나 고급 SQL 기능을 사용할 때 ORM이 제한적일 수 있다.
이렇게 우리는 ORM이 무엇인지 살펴보았다.
ORM에 대해 조사를 하면서 'SQL이 더좋을까? ORM이 더 좋을까?' 생각이 들었다.
그래서 나는 SQL의 장단점을 찾아보았다.
SQL의 장단점
장점
- 좋은 성능
- 직접 최적화된 SQL을 작성하면 ORM보다 빠를 수 있다.
- 복잡한 쿼리 처리 가능
- 다중 JOIN, 서브쿼리, 윈도우 함수 같은 고급 기능을 활용할 수 있다.
- 튜닝 가능
- 인덱스, 실행 계획(EXPLAIN) 등을 활용해 성능 최적화 가능하다.
단점
- 생산성 감소
- SQL을 직접 작성해야 하므로 코드 작성 속도가 느려질 수 있다.
- DBMS 종속성
- 특정 DBMS(MySQL, PostgreSQL 등)에 최적화된 SQL을 사용하면 DB 변경이 어려울 수 있다.
- 보안 위험
- 직접 SQL을 작성하는 경우, SQL Injection 같은 보안 취약점을 신경 써야 함.
이렇게 확인해 봤을 때 솔직히 SQL의 단점을 해결한 것이 ORM, ORM의 단점을 해결한 것이 SQL이라 생각이 들었다.
그리고 ORM에 대해 공부를 하면서 ORM을 제대로 이해하기 위해서는 SQL에 대한 깊은 이해가 필수적이라는 것도 깨달았다.
또한 대규모 서비스를 운영하거나 복잡한 프로젝트를 다룰 때는 성능 최적화를 위해 ORM보다는 SQL을 사용하는 것이 더 효율적일 수 있다고 생각했다.
하지만 그렇다고 해서 SQL이 항상 ORM보다 낫다는 의미는 아니다. ORM을 사용하면 개발 속도가 빨라지고, 비즈니스 로직에 집중할 수 있어 SQL을 직접 사용하는 것보다 더 나은 결과를 얻을 수 있다. 그리고 간단한 프로젝트에서는 SQL을 지나치게 정교하게 작성하면 오버 엔지니어링의 위험이 있다는 생각이 들었다.
결국 중요한 것은 상황에 맞는 선택이다.
앞으로는 무작정 ORM만 고집하지 않고, 프로젝트 규모와 상황에 따라 SQL도 적극적으로 활용하며 균형 있게 사용해봐야겠다고 생각이 들었다