[TIL 63일차] 스프링 MVC, 스프링 Batch, 스프링 WebFlux

이건·2024년 8월 21일

1. 스프링 MVC (Model-View-Controller)

  • 목적: 스프링 MVC는 전통적인 동기식 웹 애플리케이션을 개발하기 위한 강력한 프레임워크로, 복잡한 웹 애플리케이션의 구조를 쉽게 관리할 수 있도록 설계되었다.

  • 아키텍처: 스프링 MVC는 동기식 요청-응답 모델을 기반으로 하여, 클라이언트가 요청을 보내면 서버가 해당 요청을 처리하고 결과를 클라이언트에 응답으로 반환한다. 이 과정에서 요청과 응답은 명확하게 분리되어 있으며, 각 구성 요소가 독립적으로 동작할 수 있다.

  • 주요 특징:

    • 템플릿 엔진 통합: 스프링 MVC는 Thymeleaf, JSP 등 다양한 템플릿 엔진과 통합되어 뷰(View)를 렌더링한다. 이를 통해 동적인 HTML 페이지를 쉽게 생성할 수 있다.
    • RESTful 웹 서비스 지원: 스프링 MVC는 HTTP 프로토콜을 기반으로 하여 RESTful API를 쉽게 구축할 수 있도록 돕는다. 이를 통해 클라이언트와 서버 간의 데이터 통신을 간편하게 처리할 수 있다.
    • 서블릿 API와의 통합: 스프링 MVC는 서블릿 API와 밀접하게 연동되며, 서블릿 컨테이너에서 실행된다. 이는 스프링 MVC가 기존의 서블릿 기반 애플리케이션과 쉽게 통합할 수 있음을 의미한다.
    • 유연한 요청 매핑: 다양한 요청 URL에 대해 유연하게 매핑할 수 있는 기능을 제공하며, 이를 통해 메서드 단위의 분리된 핸들러를 정의할 수 있다.
    • 데이터 바인딩 및 검증: 클라이언트의 요청 데이터를 쉽게 객체로 변환하고, 유효성을 검증하는 기능을 지원한다. 이를 통해 사용자 입력에 대한 처리를 간편하게 할 수 있다.

스프링 MVC는 이러한 특징들 덕분에 전통적인 웹 개발뿐만 아니라, 현대적인 RESTful 서비스 구축에도 널리 사용되고 있다.

2. 스프링 Batch

  • 목적: 스프링 Batch는 대규모 데이터 처리 작업을 효율적으로 배치로 실행하기 위한 프레임워크로, 주로 데이터의 일괄 처리(ETL 작업) 및 대량의 데이터 변환에 사용된다.

  • 아키텍처: 스프링 Batch는 대량 데이터 처리에 최적화된 배치 처리 모델을 제공한다. 이는 데이터베이스나 파일에서 데이터를 읽고, 처리한 후, 다시 저장하는 일련의 과정을 구조화하여 효율적으로 수행할 수 있도록 돕는다.

  • 주요 특징:

    • 트랜잭션 관리: 배치 작업에서 데이터의 일관성을 유지하기 위해 트랜잭션을 관리하는 기능을 제공한다. 각 단계에서의 성공 여부에 따라 전체 작업의 성공 또는 실패를 결정할 수 있다.
    • 대량 데이터 처리: 대량의 데이터를 효율적으로 처리하기 위한 다양한 기능(예: Chunk 기반 처리)을 제공한다. 이를 통해 메모리 사용을 최적화하고 성능을 향상시킬 수 있다.
    • 재시도 및 스킵 처리: 실패한 작업에 대해 재시도하거나 건너뛸 수 있는 기능을 제공하여, 배치 작업의 신뢰성을 높인다. 이로 인해 일시적인 오류에 대해 유연하게 대처할 수 있다.
    • Job, Step, Reader, Processor, Writer: 스프링 Batch는 배치 작업을 설계하기 위한 핵심 개념들을 제공한다. Job은 전체 배치 작업을 의미하고, Step은 Job을 구성하는 개별 단계다. Reader는 데이터를 읽어오는 역할, Processor는 데이터를 처리하는 역할, Writer는 처리된 데이터를 저장하는 역할을 수행한다.
    • 스케줄러 기반 실행: 스프링 Batch는 실시간 요청-응답 처리와는 달리, 주로 스케줄러에 의해 주기적으로 실행되거나 수동으로 시작되는 작업에 초점을 맞추고 있다. 이를 통해 대규모 데이터 처리 작업을 효율적으로 관리할 수 있다.

