새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

1 분 소요

오늘은 리액티브 스트림에 대해서 추가로 학습을 하며 자바 환경에서 리액티브 스트림을 사용한다는 의미를 알아가려고 합니다.

아직 리액티브 스트림을 개발자가 사용한다는 건 어떤 의미를 갖는지 모릅니다.

리액티브 스트림은 외부 API 통신하거나 내부 API를 호출하는 과정이 필요합니다.

구글링과 AI에게 물어보니 기존 MVC를 사용하는 환경은 리액티브 스트림을 활용하기 적절하지 않다.

기본적인 원리가 쓰레드가 I/O를 요청하면 블락이 되기 때문입니다.

적절하게 사용하기 좋은 곳이 “데이터 파이프라인”이다 라고 하더라구요

그럼 먼저 낯선 단어인 “데이터 파이프라인”에 대해서 정리하겠습니다.

학습 목표

  • 데이터 파이프라인의 정의
  • 리액티브 스트림이란
  • 리액티브 스트림을 자바 백엔드 영역에서는 어떻게 사용할까
  • 리액티브 스트림을 사용하는 건 어떤 의미를 가질까?

학습 정리

먼저 데이터 파이프라인에 대해서 정리해보겠습니다.

데이터 파이프라인이란

데이터 파이프라인은 입력과 출력 사이의 여러 데이터 처리 과정을 추상화하여,
각 단계별 효율적으로 분리하고 연산 비용과 리소스 비용을 최적화하는 흐름을 말합니다,

Flux.fromIterable(운송데이터목록)
    .filter(화물 -> 화물.get무게() > 5)
    .map(화물 -> 화물.주소변환())
    .flatMap(화물 -> 외부API호출(화물))
    .subscribe(결과 -> 결과저장(결과));

목록 > 필터링 >주소변환 > 외부 API 호출 > 결과 저장

이런 것을 데이터 파이프라인이라고 합니다.

비동기 프로그래밍를 배워보자

비동기 프로그램을 가기 전에 제한된 자원과 Blocking I/O 환경에서 어떠한 문제가 발생할 수 있는지 확인해보겠습니다.

현재 웹 요청이 많아지게 되었고 503이나 클라이언트 타임아웃이 많아지게 되어 해결책을 톰캣 스레드풀, 커넥션 스레드풀의 설정 값을 늘리는 방법이 생각날 수 있습니다.

스레드풀과 DB 커넥션 풀의 크기를 늘리는 것은 위험하다.

애플리케이션의 스레드 풀과 데이터베이스 커넥션 풀 크기를 무분별하게 높이는 것은 다양한 성능 문제를 유발할 수 있습니다.

특히 CPU, 메모리, DB 등 주요 리소스의 효율성이 떨어지게 되며, 최악의 경우 시스템 다운이나 장애로 이어질 수 있습니다.

댓글남기기