로그인 입점하기
← 가이드 목록
시작하기

동시성이란? 여러 작업을 동시에 처리하는 것처럼 보이는 원리 쉽게 이해하기

동시성은 여러 작업이 같은 시간대에 진행되도록 관리하는 개념입니다. 병렬성·Promise.all·Concurrency Limit·Queue·Rate Limit·Race Condition·멱등성까지 초보 기준으로 정리합니다.

동시성이란? 여러 작업을 동시에 처리하는 것처럼 보이는 원리 쉽게 이해하기
순차 처리와 동시성 제한 3으로 여러 작업을 겹쳐 진행하는 비교 흐름도
동시성은 「한꺼번에 끝내는 마법」보다 「여러 일이 같은 시간대에 진행되도록 순서를 관리하는 방식」에 가깝습니다.

식당 직원 한 명 · 동시성 ≠ 병렬성

이미지 업로드처럼 독립 작업은 하나씩 끝낼 수도, 같은 시간 구간에 겹쳐 진행할 수도 있습니다. 여러 작업이 겹치도록 관리하는 개념이 동시성(Concurrency)입니다. 직원이 손님 A 음식이 조리되는 동안 B·C를 돕는 것과 같습니다 — 한 순간에 여러 일을 「진짜로」 하는 것이 아니라 대기 시간을 다른 일에 씁니다. 병렬성(Parallelism)은 직원 여러 명이 같은 순간에 각자 일하는 것에 가깝습니다. 브라우저 JS 메인 스레드는 보통 한 번에 하나의 JS를 실행하지만, 네트워크·타이머는 브라우저가 맡는 동안 이벤트 루프로 다른 일을 이어 동시성처럼 보일 수 있습니다.

동시성: 여러 작업이 같은 시간대에 진행되도록 관리
병렬성: 여러 작업을 실제 같은 순간에 실행

순차 · Promise.all · Concurrency Limit

로그인 후 userId로 주문을 조회하듯 의존이 있으면 순차 처리가 맞습니다. 공지·날씨·주문처럼 독립이면 먼저 fetch를 시작하거나 Promise.all / async/awaitawait Promise.all로 대기 시간을 줄일 수 있습니다. 반대로 독립 작업을 순차 await하면 Request Waterfall이 됩니다. 그렇다고 1만 개를 한꺼번에 시작하면 브라우저·네트워크·API·DB가 포화될 수 있어 Concurrency Limit(동시 실행 개수 제한)이 필요합니다 — 파일 1,000개여도 동시에 3~5개만 돌리고 하나가 끝나면 다음을 넣는 식입니다. 「항상 5개」 정답은 없고 서버·네트워크·데이터 크기·외부 제한에 맞춥니다.

순차 await → Waterfall 위험(독립 작업일 때)
Promise.all → 함께 시작·모두 대기
Limit 3 → A B C 진행, B 완료 시 D 시작

처리량 · Queue · Rate Limit · Backpressure

Throughput은 단위 시간당 처리량, Latency는 한 건 완료 시간입니다. 동시성을 올리면 처리량이 늘 수 있지만 과하면 대기열·지연·오류가 늘고 Latency도 나빠질 수 있습니다. 오래 걸리는 보고서·이메일·이미지 변환은 HTTP를 붙잡지 말고 Job Queue에 넣고 Worker가 가져가게 할 수 있습니다. Worker 수·Worker Pool·DB Connection Pool도 동시성 제한입니다. 오토스케일링으로 웹서버만 늘리면 Connection이 폭증해 DB가 병목이 될 수 있습니다. Rate Limit은 「일정 시간당 요청 수」, Concurrency Limit은 「지금 진행 중인 개수」로 다릅니다. 초과 시 HTTP 429가 나올 수 있고, 전원 즉시 Retry하면 Thundering Herd가 됩니다 — Backoff·Jitter·Queue 길이 제한·Backpressure로 유입을 조절합니다. 포화되면 503 같은 일시 장애와도 맞닿습니다.

I/O · CPU · Race · 멱등 · 모니터링

I/O Bound(네트워크·DB 대기)는 기다리는 동안 다른 요청을 돌리기 좋아 Node.js 이벤트 루프 이야기가 자주 나옵니다. CPU Bound(인코딩·대량 계산)를 메인에서 오래 돌리면 다른 요청·화면이 막혀 Long Task가 됩니다 — Worker Thread·Web Worker로 분리 검토. 같은 재고·잔액을 동시에 읽고 바꾸면 Race Condition이 납니다. Lock·Transaction·원자적 업데이트로 일관성을 지키되 Lock이 길면 처리량이 떨어집니다. Deadlock은 서로 자원을 기다리는 교착입니다. 결제·주문에는 프론트 버튼 비활성 + 서버 멱등성(Idempotency)·Idempotency-Key가 필요합니다(HTTP 메서드의 멱등 개념과도 연결). 평균만 보지 말고 p95·p99·Tail Latency, Queue 길이, Connection 사용량, 오류율을 봅니다. 분산 추적·부하 테스트로 타이밍에만 나는 문제를 드러냅니다. 로드밸런싱은 서버 간 요청을 나누고, 서버 안에서는 I/O 동시성이 겹칩니다. 동시성은 SEO 지표가 아니지만 응답 지연·장애가 나면 사용자 경험에 영향을 줍니다.

독립 → 동시 검토 · 의존 → 순차
높이되 Limit · Rate · Pool · Queue
같은 데이터 → Race 대비 · 멱등 · Lock/Tx

자주 묻는 질문

동시성이란?

여러 작업이 같은 시간 구간에서 함께 진행되도록 실행 순서를 관리하는 개념입니다.

병렬 처리와 같나요?

아닙니다. 동시성은 「함께 진행되도록 관리」, 병렬은 「같은 순간에 실제 실행」에 가깝습니다.

JS는 한 줄씩인데 어떻게?

네트워크·타이머를 브라우저가 처리하는 동안 이벤트 루프가 다른 JS를 실행할 수 있기 때문입니다.

Promise.all이면 동시인가요?

독립 작업을 함께 시작하고 기다리는 데 쓸 수 있습니다. CPU가 자동 멀티코어 병렬이 된다는 뜻은 아닙니다.

Concurrency Limit이란?

동시에 실행되는 작업의 최대 개수를 제한하는 것입니다.

높이면 무조건 빨라지나요?

아닙니다. 자원이 포화되면 오히려 느려지고 오류가 늘 수 있습니다.

Rate Limit과 차이는?

Rate는 일정 시간당 요청 수, Concurrency는 한 순간에 진행 중인 작업 수입니다.

Race Condition이란?

여러 작업이 동시에 같은 상태를 다루며 실행 순서에 따라 결과가 달라지는 문제입니다. 자세한 설명은 Race Condition 가이드를 참고하세요.

정리

동시성 = 여러 작업이 같은 시간대에 진행되도록 관리하는 것입니다. 순차는 「하나 끝나면 다음」, 병렬은 「같은 순간에 실행」으로 구분합니다. 독립 작업은 불필요하게 순차 두지 말고, 그렇다고 무제한 동시 실행도 피합니다 — Limit·Rate·Queue·Connection Pool·Backpressure로 조절합니다. 재고·결제처럼 같은 데이터를 동시에 바꾸면 Race Condition이 납니다. 재고 1개에 두 사용자가 동시에 「1개 남음」을 읽고 둘 다 구매를 승인하는 식으로, 실행 순서에 따라 결과가 달라지는 문제가 경쟁 상태입니다.