NodeJS 에서 RAW 쿼리를 사용하지 말아야할 이유들
여전히 raw 쿼리가 익숙한가요?
  • Backend
  1. Query Injection
    개발자라면 누구나 실수를 할 수 있습니다. 이는 Code Review에 더 많은 리소스를 낭비하게 하는 원인이 됩니다.
`select * from book where id = ${id} and userId = ${userId}`;

==>

cosnt sql = `select * from book where id = ? and userId = ?`;
connection.query(sql, [id, userId]);

와 같이 사용해야 바람직합니다.

  1. SQL 명령의 오타
    문자열로 사용되는 특성상 오타를 코드 빌드 레벨에서 잡아낼 수 없습니다. (테스트 없이 배포된 코드가 런타임까지 올라갈 수 있습니다.)
selec * from book;
  1. 쿼리 확장
    이미 개발된 쿼리 문서 기능을 확장하고자 할 때가 있습니다. Raw Query는 확장은 가능하지만 이를 더욱 어렵게 합니다.

  2. 변수명의 검사에 많은 리소스가 든다.
    update 와 같은 쿼리에서 변수의 존재 여부 검사에 많은 리소스가 필요합니다.

let q = '';

if (name) {
    q += `,set name = ${name}`;
}

if (age) {
    q += `,set age = ${age}`;
}

if (phone) {
    q += `,set phone = ${phone}`;
}

`update ${q} where ...;`
  1. 특정 데이터베이스에 종속된다.
    Raw Query를 사용하다가 다른 데이터베이스를 사용하게 된다면 모든 쿼리를 다시 수정 및 개발해야 합니다.

  2. 코드의 재활용이 어렵다.
    이미 만들어진 코드를 사용해 트랜잭션을 묶을 때 간단하게 처리되지 않는 문제들이 있습니다.