2024.01.10 TIL

Oneik·2024년 1월 10일
0

📕 오늘 학습한 내용

  • BULK INSERT
  • 비동기 처리

BULK INSERT

mysql2에서 여러개의 데이터를 한번에 INSERT할 때 사용한다.

    sql = `INSERT INTO orderedBook (order_id, book_id, quantity) VALUES ?;`;

    // cartItems 는 배열. 요소들을 하나씩 꺼내서(forEach 사용)
    values = [];
    cartItems.forEach((cartItem) => {
        values.push([order_id, cartItem.book_id, cartItem.quantity]);
    });

    conn.query(sql, [values], (err, results) => {
        if (err) return handleQueryError(err, res);

        return res.status(StatusCodes.OK).json(results);
    });
  • sql 구문에서 다중으로 데이터를 삽입하는 부분에 ? 를 작성한다.
  • 이차원 배열인 values안에 삽입할 데이터들이 배열로 저장되어 있음을 명시하기 위해 []로 감싼 후 query에 넣어준다.

비동기 처리

현재 실행하고 있는 작업이 완료될때까지 기다리지 않고, 다른 작업을 수행하는 것을 말한다.

데이터베이스에 데이터를 INSERT했으나 비동기로 처리되기 때문에, INSERT되기 전에 다른 작업을 실행하는 문제가 발생했다.

비동기 처리 방법

  1. 콜백 함수
  2. Promise
  3. async / await

1. 콜백 함수

전통적인 방식이다. 비동기 작업을 순차적으로 수행해야 할 때, 콜백 함수가 중첩되어 코드의 깊이가 깊어지는 콜백 지옥(callback hell)이 발생한다.

2. Promise

Promise 객체는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체이다.

let myPromise = new Promise(function (resolve, reject) {
    setTimeout(() => resolve('완료!'), 3000);
});

myPromise.then(
    function (result) {
        console.log(result);
    },
    function (error) {
    	console.log(error);
    }
);
  • Promise 객체의 executor는 resolve, reject 두 개의 인자를 받는다
  • Promise 객체의 매개변수인 콜백함수가 이행됐다면 resolve 호출하고, 거부됐다면 reject 호출한다.
  • .then()으로 Promise의 결과 값을 확인할 수 있다
myPromise.then(
    function (result) {
        console.log(result);
      	return result + '!!';
    }
).then(
    function (result) {
        console.log(result);
        return result + '!!';
    }
).then(
    function (result) {
        console.log(result);
    }
)
/*
완료!
완료!!!
완료!!!!!
*/
  • 프로미스 체이닝(Promise Chaning)으로 여러 개의 비동기 작업을 순차적으로 수행할 수 있다.

3. async / await

Promise 객체를 좀 더 편하게 사용할 수 있게 해주는 문법이다.

function getApple() {
  return new Promise( (resolve, reject) => {
    setTimeout(() => resolve("apple"), 1000);
  })
}

async function getFruites() {
  let apple = await getApple(); 
  console.log(apple)
})

// apple
  • async를 이용하여 함수를 감싸준다.
  • async로 감싸진 함수는 Promise 객체를 반환한다.
  • await은 .then()과 같은 역할을 한다.
  • 즉, 결과값을 변수에 저장할 수 있다.
  • async로 감싼 함수 안에서만 await을 사용할 수 있고, 여러개의 await을 사용해 비동기 작업을 순차적으로 수행할 수 있다.
profile
초보 개발자의 블로그입니다

0개의 댓글

관련 채용 정보