netty 6

WebFlux 의 중심, Netty 이벤트 루프는 누가 깨우는가?

이 글에서는 WebFlux, 정확히 말하면 Netty의 이벤트 루프 스레드가 어떤 메커니즘으로 구동되고 제어되는지 그 근본적인 원리를 알아본다. 1. 이벤트 루프의 주도권은 OS 커널에 있다.당연한 이야기지만, 이벤트 루프를 깨워 일을 시키는 실질적인 주체는 OS 커널이다.사용자가 WebFlux 서버에 요청을 보냈을 때, 데이터가 네트워크 카드에서 이벤트 루프까지 도달하는 과정을 시간 순서대로 살펴보자. 데이터 유입과 소켓 디스크립터의 생성먼저 사용자의 요청은 패킷에 담겨 네트워크를 통해 서버의 네트워크 카드(NIC)에 도달한다.이때 NIC와 CPU(커널)는 협력하여 이 전기 신호를 정리하고 조합하여 '소켓 디스크립터(Socket Descriptor)'를 생성한다. 소켓 디스크립터란? 연결 정보(IP, ..

Architecture 2026.01.03

WebFlux의 내부 파이프라인, Publisher의 구성과 내부 작동 방식

글을 쓰기 앞서 지연로딩과 파이프라인에 대해서 알아야 하므로 필요하면 아래 글을 참고하자.https://youseong.tistory.com/97 Java Stream API의 핵심 개념과 병렬 처리의 함정Java 8에 도입된 Stream API는 반복문 위주의 명령형 코드를 선언형 스타일로 바꾸고,더 나아가 병렬 처리를 손쉽게 구현할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 기본적인 사용법은youseong.tistory.com 1. WebFlux 코딩은 "로직의 조립" 이다WebFlux 코드를 처음 접하면 "왜 바로 실행되지 않지?" 라는 의문이 든다.그 이유는 코드가 실행되는것은 맞으나, WebFlux 관점에서는 조립이라는 개념으로 등장하기 때문이다. 예를 들어 코드를 하나 보자.@GetM..

Architecture 2026.01.02

Java 가상 스레드 해부 (Netty & Webflux를 대체할 수 있을까?)

지난 몇 년간 Java 생태계는 성능을 위해 비즈니스 로직을 Mono, FLux 같은 껍데기 속에 가두어 왔다.전통적인 Java 방식은 Blocking I/O 모델을 기반으로 하기 때문이고 이를 보완하기 위해 Event Loop 형식의 Netty, 이것을 활용할 수 있는 Webflux 등이 생겨나게 되었다.물론 I/O 성능을 획기적으로 개선시켜왔으나, Blocking이 발생하는 부분에 대해서 '워커 스레드 사용' 또는 맞춤형 라이브러리를 사용해야 하는것과 기술 부채를 발생시킬 여지가 숙제로 남아있다. 하지만 자바 21에서 정식 도입된 가상 스레드는 이러한 구조를 바꾸어놓았다.이 글에서는 가상 스레드가 어떻게 "가상화" 라고 불리는지, 그리고 정말로 리액티브 스택을 대체할 수 있는지 그 내부를 해부해 보고..

카테고리 없음 2025.12.23

NIO(New I/O)와 Webflux 비동기 프로그래밍

Java의 New Input/Output을 사용해보며 대규모 처리에서 중요한 개념이라고 생각되어 이를 소개합니다. 1. NIO는 어떤것이고 왜 사용하는가NIO가 등장하기 이전에 사용된던 방식은 Blocking I/O입니다.글에서는 편하게 과거 방식의 Blocking I/O 를 BIO 라고 부르겠습니다. BIO에서는 클라이언트당 하나의 스레드를 할당해야 하며, 클라이언트가 많아질 경우 OOM(Out Of Memory)이 발생하거나 과도한 context switching 등의 문제가 발생합니다. 예를 들어, 하나의 스레드를 생성하는 데 약 1MB의 메모리가 필요하다고 가정하면,10,000명의 클라이언트 요청을 동시에 처리할 경우 10GB의 메모리가 필요합니다. 이를 해결하기 위해 2002년 Sun Micro..

Java & Kotlin 2025.07.07

WebFlux의 기본 개념 (Event Loop, Lazy Evaluation, publish-subscribe)

이 글은 Netty + WebFlux가 작동하는 방식에 대한 기본 개념들을 설명합니다. Netty + WebFlux의 특징을 보면 적은 리소스로 많은 사용자의 동시 요청을 받을 수 있고,I/O 작업이 많은 경우 더 효율적입니다. Spring WebFlux는 "비동기", "논블로킹", "리액티브 스트림" 이라는 용어로 소개되지만, 처음 접할때는 다소 복잡하게 느껴질 수 있습니다. 그런데 WebFlux의 구조는 아래 개념만 알고있으면 사실 크게 복잡하지 않습니다.이벤트 루프지연 평가구독-발행 이벤트 루프이벤트 루프는 하나의 스레드가 반복적으로 이벤트를 감지하고, 이를 순차적으로 처리하는 실행 모델입니다 Java 개발자가 이해하기 쉽도록 코드로 표현하면 아래 코드와 같습니다.void eventWorker() ..

Spring 2025.07.01

Socket 통신

1. Socket 통신이란 무엇인가?Socket은 네트워크 프로그래밍에서 가장 기본적이고 중요한 개념 중 하나입니다. 다양한 네트워크 애플리케이션(채팅, 실시간 게임, 파일 전송 등)을 개발하려면 클라이언트-서버 간 통신이 필수적입니다. 이때 Socket은 데이터를 주고받는 양 끝단의 연결점을 의미합니다. 2. Socket 통신의 기본 개념2.1. Socket이란?Socket은 네트워크 상의 두 호스트 간 통신을 위한 인터페이스입니다.주로 TCP/IP 또는 UDP 프로토콜 위에서 데이터를 주고받을 때 사용됩니다. 2.2. TCP와 UDP의 차이구분TCPUDP프로토콜 타입연결형(Connection-oriented)비연결형(Connectionless)신뢰성데이터 무결성 및 순서 보장신뢰성 보장 안 함속도느림..

Java & Kotlin 2024.12.15