Spring에서 JPA를 사용해본 경험이 있다면, ORM에 대해 들어본 경험이 있을것이라고 생각됩니다.
이전에 Go 언어를 사용해 개발을 할 때에도 GORM을 사용했었는데요,
그러던 도중 ORM은 개발자의 편의와 DBMS에 독립적이라는 점 외에 어떠한 이점이 있는 것인지가 궁금해졌습니다.
과연 성능적인 측면에서도 이점이 있을까요? 만약 그렇지 않다면 어떤 경우에 SQL을 쓰고 어떤 경우 ORM을 쓰는게 좋을지 궁금해져서 해당 글을 작성하게 되었습니다.
저의 경우 조건이 많이 붙는 쿼리가 아니라면 대체로 ORM을 사용해 왔는데 문득 왜?
라는 생각이 들었습니다. 너무도 당연하게 사용했던거죠...! 🥲
먼저 그러면 우리가 알고 있는 ORM의 장점부터 하나씩 살펴봅시다.
실제로 DBMS의 종류를 바꾸기 위해 데이터를 마이그레이션 하는것은 엄청난 공수가 든다는 것을 실제로 인턴쉽을 하면서 알았습니다. 따라서 '데이터 정합성'을 유지할 수 있고 'SQL 문법의 변경 불필요' 하다는 점은 엄청난 장점이 될 수 있겠네요.
개인적으로 소규모 프로젝트를 할 때에는 개발 생산성 측면에서는 큰 장점이 있었지만, 회사에서 많은 관계를 가진 ERD를 설계, 구현 할 때는 실제로 SQL을 많이 사용했었는데요, 해당 장점은 규모에 따라 선택적인 장점이 될 수도 있겠다는 생각이 듭니다.
ORM을 사용하게 된다면 가독성을 높일 수 있다는 점에는 동의합니다. 그렇지만 반대로 하나의 결과를 내기 위한 일련의 단계를 살펴보는데에 어려움이 있어 해당 함수 내에서 문제가 발생한 부분을 찾기 어렵다는 부작용도 존재합니다. 이점에서 장점도, 단점도 존재한다고 생각합니다.
ORM으로 데이터를 처리하는게 SQL을 활용하는 것보다 성능이 월등히 떨어진다고 합니다. (ORM 내부적으로 SQL 로 변환하는 과정을 거치며, 조인이 많아질 수록 성능은 기하급수적으로 감소합니다). 또한 튜닝이 필요한 시점에는 결국 다시 SQL로 작성해야 하는 단점이 있습니다. 그래서 복잡한 쿼리는 SQL을 이용하는게 아닐까요??
이렇게 ORM도 장점만 존재하는게 아니기 때문에 SQL과 ORM을 적절하게 사용할 필요가 있다는 생각이 듭니다.
실제로 OLTP와 OLAP 서비스에 따라 각각의 방법을 사용하는게 좋다고 하는데요, 아래 이어서 살펴보도록 합시다 😀
여러 과정의 연산이 하나의 단위 프로세스(트랜잭션)로 실행되도록 하는 프로세스로, 현재의 데이터 처리가 얼마나 정확하고, 무결한지가 중요합니다.
그렇기 때문에 주로 데이터의 저장, 삭제, 수정 등의 실질적인 데이터 수정하는 작업을 의미하고, 단순 CRUD가 많고 트래픽이 방대한 서비스에서 주로 사용됩니다.
대용량 데이터를 고속으로 처리하며 쉽고 다양한 관점에서 추출, 분석할 수 있도록 지원하는 데이터 분석 기술로, 이미 저장된 데이터를 바탕으로 어떤 정보를 제공하는지가 중요합니다.
따라서 OLAP는 데이터가 무결하고 정확하다는 전재를 바탕으로 고객 또는 사용자가 원하는 정보를 어떤식으로 표현하고 제공하는지를 의미하는 용어입니다.
제목 셀1 | OLTP | OLAP |
---|---|---|
목적 | 비즈니스 활동 지원 | 비즈니스 활동에 대한 평가,분석 |
주 트랜잭션 형태 | SELECT, INSERT, UPDATE, DELETE | SELECT |
속도 | 수초 이내 | 수초 이상 수분 이내 |
데이터 표현 시간 | 실시간 | 과거 |
관리단위 | 테이블 | 분석된 정보 |
최적화 방법 | 트랜잭션 효율화, 무결성의 극대화 | 조회 속도, 정보의 가치, 편의성 |
데이터의 특성 | 트랜잭션 중심 | 정보 중심 |
예시 | 회원정보 수정 상품주문 댓글 남기기 및 수정 | 1년간의 주요 인기 트랜드 한달간의 항목별 수입, 지출 10년간 A회사의 직급별 임금 상승률 |
위와 같이 단순한 사용자가 많고, 데이터의 조회가 많은 서비스의 경우에는 ORM,
데이터를 가공하고 분석해야하는 시스템에는 SQL이 더 적합하다고 생각이 드네요!
필요에 맞게 적절히 판단하여 사용해야 할 것 같습니다.
다른 의견이 있으시거나 내용에 틀린 부분이 있다면 자유롭게 피드백 부탁드립니다 🙌
ORM에 대해 찾아보다 덕분에 OLTP와 OLAP의 개념을 잡아갑니다. OLTP는 간단하고 반복적인 작업, OLAP는 데이터를 분석하는 작업에 사용되는거 같네요! 추가로 ORM의 장점은 객체지향 측면에서 자연스럽게 데이터를 다룰 수 있어서 정말 좋아요.