9월 26일 - MVC Framework 동작 원리

Yullgiii·2024년 9월 26일
0

[Spring] MVC Framework 동작 원리

Spring MVC 프레임워크가 어떻게 동작하는지 이해하는 것은 개발자에게 필수적이다. 클라이언트가 서버에게 URL을 통해 요청할 때, 스프링 프레임워크가 어떻게 처리하는지 자세히 알아보자.

MVC 진행 과정

  1. 클라이언트가 URL을 요청하면, 웹 브라우저에서 스프링으로 Request가 보내진다.
  2. Dispatcher Servlet이 Request를 받으면, Handler Mapping을 통해 해당 URL을 담당하는 Controller를 찾아낸다.
  3. 찾은 Controller로 Request를 보내고, 그 과정에서 필요한 Model을 구성한다.
  4. Model에서는 데이터베이스에 접근해 페이지 처리에 필요한 정보들을 쿼리문으로 가져온다.
  5. Controller는 Database에서 얻은 Model 정보를 받아 완성하고, 다시 Dispatcher Servlet에게 Response한다.
  6. Dispatcher Servlet은 View Resolver를 통해 Request에 해당하는 View 파일을 찾아낸다.
  7. 찾은 View 파일에 Model을 보내 클라이언트에게 보낼 페이지를 완성한다.
  8. 최종 완성된 View 파일을 클라이언트에 Response하여 화면에 출력한다.

구성 요소

1. Dispatcher Servlet

모든 Request를 처리하는 중심 컨트롤러 역할을 한다. 서블릿 컨테이너에서 HTTP 프로토콜을 통해 들어오는 모든 Request를 가장 앞단에서 처리하며, 스프링 MVC의 핵심적인 역할을 수행한다.

기존의 웹 애플리케이션에서는 web.xml에 서블릿을 일일이 등록해야 했지만, Dispatcher Servlet이 모든 Request를 핸들링하면서 작업이 편리해졌다.

2. Handler Mapping

클라이언트의 Request URL을 어떤 Controller가 처리해야 하는지 찾아서 Dispatcher Servlet에게 전달한다. Controller의 메서드에서 사용하는 @RequestMapping 어노테이션을 통해 URL과 매핑되며, Handler Mapping이 이를 찾아주는 역할을 한다.

3. Controller

실질적인 요청을 처리하는 곳이다. Dispatcher Servlet이 프론트 컨트롤러라면, Controller는 백엔드 컨트롤러로 볼 수 있다. 데이터 처리를 담당하며, Model을 완성해 Dispatcher Servlet에 전달한다.

@Controller
public class UserController {

    @RequestMapping("/user")
    public String getUser(Model model) {
        // 모델에 데이터를 추가
        model.addAttribute("name", "John Doe");
        // view 이름 반환
        return "userView";
    }
}

4. View Resolver

Controller에서 반환된 처리 결과를 보여줄 View를 결정하는 역할을 한다. 다양한 종류의 View Resolver가 존재하며, 상황에 맞게 활용할 수 있다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

So...

Spring MVC는 요청이 들어오면 Dispatcher Servlet을 통해 모든 처리를 중앙집중식으로 관리한다. 이 과정에서 Handler Mapping이 Controller를 연결해주고, Controller는 Model 데이터를 처리해 View Resolver로 최종 화면을 결정한다. 이러한 구조 덕분에 스프링 MVC는 역할 분리가 명확해지고 유지보수가 용이해지며, 확장성 또한 뛰어나다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글