전통적인 서블릿(Servlet) 기반 개발

  • HttpServlet : 서블릿은 HttpServlet 클래스를 상속받아 사용한다. doGet()과 doPost() 메서드를 오버라이드하여 HTTP GET 및 POST 요청을 처리하며, 요청을 받으면 직접 처리하고 응답을 작성하는 형태로 동작한다.

doGet() / doPost() 방식:

  • doGet(): 클라이언트가 GET 방식으로 서버에 요청할 때 호출되는 메서드. 주로 데이터를 조회하는 데 사용.
  • doPost(): 클라이언트가 POST 방식으로 서버에 요청할 때 호출되는 메서드. 데이터 전송 및 처리에 사용.

서블릿에서는 클라이언트의 요청을 하나하나 처리하며, 직접적으로 요청과 응답을 관리해야 하므로 코드가 길고, 관리가 어려움

또한 여러 요청을 처리할 때마다 조건문 등을 사용하여 각 요청에 맞는 처리 로직을 작성해야 하므로 코드가 복잡해질 수 있음.

 

 

Spring MVC

  • @Controller: Spring MVC에서 클라이언트 요청을 처리하는 클래스는 @Controller로 선언한다. 이는 서블릿에서 직접 처리하던 요청을 좀 더 구조적이고 간편하게 처리할 수 있도록 해준다.
  • @RequestMapping: @RequestMapping은 요청 URL과 메서드를 매핑하여 처리하는 데 사용된다. 이를 통해 각 요청에 대한 처리 로직을 명확히 분리할 수 있다.
  • DispatcherServlet: Spring MVC의 핵심 컴포넌트로, 모든 요청을 중앙에서 처리한다. 클라이언트 요청이 들어오면, DispatcherServlet이 해당 요청을 어떤 컨트롤러가 처리할지 결정하고, 실제 처리할 컨트롤러에게 요청을 위임한다.

Spring MVC는 클라이언트 요청을 분리된 처리 방식으로 구조화하여 코드의 유지보수성과 확장성을 높인다.

서블릿 기반 개발은 요청과 응답을 직접 처리하는 반면, Spring MVC는 컨트롤러, 서비스, 뷰 등의 역할을 명확하게 분리하여 개발자가 각 부분을 독립적으로 관리할 수 있도록 도와준다.

 

 

Spring MVC가 왜 서블릿보다 편리한지?

  • Spring MVC는 웹 애플리케이션 개발을 위한 표준화된 구조를 제공한다. 이를 통해 개발자는 직접 서블릿을 작성하고, 요청을 처리하는 복잡한 작업을 하지 않아도 된다.
  • 구조화된 개발 : Spring MVC는 MVC(Model-View-Controller) 패턴을 따르므로, 비즈니스 로직UI 로직컨트롤러를 분리하여 코드가 더 깔끔하고 이해하기 쉬운 구조로 나누어 진다.
  • 핸들러 매핑 : Spring MVC는 요청 URL을 특정 컨트롤러 메서드에 매핑하여, 개발자가 직접 URL을 처리할 필요 없이 쉽게 로직을 처리할 수 있다.
  • 자동화된 요청 처리: DispatcherServlet을 통해 모든 요청을 중앙에서 처리하고, 이를 적절한 컨트롤러와 매핑하는 방식으로 개발자는 복잡한 요청 처리 로직을 직접 작성할 필요가 없다.
  • 유연성: Spring MVC는 다양한 뷰 기술(예: JSP, Thymeleaf, FreeMarker 등)을 지원하며, 요청 처리 방식을 유연하게 확장할 수 있다.

 

 

DispatcherServlet이 내부적으로 요청을 처리하는 방식

단계별 요청 처리 과정

  1. 요청 수신
    • 클라이언트의 HTTP 요청이 DispatcherServlet에 전달된다. 이 때, 요청 URL, HTTP 메서드(GET, POST 등), 파라미터 등이 포함된 요청 정보가 전달된다.
  2. HandlerMapping
    • DispatcherServlet은 HandlerMapping을 사용하여 요청을 처리할 적절한 컨트롤러를 찾습니다.
    • HandlerMapping은 URL 패턴과 메서드 정보를 바탕으로 해당 요청을 처리할 컨트롤러와 메서드를 결정한다.
  3. HandlerAdapter
    • HandlerMapping이 반환한 컨트롤러 메서드에 대한 핸들러 어댑터를 사용하여 실제 요청을 처리할 메서드를 실행합니다.
    • 핸들러 어댑터는 다양한 종류의 컨트롤러를 지원할 수 있도록 돕는 역할을 합니다. 예를 들어, @Controller가 선언된 클래스나 @RestController 등을 처리할 수 있다.
  4. 어드바이스 실행 (Advice Execution)
    • Spring AOP(Aspect-Oriented Programming)와 결합된 경우, 요청 전후에 어드바이스가 실행될 수 있다. 예를 들어, 트랜잭션 시작/종료, 로깅 등의 작업이 이 단계에서 수행된다.
  5. 뷰 리졸버(ViewResolver):
    • 컨트롤러가 반환한 모델 데이터를 바탕으로 적절한 뷰를 결정하고, 이를 사용하여 응답을 생성한다. 이때, 뷰 템플릿(예: JSP, Thymeleaf)을 사용하여 최종적인 HTML을 생성한다.
  6. 응답 전송
    • 최종적으로 생성된 응답 HTML을 클라이언트에 전송한다.

+ Recent posts