안녕하세요! 효그니에요! 와! 샌즈! 오늘은 동기와 비동기에 대해 알아볼 예정이에요!
그나저나... 요새 날씨가 많이 추워진 듯 하네요 하핳! 묵혀둔 코트를 입을 때가 온 듯 해요!
뭐 암튼.. 각설하고 여튼 째뜬 시작해볼까요?
동기 / 비동기란?
비동기란 특정 동작이 끝나지 않아도 다음 동작을 먼저 실행하는 자바스크립트의 특성입니다!
그럼 동기는 반대로 특정 동작이 끝나기 전에 다음 동작을 먼저 실행하지 않는 것이겠죠?
예를 하나 들어볼게요!
app.get('/', (req, res) => {
console.log('1');
setTimeout(() => console.log('2'), 1000);
console.log('3');
});
setTimeout는 인자 값으로 들어간 함수를 뒤의 시간 만큼 기다린 뒤 실행하는 함수입니다!
예상 동작은 1, ( 1초 기다린 뒤 ) 2, 3 이셨겠지만,
3이 먼저 출력되고, 그 다음 다음에 2가 나오는 모습을 볼 수 있습니다!
setTimeout의 동작이 끝나기 전에 다음 동작인 3을 출력해서 그렇습니다 하핳!
async / await 이란?
자바스크립트의 동기 / 비동기 처리 패턴 중 하나입니다.
함수 앞에 async를, 함수 내의 연산 앞에 await를 붙여 사용합니다.
저번 시간에 작성했던 로그인 코드입니다.
app.post('/signin', (req, res) => {
Users.findOne({ id: req.body.id, password: req.body.password }, (err, user) => {
if (err) return res.status(500).json({ message: '에러!' });
else if (user) return res.status(200).json({ message: '유저 찾음!', data: user });
else return res.status(404).json({ message: '유저 없음!' });
});
});
콜백 함수 내에 없다면 찾은 결과 값에 접근하기 힘들고, 이로 인해 콜백 지옥이 발생할 수 있습니다
async / awiat 을 사용하여 결과 값을 변수에 할당했습니다.
app.post('/signin', async (req, res) => {
let result = await Users.findOne({ id: req.body.id, password: req.body.password });
if (!result) return res.status(404).json({ message: '유저 없음!' });
return res.status(200).json({ message: '유저 찾음!', data: result });
});
어떤가요? 깔끔하쥬?
참고로 http 통신, DB 등 작동 시간이 긴 함수들은 개발자에게 비동기 처리를 요구합니다!
익숙해지시면 사용하기도 편할거에요!
추운 날씨니깐 따듯하게 입고 따듯한거 먹으면서 하세요 여러분들!
'JavaScript > Node.js Lecture' 카테고리의 다른 글
6. Node.js To-Do List (0) | 2020.11.19 |
---|---|
5. Node Promise (0) | 2020.11.16 |
3. MongoDb 사용법과 로그인/회원가입 만들기! (0) | 2020.11.15 |
2. 동기와 비동기 알아보기! (0) | 2020.07.01 |
1-2. Express와 Body-Parser모듈을 사용해서 POST와 GET으로 Hello World 보내보기! (0) | 2019.10.12 |