본문 바로가기
개발/Node.js

[Node.js] Raw Query

by WaDDak 2024. 9. 11.

Raw Query는 데이터베이스에 **SQL(Structured Query Language)**을 이용하여 직접 쿼리(Query)를 요청하는 것을 뜻합니다.

 

Raw Query는 이전에 배웠던 SQL을 Node.js에서 사용하여 데이터베이스에 쿼리(Query)를 요청할 수 있는 방법입니다. SQL만 알고 있더라도 다양한 데이터베이스에 연결하여 테이블을 생성하거나 데이터를 조회하는 등 다양하게 데이터베이스와 상호작용을 할 수 있습니다.

더불어, 엄청나게 긴 쿼리를 수행하거나 트랜잭션을 직접적으로 관리하는 등 데이터베이스가 지원하는 대다수의 기능을 SQL만으로 간편하게 사용할 수 있는 아주 엄청난 장점을 가지고 있습니다.

 

아래는 Raw Query를 이용하여 API를 생성한 목록들이다.

// 테이블 생성
app.post('/api/tables', async(req, res, next) => {
  const {tableName} = req.body;

  connect.promise().query(`
    CREATE TABLE ${tableName}
    (
      id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      name varchar(255) NOT NULL,
      createdAt DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
    )
  `)
  return res.status(201).json({message: "테이블 생성에 성공하였습니다."});
});

// 테이블 조회
app.get("/api/tables", async(req, res, next) => {
  const [tableList] = await connect.promise().query(`
      SHOW TABLES
  `)
  const tableName = tableList.map(table => Object.values(table)[0]);

  return res.status(200).json({tableList: tableName});
});

// 데이터 삽입
app.post("/api/tables/:tableName/items", async(req, res, next) => {
  const {tableName} = req.params;
  const {name} = req.body;

  await connect.promise().query(`
    INSERT INTO ?? (name)
    VALUES (?)
  `, [tableName, name]);

  return res.status(201).json({message: "데이터 생성에 성공하였습니다."});
});

// 데이터 조회
app.get("/api/tables/:tableName/items", async(req, res, next) => {
  const {tableName} = req.params;

  const [itemList] = await connect.promise().query(`
    SELECT id, name, createdAt
    FROM ??
  `, [tableName]);

  return res.status(200).json({itemList: itemList});
});

 

 

하지만 Raw Query는 데이터베이스에 직접 요청을 하기 때문에 보안에 취약하게 된다.

SQL 인잭션이라고도 하는 문제가 발생하게된다.

 

또한 SELECT createdAt에서 createdAt의 이름이 createDate로 변경이 된다면 해당 이름을 사용하던 모든 코드를 하나도 빠짐없이 변경해야하는데 그건 쉽지않은일이다.

 

때문에 이를 해결하기위해 ORM 이라는 기술이 생겨났다.

ORM은 Node.js에서 SQL을 직접 작성하지 않고, JS만으로 데이터베이스를 조작할 수 있게 되어 코드의 유지보수성이 증가하게 되고, 최종적으로 더욱 객체지향적인 프로그래밍을 가능하게 만들어주는 기술이다.

 

ORM의 대표로는 Prisma가 있고 나는 Prisma를 이용해볼 예정이다.

 

빠르기는 Raw Qurey가 더 빠르다고는 하는 것 같다.

'개발 > Node.js' 카테고리의 다른 글

[Node.js] 파라미터  (0) 2024.09.12
[Node.js] HTTP 상태 코드  (0) 2024.09.11
[Node.js] 데이터베이스와 MongoDB  (0) 2024.09.05
[Node.js] Request 와 Response  (0) 2024.09.02
[Node.js] Routing 및 Router  (0) 2024.09.02