동시성(Concurrency)이란? 🔄
동시성은 여러 작업이 겹치는 시간 간격 동안 실행되는 것을 말합니다. 실제로는 한 번에 하나의 작업만 처리하지만, 빠르게 번갈아가며 실행해 마치 동시에 진행되는 것처럼 보이게 하는 것이죠.
🍔 쉬운 비유: 맥도날드 직원 한 명이 주문도 받고, 음식도 준비하고, 결제도 하는 것과 같아요. 한 번에 한 가지만 하지만 여러 고객을 번갈아가며 빠르게 응대하죠!
동시성의 핵심 특징
- ⏱️ 시분할(Time slicing) 방식으로 작업
- 🔀 컨텍스트 스위칭으로 작업 전환
- 💡 CPU 코어가 하나여도 구현 가능
- 🧵 주로 I/O 바운드 작업에 유리
// Node.js에서 동시성 예시 (비동기 콜백)
function fetchUserData(userId) {
// 데이터베이스 요청은 I/O 작업이라 다른 작업 가능
db.query(`SELECT * FROM users WHERE id = ${userId}`, (err, data) => {
if (err) console.error(err);
console.log(data);
});
// 위 작업이 완료되길 기다리지 않고 즉시 다음 작업 실행
console.log("다른 작업 수행 중...");
}
병렬성(Parallelism)이란? ⚡
병렬성은 여러 작업이 정확히 같은 시점에 실행되는 것을 말합니다. 여러 CPU 코어가 각각 다른 작업을 동시에 처리하는 방식이죠.
🍕 쉬운 비유: 피자 가게에서 직원 A는 주문 받고, 직원 B는 피자 만들고, 직원 C는 결제하는 것과 같아요. 실제로 모두가 동시에 일하는 거죠!
병렬성의 핵심 특징
- 🖥️ 여러 코어가 필요함
- ⚡ 실제로 동시에 여러 작업 처리
- 🧮 CPU 집약적 계산 작업에 효과적
- 🔢 데이터를 작은 단위로 분할해 처리
// Node.js에서 병렬성 예시 (워커 스레드)
const { Worker } = require('worker_threads');
function runHeavyTask() {
// 4개의 워커 스레드 생성해 병렬 처리
for (let i = 0; i < 4; i++) {
const worker = new Worker('./worker.js', { workerData: { part: i } });
worker.on('message', result => console.log(`계산 결과 ${i}: ${result}`));
}
}
동시성 vs 병렬성: 쉽게 구분하기 🤔
동시성 (Concurrency) vs 병렬성 (Parallelism)
여러 작업을 번갈아가며 처리 | 여러 작업을 실제로 동시에 처리 |
싱글 코어로도 가능 | 멀티 코어 필요 |
I/O 바운드 작업에 적합 | CPU 바운드 작업에 적합 |
비동기 프로그래밍 | 멀티 스레딩/멀티 프로세싱 |
🍔 한 명의 요리사가 여러 요리 | 🍔 여러 요리사가 각각 요리 |
추가로 알면 좋은 정보 💡
Node.js에서의 동시성과 병렬성 🟢
Node.js는 기본적으로 싱글 스레드 이벤트 루프 모델을 사용해 동시성을 구현합니다.
- 이벤트 루프 - 비동기 작업을 효율적으로 처리
- Promise와 async/await - 동시성 코드를 깔끔하게 작성
- Worker Threads - CPU 집약적 작업을 병렬로 처리
// async/await를 사용한 동시성 예시
async function processDCIMData() {
try {
// 두 API 호출이 동시에 진행됨 (동시성)
const [tempData, powerData] = await Promise.all([
fetchTemperatureData(),
fetchPowerConsumption()
]);
return { temperature: tempData, power: powerData };
} catch (error) {
console.error('데이터 처리 중 오류:', error);
}
}
실무 팁 💼
- I/O 바운드 작업은 동시성으로 (DB 쿼리, API 호출, 파일 읽기)
- CPU 바운드 작업은 병렬성으로 (이미지 처리, 복잡한 계산)
- 상태 공유를 최소화하고 불변성(immutability) 활용하기
- Node.js 14 이상에서는 Worker Threads API 적극 활용하기
동시성과 병렬성에 대해서 설명해주세요.

동시성(Concurrency)이란?
동시성이란 이름처럼 실제로 여러 작업을 동시에 수행하는 것이 아니라, 논리적으로 동시에 실행되는 것처럼 보이게 만드는 개념입니다. 단일 코어를 기준으로 시간 분할을 통해 여러 스레드를 번갈아 가며 작업을 수행함으로써, 마치 동시에 여러 작업이 처리되는 것처럼 보이게 합니다.
사용자의 입력을 기다리거나, 네트워크 요청, 파일 입출력 등의 I/O 작업 시에는 CPU가 유휴 상태로 대기하게 됩니다. 이때 CPU가 아무 일도 하지 않고 대기하는 대신, 컨텍스트 스위칭을 통해 다른 스레드의 작업을 처리할 수 있습니다. 이러한 특성 덕분에 서버는 여러 클라이언트의 요청을 동시에 처리할 수 있어 효율적입니다. 다만, 동시성 환경을 신중하게 고려하지 않으면 여러 스레드를 사용하면서 Deadlock, Race Condition, Starvation 등의 문제가 발생할 수 있습니다.
병렬성(Parallelism)이란?
병렬성이란 물리적으로 동일한 시간에 여러 작업을 독립적으로 수행하는 것을 의미합니다. 여러 개의 코어가 각각 독립된 스레드의 작업을 동시에 처리함으로써, 실제로 여러 작업이 동시에 실행됩니다. 동시성과는 달리, 하나의 코어가 여러 스레드를 번갈아 가며 처리할 필요 없이, 각 코어에서 독립적으로 작업을 실행합니다.
독립적인 하위 작업으로 나눌 수 있는 계산과 같은 작업을 여러 코어에 분산함으로써, 작업 완료 시간을 최소화할 수 있어 고성능 컴퓨팅에 이상적입니다. 하지만 병렬 처리는 데이터나 리소스를 공유할 때 작업 간 동기화가 필요할 경우가 많아, 이러한 동기화로 인해 상당한 오버헤드가 발생할 수 있습니다.
'1일 1CS(Computer Science)' 카테고리의 다른 글
캐싱 전략에 대해서 설명해주세요. (0) | 2025.05.19 |
---|---|
Error Boundary가 무엇이며, 이를 사용하는 이유는 무엇인가요? (0) | 2025.05.19 |
로드 밸런싱에 대해서 설명해주세요. (0) | 2025.05.19 |
Promise의 resolve()와 fulfilled에 대해서 설명해주세요. (0) | 2025.05.19 |
함수 선언식과 함수 표현식의 차이점에 대해서 설명해주세요. (0) | 2025.05.13 |