일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링공부
- Axon framework
- 스프링
- nestjs공부
- querydsl
- JPA스터디
- 플러터 공부
- nestjs
- DDD
- 카프카
- 스프링부트공부
- 자바공부
- JPA 공부
- 자료구조공부
- 스프링 공부
- nestjs스터디
- K8S
- 코테준비
- JPA
- Kafka
- 알고리즘공부
- 기술면접공부
- 스프링부트
- 프로그래머스
- JPA예제
- 기술공부
- JPA공부
- Flutter
- 플러터 개발
- 코테공부
- Today
- Total
DevBoi
[Spring WebFlux] 프로젝트 시작 및 리액티브 프로그래밍 기초 본문
컴포넌트 탐색,
스프링 애플리케이션이 실행되면, 모든 빈은 애플리케이션 컨텍스트에 등록이 된다.
실제로 이제 코딩을 시작해보자
1.ServerController
해당 컨트롤러에서는 서비스에 대한 주입과,
다량의 특정 객체를 반환하는 메서드, 그리고 그 메서드는 서비스의 getDish를 통해서 반환한다.
그리고 produces에서 텍스트 이벤트 스르팀 벨류라는 미디어 타입이있는데, 해당 은 서버에서 주는 스트림을 쉽게 소비한다.
미디어 타입에 대한건 다른 포스팅에서 다뤄보자
2. kitchenService
@Service는 해당 서비스를 스프링 빈에등록하기 위함이다.
아까 컨트롤러에서 사용한 getDishes() 메소드는, randomDish를 통해 랜덤으로 호출된 것을 return 한다.
generate와 next에 대한 웹 플럭스의 고유 기능들은 이따가 확인 해보자
이제 curl로 해당 도메인을 호출해보자
정상적으로 호출이 오는것을 확인 할수 있다.
뷰 리졸버, 웹 메소드 핸들러, 기타 인프라 스트럭처 에 대한 빈을 만들지 않아도
스프링 부트는 자동으로 이를 생성해주기 때문에 개발자 입장에서는 서비스를 만들어서 처리 되게 하는데 집중할 수 있다.
추가로 하나만 더 dish domain에서 값을 바꿔주는 메소드를 추가하고,컨트롤러에서 map으로 값을 변형해서 출력해보자
기본 false로 노출되는데 server2로하면, map으로 true로 변경해주기때문에 해당 사항으로 출력이 된다.
이제 간단하게, 타임리프를 통해 컨트롤러에서 통신을 할 예정이다.
이번포스팅에서는 간단히 통신까지만 한다.
이렇게 하면 간단하게 통신 은 완료 된다.
그러면 이제 해야할것!
실습하면서 진행했던 궁금한것들을 정리해보자 (역순)
- Flux : 0 ~ N 개의 데이터 전달
- Mono : 0 ~ 1 개의 데이터 전달
둘다 reactive streams의 publisher 인터페이스를 구현하는 구현체인데
Flux는 데이터를 전달할때마다 onNext를 발생시키고, 완료되면 onCompelete 오류가 나면 OnError를 발생시킨다.
근데, 나는 궁금했다 왜 두개의 데이터 전달 갯수가 다른거지?
그러면 Mono는 어떨때 써야 좋은 걸까? 차이가 없으면 그냥 Flux를 쓰면되자나?
우선 Mono는 단순 변수, 객체 같은 느낌이고 Flux는 리스트의 개념이다.
굳이 한가지의 결과를 표현할때, List를 사용하지 않듯이, Mono와 FLux는 해당 사유로 나눠서 사용한다.
해당 두가지의 동작원리와 각각의 메소드들은 별도포스팅에서 다루자
'Develop > [WebFlux]' 카테고리의 다른 글
[WebFlux] Webflux 관련 머리속 정리 (0) | 2023.08.07 |
---|---|
[Spring boot WebFlux] 프로젝트 시작하기 (0) | 2022.02.15 |
[리액티브 프로그래밍] 리액티브 프로그래밍이란? (0) | 2022.02.11 |
스프링의 Webflux 란? (0) | 2021.07.11 |