📌 ORM과 SP 비교
주제: ORM과 SP 비교
일단 ORM이랑 SP를 왜 비교함?
우리가 DB를 사용할 때는 쿼리문을 작성하여 DB에서 필요한 데이터를 가공해 받는다.
우리가 만든 프로그램에서 코드로서 쿼리를 받는 방법은 여러 가지가 있다.
ex) SQL Statements, SQL Mapper, Stored Procedure, Object-Relation Mapping
이 중, 현재 가장 보편적으로 활용되는 SP와 ORM을 비교분석해보고자 한다.
저장 프로시저, Stored Procedure
저장 프로시저는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다.
DB 내부적으로 쿼리문을 저장하여 여러 비즈니스 쿼리문을 하나의 프로시저로 호출하여 활용 가능하다.
내부적으로 저장하기 때문에 DB단과 백단의 분리가 더욱 크게 느껴질 수 있다.
장점
- 쿼리가 DB에 저장되어 있어 보안성이 좋다.
- 호출 시 프로시저 명만 사용하기 때문에 네트워크 트래픽이 적다.
- 실행 속도가 비교적 빠르다.
단점
- DBMS에 의존적이다.
객체관계 맵핑 프레임워크, Object-Relation Mapping
ORM은 객체와 DBMS의 데이터를 자동으로 매핑해준다.
즉, 객체 하나를 DB의 Row 한 줄로 다룰 수 있다. ex) Hibernate, Entity Framework, Spring JPA
장점
- DB의 종류에 독립적이다.
- 쿼리를 별도로 작성할 필요가 없다.
- 생산성이 좋다.
단점
- ORM으로만 로직을 구현하는 것에는 한계가 있다.
ORM vs SP
최근의 관점에서는 생산성의 이점으로 SP보다 ORM을 선호하는 추세라고 한다.
ORM이 SP에 비해 장점을 가지는 것은 아래와 같다.
ORM이 SP보다 뛰어난 것
- 비즈니스 로직을 DB가 아닌 프로그램 코드에 모으기 때문에, 로직의 파편화가 적어진다.
- DB와의 상호작용 역시 테스트가 필요한데, 저장 프로시저에 비해 테스트 구성이 쉽다.
- Git과 같은 버전 관리 시스템에서 관리가 편하며, 이력 추적이 용이하다.
- DB 종류에 독립적이기 때문에 특정 DB만을 사용해야 할 이유가 적어진다.
- 추상화가 잘 되어 있으며, 개발자가 상대적으로 DB에 대한 지식이 적어도 된다.
- 로직의 재사용성이 증가하고, 유지보수가 쉽다.
- 기존 CI/CD 파이프라인을 사용하여 배포 관리가 가능하다.
반대로 SP가 ORM에 비해 장점을 가지는 것은 아래와 같다.
SP가 ORM보다 뛰어난 것
- 쿼리가 아닌 프로시저명을 받기 때문에 상대적으로 네트워크 트래픽이 적다.
- DB에서 로직을 직접 실행시키기 때문에 속도가 매우 빠르다.
- 특정 DB에서 제공하는 세밀한 기능들을 직접 사용할 수 있다.
- DB 로직만 수정할 경우, 컴파일이 필요없이 바로 데이터베이스에 업데이트할 수 있다.
- 디버깅이 쉽다.
그렇다면 뭘 선택해야 할까?
팀에 DBA가 존재하는 경우, SP를 사용하여 백단과 DB단을 나누는 것이 유리하다.
생산성적인 측면에서는 ORM이 강력하지만, 기능적인 측면에서는 SP가 유리하기 때문에
팀 내부에 DBA가 있다면, DBA에게 쿼리문을 관리하게 하여 유리하게 개발할 수 있기 때문이다.
출처
https://kayuse88.github.io/database-logic/
https://gmlwjd9405.github.io/2019/02/01/orm.html
https://ko.wikipedia.org/wiki/%EC%A0%80%EC%9E%A5_%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80