본문 바로가기

Spring

Servlet과 Spring MVC

들어가며

스프링 프레임워크를 이용해 개발을 진행하지만, 해당 프레임워크가 어떻게 동작하는지 잘 모른다는 생각이 들었다. 그렇기에 이번 기회에 정리를 하고 넘어가려고 한다.

 

초기의 Web서버

초기 Web 서버는 정적인 HTML 페이지를 서비스하는 데에만 사용되었다.

 

이렇기에 사용자의 요청에 따라 다른 처리를 해줄 수 없었고 동적인 데이터를 처리해주기 어려웠다.

 

CGI

CGI는 Web 서버와 외부 애플리케이션 간의 상호작용을 가능하게 하는 인터페이스다. CGI를 사용하면 Web 서버에서 실행되는 외부 프로그램으로 동적 컨텐츠를 생성할 수 있다.

 

이 때 CGI는 인터페이스로 웹서버와 CGI 구현체들간의 규약이다.

보통 CGI 구현체는 C, PHP, PERL 등 다양한 언어로 구성되어 있기 때문에 Web Server와 CGI 구현체들 간에 규약으로 CGI라는 것을 만들게 되었다.

 

대략 이러한 방식으로 동작하는데 다음과 같은 문제점이 있다.

 

1. 요청이 들어올 때 마다 프로세스를 만든다. 즉, 많은 사용자의 요청을 처리하기엔 어렵고 느리다는 문제이다.

2. 1 에서 생성한 요청에 대해 매 번 새로운 구현체를 만들기 때문에 자원의 낭비 또한 만만치 않았다.

 

Servlet

위와 같은 문제를 해결하기 위해 Servlet이 탄생했다.

 

위의 그림과 같이 요청별 처리를 스레드로 변경하고 매번 새로운 CGI 인스턴스를 생성하는 것이 아닌 하나의 CGI 구현체를 싱글톤 패턴으로 이용하였다.

 

즉, 위와 같은 그림으로 새롭게 탄생했는데 요약하자면 다음과 같다.

 

Web 서버는 정적인 컨텐츠를 처리하고, 동적인 컨텐츠를 생성하기 위해 Servlet 컨테이너와 연동한다.

Servlet 컨테이너는 클라이언트로부터 요청을 받아서, 해당 요청을 처리하기 위한 Thread를 생성한다.

Servlet 구현체에 접근한다. Servlet의 수행 결과를 다시 클라이언트로 응답한다.

 

Servlet의 생명주기

  • init
    Servlet 인스턴스 생성
  • service
    실제 기능 수행
  • destroy
    Servlet 인스턴스 삭제(컨테이너가 종료되는 시점에 호출)

각 메소드는 Servlet Container(Tomcat)이 실행해준다.

 

Spring MVC

Spring MVC는 Servlet API 위에 구축된 프레임워크로, Servlet을 기반으로 하고 있다.

 

기존의 한계

그러나 Spring MVC는 Servlet의 단점인 개발자가 직접 구현해야 하는 부분이 많은 점과, Servlet에서 제공되지 않는 다양한 기능을 제공하기 위해 개발되었다.

 

장점

Spring MVC는 Servlet과 함께 사용되어, 웹 애플리케이션을 개발하고 관리하는 데에 필요한 기능을 제공한다. 또한, Spring MVC는 모듈화, 테스트 용이성, 유연성 등의 장점을 가지고 있다.

 

주요 구성 요소

Spring MVC의 주요 구성 요소는 다음과 같다.

  • DispatcherServlet: 모든 요청을 처리하고, 적절한 핸들러에게 요청을 전달한다.
  • HandlerMapping: 요청을 처리할 핸들러를 찾는다.
  • Controller: 실제로 요청을 처리한다.
  • ViewResolver: 요청 결과를 보여줄 뷰를 찾는다.
  • View: 요청 결과를 클라이언트에게 보여준다.

동작과정

요약하자면, DispatcherServlet은 모든 요청을 받아들인 후 HandlerMapping을 사용하여 요청을 처리할 적절한 핸들러(Controller)를 찾고, 이를 호출하여 비즈니스 로직을 수행한다. 이후 View name을 통해 적절한 ViewResolver를 사용하여 View를 생성하고, 클라이언트에게 반환한다.

 

장점

기존에는 Url별로 서블릿이 하나씩 존재했지만 Spring MVC를 사용함 으로써 DispatcherServlet 한개로 모든 요청을 처리할 수 있게 되었다.

 

마무리

Spring MVC의 동작과정과 함께 초기의 웹 서버 부터 살펴보았다. 배경부터 하나씩 학습하니 왜 Spring MVC를 사용하고 어떻게 웹이 어떻게 동작하는지에 대해 간단히 알게 되었으며, 이를 통해 웹 개발에 대한 이해도를 높일 수 있게 되었다.

 

 

'Spring' 카테고리의 다른 글

Spring Security 1: Spring Security  (0) 2023.08.02
AOP의 개념  (0) 2023.02.05
Spring vs Spring boot  (0) 2022.11.09
Maven & Gradle  (0) 2022.11.08
BeanFactory & ApplicationContext  (0) 2022.11.08