본문 바로가기

자바 프로그래밍

[DAY01] [Webflux] Spring Non-blocking API

www.youtube.com/watch?v=IK26KdGRl48&list=PLnXn1AViWyL70R5GuXt_nIDZytYBnvBdd&index=2

 

d2.naver.com/helloworld/6080222

 

이러한 단점을 대체하기 위한 대안으로 MSA(Microservice Architecture)가 떠올랐습니다. Netflix에서 전격적으로 적용한 이 아키텍처에서 커다란 서비스는 작은 단위의 독립된 모듈로 쪼개지고 추가 기능이나 확장이 필요하면 해당 모듈만 변경하면 되었습니다. 많은 개발자들은 MSA에 열광하면서 기존 Monolithic 아키텍처를 MSA로 바꾸어가기 시작했습니다.

 

하지만 이들에게 황금빛 미래만 있는 것은 아니었습니다. 단일 애플리케이션 내부의 메서드 콜을 통한 정보 교환이 네트워크를 타고 모듈 간의 정보 교환으로 바뀌었기 때문입니다. 스레드 풀을 이용한 동기식 호출 방식은 코드가 간단하고 순차적으로 동작하기 때문에 개발자가 코드를 직관적이고 빠르게 작성할 수 있습니다. 하지만 이렇게 작성한 코드로 만든 서버도 빠르게 동작하고 많은 요청을 처리할 수 있을까요?

 

 

동기식 호출 방식에서는 상대편의 응답이 올 때까지 스레드는 기다려야(blocking) 합니다. 응답이 빨리 오면 그 기다림은 길지 않겠지만 만약 응답이 늦게 오면 서버가 요청에 대한 응답을 기다리는 데 스레드를 모두 소진해서 추가 요청을 처리할 수 없는 상태가 될 수 있습니다. 이는 요청을 한 클라이언트와 요청을 처리하는 서버 둘만의 문제는 아닙니다. 특히 MSA에서는 타임아웃이 발생할 정도의 지연이 발생하면 순식간에 다른 모듈로 전파되어 전체 시스템이 마비되는 등의 악영향을 끼칠 수 있습니다

 

이벤트 루프를 활용하면 요청을 보내고 응답이 올 때까지 무작정 기다리는 대신 자신에게 할당된 다른 여러 소켓의 요청을 순차적으로 빠르게 처리합니다. 이제 여러분의 서버와 클라이언트의 스레드는 더이상 blocking되지 않습니다. Spring 생태계에서도 버전 5부터 도입된 WebFlux를 통해 비동기 프로그래밍을 본격적으로 도입하고 있습니다.

 

 

위 강의를 3월에 다 듣는 걸 목표로 하고 스프링으로 비동기 프로그래밍을 해보자!!

 

'자바 프로그래밍' 카테고리의 다른 글

[SPRING] spring-mvc.xml  (0) 2019.08.11
[SPRING]  (0) 2019.08.02
자바 잠시 공유  (0) 2019.06.05
[JAVA] 연습2  (0) 2019.06.04
[JAVA] 연습  (0) 2019.06.04