Java 네트워크 I/O 모델 비교: BIO부터 Netty까지

1. BIO (Blocking I/O) 가장 기본적인 네트워크 I/O 모델로, 모든 I/O 작업이 블로킹 방식으로 동작합니다. 서버는 클라이언트 연결을 기다리는 accept() 호출과 데이터 읽기/쓰기 과정에서 모두 스레드가 멈춥니다. 서버 예제 package network.bio; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.So ...

6월 20일 18:59에 게시됨

리액터(Reactor) 패턴 심층 분석

리액터 패턴 상세 설명 ============= 리액터 패턴의 정의와 핵심 사상 리액터 패턴은 이벤트 기반 설계 패턴으로, 고동시 I/O 작업 처리에 특화되어 있습니다. 핵심 사상은 **중앙화된 이벤트 스케줄러(리액터)**를 통해 여러 이벤트 소스(네트워크 연결, 파일 디스크립터 등)를 통합적으로 모니터링하고, 이벤트를 해당 핸들러에 비동기적으로 분배하여 각 연결마다 별 ...

6월 12일 22:33에 게시됨

Netty 서버에서 클라이언트로 메시지 전송 구현

Netty 기반 서버-클라이언트 통신 구조에서 서버 측 메시지 전송을 구현하는 방법을 설명합니다. WebSocket 프로토콜을 활용한 채팅 시스템 예제로 핵심 구성 요소를 다룹니다. Netty 서버 기본 구조 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventL ...

6월 7일 17:56에 게시됨

Netty 리액터 패턴의 동작 원리 소스 코드 분석

1. EventLoop의 개념 EventLoop은 간단히 설명하면 이벤트를 지속적으로 감시하는 무한 루프 구조입니다. 이벤트가 발생하면 해당 이벤트를 처리하는 역할을 담당합니다. 일반적인 구현 방식은 별도의 스레드를 생성하여 끊임없이 루프를 실행하는 것입니다. 기본 구조: while (selector.select()) { processSelectedKeys(); } 2. EventLoopGroup의 구조 EventLoo ...

6월 7일 01:14에 게시됨

Netty ByteBuf 기본 개념과 활용

ByteBuf 구조 ByteBuf는 Netty의 핵심 구성 요소 중 하나로, 바이트 데이터를 저장하고 조작하는 유연한 버퍼입니다. 기존의 java.nio.ByteBuffer와 유사한 구조를 가지지만, 더 강력하고 사용하기 편리한 기능을 제공합니다. ByteBuf는 다음과 같은 주요 요소를 가집니다: 읽기 인덱스 (read index): 현재 읽을 위치를 나타냅니다. 쓰기 인덱스 (write index): 현재 쓸 ...

6월 2일 00:37에 게시됨

Netty 서버 시작 과정의 핵심 소스 분석

NioEventLoopGroup 초기화 및 이벤트 루프 생성 Netty에서 서버는 일반적으로 NioEventLoopGroup을 통해 비동기 이벤트 처리를 수행하며, 이 그룹은 두 가지 역할로 나뉜다: BossGroup와 WorkerGroup. 본문에서는 서버 리스닝을 담당하는 BossGroup에 초점을 맞춘다. NioEventLoopGroup 생성자는 내부적으로 여러 스레드 기반의 이벤트 루프를 생성한다. 각각의 루프는 N ...

5월 29일 06:45에 게시됨

RocketMQ Producer 초기화와 내부 동작 메커니즘 분석

RocketMQ 메시지 플랫폼에서 Producer는 메시지 생성 및 전송을 담당하는 핵심 구성 요소다. 이번 글에서는 Producer의 생성부터 실제 운영에 필요한 내부 메커니즘까지 단계별로 살펴본다. Producer 기본 구조 Producer를 사용하려면 먼저 DefaultMQProducer 인스턴스를 생성하고 필수 설정을 완료한 후 start() 메서드를 호출해야 한다. 가장 간단한 사용 예시는 다음 ...

5월 27일 01:49에 게시됨