Spring MVC

이유진·2024년 8월 19일
0
post-thumbnail

🌷Spring MVC

오늘은 내배캠 스탠다드 이론에서 배운 Spring MVC에 대해서 정리해보았다!

Spring MVC란?

  • MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나
  • MVC는 클라이언트와 서버간의 구조 관점에서 접근한 개념
  • MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리
  • 아키텍처: 동기식 요청-응답 기반으로 동작. 클라이언트가 요청을 보내면 서버는 요청을 처리하고, 처리 결과를 클라이언트에 응답으로 보낸다.

MVC 패턴을 사용하는 이유

각 컴포넌트가 서로 분리되어 각자의 역할에 집중할 수 있기 때문에 시스템 결합도를 낮출 수 있다. 또한, 유지보수가 쉬우며, 중복코드를 제거할 수 있고, 애플리케이션의 확장성 및 유연성이 증가한다.

Model

  • 데이터와 비즈니스 로직을 담당
  • 데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행

View

  • 사용자 인터페이스를 담당
  • 사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현

Controller

  • Model과 View 사이의 상호작용을 조정하고 제어
  • 사용자의 입력을 받아 Model에 전달하고, Model의 결과를 바탕으로 View를 업데이트

  • 파란색 부분은 모두 Spring MVC가 제공한다.
  • 보라색 부분은 개발자가 구현해야하며, 녹색 부분ViewSpring이 제공하는 부분도 있고, 개발자가 구현해야하는 부분도 있다.

Servlet API

Servlet (서블릿)은 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말한다.

자바 웹 애플리케이션에서 HTTP 요청과 응답을 처리하는 표준 인터페이스

  • 사용자가 (HTTP) API 요청했을 때 서버의 서블릿이 어떻게 동작하는지

  1. 사용자가 Client(브라우저)를 통해 서버에 HTTP Request 즉, API 요청을 한다.
  2. 요청을 받은 Servlet 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
  3. 설정된 정보를 통해 어떠한 Servlet에 대한 요청인지 찾는다.
  4. 해당 Servlet에서 service 메서드를 호출한 뒤 브라우저의 요청 Method에 따라 doGet 혹은 doPost 등의 메서드를 호출한다.
  5. 호출한 메서드들의 결과를 그대로 반환하거나 동적 페이지를 생성한 뒤 HttpServletResponse 객체에 응답을 담아 Client(브라우저)에 반환한다.
  6. 응답이 완료되면 생성한 HttpServletRequest, HttpServletResponse 객체를 소멸한다.

DispatcherServlet

SpringMVC에서 제공해 주고 있는 DispatcherServlet은 FrameworkServlet.java > HttpServlet.java > Servlet.java 를 상속받아 구현한 서블릿으로 Servlet Container에서 들어오는 모든 요청을 먼저 받아 중앙 집중식으로 처리해주는 프론트 컨트롤러이다.

  1. Client(브라우저)에서 HTTP 요청이 들어오면 DispatcherServlet 객체가 요청을 분석한다.

  2. DispatcherServlet 객체는 분석한 데이터를 토대로 Handler mapping을 통해 Controller를 찾아 요청을 전달해준다.

    GET /api/helloHelloControllerhello() 함수

    GET /user/loginUserControllerlogin() 함수

    GET /user/signupUserControllersignup() 함수

    POST /user/signupUserControllerregisterUser() 함수

    • Handler mapping 에는 API path 와 Controller 메서드가 매칭되어 있다.
    @RestController
    public class HelloController {
        @GetMapping("/api/hello")
        public String hello() {
            return "Hello World!";
        }
    }
    • API path 즉, URL을 Controller에 작성하는 방법은 @Controller 애너테이션이 달려있는 클래스를 생성한 뒤 @GetMapping 처럼 요청한 HTTP Method 와 일치하는 애너테이션을 추가한 메서드를 구현
      • URL은 @GetMapping("/api/hello") 이처럼 해당 애너테이션의 속성값으로 전달해주면 된다.
      • 해당 메서드명은 URL을 매핑하는데 영향을 미치지 않음으로 자유롭게 정해도 상관 없다.
    • 이제는 직접 Servlet을 구현하지 않아도 DispatcherServlet에 의해 간편하게 HTTP 요청을 처리할 수 있게 되었다.
  3. ControllerDispathcerServlet

    • 해당 Controller는 요청에 대한 처리를 완료 후 처리에 대한 결과 즉, 데이터('Model')와 'View' 정보를 전달
  4. DispatcherServletClient

    • ViewResolver 통해 View에 Model을 적용하여 View를 Client에게 응답으로 전달

참고 URL

profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글