개요
실시간 정산 시스템은 많은 비즈니스에서 필수적인 기능이며, 이를 위해 동시성이 필요합니다. 자바스크립트는 싱글 스레드 기반 언어로 알려져 있지만, 비동기 처리를 통해 동시성을 구현할 수 있습니다. 이번 게시물에서는 자바스크립트의 동시성을 활용하여 실시간 정산 시스템을 구현하는 방법에 대해 알아보겠습니다.
비동기 처리와 콜백 함수
자바스크립트에서 비동기 처리는 주로 콜백 함수를 사용하여 구현됩니다. 콜백 함수는 비동기 작업이 완료된 후 호출되는 함수로, 작업이 완료되면 콜백 함수가 실행되어 결과를 처리하는 것입니다. 이를 통해 다른 작업을 하며 작업이 완료될 때까지 기다리지 않고 동시에 작업을 수행할 수 있습니다.
function calculateTotal(orderIds, callback) {
let total = 0;
for (const orderId of orderIds) {
fetchOrder(orderId, (order) => {
total += order.price;
if (total == orderIds.length) {
callback(total);
}
});
}
}
function fetchOrder(orderId, callback) {
// 주문 정보를 가져오는 비동기 작업
// ...
// 작업이 완료되면 콜백 함수 호출
callback(order);
}
// 사용 예시
const orderIds = [1, 2, 3];
calculateTotal(orderIds, (total) => {
console.log('Total:', total);
});
위의 예시에서 calculateTotal
함수는 주문 ID 배열을 받아 각 주문 정보를 비동기로 가져와 총 금액을 계산합니다. 주문 정보를 가져오는 비동기 작업은 fetchOrder
함수를 호출하여 처리하며, 작업이 완료되면 콜백 함수가 실행됩니다. 총 금액 계산이 끝나면 결과를 처리하기 위해 마지막으로 전달된 콜백 함수가 호출됩니다.
Promise와 async/await
자바스크립트 ES6부터는 Promise와 async/await을 통해 비동기 처리를 더 간편하게 할 수 있습니다. Promise는 비동기 작업의 결과를 나타내는 객체로, 작업의 성공 또는 실패에 따라 다른 로직을 수행할 수 있습니다. async/await은 비동기 코드를 동기적으로 작성할 수 있도록 도와주는 문법입니다.
function calculateTotal(orderIds) {
return Promise.all(orderIds.map(fetchOrder))
.then((orders) => {
let total = 0;
for (const order of orders) {
total += order.price;
}
return total;
});
}
// 사용 예시
const orderIds = [1, 2, 3];
calculateTotal(orderIds)
.then((total) => {
console.log('Total:', total);
});
위의 예시에서 calculateTotal
함수는 Promise.all을 사용하여 각 주문 정보를 비동기로 가져온 후, 총 금액을 계산합니다. fetchOrder
함수는 Promise 객체를 반환하므로, Promise.all을 사용하여 모든 주문 정보를 가져오기를 기다릴 수 있습니다. 마지막으로 then
을 통해 총 금액을 처리할 수 있습니다.
async/await을 통해 동일한 작업을 더 간편하게 처리할 수도 있습니다.
async function calculateTotal(orderIds) {
let total = 0;
for (const orderId of orderIds) {
const order = await fetchOrder(orderId);
total += order.price;
}
return total;
}
// 사용 예시
const orderIds = [1, 2, 3];
calculateTotal(orderIds)
.then((total) => {
console.log('Total:', total);
});
위의 예시에서 calculateTotal
함수를 async
로 선언하고, await
를 통해 비동기 작업의 완료를 기다릴 수 있습니다. 이를 통해 코드를 더 읽기 쉽고 직관적으로 작성할 수 있습니다.
결론
자바스크립트의 동시성을 활용하여 실시간 정산 시스템을 구현할 수 있습니다. 비동기 처리와 콜백 함수, Promise와 async/await을 통해 동시성을 구현하는 방법을 알아보았습니다. 이를 통해 복잡한 비동기 작업을 처리하고, 비즈니스 요구사항에 맞는 실시간 정산 시스템을 구축할 수 있습니다.