새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
TIL) 데이터 파이프라인과 리액티브 스트림 학습
오늘은 리액티브 스트림에 대해서 추가로 학습을 하며 자바 환경에서 리액티브 스트림을 사용한다는 의미를 알아가려고 합니다.
아직 리액티브 스트림을 개발자가 사용한다는 건 어떤 의미를 갖는지 모릅니다.
리액티브 스트림은 외부 API 통신하거나 내부 API를 호출하는 과정이 필요합니다.
구글링과 AI에게 물어보니 기존 MVC를 사용하는 환경은 리액티브 스트림을 활용하기 적절하지 않다.
기본적인 원리가 쓰레드가 I/O를 요청하면 블락이 되기 때문입니다.
적절하게 사용하기 좋은 곳이 “데이터 파이프라인”이다 라고 하더라구요
그럼 먼저 낯선 단어인 “데이터 파이프라인”에 대해서 정리하겠습니다.
학습 목표
- 데이터 파이프라인의 정의
- 리액티브 스트림이란
- 리액티브 스트림을 자바 백엔드 영역에서는 어떻게 사용할까
- 리액티브 스트림을 사용하는 건 어떤 의미를 가질까?
학습 정리
먼저 데이터 파이프라인에 대해서 정리해보겠습니다.
데이터 파이프라인이란
데이터 파이프라인은 입력과 출력 사이의 여러 데이터 처리 과정을 추상화하여,
각 단계별 효율적으로 분리하고 연산 비용과 리소스 비용을 최적화하는 흐름을 말합니다,
Flux.fromIterable(운송데이터목록)
.filter(화물 -> 화물.get무게() > 5톤)
.map(화물 -> 화물.주소변환())
.flatMap(화물 -> 외부API호출(화물))
.subscribe(결과 -> 결과저장(결과));
목록 > 필터링 >주소변환 > 외부 API 호출 > 결과 저장
이런 것을 데이터 파이프라인이라고 합니다.
비동기 프로그래밍를 배워보자
비동기 프로그램을 가기 전에 제한된 자원과 Blocking I/O 환경에서 어떠한 문제가 발생할 수 있는지 확인해보겠습니다.
현재 웹 요청이 많아지게 되었고 503이나 클라이언트 타임아웃이 많아지게 되어 해결책을 톰캣 스레드풀, 커넥션 스레드풀의 설정 값을 늘리는 방법이 생각날 수 있습니다.
스레드풀과 DB 커넥션 풀의 크기를 늘리는 것은 위험하다.
애플리케이션의 스레드 풀과 데이터베이스 커넥션 풀 크기를 무분별하게 높이는 것은 다양한 성능 문제를 유발할 수 있습니다.
특히 CPU, 메모리, DB 등 주요 리소스의 효율성이 떨어지게 되며, 최악의 경우 시스템 다운이나 장애로 이어질 수 있습니다.
댓글남기기