- 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]);와 같이 사용해야 바람직합니다.
- SQL 명령의 오타
문자열로 사용되는 특성상 오타를 코드 빌드 레벨에서 잡아낼 수 없습니다. (테스트 없이 배포된 코드가 런타임까지 올라갈 수 있습니다.)
selec * from book;-
쿼리 확장
이미 개발된 쿼리 문서 기능을 확장하고자 할 때가 있습니다. Raw Query는 확장은 가능하지만 이를 더욱 어렵게 합니다. -
변수명의 검사에 많은 리소스가 든다.
update 와 같은 쿼리에서 변수의 존재 여부 검사에 많은 리소스가 필요합니다.
let q = '';
if (name) {
q += `,set name = ${name}`;
}
if (age) {
q += `,set age = ${age}`;
}
if (phone) {
q += `,set phone = ${phone}`;
}
`update ${q} where ...;`-
특정 데이터베이스에 종속된다.
Raw Query를 사용하다가 다른 데이터베이스를 사용하게 된다면 모든 쿼리를 다시 수정 및 개발해야 합니다. -
코드의 재활용이 어렵다.
이미 만들어진 코드를 사용해 트랜잭션을 묶을 때 간단하게 처리되지 않는 문제들이 있습니다.