inflearn logo
강의

講義

知識共有

Kevin のわかりやすい Spring Reactive Web Applications: Reactor 第 1 部

advancedTimeBy와 thenAwait 사용 예시가 궁금합니다

205

harper26886

投稿した質問数 2

0

안녕하세요, advancedTimeBy와 thenAwait 사용 예시를 모르겠어서 문의드립니다.

강의 중 advancedTimeBy는 '특정 시간을 당겨서 앞서 나가는 것'이라 설명해주셨고,

thenAwait은 해당 시간이 빠르게 다가오는 걸로 이해하면 된다고 설명해주셨습니다.

 

궁금한 점은

1) 각각의 테스트가 필요한 예시를 조금만 더 자세히 들어주실 수 있으실까요? 특정 프로젝트에서 어떤 상황일 때 해당 방법이 필요한지 감이 잡히지 않습니다.

1-2) 어떤 상황에 필요한 것인지 모르다보니, advancedTimeBy와 thenAwait의 쓰임이 분명히 구분돼 있을텐데도 유사한 방식이 아닌가? 라는 생각이 듭니다. 이 부분도 예시로 설명해주실 수 있다면 함께 설명해주시면 감사하겠습니다.

 

java spring project-reactor webflux

回答 1

2

Kevin

안녕하세요? advancedTimeBy()와 thenAwait()의 차이점에 대해서 질문 주셨는데요.

일단 결론부터 말씀드리면 두 메서드는 정말 거의 동일한 기능을 하기 때문에 실제 시간을 당긴다는 측면에서는 둘 중 어떤걸 사용해도 상관없습니다.

다만, advancedTimeBy()는 능동적으로 시간을 제어한다고 볼 수 있고, thenAwait()은 수동적으로 가상의 시간이 흘러가는 걸 기다린다는 측면에서 수동적입니다.

 

반드시 어떤 상황에 이걸 사용해야 한다고 딱 꼬집어서 명시되어 있는건 아닌데 일반적으로 advancedTimeBy()는 복잡한 테스트 시나리오에서 직접적으로 시간을 세밀하게 제어하고 싶을 때 사용하고, thenAwait()은 스케쥴링이 되어 있는 반복적인 작업 등에서 상태 변화를 체크하는데 사용됩니다.

 

advancedTimeBy() 같은 경우, 복잡한 테스트 시나리오에 적용하니 코드 가독성도 좀 떨어질 수 있지만 thenAwait() 같은 경우는 메서드 자체도 굉장히 직관적이라서 코드 가독성이 좋을테구요.

 

예를 들어서 10분에 한번씩 데이터를 가져와서 캐시를 업데이트 하는 로직이 있는데, 테스트 할 때 마다 10분씩 기다리면 비효율적이니까 advancedTimeBy()와 thenAwait() 중에 하나를 이용해서 시간을 당기면 될텐데요.

 

이때 10분에 한번 씩 데이터를 가져오는 로직이 단순하면 thenAwait()을 사용하는게 더 바람직할 테구요.

만약에 어떤 로직이 복잡한 상황을 처리하는 로직일 경우 이를 테면,

Flux

      .concat(

           fetchDataSource1(),

           fetchDataSource2(), 

           fetchDataSource3()
      )

 

이런 식으로 데이터를 여러 곳에서 fetch 해야하는 상황인데, 각 Sequence에서 fetch 하는 시간이 다를 경우 각각의 sequence 별로 데이터를 fetch하는 시간 주기를 세밀하게 당겨서 테스트 하고 싶을 때, advancedTimeBy()를 사용하는게 조금 더 적절하지 않을까 생각합니다.

 

근데 둘 중 어떤걸 사용해도 둘 다 시간을 당기는 것이기 때문에 테스트를 수행할 수 있을겁니다.

결국 비슷한 기능을 사용자가 선택해서 사용할 수 있도록 여러 선택지를 주었다라고 생각해 볼 수도 있는 문제인거 같네요.

 

질문에 대한 답변이 충분히 되셨길 바랍니다.

감사합니다.

2

harper26886

자세한 답변 감사합니다 :)

subscription signal 에 upstream 으로 이동하는 순서

0

91

2

Webflux의 Non-Blocking 특성에 대해 문의 드립니다.

1

213

3

Downstream Mono, Flux가 subscriber인가요?

0

160

1

source.next와 source.emit의 차이에 대한 질문입니다.

0

214

2

StepVerifier를 이용한 Testing (1) - expectNoEvent 에 관해서

2

233

1

backpressure latest 전략

0

243

2

StepVerifier를 이용한 Testing (1) 의 StepVerifiter 질문

0

231

1

[Scheduler의 종류 강의] Schedulers.newParallel 메서드에 관한 질문

0

209

2

Backpressure Drop 전략에서 다시 버퍼가 채워지는 시점에 대한 질문입니다.

0

167

2

Reactor 3부의 오픈 일정에 관해서 문의드립니다!

0

173

1

inner sequence context 관련 질문

0

139

1

boundedElastic 관련 질문

1

323

1

강의자료 관련 질문드립니다.

0

250

3

newBoundedElastic 에서 queue 에 쌓이는 룰

0

215

2

import com.itvillage.utils.Logger;

0

149

1

Interceptor에서 reactor Context 유지하는 방법

0

283

2

예시코드는 webflux의 이점보단 webclient의 이점 아닌가요?

3

361

1

context의 read, write의 실행 순서

0

263

2

DROP 전략과 LATEST 전략의 차이점이 무엇인가요?

3

637

3

백프레셔 전략 관련해서

1

310

1

Backpressure Example 코드 질문드립니다

0

259

2

Backpressure 전략

0

308

2

Flux 와 Mono

0

465

1

Spring WebFlux 를 사용하기 적합한 시스템

0

804

1