스프링 Batch는 이러한 기능들을 통해 대량의 데이터 처리를 체계적이고 효율적으로 수행할 수 있도록 설계된 강력한 도구다.

3. 스프링 WebFlux

  • 목적: 스프링 WebFlux는 비동기식 및 논블로킹 웹 애플리케이션 개발을 위한 프레임워크로, 고성능의 리액티브 웹 애플리케이션을 구현하는 데 중점을 둔다.

  • 아키텍처: WebFlux는 리액티브 스트림(reactive stream) 기반으로 동작하며, 비동기 논블로킹 방식으로 요청을 처리한다. 이는 클라이언트의 요청을 비동기적으로 처리하여, 서버의 리소스를 효율적으로 사용할 수 있도록 한다.

  • 주요 특징:

    • 리액터(Reactor) 라이브러리: WebFlux는 리액터 라이브러리를 사용하여 데이터 스트림과 비동기 작업을 관리한다. 이를 통해 데이터가 발생하는 즉시 반응할 수 있는 비동기 프로그래밍 모델을 제공한다.
    • 서버 자원 효율성: WebFlux는 이벤트 기반 아키텍처를 통해 많은 동시 연결을 효과적으로 처리할 수 있으며, 서버 자원의 효율성을 높인다. 이는 특히 I/O 작업이 많은 환경에서 성능을 극대화하는 데 유리하다.
    • 고성능 웹 애플리케이션: 비동기 처리 모델 덕분에 고성능 웹 애플리케이션을 구축할 수 있으며, 대규모 사용자 요청을 동시에 처리할 수 있다.
    • 논블로킹 서버: 전통적인 스프링 MVC와 달리 WebFlux는 서블릿 API를 사용하지 않으며, Netty와 같은 논블로킹 서버를 사용할 수 있다. 이는 서버의 비동기적 처리를 더욱 원활하게 만들어 준다.
    • 리액티브 프로그래밍 지원: WebFlux는 리액티브 프로그래밍을 지원하여, 개발자가 데이터 흐름과 이벤트에 기반한 시스템을 쉽게 구축할 수 있도록 돕는다. 이는 복잡한 비동기 작업을 간결하게 처리할 수 있는 장점을 제공한다.

스프링 WebFlux는 이러한 특징을 통해 비동기식 웹 애플리케이션의 필요에 맞춘 강력한 솔루션을 제공한다.

프레임워크의 차이점과 특장점

1. 스프링 MVC

  • 차이점: 동기식 요청-응답 모델을 기반으로 하며, 클라이언트의 요청에 대해 서버가 즉시 응답하는 구조다.
  • 특장점:
    • 전통적인 웹 애플리케이션 개발에 적합하여, 템플릿 엔진과 함께 HTML 뷰를 쉽게 렌더링할 수 있다.
    • RESTful 웹 서비스 구축에도 널리 사용되며, 다양한 HTTP 메서드와 매핑을 지원한다.
    • 서블릿 API와의 밀접한 연동으로 기존 Java 웹 애플리케이션에 쉽게 통합할 수 있다.

2. 스프링 Batch

  • 차이점: 대규모 데이터 처리 작업에 최적화된 배치 프레임워크로, 실시간 처리보다는 일괄 작업에 중점을 둔다.
  • 특장점:
    • 트랜잭션 관리, 데이터 재시도 및 스킵 처리와 같은 배치 작업에 필수적인 기능을 제공한다.
    • Job, Step, Reader, Processor, Writer 등의 구조로 배치 작업을 명확하게 설계할 수 있어, 복잡한 데이터 처리 로직을 효율적으로 관리할 수 있다.
    • 대량의 데이터를 효율적으로 처리하고, 시스템 리소스를 최적화할 수 있다.

3. 스프링 WebFlux

  • 차이점: 비동기식 및 논블로킹 모델을 채택하여, 요청을 비동기적으로 처리한다.
  • 특장점:
    • 리액티브 프로그래밍 모델을 지원하여, 데이터 흐름을 기반으로 한 애플리케이션을 쉽게 구축할 수 있다.
    • 많은 동시 연결을 효율적으로 처리할 수 있어, 고성능의 리액티브 웹 애플리케이션을 개발하는 데 적합하다.
    • Netty와 같은 논블로킹 서버를 사용하여, 서버 자원의 효율성을 극대화할 수 있다.

이처럼 각 프레임워크는 특정 요구사항과 사용 사례에 맞춰 설계되었으며, 개발자가 필요로 하는 기능에 따라 적절한 선택을 할 수 있다.

0개의 댓글