[DEV] study&learn
article thumbnail
Published 2023. 1. 12. 22:27
Servlet & Spring Web MVC 테코톡

Servlet 그리고 Spring Web MVC

Servlet 은?

웹 애플리 케이션을 만들 때 필요한 인터페이스

 

Spring Web MVC 는?

Spring Framework 에 있는 모듈로써 MVC 패턴을 사용하여 Web Service 를 만든다.

그리고 Servlet 을 사용한다.

Servlet 은 왜 생겼을까?

태초에 웹 프로그래밍은 정적 데이터만 전달할 수 있었다.

→ 사용자(요청)에 따라 다른 처리를 해줄 수 없다.

→ 동적인 처리를 해주는 웹 애플리케이션이 없다.

 

동적 데이터를 처리하는 CGI

CGI 란 Web Server 와 프로그램 사이의 규약을 의미한다.

→ CGI 는 요청이 들어올 때 마다 프로세스를 만든다.

→ 따라서 많은 사용자를 처리하기엔 무리가 있었다.

문제점 1. 요청마다 무거운 프로세스를 만드는 것이 문제가 되었다.
문제점 2. 요청마다 구현체를 마드는 것이 문제가 되었다.
프로세스(Process)란?
메모리에 적재된 실행중인 프로그램 인스턴스를 의미한다.

쓰레드(Thread)란?
한 프로세스 내의 동작흐름을 의미한다.

 

개선점 1. Process 에서 Thread 로
개선점 2. 여러 Instance 에서 Singleton 으로

 

개선 사항을 보완한 Servlet 의 등장

WebContainer

→ 요청이 들어오면 Thread 를 생성하고, Servlet 을 실행시킨다.

→ Servlet 인터페이스에 따라 Servlet 을 관리한다.

 

Servlet 인터페이스의 각 메서드는 Servlet Container(Tomcat)이 호출해준다.

아직 해결하지 못한 문제점
Url 마다 Servlet 을 생성하였다.
(Web.xml 로 Servlet 을 관리)

Spring Web MVC 에서는 Servlet 을 어떻게 사용할까?

Dispatcher Servlet 으로 사용한다.

 

Dispatcher Servlet 은 Handler Mapping(Controller 보다 큰 개념)을 통해 다양한 방법으로 Url 과 매핑을 도와준다.

  1. BeanNameHandlerMapping
  2. ControllerClassNameHandlerMapping
  3. SimpleUrlHandlerMapping
  4. DeafaultAnnotationHandlerMapping

우리는 주로 Spring Boot 에서 DeafaultAnnotationHandlerMapping 방식을 사용한다.

→ Annotation 으로 Url 과 Mapping 하는 방식

 

Spring Web MVC 의 Servlet 은

Url 마다 Servlet 을 생성하지 않고, DispatcherServlet 하나로 모든 요청을 처리한다.

 

DispatcherServlet 의 동작 흐름

DispatcherServlet 에서 요청을 받고

→ Handler Adapter 를 통해 올바른 Controller 를 찾아 요청을 전달하고

→ Controller 가 요청을 처리하고 결과를 Handler Adapter 에 보낸다.

→ Handler Adapter 가 Model & View 의 형식으로 DispatcherServlet 에 전달한다.

→ DispatcherServlet 이 String 타입 으로 전달 받은 View 를 ViewResolver 에게 전달하면

→ ViewResolver 가 실제 View 를 찾아 DispatcherSerlvet에 전달하고

→ DispatcherSerlvet 이 View 에 Model 을 포함시킨다.

→ 마지막으로 Client 에게 보내준다.

Model
결과가 담긴 Date에 해당한다.

View
Data 를 넘길 Page 에 해당한다.

Reference

 

'테코톡' 카테고리의 다른 글

REST API란?  (0) 2023.01.20
CI/CD 와 무중단 배포  (0) 2023.01.13
AOP 와 Spring AOP  (0) 2023.01.11
Spring 과 Spring Boot  (0) 2023.01.10
JVM Stack & Heap  (0) 2023.01.10
profile

[DEV] study&learn

@devjuni

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!