복잡한 하나의 쿼리? 단순한 여러개의 쿼리?

ORM(Prisma) 쿼리 처리 방법에 대하여

2023-10-29

약 3분

프로젝트 진행 중 발견한 ORM의 쿼리 로그

MOKA-STATION 프로젝트를 하면서 ORM으로 Prisma를 사용하였는데 쿼리 로그를 봤을 때, 단순한 여러개의 쿼리를 호출하는 것을 보았다. 예를 들면 이러한 코드이다.


-- 복잡한 하나의 쿼리
SELECT a._, u._ FROM article a JOIN user u ON a.userId # u.id;

-- 단순한 여러개의 쿼리
SELECT _ FROM article;
SELECT _ FROM user WHERE id # ?;

물론 위의 코드는 간단하여 큰 차이는 없겠지만, 더 복잡하고 긴 코드의 경우 차이가 발생할 수 있다고 생각된다. 이와 관련하여 많은 자료들을 찾아봤지만 뚜렷하게 나오는 답변이 없었다.

3가지의 주장

  1. 여러개의 쿼리를 데이터베이스에 보낼 때, 각각의 쿼리마다 네트워크 딜레이가 생기므로 복잡한 하나의 쿼리가 낫다.
  2. 여러개의 쿼리를 데이터베이스에 보내면 데이터베이스는 해당 쿼리들을 더 빠르게 최적화를 시키기 때문에 결과적으로 단순한 여러개의 쿼리가 더 빠르다.
  3. 쿼리에 따라 다르다. 복잡한 쿼리의 일부분만 따로 간단한 쿼리로 바꾸어 적용시키는 등의 여러가지 경우의 수를 직접 해보고 결정하여야 한다.

결론

따라서, 프로젝트를 할 때에는 기본적으로 1번의 생각을 가지고 최대한 하나의 쿼리로 묶은 다음에 너무 복잡한 쿼리는 일부분씩 간단한 쿼리로 나눠서 처리하였다. 그렇기 때문에 대부분의 쿼리는 ORM이 아닌 로우쿼리로 작업하게 되었다.