본문 바로가기

리액티브7

[서평 23년-21] 스프링 부트 실전 활용 마스터 독서기간_2023년 2월 26일 ~ 2023년 3월 저자_그렉 턴키스트 출간일_2021년 5월 28일 들어는 보았나 리액티브 스트림 개발. 입문자에겐 절대 비추천하는 책이다. "실전 활용"이 제목인만큼 일반적인 Spring Boot를 공부하지 않는다. WebFlux라는 라이브러리를 이용해 스트림 통신 개발을 다룬 책이다. 마치 Spring Boot가 리액티브 패러다임이 기본인 것처럼 알려준다. 친절한 설명과 따라 치기 쉬운 예제 덕분에 많은 공부가 되었다. 현직의 ㅎ도 시작 못한 백수지만 현직자가 공부하기 좋은 책같다. 음 그냥 읽어보세요! 자신이 얼마나 무지한지를 깨닫게 됩니다. 개발에 발을 담굴수록 느끼는 거지만 끝이 없다. 취업해서도 꾸준히 책 읽고 공부하는 개발자가 되어야지. 하고 싶은 건 많은데.. 2023. 5. 15.
[Spring Reactive] Spring Boot에서 R Socket 사용하기 TCP를 기반으로 하는 R소켓을 이용해서 서로 다른 시스템을 리액티브 하게 연결하는 방법을 알아보자. org.springframework.boot spring-boot-starter-rsocket 이 의존관계를 통해 다음 기능이 프로젝트에 추가된다. R소켓: 자바로 구현된 R소켓 프로토콜 리액터 네티: 네티는 리액티브 메시지 관리자 역할도 충분히 수행할 수 있다. 리액터로 감싸져서 더 강력한 서버로 만들어졌다. 스프링+잭슨: 메시지가 선택되고 직렬화되며 전송되고 역직렬화되고 파우팅되는 것은 프로토콜의 리액티브 속성만큼이나 중요하다. R소켓 서버 생성 @Service public class RSocketService { private final ItemRepository repository; // priv.. 2023. 3. 23.
[Spring Reactive] RabbitMQ를 이용해 메시지 브로커 사용하기 AMQP 메시지 프로듀서 @RestController public class SpringAmqpItemController { private static final Logger log = LoggerFactory.getLogger(SpringAmqpItemController.class); private final AmqpTemplate template; public SpringAmqpItemController(AmqpTemplate template) { this.template = template; } @PostMapping("/items") Mono 2023. 3. 21.
R Socket이란 무엇일까? 리액티브 스트림의 근간을 다루는 개념은 바로 배압(backpressure)이다. 하지만 HTTP는 리액티브하지 않다. HTTP는 요청-응답 패러다임에 뿌리를 두고 있다. 과거의 개발자들은 HTTP를 사용하는 단순 요청-응답을 넘어서 터널로 서로 연결하는 방법을 고민해왔다. > 첫 번째, 롱 폴링 클라이언트가 서버에 요청을 보낸 후 즉각적인 대답을 기대하지 않고, 오래 기다리더라도 서버의 응답을 기다린다. 응답을 받으면 처리하고 바로 새로운 요청을 서버에 보내 기다리는 식으로 연결 지속성을 확보한다. 하지만 자원을 점유한다는 한계가 있다. > 두 번째, 웹소켓 웹소켓은 HTTP와는 다르게 양방향이다. 가볍고 양방향 비동기 통신을 지원하지만 배압 개념이 없으므로 리액티브하지 않다. RSocket 리액티브 프.. 2023. 3. 20.
[Spring Reactive] 리액티브 테스트 작성하기 스프링부트와 리액터에서는 비동기, 논블로킹 코드도 JUnit을 이용해 테스트할 수 있다. 리액티브 단위 테스트 리액티브 코드를 테스트할 때 핵심은 기능만을 검사하는 게 아니라 리액티브 스트림 시그널도 함께 검사해야 한다는 점이다. 리액티브 스트림은 onSubscribe, onNext, onError, onComplete를 말한다. @ExtendWith(SpringExtension.class) class InventoryServiceTest { InventoryService inventoryService; @MockBean private ItemRepository itemRepository; @MockBean private CartRepository cartRepository; @BeforeEach voi.. 2023. 3. 13.
[Spring Reactive] 리액티브 데이터 Repository 정의하기 리포지토리를 생성하기 앞서 도메인은 다음과 같다. public class Item { private @Id String id; private String name; private double price; private Item(){} public Item(String name, double price) { this.name = name; this.price = price; } public String getId() { return id; } } 블로킹API인 JPA를 사용하지 않지만 JPA와 매우 유사한 인터페이스가 정의되어 있다. ReactiveCrudRepository 인터페이스를 상속하면 된다. 주석 내용은 기본적으로 제공하는 메서드이다. JPA와 거의 동일하게 제공한다는 것을 알 수 있다. pub.. 2023. 3. 12.
[Spring Reactive] 리액티브 데이터베이스 저장 요건 리액티브 프로그래밍의 핵심은 모든 과정이 리액티브여야 한다! 웹 컨트롤러와 서비스 계층도 리액티브 방식으로 동작하게 만들었는데, 블로킹 방식으로 연결되는 데이터베이스를 호출하면 리액티브는 무너진다. 블로킹 방식으로 데이터베이스를 호출한 스레드는 응답을 받을 때까지 다른 작업을 하지 못한 채 기다린다. 동기, 비동기와 블로킹, 논블로킹 개념이 헷갈린다면? 2023.03.09 - [Develop/CS] - 동기(Synchronous)와 비동기(Asynchronous), 블로킹(Blocking)과 논블로킹(Non-Blocking) 그렇다면 어떤 데이터베이스가 리액티브 패러다임을 지원하고 있을까? 몽고디비 레디스 아파치 카산드라 엘라스틱서치 네오포제이 카우치베이스 우리가 평소 사용하는 관계형 데이터베이스는 포함.. 2023. 3. 10.