js는 코드를 작성한 순서대로 처리(동기 처리)하는데, 백엔드 개발에서는 네트워크 상황이나 자료 크기에 따라 비동기 처리가 필요할 때가 있다.
비동기 프로그래밍 vs 비동기 처리
처음 이 부분을 공부했을 때 비동기 프로그래밍과 비동기 처리의 용어가 헷갈렸다.
function displayA() {
console.log('A');
}
function displayB() {
setTimeout(() => {
console.log('B');
}, 2000);
}
function displayC() {
console.log('C');
}
displayA();
displayB();
displayC();
먼저 끝낼 수 있는 코드를 먼저 끝내는 것이 비동기 프로그래밍 방식이다.

setTimeout()을 활용한 비동기 처리 예제를 실행하던 중 자꾸 터미널에 결과가 안 떠서 왜일까 싶었는데
cd를 끝까지 안했었다..
내가 원하는 폴더까지 제대로 cd했는지 똑바로 확인하기!
function displayA() {
console.log('A');
}
function displayB(callback) {
setTimeout(() => {
console.log('B');
callback();
}, 2000);
}
function displayC() {
console.log('C');
}
displayA();
displayB(displayC);
위 결과의 코드이다.
setTimeout() 함수가 섞여있지만 함수들을 원하는 처리 순서게 맞게 프로그래밍 하는 것을 비동기 처리라고 한다.
다시 말해, 먼저 끝낼 수 있지만 먼저 끝내지 않는것을 비동기 처리라고 한다!
활용
비동기 처리는 다음과 같이 활용된다.
const getAllContacts = asyncHandler(async (req, res) => {
const contacts = await Contact.find();
res.render("index", { contacts: contacts })
});
이 코드는 Express프레임워크에서의 비동기 함수를 다룬다.
여기서 'asyncHandler'는 미들웨어 함수로 사용되며, 에러 핸들링을 담당한다. 이 함수는 비동기 작업에서 발생하는 에러를 캐치하여 Express의 내장된 에러 핸들링 미들웨어로 전달한다.
(express 프레임워크, 미들웨어 등은 후에 다루겠다.)
getAllContacts 는 비동기 함수로, async 키워드로 표시된다.
Contact.find() 메서드를 사용하여 MongoDB의 'contacts' 컬렉션에서 모든 연락처를 찾는다.
await 키워드를 사용하여 데이터베이스에서 연락처를 가져올 때까지 기다린다. ( → 먼저 끝낼 수 있지만 먼저 끝내지 않는 비동기 처리). 이후, 가져온 연락처를 contacts 변수에 할당한다.
'백엔드 > Node.js' 카테고리의 다른 글
[Do it! Node.js 입문] 06. IP 주소와 포트 (0) | 2024.03.25 |
---|---|
[Do it! Node.js 입문] 05. HTTP 이해하기 (0) | 2024.03.25 |
[Do it! Node.js 입문] 04. 버퍼와 스트림 (0) | 2024.03.25 |
[Do it! Node.js 입문] 03. 파일 관리하기 (0) | 2024.03.25 |
[Do it! Node.js 입문] 01. 용어 정리 (0) | 2024.03.25 |