본문 바로가기
반응형

Develop/Reactor+Corutine3

[Reactor] 서버 느리게 만드는 API 개발하기 (feat: block) 1. 엉망진창 시작 🤯 Reactor에 대해서 'WebFlux는 비동기 프로그래밍할 때 쓴다', 'Mono는 단일 요소, Flux는 여러 요소' 이 두 가지 외에는 아무것도 모르는 상태에서 로직을 작성해야 했다. WebFlux의 기본 문법을 공부하는 중이긴 했지만, 학습 속도보다 업무 진행이 훨씬 급했다. 무작정 코드를 작성하니 어떻게든 내가 원하는 결과가 만들어졌다. 베타 서버 데이터를 이용한 테스트도 완료했다. 성공 케이스, 실패 케이스, 에러 케이스 모두 예상한대로 돌아갔다. 며칠 뒤, 퇴근했다가 갑자기 베타 서버가 이상하다는 슬랙이 온다.😭  2. 문제의 코드 😵 자세한 비즈니스 로직을 생략하기 위해 조금 억지스러운 예제를 가져왔다. 상품을 조회할 때, 상품을 판매하는 판매사명이 "test".. 2024. 5. 6.
[Spring] ReactiveCrudRepository를 이용한 삭제 시 주의점 😟 문제 상황 찜을 삭제하고 별도의 작업을 위해 event publish 하는 로직을 작성하였다.fun remove(favorite: Favorite): Mono = favoriteRepository.deleteById(favorite.id) .flatMap { productService.findById(favorite.productId) } // event publish할 때 필요한 데이터 조회 .flatMap { product -> val favoriteRequest = toFavoriteEventRequest(favorite, product) Mono.fromCallable { favoriteEventPublisher.publ.. 2024. 4. 28.
[Reactor] zip vs zipWith vs zipWhen 💡 zip() 여러개의 Publisher를 인자로 넘기고, 이 모든 Publisher들의 결과를 한 묶음으로 조회할 수 있다. Publisher를 최대 8개까지 넘길 수 있다. 예외나 빈값이 발견되면 즉시 에러/완료 처리된다. Flux userFluxFromStringFlux( Flux usernameFlux, Flux firstNameFlux, Flux lastNameFlux ) { return Flux.zip(usernameFlux, firstNameFlux, lastNameFlux) .map(it -> new User(it.getT1(),it.getT2(),it.getT3())); // 아래와 같이 각 결과에 이름을 붙일 수 있다. // .map((username, firstName, lastNam.. 2024. 4. 7.
반응형