본문 바로가기

web59

[WebClient] WebClient 로 카카오모먼트 API 연동하기 Spring 어플리케이션에서 HTTP 요청을 할 땐 주로 RestTemplate 을 사용했었다. 하지만 Spring 5.0 버전부터는 RestTemplate 은 유지 모드로 변경되고 향후 deprecated 될 예정이므로 WebClient 쓰기를 적극 권장하고있다. (참고 https://docs.spring.io/spring-framework/reference/web/webflux-webclient.html) WebClient 는 논블로킹/블로킹 모두 지원한다.(참고로 RestTemplate는 블로킹방식이다.) 특징 싱글 스레드(코어당 1개의 스레드)와 Non-Blocking 방식 사용 높은 처리량과 확장성이 좋다. 이벤트에 반응형으로 동작(Spring React 프레임워크 사용) Reactor 기반의 .. 2023. 11. 8.
[WEB][Reactor Java] Mono와 Flux를 생성하는 방법 Reactor는 Reative Streams 명세를 기반으로 JVM에서 반응성 Non-Blocking 애플리케이션을 생성하기 위한 JAVA 라이브러리입니다. 처음에는 이 라이브러리로 작업하는것이 어려울 수 있습니다. 이 시리즈는 Mono 및 Flux 클래스를 통해 Reactor를 제공하는 Reactive Streams의 실행을 생성, 조작, 관리하는 과정을 설명합니다. Mono와 Flux는 모두 반응성 스트림이지만 표현하는 것이 다릅니다. Mono: 0개 또는 1개의 요소의 Stream Flux: 0개 ~ N개의 요소의 Stream 예를들어 HTTP 서버에 요청을 하면 응답이 없거나 한 개의 응답을 받으므로 이 경우 Flux보다는 Mono가 더 적절합니다. 반대로 어떤 구간에서 수학적인 함수의 결과를 계.. 2023. 11. 8.
[WEB] Reactive Streams Reactive Streams? 리액티브 스트림은 자바와 다른 언어에서 사용되는 프로그래밍 패러다임으로, 데이터 스트림을 논블로킹(non-blocking) 및 비동기(asynchronous) 방식으로 처리하는 데 중점을 둔다 이 접근 방식은 대량의 데이터 또는 높은 동시성 수준을 처리할 때 리소스를 보다 효율적으로 사용하고 성능을 향상시킬 수 있다 리액티브 프로그래밍은 실시간 데이터(예: 실시간 피드 또는 사용자 상호 작용)를 다룰 때 특히 유용하다. 전통적인 순차 또는 명령형 프로그래밍에서는 코드가 단계별로 실행되며, 이전 작업이 완료될 때까지 각 작업이 대기한다. 이는 I/O 바운드 작업이나 오래 실행되는 작업을 처리할 때 비효율적일 수 있다. 반면에 논블로킹(non-blocking) 실행은 작업이 .. 2023. 11. 8.
[REST API] 페이징(Paging) 처리하기 지금 진행하고 있는 프로젝트에서, 처음에 내가 API 개발을 해줄 때 페이징 처리까지 다 해서 줬었더랬다.. 근데, 위에서 View 단에서 다 알아서 할테니 그냥 전체리스트를 넘겨달라고 하더라? ... 아니 View에서 알아서 처리한다고? 어떻게 한다는거지?? 내가 모르는 신박한 방법이 있나? 싶어 일단 군말없이 시키는대로 했다. 하지만 성능테스트를 위해 확인해보니 View에서 페이징를 위해 전체 리스트를 갖고와서 리스트에 넣어둔 뒤 페이지마다 10개씩 뿌려주는식 ㅋㅋㅋㅋ 예상은 했지만 정말로 이렇게 진행을 해놨더라. ㅜ ㅜ.... 결국 이슈로 제기해서 기존에 해줬던 방식으로 소스를 원복하였다. 잡소리가 길었다. 이 글을 읽으시는분들은 이런식으로 페이징처리 하지말기를... 원복하는김에 생각보다 페이징은 .. 2023. 11. 6.