📌 ORM ?
프로젝트를 하다보면 데이터 베이스가 사용해야할 때가 온다.
하지만 프로그래밍은 데이터를 활용할 때 주로 객체를 사용하고 관계형 데이터베이스는 테이블을 사용하기 때문에 서로의 모델이 불일치하기에 활용하기 어렵다. 예를들어 나는 한국어를 사용하는데 상대방이 불어를 사용하면 서로의 커뮤니케이션이 어려워지는 것과 마찬가지다. 이 둘 사이를 매끄럽게 연결되도록 도와주는 역할을 하는게 바로 ORM이다.
관계형 데이터베이스는 테이블 형태로 데이터를 저장하고 검색하는 방식을 사용하고 객체 지향 프로그래밍은 객체라는 개념을 사용하여 데이터와 해당 데이터를 조작하는 메서드를 포함한다. ORM은 이러한 두 가지 다른 패러다임 사이에서 데이터를 변환하고 매핑하여 개발자가 데이터베이스를 직접 다르지 않고 객체를 사용하여 데이터베이스와 상호 작용할 수 있게 해준다.
ORM을 사용하면 개발자는 SQL(Structured Query Language)을 직접 작성하지 않고도 객체를 사용하여 데이터베이스에 접근할 수 있고, 객체와 테이블 사이의 매핑을 자동으로 처리하여 개발자가 데이터베이스 스키마를 변경해도 코드를 수정하지 않고도 데이터베이스에 접근할 수 있도록한다.
📌 ORM의 장점
1️⃣ 객체 지향적인 접근
ORM은 개발자가 객체 지향 프로그래밍 언어를 사용하여 데이터베이스에 접근할 수 있도록 해준다. 개발자는 SQL 쿼리를 직접 작성하는 대신 객체와 메서드를 사용하여 데이터를 조작할 수 있다. 이는 객체 지향 프로그래밍의 개념과 일관성을 유지하며 코드의 가독성을 향상시킨다.
2️⃣ 데이터베이스 독립성
ORM은 데이터베이스 종속성을 줄여준다. 개발자는 ORM 프레임워크를 사용하여 코드를 작성하고, ORM이 데이터베이스에 대한 쿼리와 연결을 처리한다. 따라서 데이터베이스를 변경하거나 전환해도 코드의 수정이 최소화되며, 이식성과 유지보수성을 향상시킨다.
3️⃣ 생산성 향상
ORM은 개발 생산성을 향상시킨다. SQL 쿼리를 작성하고 데이터베이스와 상호 작용하는 복잡한 작업을 개발자 대신 처리함으로써 개발시간을 단축시킨다. ORM은 CRUD 작업을 단순화하고, 데이터베이스 스키마 변경에 따른 코드 수정을 최소화하여 개발자가 보다 집중적으로 비즈니스 로직에 초점을 맞출 수 있도록 도와준다.
4️⃣ 보안 & 안정성
ORM은 SQL 인젝션과 같은 보안 취약점을 방지하는 데 도움이 된다. ORM은 입력 매개변수를 자동으로 이스케이프하고, 쿼리 파라미터화하여 악의적인 코드 삽입을 방지한다. 또한 ORM은 트랜잭션 관리를 간편하게 해주므로 데이터 일관성과 안정성을 유지하는 데 도움이 된다.
5️⃣ 테스트 용이성
ORM은 테스트 작업을 용이하게 만든다. 테스트 데이터를 쉽게 생성하고, 테스트용 데이터베이스를 사용하거나 메모리 내에서 동작하도록 설정할 수 있다. 이를 통해 단위 테스트, 통합 테스트, 자동화된 테스트를 보다 쉽게 구축할 수 있다.
📌 ORM의 단점
1️⃣ 성능 저하
ORM은 객체와 데이터베이스 간의 매핑과 변환 작업을 수행해야 하므로 일부 상황에서 성능 저하가 발생할 수 있다. 복잡한 쿼리나 대량의 데이터 처리와 같은 경우에는 직접 SQL을 작성하는 것이 ORM보다 더 효율적일 수 있다. 또한 ORM의 기본 설정이나 쿼리 작성 방법에 따라 성능에 영향을 미칠 수 있다.
2️⃣ 학습 곡선
ORM 프레임워크에 대한 학습이 필요하며, ORM의 작동 방식과 설정, 쿼리 작성 방법 등을 이해해야 한다.
3️⃣ 제한된 데이터베이스 지원
ORM은 다양한 데이터베이스 시스템을 지원하지만, 모든 데이터 베이스에 대해 완벽하게 호환되는 것은 아니다. 특정 데이터 베이스에서 지원하는 고유한 기능이나 문법을 ORM이 제대로 지원하지 못할 수 있다.
4️⃣ 복잡한 쿼리 작성의 제한
ORM은 일반적인 CRUD 작업에는 편리하지만, 복잡한 쿼리를 작성해야 하는 경우에는 ORM의 추상화 수준이 너무 높아 작업이 제한될 수 있다. 일부 ORM은 복잡한 조인, 서브쿼리, 집계 함수 등을 작성하기 어려울 수 있으며, 이러한 경우에는 원시 SQL 쿼리를 사용하는 것이 더 나은 선택일 수 있다.
5️⃣ 의존성 관리와 버전 호환성 : ORM 프레임워크는 종종 다른 라이브러리나 프레임워크와의 의존성을 가지고 있다. 이는 프로젝트의 의존성 관리를 복잡하게 만들 수 있고, ORM의 버전과 다른 라이브러리의 버전 호환성을 유지해야 하는 경우에 문제가 발생할 수 있다.
📚 마무리
ORM이 유용할 수 있지만 ORM을 도구로 보는 것이 중요하다. 모든 상황에서 유용한 것은 아니며 고려해야할 장단점을 따져 상황에 맞게 사용해야 한다. 즉 프로젝트의 요구 사항이 무엇인지, 소프트웨어를 구축할 때 리소스를 어떻게 사용하고 싶은지등을 잘 파악하고 사용해야한다.
[참고]
https://www.prisma.io/dataguide/types/relational/what-is-an-orm