5. 단일스레드 방식(비동기지원)

박은서's avatar
Jan 12, 2026
5. 단일스레드 방식(비동기지원)

1. NIO 단일 스레드

1️⃣ NIO 단일 스레드란?

NIO(Non-blocking I/O) 기반 서버가 단일 스레드로 여러 연결을 처리하는 구조를 말함.

2️⃣ 전통 방식 (Blocking I/O)와 비교

1) Blocking I/O (BIO)

  • 요청 하나당 스레드 하나
  • 동기 + 블로킹 방식
  • 클라이언트가 많아질수록 스레드가 폭증 → 메모리/컨텍스트 스위칭 부담
1000 커넥션 → 1000 thread 필요 ❌

2) NIO 기반 단일 스레드 모델

  • 한 개의 스레드가 여러 클라이언트를 관리
  • Non-blocking + event-driven
  • 요청 처리가 필요한 순간에만 작업 수행
1000 커넥션 → 1 thread(또는 소수의 thread)로 관리 가능 ✔️

3️⃣ 핵심 기술 요소

1) Selector

  • 여러 채널(SocketChannel 등)을 감시하는 객체
  • 이벤트 발생 여부를 조사 → 연결/읽기/쓰기 가능 상태 판단

2) Channel

  • 소켓/파일 같은 I/O 통로
  • Non-blocking 가능

3) Buffer

  • 데이터를 읽고 쓰는 저장 공간
  • ByteBuffer가 대표적

4) 단일 스레드 이벤트 루프

  • Selector가 이벤트를 감지
  • 스레드가 이벤트를 하나씩 처리
  • 이벤트 없으면 idle

4️⃣ 동작 흐름 예시

  1. 서버가 Selector를 생성하고 스레드 1개 실행
  1. 여러 클라이언트 연결을 Channel로 등록
  1. 스레드는 Selector.select() 호출 (블로킹)
  1. 데이터가 준비된 Channel만 select 결과로 반환
  1. 스레드가 준비된 Channel만 처리
  1. 다시 select()로 대기
➡️ 스레드 낭비 없음
➡️ 이벤트 기반으로 효율적인 처리

5️⃣ NIO 단일 스레드의 장점

1) 적은 스레드로 많은 연결 처리

  • 스레드 풀 과도 생성 방지

2) 문맥 전환(Context switch) 비용 감소

  • CPU 낭비 줄어듦

3) 고성능 네트워크 서버 구현에 적합

  • Netty, Undertow, Jetty 등이 이 모델 기반

6️⃣ NIO 단일 스레드의 단점

1) 코드 구조 복잡

  • 상태 관리 필요
  • callback 구조 or event loop 패턴

2) CPU 집중 작업에는 불리

  • 단일 스레드가 막히면 전체 처리 지연
    • ➡️ 해결: Worker Thread Pool과 함께 사용

7️⃣ 필기 정리

notion image
Share article