동시성과 병렬성에 관해서는 꽤 들어봤을텐데 CPU, 저장장치, 네트워크, 운영체제, 심지어 백엔드 등 다양한 영역에서 I/O가 있거나 연산이 필요한 모든 곳에 적용되는 개념이다.
그럼 함께 알아보자.
동시성(Concurrency)이란?

동시성은 한 번에 여러 일을 하는 것처럼 보이는 것을 말한다.
CPU를 예로 들어보면, 단일 코어는 사실상 한 번에 하나의 작업만 처리할 수 있다. 그런데 작업 중 I/O(입출력) 대기 시간이 발생하면 CPU는 아무 일도 하지 않고 쉬게 된다. 이렇게 자원이 낭비되는 것을 방지하기 위해 CPU는 시간 분할을 통해 여러 작업(스레드)을 빠르게 번갈아 수행함으로써 마치 동시에 여러 작업이 처리되는 것처럼 보이게 만든다.
왜 동시성이 중요할까?
서버나 시스템의 성능은 단순히 CPU 속도만으로 결정되지 않는다.
대부분의 실제 시스템에는 사용자 입력 대기, 네트워크 요청, DB 조회, 파일 입출력 등 대기 시간이 긴 작업이 포함된다.
이때 동시성을 적용하면 CPU가 대기하지 않고 다른 작업을 처리할 수 있어, 처리량과 응답 시간 측면에서 큰 이점을 얻는다.
- 유휴 시간 감소 → 자원 활용도 향상
- 처리량 증가 → 동일 자원으로 더 많은 요청 처리 가능
- 응답 시간 단축 → 사용자 경험 개선 및 확장성 확보
예를 들어 웹 서버가 DB 응답을 기다리는 동안 다른 요청을 처리할 수 있다면, 같은 서버로도 훨씬 많은 동시 접속을 감당할 수 있다.
동시성 구현을 어떻게 해?
동시성을 구현하는 방법은 동시성의 주체가 어디냐에 따라 달라진다.
대표적으론
- 컨텍스트 스위칭 기반 스레드 [운영체제]
전통적인 방식, 운영체제가 스레드를 번갈아 실행 - 이벤트 루프 기반 (Non-blocking I/O) [런타임 환경]
하나의 스레드로도 수천 개 요청 처리 가능 - 리액티브 스트림 기반
파이프라인으로 데이터 흐름을 비동기 처리
위 기술을 통해 해당 환경에서 유휴 시간을 줄여 처리량을 높일 수 있고, 응답 시간을 줄어들기 때문에 확장성을 확보할 수 있다.
단, 장점만 있는 것은 아니다.
동시성이 들어갈 경우 복잡도 증가가 증가하고, 디버깅도 쉽지 않아진다. 과도할 경우 오히려 느려지기도 하며 Deadlock, Race Condition, 기아(Starvation) 등 다양한 문제에 대해 신경 써야 한다.
병렬성(Parallelism)이란?

병렬성은 실제로 여러 작업을 동시에 수행하는 것을 말한다.
동시성과 가장 큰 차이는 ‘동시 수행처럼 보이는 것'이 아니라, 진짜 동시에 실행된다는 점이다. 예를 들어 CPU에 코어가 4개 있다면, 4개의 작업을 같은 시점에 병렬로 실행할 수 있다.
왜 병렬성이 중요한가?
단일 코어에서 동시성만으로는 근본적으로 처리 속도 한계가 존재한다.
특히 CPU 연산이 많은 작업(CPU-bound)일 경우 대기 시간이 아니라 계산 자체가 병목이 되기 때문에, 동시성만으로는 충분한 성능 향상을 기대하기 어렵다. 이때 병렬 처리를 활용하면 연산을 여러 코어에 분산해 작업 완료 시간을 줄이고, 처리 속도를 극적으로 향상시킬 수 있다.
- 계산 분할 → 작업을 나눠 여러 코어에서 동시에 수행
- 처리 속도 향상 → 작업 완료 시간 단축
- 확장성 확보 → 하드웨어 스케일업으로 성능 향상 가능
병렬성 예시는?
병렬성은 동시성과 달리 진짜 하드웨어 자원이 필요한 경우가 많다.
- 멀티스레드 기반 병렬처리
여러 코어에 스레드를 분배해서 동시 실행 - 멀티프로세스 기반 기반 병렬처리
프로세스 단위로 작업을 나눠서 실행 - GPU 병렬 처리
요즘 핫한 CUDA처럼 연산 유닛을 병렬로 동작시켜 대규모 연산 - 분산 처리
여러 대의 서버에 트래픽을 나눠서 처리 등
이러한 방식들을 통해 연산 집약적인 작업의 처리 속도를 획기적으로 높일 수 있다.
병렬성도 동시성과 마찬가지로 단점 또한 가지고 있다.
- 공유 자원 동기화 → 락, 뮤텍스 등 동기화 처리가 필요
- 경쟁 상태(Race Condition) → 여러 스레드가 동시에 자원에 접근하면 문제 발생
- 오버헤드 → 스레드 생성, 작업 분할, 캐시 동기화 등으로 인해 오히려 느려짐.
- 하드웨어 의존성 → 코어 수가 적거나 병렬화가 어려운 작업이라면 효과가 제한적
특히 CPU 코어 수가 적은 환경에서는 병렬화의 이점이 거의 없거나, 관리 오버헤드로 인해 성능이 악화될 수도 있다.
결론

동시성과 병렬성은 종종 혼용되지만, 본질은 다르다.
- 동시성은 기다리는 동안 다른 일을 처리해 자원을 효율적으로 쓰는 전략이다.
- 병렬성은 여러 일을 실제로 동시에 처리해 작업 속도 자체를 끌어올리는 전략이다.
현실의 시스템에서는 웹 서버는 동시성으로 I/O를 처리하고, 내부의 데이터 분석 엔진은 병렬성으로 연산 속도를 끌어올리는 식으로 이 둘을 적절히 조합해 사용하는 경우가 많다.
무튼 개발자로서 이 두 개념을 정확히 이해하고 적절히 활용하는 것은 효율적이고 확장 가능한 시스템을 설계하는 데 필수적이다
다음에는 각각의 처리 방식에 대해 자세히 다뤄보도록 하게따
참조
Difference Between Concurrency and Parallelism (with Comparison Chart) - Tech Differences
'Knowledge > 개발지식' 카테고리의 다른 글
| [Server] 토큰 기반 인증 VS 세션 기반 인증 (0) | 2025.12.07 |
|---|---|
| [단기 공기업 필기 준비] 데이터베이스 (1) | 2025.10.26 |