
💬
동기 비동기 평소에는 잘 쓰지 않는 용어니까
이해를 위해서 예를 들어보자
전화와 문자를 생각해보자
전화는 동기적이라고 할 수 있다 왜냐하면 전화가 오면(요청이 들어오면) 하던 일을 멈추고(blocking) 결과를 실행해야하기 때문이다.
하지만 문자는 비동기적이라고 할 수 있다 왜냐하면 문자가 오더라도 확인 후, 나중에 답장할 수 있기 때문이다(non-blocking) 때문에 요청에 대한 결과가 동시에 일어나지 않는다(비동기)
강의를 들으면서 강사님은 전화보다 문자를 선호한다고 하셨다 왜냐하면 본인이 하던 일을 하는 동시에 상대방과 연락을 할 수 있기 때문이라고 하셨다 그래서인지 평소에도 전화보다 문자를 더 좋아하신다고..
🙂(스킵가능)
잡담이지만 나는 그렇게 생각하지 않는다 우리가 전화를 하는 이유는 언어적인 정보전달 뿐만 아니라 비언어적인 정보(숨소리, 말투, 강약 등등)도 함께 캐치하기 위해서다
누군가와 말 싸움을 할 때 문자로 싸우다 보면 서로 크고 작은 오해가 생겨 더 감정이 상하기 마련이다 문자는 비언어적인 정보전달이 결여되어 있으니 문자를 보내는 사람은 본인의 의도가 텍스트에 정확하게 전달되지 않고 때문에 문자를 받는 사람은 메세지 내용을 왜곡되게 인식한다.
그래서 나는 중요한 얘기를 할 때는 무조건 만나서 얼굴을 보며 말하는 것이 맞다고 생각하고 그 다음은 전화, 정말 불가피 하다면 문자라고 생각한다.
하지만 컴퓨터는 친구도 없고 감정도 없으니 비동기가 효율적이고 최고인 걸로
const fs = require("fs");
const getDataFromFile = function (filePath, callback) {
fs.readFile(filePath, (err, data) => {
if (err) {
callback(err, null);
} else {
callback(null, data.toString());
}
});
};
getDataFromFile('README.md', (err, data) => console.log(data));
module.exports = {
getDataFromFile
};
const { readFile } = require("fs");
const getDataFromFilePromise = filePath => {
return new Promise((resolve, reject) => {
readFile(filePath, (err, data) => {
if (err) reject(err);
if (!err) resolve(data.toString());
})
})
};
getDataFromFilePromise('README.md').then(data => console.log(data.toString()));
module.exports = {
getDataFromFilePromise
};
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(__dirname, 'files/user1.json');
const user2Path = path.join(__dirname, 'files/user2.json');
const readAllUsersChaining = () => {
return new Promise((resolve, result) => {
const newArray = [];
getDataFromFilePromise(user1Path)
.then((value) => {
newArray.push(JSON.parse(value));
return getDataFromFilePromise(user2Path);
})
.then((value) => {
newArray.push(JSON.parse(value));
resolve(newArray);
})
})
}
readAllUsersChaining();
module.exports = {
readAllUsersChaining
}
const { resolve } = require('path');
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(dirname, 'files/user1.json');
const user2Path = path.join(dirname, 'files/user2.json');
const readAllUsers = () => {
return new Promise((resolve, reject) => {
Promise.all([getDataFromFilePromise(user1Path), getDataFromFilePromise(user2Path),])
.then((result) => {
resolve(result.map(elem => JSON.parse(elem.toString())));
});
});
};
console.log(readAllUsers());
module.exports = {
readAllUsers
};
//await를 이용해 위의 비동기 방법과 비교해서 훨씬 간결하게 코드를 작성할 수 있었다
const path = require('path');
const { getDataFromFilePromise } = require('./02_promiseConstructor');
const user1Path = path.join(dirname, 'files/user1.json');
const user2Path = path.join(dirname, 'files/user2.json');
const readAllUsersAsyncAwait = async () => {
const user1 = await getDataFromFilePromise(user1Path);
const user2 = await getDataFromFilePromise(user2Path);
return [JSON.parse(user1), JSON.parse(user2)];
};
// readAllUsersAsyncAwait();
module.exports = {
readAllUsersAsyncAwait
};
function getNewsAndWeather() {
return new Promise((resolve, result) => {
const obj = {};
fetch(newsURL)
.then((response) => {
return response.json();
})
.then((newsData) => {
obj["news"] = newsData.data;
return fetch(weatherURL)
})
.then((response) => {
return response.json();
})
.then((data) => {
obj["weather"] = data;
resolve(obj);
})
})
}
if (typeof window === 'undefined') {
module.exports = {
getNewsAndWeather
}
}
unction getNewsAndWeatherAll() {
return new Promise((resolve, reject) => {
const obj = {};
Promise.all([fetch(newsURL), fetch(weatherURL)])
.then(results => {
Promise.all([results[0].json(), results[1].json()])
.then(results => {
console.log(results[0], results[1]);
obj.news = results[0].data;
obj.weather = results[1];
resolve(obj);
});
});
});
}
if (typeof window === 'undefined') {
module.exports = {
getNewsAndWeatherAll
};
}
//await를 이용해 위의 비동기 방법과 비교해서 훨씬 간결하게 코드를 작성할 수 있었다
async function getNewsAndWeatherAsync() {
const obj = {};
const newsResult = await fetch(newsURL).then((response) => {return response.json()});
const weatherResult = await fetch(weatherURL).then((response) => {return response.json()});
obj["news"] = newsResult.data;
obj["weather"] = weatherResult;
return obj;
}
if (typeof window === 'undefined') {
module.exports = {
getNewsAndWeatherAsync
}
}
🥲
4주차 마지막 포스팅인데
정신적으로나 육체적으로나 힘든 한주였다
미국에서 여유로운 시간을 몇 개월 보내고
유럽여행을 길게 하고 와서 바로 학기와 부트캠프를 시작했다
비전공자인 나에게 부트캠프 자체가 어려운 일인데 학교공부와 같이 할려니 무리가 있었을 것이랴
정말로
목요일 비동기 수업이 끝난 이후에는
번아웃이 와서 아무것도 할 수 없었다
무기력, 끝없는 잠, 약간의 우울과 싸우며 3일을 보낸 것 같다
진로문제, 취업문제로 고민이 많아졌다 그래서 더 힘든 감정들이 날 찾아왔나보다
옳은 선택은 없고, 옳은 선택을 만들어가는 과정만 있을 뿐이다