본문 바로가기
슬기로운 자바 개발자 생활/스프링 및 자바웹 서비스

나는 공부 중 Reactive Streams 첫 번째

by 슬기로운 동네 형 2022. 4. 27.
반응형

 우연히 MSA를 공부하다가 도서관에서 RxJava를 알게됨. RxJava 책을 빌려보다가 Reactive 프로그래밍에 대해 알게 됨.

 

 리액티브 스트리밍, 리액티브 프로그래밍, 함수형 프로그래밍, 비동기, 백 프레셔, 논블록킹 ... 어디선가 지나치듯 들어봤고 Node.js 하면서 비동기 처리도 얼릿 들어보고 대충 이곳저곳 기웃거리며 조금 안다고 생각했는데 현실은 모르고 있었네요.

 

"사건1"

제 기준에서 엄청난 량의 데이터를 뽑는 유저들이 있었습니다. 20만건 정도의 로우인데 컬럼이 50개가 넘고, 쿼리도 꽤 복잡했습니다. 그런데 조회를 하면 10 ~ 30분 정도 넘게 걸리면서 WAS가 먹통이 되더라고요. 모니터링 툴을 보며 돌려보니 힙이 80% 이상 차고 원래대로 돌아가지도 않고... WAS 메모리를 늘려보니 느리긴 해도 되긴 되더라고요. 하지만... 여러번 실행해보니 그때그때 데이터가 그리드에 출력이 될때도 있고 안되기도 하고 WAS가 멈출 때도 있었습니다.

 

http://www.reactive-streams.org/

 

 

스트리밍 처리, 비동기 방식, 빽 프레셔 ?

 

비동기, 논블럭킹 비슷한 느낌이지만 엄연히 다르니까 이름도 다르다고 생각해요. 널리고 널린 설명들이 난무하니 패스.

 

"스트리밍 처리" 

원래 DB, 스프링, JSP 아주 평범한 모놀리식 지난 몇 년간의 개발환경에서는 데이터 처리 요청이 클라이언트로 부터 오면 어플리케이션 메모리에 저장한 다음 처리가 되니 제가 겪은 "사건1" 처럼 엄청난 데이터를 DB에서 조회해 List로 담으면 결국 조회될 데이터량이 많아지고  량, 조회조건을 우겨넣어 제한 하지 않는다면, Out Of Memory를 만나게 됩니다.  그리고 다른 사용자들은 서버가 느리다 거나 응답이 안온다거나....등 의 사건을 겪게 되죠.

 

 그런데 스트리밍 처리를 하게 되면 말그대로 데이터를 흘리는 개념? Q ? Event Loop? PipeLine....

 

반응형

댓글