
안녕하세요. 스프링을 사용하여 기능 구현 및 개발만 해봤지 스프링이 내부적으로 어떻게 동작되는 지에 대해서 공부하지 않아 코드를 짜면서도 답답했습니다. 이래서 개발자 할 수 있나~ 라는 생각도 들었어요.
그래서 백엔드내실 채우기 프로젝트를 시작합니다.
스프링 내부 동작 원리부터 깊게 공부 해볼 것입니다.
오늘은 spring MVC의 동작 원리에 대해서 알아보려합니다.
spring MVC는 서블릿 기반으로 동작합니다. 서블릿은 웹페이지를 동적으로 생성하는 서버 프로그램입니다.
spring MVC 에서 요청을 처리하는 핵심 클래스는 DispacherServlet 클래스입니다.
아래 그림은 서버에 요청이 들어오면 spring MVC가 어떻게 처리하는 지 보여주는 그림입니다.

1. 클라이언트가 요청을 보내면 DispatcherServlet 가 이 요청을 받습니다.
2. DispatcherServlet은 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 넘깁니다.
3. HandlerMapping 은 요청 url과 매핑되는 컨트롤러를 찾아 DispatcherServlet에게 응답합니다.
컨트롤러 안에는 컨트롤러의 요청을 처리하는 Handler 메서드 정보를 갖고 있습니다.
4. DispatcherServlet은 HandlerAdapter에게 메서드 호출 책임을 넘겨 HandlerAdapter가 컨트롤러의 Handler를 호출하고 Handler가 Model 데이터와 View 이름을 반환하면 HandlerAdapter가 이 정보를 받아 DispatcherServlet에게 반환합니다.
5. DispatcherServlet은 Model 데이터와 View 데이터 중 View 데이터를 ViewResolver에게 요청하여 해당 View를 요청합니다.
6. ViewResolver는 View를 찾아 DispatcherServlet에게 반환합니다.
7.DispatcherServlet은 View 객체에게 Model 데이터를 넘기면서 클라이언트에게 데이터 생성을 요구하고 VIew는 응답 데이터를 생성하여 DispatcherServlet에게 반환합니다.
8.마지막으로 DispatcherServlet이 응답데이터를 클라이언트에게 반환하게 됩니다.
이 위의 방법은 @Controller를 통해 처리하는 방법이고 @RestController는 조금 다릅니다.
@RestController는 Controller와 ReponseBody가 합쳐진 어노테이션입니다.

@RestController에서는 위의 1~3번이 동일하고 4번부터 조금 달라집니다.
4. DispatcherServlet은 HandlerAdapter에게 메서드 호출 책임을 넘겨 HandlerAdapter가 컨트롤러의 Handler를 호출하고 Handler가 비즈니스 로직 처리합니다. Handler에게 전달되는 값은 HttpMessageConverter가 메시지를 객체로, Controller에서 Handler에게 전달되는 값은 객체에서 메시지로 변환하여 전달됩니다. 이는 client로 전달이 됩니다.
DispatcherServlet은 직접적으로 요청을 처리하지 않고 다른 클래스나 인스턴스에게 요청을 위임합니다. (delegate)어플리케이션 앞단에 배치되어 다른 요소들과 상호작용하여 요청을 처리하는 패턴을 front controller pattern 이라 합니다.
'🤿백엔드 내실 채우기' 카테고리의 다른 글
[Spring] 스프링 IoC(Inversion of Control Container)와 빈 (1) | 2024.12.01 |
---|---|
[Spring] 스프링 3대 요소 - DI, AOP, PSA 정리 (0) | 2024.11.30 |

안녕하세요. 스프링을 사용하여 기능 구현 및 개발만 해봤지 스프링이 내부적으로 어떻게 동작되는 지에 대해서 공부하지 않아 코드를 짜면서도 답답했습니다. 이래서 개발자 할 수 있나~ 라는 생각도 들었어요.
그래서 백엔드내실 채우기 프로젝트를 시작합니다.
스프링 내부 동작 원리부터 깊게 공부 해볼 것입니다.
오늘은 spring MVC의 동작 원리에 대해서 알아보려합니다.
spring MVC는 서블릿 기반으로 동작합니다. 서블릿은 웹페이지를 동적으로 생성하는 서버 프로그램입니다.
spring MVC 에서 요청을 처리하는 핵심 클래스는 DispacherServlet 클래스입니다.
아래 그림은 서버에 요청이 들어오면 spring MVC가 어떻게 처리하는 지 보여주는 그림입니다.

1. 클라이언트가 요청을 보내면 DispatcherServlet 가 이 요청을 받습니다.
2. DispatcherServlet은 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에게 넘깁니다.
3. HandlerMapping 은 요청 url과 매핑되는 컨트롤러를 찾아 DispatcherServlet에게 응답합니다.
컨트롤러 안에는 컨트롤러의 요청을 처리하는 Handler 메서드 정보를 갖고 있습니다.
4. DispatcherServlet은 HandlerAdapter에게 메서드 호출 책임을 넘겨 HandlerAdapter가 컨트롤러의 Handler를 호출하고 Handler가 Model 데이터와 View 이름을 반환하면 HandlerAdapter가 이 정보를 받아 DispatcherServlet에게 반환합니다.
5. DispatcherServlet은 Model 데이터와 View 데이터 중 View 데이터를 ViewResolver에게 요청하여 해당 View를 요청합니다.
6. ViewResolver는 View를 찾아 DispatcherServlet에게 반환합니다.
7.DispatcherServlet은 View 객체에게 Model 데이터를 넘기면서 클라이언트에게 데이터 생성을 요구하고 VIew는 응답 데이터를 생성하여 DispatcherServlet에게 반환합니다.
8.마지막으로 DispatcherServlet이 응답데이터를 클라이언트에게 반환하게 됩니다.
이 위의 방법은 @Controller를 통해 처리하는 방법이고 @RestController는 조금 다릅니다.
@RestController는 Controller와 ReponseBody가 합쳐진 어노테이션입니다.

@RestController에서는 위의 1~3번이 동일하고 4번부터 조금 달라집니다.
4. DispatcherServlet은 HandlerAdapter에게 메서드 호출 책임을 넘겨 HandlerAdapter가 컨트롤러의 Handler를 호출하고 Handler가 비즈니스 로직 처리합니다. Handler에게 전달되는 값은 HttpMessageConverter가 메시지를 객체로, Controller에서 Handler에게 전달되는 값은 객체에서 메시지로 변환하여 전달됩니다. 이는 client로 전달이 됩니다.
DispatcherServlet은 직접적으로 요청을 처리하지 않고 다른 클래스나 인스턴스에게 요청을 위임합니다. (delegate)어플리케이션 앞단에 배치되어 다른 요소들과 상호작용하여 요청을 처리하는 패턴을 front controller pattern 이라 합니다.
'🤿백엔드 내실 채우기' 카테고리의 다른 글
[Spring] 스프링 IoC(Inversion of Control Container)와 빈 (1) | 2024.12.01 |
---|---|
[Spring] 스프링 3대 요소 - DI, AOP, PSA 정리 (0) | 2024.11.30 |