본문 바로가기
IT 알쓸신잡

동기 I/O와 비동기 I/O가 무엇일까?

by zing! 2025. 1. 1.

Node.js는 비동기 I/O 방식으로 작동한다. 비동기는 뭐고 I/O는 대체 뭘까..

I/O는 입력(Input) / 출력(Output)을 뜻한다.

I/O의 구성 요소

  1. 입력 (Input):
    • 프로그램이 외부에서 데이터를 받는 과정
    • 예시: 키보드 입력, 마우스 클릭, 파일 읽기, 네트워크 요청 받기 등.
  2. 출력 (Output):
    • 프로그램이 외부로 데이터를 내보내는 과정
    • 예시: 화면에 텍스트 출력, 파일 저장, 네트워크 응답 보내기 등.

I/O의 종류

  • 파일 시스템 I/O: 파일을 읽거나 쓰는 작업 (예: 파일에서 데이터를 읽기(입력), 데이터를 파일에 저장하기(출력)).
  • 네트워크 I/O: 네트워크를 통해 데이터를 보내거나 받는 작업 (예: 웹 서버와 클라이언트 간의 HTTP 요청과 응답).
  • 디바이스 I/O: 하드웨어 장치와의 데이터 교환 (예: 프린터에 데이터를 보내기, 마우스나 키보드에서 입력 받기).

동기 I/O와 비동기 I/O의 차이

동기 I/O (Synchronous I/O)

  • 작업이 완료될 때까지 기다리는 방식.
  • 요청을 보내고 응답을 받을 때까지 실행 흐름이 멈춘다.
  • 다음 작업은 현재 작업이 완료된 후에만 시작된다. -> 한 번에 하나의 요청만 처리할 수 있다.

비동기 I/O (Asynchronous I/O)

  • 작업을 요청한 후, 작업이 완료될 때까지 기다리지 않고 다음 작업을 바로 수행.
  • 작업이 완료되면 콜백 함수Promise를 통해 결과를 전달받음.
  • 프로그램이 차단되지 않으므로 동시에 여러 작업을 처리할 수 있음.
  • 서버 확장성에 유리하며 non-blocking방식으로 작업 처리

비동기 I/O의 작동 방식

  1. 작업 요청:
    • I/O 작업(파일 읽기/쓰기, 네트워크 요청 등)을 요청
  2. 작업 처리:
    • 요청된 작업은 OS(운영체제)에 의해 처리
  3. 작업 완료:
    • 작업이 완료되면 콜백 함수 또는 Promise를 통해 결과가 전달된다.