본문 바로가기
Programming/기술 면접

[개발자 기술 면접 대비] 🔄 I/O와 Non-blocking I/O의 차이

by Mandy's 2025. 7. 25.

네트워크 프로그래밍, 시스템 설계, 백엔드 개발 면접에서 자주 나오는 질문
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를 기반으로 동시성을 확보합니다.”