네트워크 프로그래밍, 시스템 설계, 백엔드 개발 면접에서 자주 나오는 질문
Blocking I/O와 Non-blocking I/O는 어떻게 다를까?
1️⃣ I/O란?
I/O는 Input/Output의 줄임말로,
프로그램이 외부 장치(디스크, 네트워크, 키보드 등)와 데이터를 주고받는 모든 행위를 말합니다.
예:
- 파일 읽기
- 사용자 입력 받기
- 서버로부터 응답 받기
2️⃣ Blocking I/O vs Non-blocking I/O
구분 Blocking I/O Non-blocking I/O (N/I/O)
| 동작 방식 | 요청을 보내면 작업이 끝날 때까지 기다림 | 요청을 보내면 바로 리턴, 결과는 나중에 확인 |
| 흐름 제어 | 함수 호출이 완료될 때까지 다음 코드 실행 X | 함수 호출 직후 다음 코드 실행 가능 |
| 코드 흐름 | 단순하고 직관적 | 복잡하지만 유연함 |
| 병렬성 | 낮음 (하나의 작업이 완료되어야 다음 진행) | 높음 (여러 작업 동시에 처리 가능) |
| 사용 예시 | 전통적인 C, Java, Python I/O 함수 | Node.js, select(), asyncio 등 |
| 단점 | 느림, 자원 낭비 가능 | 코드 복잡도 증가, 예외 처리 필요 |
3️⃣ 예시 비교
✅ Blocking I/O (Python 예제)
data = socket.recv(1024) # 데이터가 오기 전까지 여기서 멈춤
print("받은 데이터:", data)
- 데이터가 올 때까지 블로킹(대기) 상태
- 그동안 프로그램은 아무 일도 못 함
✅ Non-blocking I/O (Python 예제)
sock.setblocking(False)
try:
data = sock.recv(1024)
print("받은 데이터:", data)
except BlockingIOError:
print("아직 데이터 없음, 다른 일부터 처리")
- 데이터가 없어도 함수는 즉시 리턴
- 다른 작업을 먼저 수행할 수 있음
4️⃣ 어떤 상황에서 어떤 걸 쓰나?
상황 추천 방식
| 간단한 스크립트, CLI 툴 | Blocking I/O |
| 수많은 네트워크 요청 처리 | Non-blocking I/O |
| 고성능 서버 (예: 채팅 서버) | Non-blocking + 이벤트 루프 |
| CPU보다 I/O 병목이 큰 환경 | Non-blocking I/O 권장 |
🎯 면접 답변 예시
“Blocking I/O는 요청한 작업이 끝날 때까지 기다리는 방식이고, Non-blocking I/O는 요청을 보내고 바로 다음 작업을 처리하며, 결과는 나중에 확인하는 방식입니다.
블로킹은 코드가 단순하지만 성능이 떨어질 수 있고, 논블로킹은 처리 효율은 좋지만 이벤트 처리나 상태 확인 로직이 복잡해질 수 있습니다.
Node.js, asyncio 기반 서버는 논블로킹 I/O를 기반으로 동시성을 확보합니다.”
'Programming > 기술 면접' 카테고리의 다른 글
| [개발자 기술 면접 대비] 🌳 검색 자료구조로서 해시 테이블과 이진 탐색 트리 비교 (1) | 2025.07.25 |
|---|---|
| [개발자 기술 면접 대비] 🧩 Hash 충돌 시 내부 데이터 탐색은 어떻게 이루어질까? (1) | 2025.07.25 |
| [개발자 기술 면접 대비] 🧠 메모리 구조의 네 가지 영역 설명 (2) | 2025.07.25 |
| [개발자 기술 면접 대비]🚦동기/비동기 vs 블로킹/논블로킹 – 헷갈리는 개념 한 번에 정리하기 (2) | 2025.07.25 |
| [개발자 기술 면접 대비]💡 블로킹(Blocking)과 논블로킹(Non-blocking)의 차이 (1) | 2025.07.25 |