Real Vectorism. 훨씬 더 입체적으로...
Mono에 대한 궁금증 본문
반응형
아직 웹플럭스는 포기하지 않았다. 그런데 ReactiveUserDetailsService 를 구현하다가 문득 생각이 들었다.
혹시나 Mono<UserDetails> findByUsername(String username) 메소드를 작성하는 과정이 무슨 차이가 있을까
public Mono<UserDetails> findByUsername(String username) {
return Mono
.just(username)
.map(item -> (UserDetails) seumUserRepository.findOne(Example.of(new SeumUserDetails(item))))
.switchIfEmpty(Mono.error(new Exception()));
}
public Mono<UserDetails> findByUsername(String username) {
return Mono
.just(username)
.map(SeumUserDetails::new)
.map(Example::of)
.map(seumUserRepository::findOne)
.map(item -> (UserDetails) item)
.switchIfEmpty(Mono.error(new Exception()));
}
아래 표는 뫼비우스의 띠 처럼 계속 순환해서 갈등하게 만드는 포인트
포인트 | 윗 소스코드 | 아랫 소스코드 |
map 함수 호출빈도 | findByUsername(String username) 자체가 0~1건을 반환하는 대량처리 메소드가 아니기 때문에 호출횟수를 줄여야한다 | ReactiveUserDetailsService 자체가 대량요청이 아니더라도 대량요청을 대비하기 위해 UserDetailsService에서 분리된 인터페이스임을 감안하면 함수식으로 처리해야한다 |
자바 표준문법 | 과도한 람다식 표현법 사용이다. 표준문법인지 아닌지 확실하지 않은 문법의 과도한 사용으로 부작용이 초래되니 사용해서는 안된다. | 표준문법이라고 정의하는 기준이 1.8 기준이라면 헌재 자바15까지 나온 시점에서 오래된 표준이다. 쓰라고 만든 문법인데 결과가 동일하다면 안쓸 이유가 없다. |
반응형
'Java (based by Spring Boot 2)' 카테고리의 다른 글
웹플럭스 미치겠다 (0) | 2021.07.18 |
---|---|
아니 잠깐 (0) | 2021.07.10 |
R2DBC 안해...! (0) | 2021.06.22 |
스프링 부트에서 R2DBC 사용해보기 (0) | 2021.04.16 |
마이크로서비스 개발이 어렵긴 하다 (0) | 2021.02.14 |
Comments