• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

스프링 MVC 작동순서가 맞는지 확인 부탁드립니다!

24.04.16 21:02 작성 24.04.17 16:10 수정 조회수 73

0



 

@Controller
@RequestMapping("/springmvc/v3/members")
public class SpringMemberControllerV3 {
    private MemberRepository memberRepository = MemberRepository.getInstance();

    @GetMapping("/new-form")
    public String newForm() {
        return "new-form";
    }
}
  1. 핸들러 조회: 클라이언트로부터 /springmvc/v3/members/new-form에 대한 GET 요청이 들어오면, 스프링 MVC는 @RequestMapping("/springmvc/v3/members")과 @GetMapping("/new-form")을 통해 이 요청을 처리할 SpringMemberControllerV3 클래스의 newForm() 메소드를 핸들러로 결정합니다.

  2. 핸들러를 처리할 수 있는 핸들러 어댑터 조회: 스프링은 결정된 핸들러(컨트롤러의 메소드)를 실행할 수 있는 핸들러 어댑터를 찾습니다. 스프링 MVC에는 여러 종류의 핸들러 어댑터가 있으며, 이 경우에는 RequestMappingHandlerAdapter가 사용됩니다.

  3. handle(): 핸들러 어댑터는 핸들러 메소드(newForm())를 호출하는 handle() 메소드를 실행합니다.

  4. handler(controller) 호출: newForm() 메소드가 호출되어 실행됩니다. 이 메소드는 뷰의 이름을 문자열로 반환합니다. 여기서는 "new-form"이 반환됩니다.

  5. ModelAndView 반환: 이 예제에서는 단순히 뷰 이름을 문자열로 반환합니다. 스프링 MVC는 이 문자열을 바탕으로 ModelAndView 객체를 내부적으로 생성하며, 모델 데이터는 비어 있고, 뷰 이름은 "new-form"입니다.

  6. ViewResolver 호출: 반환된 뷰 이름 "new-form"을 기반으로 ViewResolver가 호출됩니다. ViewResolver의 역할은 뷰 이름을 실제 뷰 객체로 변환하는 것입니다. 스프링 MVC에서는 InternalResourceViewResolver 등 다양한 ViewResolver 구현체를 사용할 수 있으며, 이는 보통 applicationContext.xml 혹은 @Configuration 설정 클래스에서 설정됩니다.

  7. View 반환: ViewResolver는 요청된 뷰 이름에 해당하는 실제 뷰 객체를 찾아 반환합니다. 예를 들어, JSP를 사용하는 경우, "new-form" 이름은 /WEB-INF/views/new-form.jsp 파일에 해당하는 JstlView 객체로 해석될 수 있습니다.

  8. render(model) 호출: 뷰 객체는 ModelAndView에서 제공하는 모델 데이터(이 예제에서는 비어 있음)를 사용하여 뷰를 렌더링합니다. 렌더링 과정에서 최종적으로 클라이언트에게 보낼 HTML이 생성됩니다.

  9. HTML 응답: 생성된 HTML이 클라이언트에게 응답으로 전송됩니다. 클라이언트는 이 HTML을 받아 브라우저에서 렌더링합니다.

 


MVC의 대략적인 개념을 위와 같이 이해하면 될까요? (gpt가 정리해준건데 정확한지 모르겠습니다 ㅠ)

 

답변 1

답변을 작성해보세요.

0

David님의 프로필

David

2024.04.17

안녕하세요. liltjay님, 공식 서포터즈 David입니다.

전반적으로 잘 정리된 것 같습니다.

학습을 위해서 ChatGPT가 정리해준 내용을 강의내용과 비교하며 검토해 보는 걸 권장합니다:)

감사합니다.