-
[Python 동시성 이해하기 ①] 순차·병렬·동시성의 차이개발 2026. 1. 25. 23:16
AI Engineer로서 Python으로 실무 개발을 시작하다 보면, 한 번쯤 이런 고민을 하게 된다.
- 이거 요청이 많아지면 느려질 것 같은데?
- 여러 작업을 동시에 처리해야 하는 거 아닌가?
- 근데.. asyncio? thread? 뭐가 어떤거지?
실제로 멀티 에이전트 기반 챗봇 서비스를 개발하다 보니, 요청 처리 방식이나 실행 흐름과 같은 동시성 관련 개념이 생각보다 자주 등장했고, 그때마다 개념들이 머릿속에서 뒤엉키는 느낌을 받았다.
순차(Sequential), 병렬(Parallel), 동시성(Concurrency).
용어는 익숙한데, 막상 설명하려고 하면 애매해지는 개념들이다.그래서 이번 글에서는 Python 개발자(나..ㅎㅎ)가 실무에서 마주하게 되는 이 세 가지 개념을, 서로 헷갈리지 않도록 한 번에 정리해보려고 한다.
1. 순차(Sequential)
말 그대로 작업을 하나씩 차례대로 처리하는 방식이다.
- 작업 A가 끝나야 작업 B 시작
- 작업 B가 끝나야 작업 C 시작

2. 병렬(Paralle)
여러 작업을 물리적으로 동시에 실행하는 것이다.
- CPU 코어가 여러 개이거나
- 여러 프로세스를 쓰거나
- 여러 머신을 쓰는 방식으로
같은 시점에 여러 작업이 동시에 실행된다.

3. 동시성(Concurrency)
여기서 많은 사람들이 병렬과 동시성의 개념을 헷갈려 하는 것 같다.
동시성은 동시에 실행하지 않아도, 여러 작업을 동시에 다루는 구조를 말한다.

💡 동시성은 "구조"의 문제이고, 병렬성은 "실행"의 문제다. 동시성 있는 프로그램이 반드시 병렬로 실행되는 것은 아니며, 병렬 실행이 가능하려면 물리적으로 여러 처리 장치가 필요하다.
4. 한 장 요약
구분 핵심 동시 실행 여부 유리한 작업 순차 하나씩 처리 X 단순한 흐름, 의존성이 큰 작업 병렬 물리적으로 동시에 실행 O CPU-bound(연산이 무거운 작업) 동시성 동시에 다루는 구조 꼭 그렇진 않음 I/O-bound(대기 많은 작업) 5. Python 공식 문서에서 말하는 동시성
Python 공식 문서에서도 asyncio를 다음과 같이 소개한다.
asyncio is a library to write concurrent code using the async/await syntax.
즉, Python의 asyncio는 병렬 실행을 목표로 하기보다는, I/O 대기 시간을 효율적으로 활용하기 위한 동시성(Concurrency) 모델에 가깝다.
이 점은 threading 문서에서도 명확하게 드러난다.
the GIL limits the performance gains of threading for CPU-bound tasks, as only one thread can execute Python bytecode at a time.
Python에서는 GIL(Global Interpreter Lock)로 인해 CPU-bound 작업의 경우 여러 스레드를 사용하더라도 동시에 Python 바이트코드를 실행할 수 없다.
공식 문서를 차분히 읽어보니, 자연스럽게 다음과 같은 질문들이 이어졌다.
- 동기 / 비동기는 순차·병렬·동시성과 어떤 관계일까?
- 비동기라면 무조건 성능이 좋아지는 걸까?
- ThreadPool은 언제 쓰고, asyncio는 언제 쓰는 게 맞을까?
이 질문들에 답하기 위해 다음 편에서는 ‘코드의 흐름(제어 흐름)’ 관점에서, 이 개념들을 하나씩 풀어보려고 한다.
'개발' 카테고리의 다른 글
[MLOps] 모델 개발 과정 및 학습 데이터 준비 - ① (4) 2025.01.16 [MLOps] MLOps란? (6) 2025.01.07