함수 호출 관점에서 동기와 비동기 / Blocking과 Non-Blocking
- 함수가 다른 함수를 호출 하는 상황일 때
- caller: 호출 하는 함수
- callee: 호출 당하는 함수
- 동기: caller는 callee의 결과에 관심이 있고 callee가 주는 결과 값을 이용해서 다음 action을 수행한다.
- 비동기: caller는 callee의 결과에 관심이 없고 callee는 결과 값을 이용하여 콜백을 수행한다.
- Blocking: callee를 호출 후, callee가 완료되기 전까지 caller는 아무것도 할 수 없다. 즉 제어권을 callee에게 줌, caller와 다른 별도의 스레드가 필요하지 않다.
- Non-Blocking: callee를 호출 후, callee가 완료되기 전에도 caller는 다른 업무를 수행할 수 있다. 즉 제어권을 caller가 그대로 가지고 있음. caller와 다른 별도의 스레드가 필요하다.
동기 | 비동기 | |
Blocking | caller는 callee를 호출 후 아무것도 할 수 없는 상태가 되고 결과값을 받으면 직접 처리한다. | caller는 callee를 호출 후 아무것도 할 수 없는 상태가 되고 결과는 callee가 처리한다. |
Non-Blocking | caller는 callee를 호출 후 다른 일을 할 수 있다. 결과값을 받으면 직접 처리한다. | caller는 callee를 호출 후 다른 일을 할 수 있다. 결과는 callee가 처리한다. |
함수형 인터페이스
- java8부터 함수형 프로그래밍을 지원하기 위해 함수형 인터페이스 도입
- 1개 이상의 추상 메서드를 갖고있는 인터페이스 (@FunctionableInterface)
- 함수를 1급 객체로 사용할 수 있다 : 함수를 변수에 할당하거나 인자로 전달하거나 반환값으로 사용 가능
- Function, Consumer, Supplier, Runnable 등
- 함수형 인터페이스를 구현한 익명 클래스를 람다식으로 변경 가능
- 호출한 쓰레드에서 실행된다. (메인 쓰레드에서 실행하면 메인 쓰레드에서 실행)
Spring WebFlux의 장점
- 효율적인 리소스 사용 : 적은 cpu로 많은 처리를 할 수 있다. 요청이 스파크하게 들어와도 유연하게 커버할 수 있다.
- 동시성을 극대화하여 응답시간이 빠른 서비스를 제공할 수 있다.
- 성숙한 생태계가 형성되어 있다.
단점
- 비동기 로직에 대한 처리 고민
- 팀원들과 함께 적용하기 위한 러닝커브가 있다.
- 디버깅, 에러 핸들링이 어렵다.
출처 : 패스트캠퍼스 강의(Spring Webflux 완전 정복 : 코루틴부터 리액티브 MSA 프로젝트까지)
반응형
'개발 > Spring' 카테고리의 다른 글
#3) Spring WebFlux(마블 다이어그램, Project Reactor, Backpressure) (0) | 2024.01.31 |
---|---|
#2) Spring WebFlux(리액티브 프로그래밍 특징, 리액티브 스트림즈) (0) | 2024.01.30 |
#2) Spring Security Oauth2 Client + Apple 로그인 연동하기 (7) | 2023.03.27 |
#1) Spring Security Oauth2 Client + Apple 로그인 연동하기 (0) | 2023.03.27 |
컴포넌트 스캔 간단 정리 (0) | 2020.06.19 |