MVC 패턴
- 동기적으로 동작하는 블로킹 방식
- 어플리케이션이 JPA, JDBC 또는 네트워킹 API에 의존하는 경우 spring MVC가 최선이다.
- 사용자 요청마다 스레드를 계속 생성해야하므로 Thread pool이 만들어진다.
장점
- 모듈의 분리를 가능하게 하여 코드 가독성이 높아지고 협업에 유리하다.
- 가장 많이 쓰이는 패턴이며 유지보수가 쉽다.
단점
- view-model간 의존성
- 대량 요청을 받아내는데 (Thread pool hell현상: 큐에 계속 요청이 쌓여있는 것) 한계가 있다. 시스템의 트래픽을 측정해서 Thread pool size를 잘 조정해야한다.
요즘은 webflux 방식을 사용한다고 한다.
WebFlux
- 비동기적으로 동작하는 논블로킹 방식
- spring 5 (spring boot 2)에서 새로 추가된 모듈이다.
- Nodejs 처럼 이벤트 루프가 돌기때문에 클라이언트, 서버에서 reactive 스타일(반응형 프로그래밍)의 어플리케이션 개발을 도와주는 모듈
- non-blocking에 reactive stream을 지원한다.
- Java8 lambda 또는 kotlin과 함께 사용하는 가볍고 기능적인 웹 프레임워크에 유용하다.
- 모든 코드가 Non Blocking 기반으로 동작해야만 효율적이다. 블로킹이 발생하는 구간이 있다면 MVC처럼 Thread pool hell 현상이 발생할 수 있다.
장점
- 고성능
- 비동기 메시지 처리
단점
- 오류처리가 다소 복잡하다.
비교
- 마이크로서비스 어플리케이션에서 우리는 spring mvc와 spring webflux 컨트롤러의 혼합 형태를 가질 수 있다.
- mvc가 벽에다가 공던지고 공받기라면 webflux는 공을 기차에 실어보내고 레일을 따라 한바퀴 돌아서 공을 내려준다.
참고
728x90
반응형
'개발공부 > JAVA Spring' 카테고리의 다른 글
[커리어리 글 공유] 주니어 자바 개발자를 위한 100가지 질문 (1) (0) | 2023.12.04 |
---|---|
[SpringBoot] Spring Batch 5 (1) | 2023.07.20 |
[Spring Boot] JWT 튜토리얼 [chap.1~3] - 인프런 강의 (0) | 2023.07.01 |
[SpringBoot 통신] RestTemplate, WebClient (0) | 2023.05.09 |
객체지향 패러다임 (0) | 2023.04.12 |
댓글