포스트

동기(Synchronous)와 비동기(Asynchronous)

동기는 미팅에서 대화하는 것, 비동기는 채팅이나 이메일로 대화하는 것. devramyun


🧵 동기(Synchronous) 🔹 정의

호출자는 요청을 보내고, 응답을 받을 때까지 기다리며(blocking) 아무 일도 하지 못함.

  • 클라이언트 → 서버에 요청(Request)
  • 서버 → 작업 처리 → 응답(Response)
  • 이 사이, 클라이언트는 아무 작업도 하지 못하고 대기
  • read() 같은 파일 I/O 시스템 호출은,
  • 메인 스레드가 CPU에서 내려옴 (blocked)
  • 디스크 읽기가 끝날 때까지 아무 일도 못함
  • 처리 지연 시 전체 흐름 차단
  • 비효율적 CPU 자원 활용
  • 고부하 시스템에 불리

🔀 비동기(Asynchronous) 🔹 정의

요청을 보내고, 응답을 기다리지 않고 다른 일을 수행할 수 있음. 응답은 나중에 도착하며, 도착 시점에 콜백 또는 알림으로 처리됨.

  • 응답이 준비되었는지 주기적으로 확인 (epoll, select)
  • 작업 완료 후, 등록한 함수가 자동 실행 (io_uring)
  • 별도의 스레드가 blocking I/O를 수행하고 결과를 전달

  • 파일을 읽을 때 별도 스레드에 맡김
  • 메인 스레드는 계속 실행됨
  • 완료되면 콜백 함수를 호출하여 결과 처리

🔁 동기 vs 비동기: 요청-응답 모델에서의 차이

구분동기 (Synchronous)비동기 (Asynchronous)
요청 후 처리응답까지 기다림응답 없이 바로 다음 작업
CPU 사용비효율적 (대기)효율적
구현 복잡도단순다소 복잡 (콜백, 이벤트)
예시Python의 requests, Java의 기본 I/OPython aiohttp, Node.js, Java NIO

💬 비유로 쉽게 이해하기

상황동기비동기
질문사람에게 직접 묻고 대답을 기다림이메일 보내고 다른 일 하다가 답장을 받음
전화상대가 받을 때까지 계속 대기음성 메시지 남기고 나중에 응답 받음

  • 프로그래밍 패턴: async/await, Promise, Future, Callback
  • 데이터베이스: PostgreSQL의 비동기 커밋
  • 백엔드 서버: 비동기 요청 처리 (FastAPI + Starlette)
  • 파일 시스템: Linux epoll, io_uring 등 고성능 I/O
  • 복제 시스템: 비동기 복제(replication)
  • fsync: 비동기 파일 동기화 (write-back cache)

  • 동기는 간단하지만 대기가 필요하고,
  • 비동기는 복잡하지만 유연하고 효율적입니다.
  • 대규모, 고성능 시스템일수록 비동기 구조가 요구됩니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.