| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- netty
- GitOps
- Kotlin
- 백엔드개발
- spring boot
- prometheus
- Java
- selector
- CloudNative
- RDBMS
- monitoring
- kafka
- DevOps
- SpringBoot
- JPA
- mysql
- 동시성제어
- 성능 최적화
- webflux
- Kubernetes
- NIO
- 성능최적화
- grafana
- 백엔드
- 트랜잭션
- jvm
- docker
- helm
- 데이터베이스
- redis
- Today
- Total
목록selector (4)
유성
Spring Data JPA를 사용하다가 R2DBC로 넘어오면 가장 먼저 마주치는 당황스러운 지점이 있다.바로 Page를 반환하는 메서드를 만들 수 없다는 것이다. 왜 R2DBC는 그 편리한 페이지네이션을 공식적으로 지원하지 않을까? 1. 근본적인 원인: DB는 'Page'라는 개념이 없다.우리가 SQL에서 사용하는 LIMIT과 OFFSET은 데이터를 끊어서 가져오는 도구일 뿐, DB 엔진 자체가 "전체 10페이지 중 1페이지" 라는 객체를 만들어 주지는 않는다.(만약 이러한 객체가 있었다면 충분히 리액티브 스타일이 가능했다) Page 객체를 만들기 위해서는 반드시 두 가지 정보가 필요하다.조회 데이터: LIMIT, OFFSET으로 잘라낸 데이터 뭉치전체 카운트: SELECT COUNT(*)로 계산한 전..
Spring WebFlux를 사용하다 보면 flatMap이 어떻게 쓰레드를 차단하지 않고 데이터를 흘려보내는지 궁금할 때가 있다.흔히 "이벤트 루프 기반이다", "논블로킹이다"라고 말하지만, 이를 로우 레벨에서 직접 구현해 보면 그 본질을 더 명확히 이해할 수 있다. 이번 글에서는 Java NIO의 Selector와 Pipe를 이용해, WebFlux의 Assembly-Subscription 구조를 간단하게 직접 코드로 구현해본다. 1. 핵심 개념: 왜 Selector인가?WebFlux의 기반인 Netty는 내부적으로 자바의 Selector를 사용한다.Selector는 하나의 쓰레드가 여러 채널(소켓, 파이프 등)을 감시하게 해준다.Assembly (조립): 파이프라인을 구성하는 단계 (flatMap 호출..
이 글에서는 WebFlux, 정확히 말하면 Netty의 이벤트 루프 스레드가 어떤 메커니즘으로 구동되고 제어되는지 그 근본적인 원리를 알아본다. 1. 이벤트 루프의 주도권은 OS 커널에 있다.당연한 이야기지만, 이벤트 루프를 깨워 일을 시키는 실질적인 주체는 OS 커널이다.사용자가 WebFlux 서버에 요청을 보냈을 때, 데이터가 네트워크 카드에서 이벤트 루프까지 도달하는 과정을 시간 순서대로 살펴보자. 데이터 유입과 소켓 디스크립터의 생성먼저 사용자의 요청은 패킷에 담겨 네트워크를 통해 서버의 네트워크 카드(NIC)에 도달한다.이때 NIC와 CPU(커널)는 협력하여 이 전기 신호를 정리하고 조합하여 '소켓 디스크립터(Socket Descriptor)'를 생성한다. 소켓 디스크립터란? 연결 정보(IP, ..
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..