2024.01.10(수)
비동기 작업의 최종 완료 또는 실패를 나타내는 객체
비동기 작업이 끝날 때까지 결과를 기다리는 것이 아니라, 결과를 제공하겠다는 '약속'을 반환한다는 의미
비동기 작업 개수가 많아지면 코드의 깊이가 깊어질 수 있는데(callback hell) Promise를 사용하면 mathod chaining으로 깔끔하게 처리 가능
resolve()
를 호출하면 .then()
으로 이어지고 resolve()
함수의 매개변수 값이 then
method의 callback function의 인자로 들어감reject()
를 호출하면 .catch()
로 이어지고 reject()
함수의 매개변수 값이 catch
method의 callback function의 인자로 들어감const myPromise = new Promise((resolve, reject) => { // resolve는 성공했을 때 callback 함수, reject는 실패했을 때 callback 함수 (이름은 자유)
// 비동기 작업 수행
const data = fetch('서버로부터 요청할 URL');
if(data)
resolve(data); // 만일 요청이 성공하여 데이터가 있다면 -> then으로 받아올 수 있음
else
reject("Error"); // 만일 요청이 실패하여 데이터가 없다면 -> catch로 받아올 수 있음
})
물론 method chaining 너무 많아지면 가독성이 떨어짐(Promise Hell)😅
Promise를 사용하고 있는 비동기 함수를 동기 함수처럼 사용할 수 있게 해주는 도구
async function
으로 만들면 어떤 값을 리턴하든 무조건 Promise 객체로 감싸져 반환then
& catch
handler 사용 가능await
를 사용하기 위한 선언문Promise.then()
을 더 쉽게 사용할 수 있게 해주는 문법await
만 명시해주고 결과값을 변수에 받도록 코드를 정의then
과 callback function을 남발하여 코드가 들여쓰기로 깊어지는 것을 방지하고, 한 줄 레벨에서 코드를 나열하여 가독성을 높일 수 있음import mysql from 'mysql2/promise';
createConnection
vs createPool
createConnection 🔗
![]() |
---|
이미지 출처: https://velog.io/@leitmotif/createConnection-vs-createPool |
createPool 🔗
![]() |
---|
이미지 출처: https://velog.io/@leitmotif/createConnection-vs-createPool |
미리 일정량의 connection을 Pool에 저장해두었다가 request마다 connection을 대여 & 반납
connection 객체는 초기에 생성되고 계속 연결되어 있음
connection 객체마다 메모리를 차지하기 때문에 connection 개수(connectionLimit
)를 적절하게 설정해야함
➕ Note
The pool does not create all connections upfront but creates them on demand until the connection limit is reached.
createPool
Promise 사용 예시import mysql from 'mysql2/promise';
try {
const pool = mysql.createPool('mysql://root:password@localhost:3306/test');
const connection = await pool.getConnection();
// ... some query
connection.release(); // 반드시 사용이 끝나면 connection을 반납해야 함!
} catch (err) {
console.log(err);
}
(pool.end()
로 모든 연결을 종료할 수 있음)
이번 주에 전체적인 code refactoring을 할 예정이다. 머리가 좀 아프지만 깔끔하게 정리해야 나중에 편하니까..🫠