DevBoi

[Spring WebFlux] 프로젝트 시작 및 리액티브 프로그래밍 기초 본문

Develop/[WebFlux]

[Spring WebFlux] 프로젝트 시작 및 리액티브 프로그래밍 기초

HiSmith 2022. 2. 16. 17:59
반응형

컴포넌트 탐색,

스프링 애플리케이션이 실행되면, 모든 빈은 애플리케이션 컨텍스트에 등록이 된다.

 

실제로 이제 코딩을 시작해보자

 

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는 해당 사유로 나눠서 사용한다.

 

해당 두가지의 동작원리와 각각의 메소드들은 별도포스팅에서 다루자

 

반응형