복잡한 하나의 쿼리? 단순한 여러개의 쿼리?
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번의 생각을 가지고 최대한 하나의 쿼리로 묶은 다음에 너무 복잡한 쿼리는 일부분씩 간단한 쿼리로 나눠서 처리하였다. 그렇기 때문에 대부분의 쿼리는 ORM이 아닌 로우쿼리로 작업하게 되었다.