20,000+ RPS 병렬처리를 위한 네이버 면접관이 알려주는 Reactive 프로그래밍
개발 · 프로그래밍 · 백엔드
서버를 늘리는 대신 구조를 바꿉니다
스레드가 막히지 않는 Reactive 프로그래밍
이 강의는 Reactive를 "비동기"라는 단어 하나로 끝내지 않고, 같은 자원으로 더 많은 요청을 처리하는 구조로 다루는 실습 강의입니다. 초당 20,000건 이상의 요청을 스레드를 늘리지 않고 받아내는 구조가 목표입니다. 리액티브 스트림과 Back Pressure에서 시작해 Reactor의 Mono와 Flux를 직접 쓰고, Spring WebFlux 기반 실무 패턴까지 이어집니다.
- 난이도 입문
- 실습 중심
- Java 17 · Spring Boot
- 수강기한 무제한
- Thread per Request → 이벤트 루프구조 자체를 바꾸는 관점
- 개념에서 실무 패턴까지거의 모든 시간이 실습으로 이어집니다
- Mono · Flux · Back Pressure개념이 아니라 코드로 확인
네이버 현직 10년차 서버 개발자가 함께 구성한 커리큘럼
난이도는 입문이지만 5·6섹션의 실무 패턴은 이미 WebFlux를 쓰고 있는 분에게도
새로운 내용입니다
실습 환경은 macOS(Apple M3) · Java 17 · Docker
이 강의가 시작된 이유
스레드가 다 막힌다는 하소연에서 시작했습니다
아래는 실제 대화 내용입니다. 트래픽이 터진다는 토스 개발자와, 일부 서비스를 WebFlux로 전환해 본 네이버 개발자의 대화예요.
그렇게 이 강의가 만들어졌습니다. 실제로 전환해 본 사람이 "이 정도는 알아야 한다"고 짚은 내용이 그대로 커리큘럼이 됐어요.
“
처리량 관점에서는
리액티브를 따라갈 수 없습니다.
현직 네이버 본사 서버 개발자10년차 · 일부 서비스를 WebFlux로 직접 전환
지금 겪고 있는 일
백엔드 개발자는 동기 방식만 잘하면 충분할까요
전통적인 Spring MVC 기반으로 잘 돌아가고 있다면 다행입니다. 그런데 트래픽이 늘기 시작하면 아래가 순서대로 옵니다.
- 외부 API 호출이 많아지면서 응답이 점점 느려진다
- CPU는 여유로운데 스레드 풀이 금방 고갈된다
- 트래픽은 늘어나는데 인프라 비용도 같이 올라간다
- 비동기로 바꿔 보려니 코드가 점점 복잡해진다
서버를 늘려서 버티는 것과, 같은 자원으로 더 받는 것은 다른 이야기입니다.
Why Spring WebFlux
Spring WebFlux는 무엇이 다른가요
Spring WebFlux는 논블로킹 기반의 리액티브 웹 프레임워크입니다. 전통적인 Spring MVC가 요청마다 스레드를 붙이는 Thread per Request 모델이라면, WebFlux는 이벤트 루프 기반 구조로 동작합니다. Java와 Spring Boot 위에서 그대로 쓸 수 있습니다.
-
Non-Blocking I/O
WebFlux는 요청을 처리하는 동안 스레드를 붙잡지 않아, 적은 스레드로도 높은 동시성을 감당합니다. -
Back Pressure
WebFlux는 리액티브 스트림 표준을 따라, 데이터를 만드는 쪽과 쓰는 쪽의 속도를 맞춰 과부하를 막습니다. -
이벤트 루프
WebFlux는 요청마다 스레드를 배정하지 않고 이벤트 루프로 처리해, 동시 요청이 많은 환경에서 유리합니다. -
High Concurrency
WebFlux는 외부 API 호출이나 DB I/O처럼 기다리는 시간이 긴 작업에서 스레드를 막지 않아 고트래픽에 강합니다. -
Mono · Flux
Reactor의 Mono는 0~1개, Flux는 0개 이상의 데이터를 발행하는 타입입니다. 병렬 처리의 출발점이 이 둘입니다. -
Functional
WebFlux는 Spring MVC와 비슷한 애노테이션 방식은 물론, RouterFunction을 활용한 함수형 구성도 지원합니다.
공식 문서는 Spring WebFlux를 이렇게 설명합니다.
The reactive-stack web framework, Spring WebFlux, was added later in version 5.0. It is fully non-blocking, supports Reactive Streams back pressure, and runs on such servers as Netty, and Servlet containers.
리액티브 스택 웹 프레임워크인 Spring WebFlux는 5.0 버전에서 추가됐습니다. 완전히 논블로킹으로 동작하고 리액티브 스트림의 Back Pressure를 지원하며, Netty 같은 서버는 물론 기존 서블릿 컨테이너에서도 실행됩니다. spring-webmvc와 spring-webflux는 Spring Framework 안에서 나란히 공존하며, 필요하면 함께 쓸 수도 있습니다.
인프라를 늘리기 전에 확인할 것이 있습니다
리액티브가 무엇인지에서 시작해 WebFlux 실무 패턴까지 이어집니다.
채용 시장의 현실
실제 공고는 무엇을 요구하나요
서버 개발자 채용 공고를 그대로 가져왔습니다. 대용량 트래픽과 비동기·논블로킹 처리 경험이 요구 사항에 들어 있습니다.
이 강의의 특징
왜 이 Reactive 프로그래밍 강의인가요
네이버 플랫폼 환경에서의 전환 경험을 기반으로 합니다
WebFlux 문법을 나열하는 강의가 아닙니다. 대규모 트래픽과 외부 API 의존이 큰 환경에서 어떤 문제를 겪었고 왜 Reactive 구조를 골랐는지, 그 배경부터 설명합니다.
거의 모든 시간이 실습으로 이어집니다
Reactive는 이론만으로 감이 안 옵니다. Mono와 Flux의 동작 흐름, 논블로킹 처리 방식, 이벤트 루프 구조를 직접 코드로 확인해야 이해가 붙습니다.
MVC와의 구조적 차이로 설명합니다
"비동기"라는 단어 하나로는 부족합니다. Thread per Request 모델의 한계, 블로킹 구간이 만드는 병목, 논블로킹 아키텍처의 동작 방식을 나란히 놓고 비교합니다.
주니어에게는 시야를, 시니어에게는 선택 기준을
WebFlux는 유행 기술이 아니라 고동시성 환경에서의 선택지 하나입니다. 언제 고르고 언제 고르지 않아야 하는지까지 다룹니다.
수강 후 달라지는 것
이 강의를 끝내면 무엇을 할 수 있나요
아래 다섯 가지는 강의를 마친 뒤 코드로 만들 수 있거나, 면접에서 근거를 들어 설명할 수 있는 것들입니다.
-
판단
지금 겪는 병목이 스레드 대기 때문인지 CPU 때문인지 구분하고, WebFlux가 답인 상황인지 아닌지 고를 수 있습니다. -
구현
Mono와 Flux로 단건·다건 흐름을 표현하고, 연산자를 조합해 여러 외부 호출을 병렬로 묶을 수 있습니다. -
흐름 제어
생산 속도가 소비 속도를 앞지를 때 Back Pressure로 조절해 메모리가 터지는 상황을 막을 수 있습니다. -
위험 회피
리액티브 체인 안에 블로킹 코드가 섞였을 때 왜 위험한지 설명하고, 그 지점을 찾아낼 수 있습니다. -
전환
기존 MVC 프로젝트 전체를 갈아엎지 않고 필요한 구간만 논블로킹으로 바꾸는 방식을 설계할 수 있습니다.
이런 분께 추천해요
이 Reactive 프로그래밍 강의는 누구를 위한 강의인가요
- 트래픽이 늘어날수록 스레드 풀 고갈이 불안한 백엔드 개발자
- MVC 구조의 한계를 느끼지만 대안을 찾지 못한 Spring 개발자
- Reactive를 도입하고 싶은데 개념이 막연해 시도조차 못 한 개발자
- 인프라 확장으로만 문제를 해결해 비용 부담이 커지는 팀의 개발자
- MSA 환경에서 서비스 간 통신 지연으로 고민하는 플랫폼 개발자
- 고동시성 환경 설계 경험이 부족해 커리어 성장에 갈증을 느끼는 개발자
반대로 Back Pressure가 어디서 동작하는지, 블로킹 코드를 섞으면 왜 위험한지, MVC와 WebFlux 중 무엇을 골라야 하는지를 지금 바로 설명할 수 있다면 이 강의는 필요하지 않습니다.
커리큘럼
Reactive 프로그래밍 강의 커리큘럼
리액티브를 처음 배우는 개발자를 위한 순서로 구성돼 있습니다. 개념과 스펙에서 시작해 Reactor 기초, 연산자, 실무 패턴, Spring Boot 기반 활용으로 이어집니다.
섹션 2. 리액티브 프로그래밍의 모든 것
- 리액티브 프로그래밍이란 대체 뭘까
- 자바 생태계에서 표준화하여 사용하는 리액티브 스트림의 스펙
- 데이터 스트림 구조에서 OOM 방지를 위한 배압(Back Pressure) 효과
- Spring MVC와 Spring WebFlux의 차이점과 주의사항
섹션 3. WebFlux Reactor 사용을 위한 기초
- Spring Framework팀이 만든 Reactor 소개와 실습
- 0~1개의 데이터를 발행하는 Reactor Mono 기본 및 핵심 사용법
- 0개 이상의 데이터를 발행하는 Flux 등 나머지 기초
섹션 4. WebFlux Reactor의 다양한 연산자
- 데이터를 변환하고 합치고 거르는 연산자들을 실습으로 다룹니다.
섹션 5. WebFlux에서의 옵셔널한 실무 패턴
- 실무에서 만나는 예외 상황과 대응 패턴을 다룹니다.
섹션 6. Spring Boot 기반 WebFlux 활용 패턴
- Spring Boot 위에서 WebFlux를 실제로 구성하는 패턴으로 마무리합니다.
다루는 기술 · 실습 환경
무엇으로 실습하나요
- webflux
- Reactor
- Mono · Flux
- Back Pressure
- 리액티브 스트림
- 이벤트 루프
- 병렬 처리
- Java
- Spring
- Spring Boot
- Docker
- macOS (Apple M3)
Apple M3 Air 환경에서 Java 17.0.12 LTS로 진행하며, 필요한 경우 Docker(28.0.0)로 주변 환경을 띄웁니다.
커리큘럼까지 다 보셨다면
수강기한은 무제한입니다. 필요한 섹션만 다시 꺼내 볼 수도 있어요.
누가 만들었나요
현업 서버 개발자가 함께 만들었습니다
이 강의는 판교 플랫폼 서버 개발자 Hong과, 네이버 본사 10년차 서버 개발자인 Ande가 함께 만들었습니다.
지식공유자 · 판교 플랫폼 서버 개발
Hong
판교에서 플랫폼 서버 개발을 담당하고 있습니다. 직접 공부한 방법과 실무에서 마주치는 문제·해결책을 나누려고 지식공유자 활동을 이어가고 있어요. 강의는 혼자가 아니라 현업의 여러 개발자와 함께 만듭니다.
- [現] 판교 플랫폼 서버 개발자
- 인프런 지식공유자 · 백엔드 강의 다수 운영
- [前] 블록체인 · 메타버스 백엔드 개발
네이버 · 10년차 서버 개발자
Ande
10년차 백엔드 서버 개발자입니다. 알고 있는 기술과 스택을 다른 분들과 나누고 싶어 강의를 만들게 됐고, 제가 했던 실수를 다른 분들은 하지 않았으면 합니다. 카카오 면접관의 추천으로 합류해 Hong의 주도 아래 함께 촬영했습니다. 질문도 편하게 주시면 최대한 확인하고 답변드리겠습니다.
- [現] 네이버 본사 서버 개발자
- [前] 신세계 그룹 소속 백엔드 개발자
- [前] 헬스케어 스타트업 서버 개발자
- [前] 서울 4년제 컴퓨터공학 전공
자주 묻는 질문
Reactive 프로그래밍 강의 자주 묻는 질문
리액티브 프로그래밍이 무엇인가요?
데이터를 흐름(스트림)으로 보고, 그 흐름이 밀려올 때 스레드를 붙잡지 않고 처리하는 방식입니다. 자바 생태계에는 리액티브 스트림이라는 표준 규격이 있고, Spring 진영의 구현체가 Reactor, 그 위에 얹힌 웹 프레임워크가 Spring WebFlux입니다. 섹션 2에서 개념과 스펙을 먼저 정리합니다.
리액티브 프로그래밍은 비동기 프로그래밍과 같은 건가요?
같지 않습니다. 비동기는 결과를 기다리지 않고 다른 작업을 진행한다는 넓은 개념이고, 리액티브 프로그래밍은 그 비동기 흐름을 데이터 스트림으로 다루면서 소비 속도에 맞춰 생산 속도까지 조절하는 프로그래밍 모델입니다. 이 강의가 "비동기"라는 단어만으로는 부족하다고 말하는 이유가 바로 이 Back Pressure 부분입니다.
Spring MVC와 Spring WebFlux는 무엇이 다른가요?
MVC는 요청 하나에 스레드 하나를 붙이는 Thread per Request 모델이라, 외부 API 호출처럼 기다리는 구간이 길어지면 스레드가 묶여 병목이 생깁니다. WebFlux는 이벤트 루프 기반 논블로킹이라 기다리는 동안 스레드를 놓아줍니다. 섹션 2의 마지막 강에서 차이와 주의사항을 함께 다룹니다.
Mono와 Flux는 각각 무엇인가요?
둘 다 Reactor가 제공하는 데이터 발행 타입입니다. Mono는 0개 또는 1개를 발행하고, Flux는 0개 이상을 발행합니다. 단건 조회는 Mono, 목록이나 스트림은 Flux로 표현합니다. 섹션 3에서 각각의 기본과 핵심 사용법을 실습으로 다룹니다.
Back Pressure(배압)는 왜 필요한가요?
데이터를 만드는 쪽이 소비하는 쪽보다 빠르면 처리되지 않은 데이터가 메모리에 쌓여 OOM으로 이어질 수 있습니다. Back Pressure는 소비자가 감당할 수 있는 만큼만 요청하도록 흐름을 조절하는 장치입니다. 섹션 2에서 OOM 방지 관점으로 다룹니다.
WebFlux를 쓰면 무조건 빨라지나요?
아니요. WebFlux가 강점을 갖는 건 외부 API 호출이나 I/O 대기가 많아 스레드가 묶이는 상황입니다. CPU를 오래 쓰는 연산이 병목이라면 구조를 바꿔도 크게 달라지지 않고, 중간에 블로킹 코드가 섞이면 오히려 손해입니다. 이 강의는 그 판단 기준까지 함께 다룹니다.
기존 MVC 프로젝트 전체를 WebFlux로 바꿔야 하나요?
전부 바꿀 필요는 없습니다. spring-webmvc와 spring-webflux는 Spring Framework 안에서 나란히 공존하고, 필요한 서비스만 논블로킹으로 전환하는 방식도 가능합니다. 실제로 강사도 일부 서비스만 전환해 같은 자원에서 처리량을 끌어올린 경험을 이 강의에 담았습니다.
Reactive 입문자도 따라갈 수 있나요?
네. 난이도 입문 강의로, 리액티브가 무엇인지와 스트림 스펙에서 시작해 Reactor 기초, 연산자, 실무 패턴 순서로 올라갑니다. Java와 Spring Boot를 써 본 경험이 있으면 충분하고, 뒤쪽 실무 패턴은 이미 WebFlux를 쓰고 있는 분에게도 새로운 내용입니다.
실습 환경은 어떻게 구성하나요?
Apple M3 Air에서 Java 17.0.12 LTS로 진행하며, 필요한 경우 Docker 28.0.0으로 주변 환경을 띄웁니다. 별도의 유료 클라우드 결제 없이 로컬에서 전부 실습할 수 있습니다.
Reactive 프로그래밍 강의 커리큘럼은 어떤 순서인가요?
리액티브 개념과 리액티브 스트림 스펙, Back Pressure, MVC와의 차이에서 시작해 Reactor 기초(Mono·Flux), 다양한 연산자, 실무 패턴, Spring Boot 기반 WebFlux 활용 순으로 이어집니다. 수강기한은 무제한입니다.
스레드를 늘리는 대신, 흐름을 설계합니다
리액티브가 무엇인지에서 시작해 Mono·Flux와 실무 패턴까지 전부 실습으로 확인합니다.
함께 성장해요
개발자 오픈 채팅방
커리어와 현업 상황, 기술을 나누는 개발자 오픈 채팅방을 운영하고 있어요. 강의를 들으며 궁금한 점이나 실무 고민을 편하게 나눠 보세요.