반응형
이 포스팅은 아래의 강의를 참고한 개인 정리본이니 강의를 통해 공부하시는 것을 추천드립니다.
1. 동기 프로그래밍 vs 비동기 프로그래밍
동기 프로그래밍 : 어떤 작업을 요청하고 그 작업이 완료되어야 다음 작업을 진행하는 형식
비동기 프로그래밍 : 어떤 작업을 요청하고 그 작업이 완료되기도 전에 다음 작업을 진행하는 형식
Node.js의 기본인 JavaScript는 비동기 호출 방식의 언어이다.
2. 동기 프로그래밍으로 개발하는 방법
Node.js에서 동기 프로그래밍으로 개발하기 위해서 3가지 방법에 대해서 정리하도록 하겠다.
1) Callback
아래의 소스는 addSum 함수를 거친 후에 callback 함수로 넘겨준 후 결과 or 에러를 통해서 콜백 함수가 처리하는 방식이다.
const addSum = function(a, b, callback){
setTimeout(function(){
if(typeof a != "number" || typeof b != "number"){
return callback('a and b must be number');
}
callback(undefined, a+b);
}, 3000);
}
// 일반적인 callback 함수
let callback = (error, result) => {
if(error)
return console.log({error});
console.log({result});
}
addSum(10,20,callback);
addSum(10,'20',callback);
* callback 함수 안에서 성공 시, 다시 addSum을 호출 하는 방법
const addSum = function(a, b, callback){
setTimeout(function(){
if(typeof a != "number" || typeof b != "number"){
return callback('a and b must be number');
}
callback(undefined, a+b);
}, 3000);
}
// callback 함수 안에서 성공 시, 다시 addSum을 호출 하는 방법
// 아래처럼 다시 호출하려면 그만큼 깊게 계속 호출해야함 (변수이름도 바꿔줘야하므로 불편함)
addSum(10,20,(error, result) => {
if(error)
return console.log({error});
console.log({result});
addSum(result, 30, (error2, result2) => {
if(error2)
return console.log({error2});
console.log({result2});
});
});
2) Promise
아래의 소스는 addSum 함수를 거친 후에 Promise라는 함수에 결과값과 함께 보내주면 결과 or 에러를 처리할 수 있다.
const addSum = function(a, b){
// resolve : 응답이 성공했을 때
// reject : 응답이 실패했을 때
// resolve or reject 가 호출되면 해당 함수의 나머지 로직은 타지 않는다. (callback의 경우는 return 해주지 않으면 나머지 로직을 탐)
return new Promise((resolve, reject) => {
setTimeout(() => {
// a,b는 숫자만 인자로 받을 수 있다.
if(typeof a != 'number' || typeof b != 'number'){
reject('a and b must be number');
}
resolve(a+b);
}, 3000);
})
}
// 일반적인 promise 함수
addSum(10,20)
.then(result => console.log({result}))
.catch(error => console.log({error}));
* Promise 내에서 성공 시, 다시 addSum을 호출 하는 방법
const addSum = function(a, b){
// resolve : 응답이 성공했을 때
// reject : 응답이 실패했을 때
// resolve or reject 가 호출되면 해당 함수의 나머지 로직은 타지 않는다. (callback의 경우는 return 해주지 않으면 나머지 로직을 탐)
return new Promise((resolve, reject) => {
setTimeout(() => {
// a,b는 숫자만 인자로 받을 수 있다.
if(typeof a != 'number' || typeof b != 'number'){
reject('a and b must be number');
}
resolve(a+b);
}, 3000);
})
}
// Promise 내에서 재호출 방법
addSum(10,20)
.then(result => {
console.log({result});
return addSum(result, 30);
})
.then(result2 => console.log({result2}))
.catch(error => console.log({error}));
3) Await
아래의 소스처럼 await를 이용해서 간단하게 동기 처리를 할 수 있다.
const addSum = function(a, b){
// resolve : 응답이 성공했을 때
// reject : 응답이 실패했을 때
// resolve or reject 가 호출되면 해당 함수의 나머지 로직은 타지 않는다. (callback의 경우는 return 해주지 않으면 나머지 로직을 탐)
return new Promise((resolve, reject) => {
setTimeout(() => {
// a,b는 숫자만 인자로 받을 수 있다.
if(typeof a != 'number' || typeof b != 'number'){
reject('a and b must be number');
}
resolve(a+b);
}, 3000);
})
}
// await를 이용한 재호출
const totalSum = async() => {
try{
let sum = await addSum(10,10);
let sum2 = await addSum(sum, 10);
console.log({sum, sum2});
}catch(err){
if(err)
console.log(err);
}
}
totalSum();
이것으로, node.js의 동기 프로그래밍 방법을 간단하게나마 알아봤으니, 다음에는 이 동기 방식으로 DB에 접근하는 것을 공부해보겠다.
반응형
'DB > MongoDB' 카테고리의 다른 글
[MongoDB 기초부터 실무까지] 6. Board API 만들기 및 라우터 안에 라우터 파라미터 사용 방법 (0) | 2022.08.05 |
---|---|
[MongoDB 기초부터 실무까지] 5. Node.js로 MongoDB 접근해보기 (0) | 2022.08.01 |
[MongoDB 기초부터 실무까지] 3. Node.js 환경 세팅 및 REST API 만들기 (0) | 2022.07.25 |
[MongoDB 기초부터 실무까지] 2. 데이터 간단하게 조작해보기 (0) | 2022.07.23 |
[MongoDB 기초부터 실무까지] 1. MongoDB 설치 (0) | 2022.07.20 |