목차
1. 동기(Synchronous)
1.1 개념
- 한 작업이 완료되어야 다음 작업이 진행되는 방식
- 작업이 순차적으로 실행됨, 현재 작업이 완료될 때까지 다른 작업은 Blocking 상태
1.2 장단점
장점
- 코드 흐름이 명확하고 이해하기 쉬움
- 디버깅 및 유지보수가 상대적으로 간편함
단점
- 하나의 작업이 오래 걸리면 전체 성능이 저하됨
- 응답성이 중요한 상황에서는 비효율적임
1.3 사용 시기
- 작업 간 순서가 명확하고 의존성이 높은 경우
- 간단한 로직이나 빠르게 완료되는 작업을 처리할 때
1.4 동기 방식 예시 (Python)
import time
print("첫 번째 작업 시작")
time.sleep(2)
print("첫 번째 작업 종료")
print("두 번째 작업 시작")
time.sleep(1)
print("두 번째 작업 종료")
2. 비동기
2.1 개념
- 하나의 작업이 진행되는 동안 다른 작업도 동시에 수행할 수 있는 방식
- 작업 요청 후 결과를 기다리지 않고 다음 작업을 진행, 완료되면 callback, promise, async/await 등을 이용해 결과를 처리함
- Non-blocking 방식으로 동작함
2.2 장단점
장점
- 여러 작업을 동시에 처리할 수 있어 응답성이 뛰어남
- 네트워크, 파일 입출력, 데이터베이스 작업 등 지연이 예상되는 작업에서 효율적임
단점
- 코드 흐름이 분산되어 복잡해질 수 있음
- 예외 처리와 디버깅이 상대적으로 어려움
2.3 사용 시기
- 네트워크 요청, 파일 입출력 등 지연이 발생할 수 있는 작업
- UI 응답성을 높여야 하는 경우
- 동시 사용자 요청 처리가 필요한 웹 서버 등에서 유리함
2.4 비동기 방식 예시 (Python asyncio)
import asyncio
async def task(name, delay):
print(f"{name} 시작")
await asyncio.sleep(delay)
print(f"{name} 종료")
async def main():
await asyncio.gather(
task("첫 번째 작업", 2),
task("두 번째 작업", 1)
)
asyncio.run(main())
3. 한눈에 보는 동기 vs 비동기
| 구분 | 동기(Synchronous) | 비동기(Asynchronous) |
|---|
| 처리 방식 | 순차적 (한 번에 하나씩 처리) | 비순차적 (동시에 여러 작업 처리) |
| 블로킹 | 있음 (Blocking) | 없음 (Non-blocking) |
| 코드 가독성 | 높음 (단순하고 직관적) | 낮음 (복잡성 증가 가능) |
| 성능 | 하나의 작업 지연 시 전체 성능 저하 | 작업 병렬 처리로 효율적 |
| 디버깅 | 쉬움 | 어려움 |
4. 결론
동기와 비동기는 각각의 장단점이 있으므로, 프로젝트의 요구사항과 상황에 맞게 적절히 선택하는 것이 중요함
- 동기 방식: 순차적인 작업 처리 및 간단한 로직에 적합
- 비동기 방식: 여러 작업을 동시에 처리하거나, 지연이 발생하는 작업에 효율적임