??? : ㅋㅋ SQL 왜 배우냐? ORM 쓰면 되는데

조재민·2025년 5월 19일

배경

"??? : ㅋㅋ SQL 왜 배우냐? ORM 쓰면 되는데" 이렇게 말하는 거 들어보시지 않으셨나요? 저희들이 농담삼아 많이 하는 말인데요. 이러면서 누구에게 가르쳐 줄 때는 SQL을 반드시 배우라고 조언을 해줍니다. 그럼 왜 그런지 알아보도록 하겠습니다.

SQL과 ORM

SQL이란?

Structured Query Language의 약자로, 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계한 특수 목적의 프로그래밍 언어입니다.

ORM이란?

Object Relational Mapping의 약자로, 객체와 데이터베이스를 연결해 주는 도구입니다. 프로그래밍 언어의 객체와 관계형 데이터베이스 사이의 중계자 역할을 합니다.

ORM의 장점은?

  1. 객체 지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중할 수 있게 도와준다.
  2. SQL Query가 아닌 메서드로 데이터를 조작할 수 있어 개발자가 객체 모델로 프로그래밍하는 데 집중할 수 있도록 도와준다.

ORM의 단점과 한계점은?

  1. 성능 문제 - 비효율적인 쿼리를 날릴 수 있습니다. N + 1 문제와 같이 연관 데이터를 조회할 때, 불필요하게 많은 쿼리가 실행되어 성능 저하를 일으킬 수 있습니다.

  2. 런타임 오류 가능성 - ORM은 내부적으로 SQL을 자동 생성하므로, 직접적인 SQL 작성이 줄어드는 대신 컴파일 시점에 쿼리 오류를 확인하기 어렵습니다.

  3. ORM 프레임워크 자체의 복잡성 - ORM은 초보자에게는 SQL 쓰지 않아 쉽게 느껴질 수 있지만, 고급 기능을 제대로 이해하지 못하면 버그나 성능 저하를 발생시킵니다.

ORM만 사용하면 어떻게 될까?

편리해 보이지만, 복잡한 통계 쿼리, 성능이 중요한 대용량 조회 등에서는 오히려 비효율적인 방식이 될 수 있습니다.

SQL만 사용하면 어떻게 될까?

쿼리 작성시에 오류를 즉각 알 수 있고, 성능을 최적화 할 수 있습니다. 하지만 기본적인 CURD 작업에도 일일이 쿼리를 작성해야 한다는 단점이 생산성을 저하시키고 코드 중복을 초래할 수 있습니다.

SQL과 ORM을 균형있게 활용하자

ORM이 이러한 문제를 가졌기에 ORM과 SQL을 같이 사용하며 성능 문제, 런타임 오류 가능성과 같은 문제점을 해결할 수 있다.

균형있게 사용하기 위한 방법

  1. 복잡한 쿼리나 성능이 중요한 부분은 SQL로 처리합니다.
  2. 간단한 CURD, 혹은 성능이 중요하지 않은 부분은 ORM으로 처리해도 됩니다.
  3. ORM과 SQL을 같이 사용합니다. 보통 ORM은 직접 쿼리를 날리는 기능도 메서드로 구현되어 있어 직접 SQL을 실행할 수 있습니다.

글을 쓴 나의 생각

저는 Spring의 ORM인 JPA를 사용해 본 경험이 있습니다.
초기에는 어떻게 메서드를 정의해야 할지 몰라 CustomRepository를 직접 만들어 쓰기도 했고, JPQL 메서드 이름을 잘못 작성해서 원하는 쿼리가 생성되지 않아 한참을 헤맨 적도 있습니다.
특히 update를 할 때, JPA가 해당 레코드를 삭제하고 새로 생성해버리는 바람에 오류가 났고, 그 원인을 찾느라 이틀 이상 고민했던 기억이 납니다.
이처럼 JPA는 분명 강력한 도구지만, 내부 동작을 정확히 이해하지 않으면 예상치 못한 버그로 이어질 수 있습니다.
결국 저는 SQL을 어느 정도 알고 있었기에 이 문제를 해결할 수 있었고,
그래서 지금도 복잡한 상황에서는 SQL을 더 선호합니다.

참고자료

https://ko.wikipedia.org/wiki/SQL
https://gmlwjd9405.github.io/2019/02/01/orm.html

profile
Backend Developer

0개의 댓글