본문 바로가기
Dev. Cookbook/Javascript

[Node, NPM] SQL Bricks, JavaScript로 SQL 구문을 생성하는 패키지

by breezyday 2023. 11. 26.

Node 환경에서 Axios를 사용해서 데이터를 크롤링하고서 이 데이터를 어떻게 처리할까 고민할 일이 있었습니다. 이 데이터를 DB로 옮겨야 하는데 어떤 방법이 좋을까 고민하다가 Spring Boot 환경에서 실행 시 데이터를 로드하는 방법이 있어서 SQL문으로 변환하는 방법이 필요했습니다. 직접 생성하는 방법도 있지만, 이미 만들어진 패키지가 있지 않을까 검색해 봤습니다.


1. 패키지 검색

https://www.npmjs.com

http://www.npmjs.com 홈페이지 화면

 

 

Node 패키지를 검색할 수 있는 홈페이지 가운데 하나입니다.

 

여기서 검색어로 'generate sql'로 찾은 패키지입니다.

https://www.npmjs.com/search?q=generate%20sql

2. SQL Bricks.js

https://www.npmjs.com/package/sql-bricks

https://www.npmjs.com/package/sql-bricks, SQL Bricks 소개 화면

 

 

바로 SQL 구문을 생성해 주는 패키지가 몇 개 있었습니다만, 가장 직관적으로 사용할 수 있는 패키지라서 골랐습니다. 기본적인 사용방법은 아래와 같습니다.

 

import sql from "sql-bricks";

var select = sql.select;

select().from('person').where({last_name: 'Rubble'}).toString();
// "SELECT * FROM person WHERE last_name = 'Rubble'"​

 

제공하는 함수들로 sql 문을 구성하고 파라미터로 객체를 생성하여 전달한 다음 마지막에 toString() 함수를 호출하면 SQL구문을 생성해 줍니다.

저는 제가 가져온 데이터를 저장할 insert 문이 필요해서 아래와 같이 사용하였습니다.

 

 

import fs from "fs";
import sql from "sql-bricks";

const insert = sql.insert;

/*  
 *    create or load lectureList : 객체 리스트, 3개의 속성을 가짐
 *     - [ {lectId: '', lectureTitle: '' , intro: ''}, ... ]
 * 
 *    function handleFSError() { ... }
 */
const filename = "lecture.sql";

fs.writeFile(filename, "", handleFSError); // 빈 파일 생성

lectureList.map((lecture) => {
  // INSERT INTO lecture (lecture_id, title, introduction, created_at, updated_at)
  // 컬럼명(속성명), 값으로 객체를 생성
  const sqlInsert = insert("lecture", {
                          // 테이블명 
    lecture_id: lecture.lectId,
    title: lecture.lectureTitle,
    introduction: null,       // 임시로 빈 값을 전달
    created_at: sql("now()"), // 함수를 값으로 전달하려면 sql() 함수를 사용
    updated_at: sql("now()"),
  });

  fs.appendFile(
    filename,
    sqlInsert.toString() + ";\r\n", // toString 함수로 문자열로 변환, 줄바꿈 추가
    handleFSError
  );
});

 

-- 생성된 SQL 구문
INSERT INTO lecture (lecture_id, title, introduction, created_at, updated_at) VALUES ('87', '진화와 정신장애', null, now(), now());
INSERT INTO lecture (lecture_id, title, introduction, created_at, updated_at) VALUES ('86', '인간 이하의 존재', null, now(), now());
INSERT INTO lecture (lecture_id, title, introduction, created_at, updated_at) VALUES ('85', '종이의 건축가', null, now(), now());
   ...

 

보다 상세한 사용법은 아래 홈페이지에 있습니다.

 

https://csnw.github.io/sql-bricks/

 

다른 시스템으로 소량의 데이터를 이전하기 위해서 여러 방법이 있겠지만, 간단하게 SQL 구문을 생성해 직접 Load 하는 방법도 괜찮다고 생각합니다.

 

 

 

 

 

댓글