스프링 MVC 구조

Spring/Spring MVC
2023. 9. 4. 23:51
목차
  1.  
  2. 직접 만든 MVC 프레임워크 구조 vs. SpringMVC 구조
  3. Spring MVC 동작 순서
  4. @RequestMapping
  5. View Resolver
728x90

 

직접 만든 MVC 프레임워크 구조 vs. SpringMVC 구조

Spring MVC 동작 순서

DispacherServlet.doDispatch() 코드를 분석하면 MVC 동작이 보인다.

DispacherServlet을 서블릿으로 등록하고 모든 경로(urlPatterns="/")에 대해서 매핑된다.

  1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
  2. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
  3. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.
  4.  핸들러 실행: 핸들러 어댑터가 핸들러를 실행한다.
  5. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
  6. viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
  7. View 반환: 뷰를 통해서 뷰를 렌더링 한다.

@RequestMapping

스프링이 자동으로 등록하는 핸들러 매핑과 핸들러 어댑터 중에서 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용하는 RequestMappingHandlerMapping에 대해서 설명하겠다 

 

RequestMappingHandlerMapping은 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용된다.

@RequestMapping 애노테이션을 사용하는 컨트롤러가 제일 먼저 매핑된다.

 

@Controller 또는 @RequestMapping이 클래스 레벨에 붙어있으면 매핑 정보로 인식한다. 여기서 어떻게 매핑 정보로 인식하는지 간단하게 보자면, (더 자세하게 이해하고 싶다면 링크 참고)

RequestMappingHandlerMapping빈을 생성하고, 빈 팩토리에 등록되어 있는 빈들 중 @Controller 또는 @RequestMapping이면 핸들러로 인식하게 되어 있다. 핸들러로 인식한 빈에서 메서드를 추출한다. 추출한 메서드를 registry에 등록한다. 이렇게 등록되면 어댑터가 요청 url에 맞는 컨트롤러의 메서드를 찾아서 호출해 줄 수 있다.

@Controller
public class SpringMemberFormController {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}

 

 

  • @Controller: 스프링 mvc에서 애노테이션 기반 컨트롤러로 인식
  • @RequestMapping: 요청 정보를 매핑, 해당 URL로 요청이 들어오면 아래 메서드를 실행한다. 이 메서드 실행은 어댑터가 한다. 컨트롤러의 메서드(process()) 실행
  • 메서드 실행 후 ModelAndView 를 DispacherServlet 으로 반환
  • DispacherServlet 은 ModelAndView 을 ViewResolver에 의해 물리 주소로 변환한 결과를 받고 페이지를 렌더링해 준다 (render())

View Resolver

스프링 부트가 등록하는 뷰 리졸버 (실제로 더 많지만 중요한 부분 위주로 설명)

  1. BeanNameViewResolver : 빈 이름으로 뷰를 찾아서 반환
  2. InternalResourceViewResolver: JSP를 처리할 수 있는 뷰를 반환

위 코드를 보면 new-form이라는 뷰 이름으로 viewResolver를 순서대로 호출한다.

728x90

'Spring > Spring MVC' 카테고리의 다른 글

HTTP 요청 메시지 - 텍스트, JSON  (1) 2023.10.05
HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form  (0) 2023.10.05
[스프링 MVC] 요청 매핑  (0) 2023.10.05
컴포넌트 스캔  (0) 2023.09.17
스프링 MVC 시작하기  (0) 2023.09.05
  1.  
  2. 직접 만든 MVC 프레임워크 구조 vs. SpringMVC 구조
  3. Spring MVC 동작 순서
  4. @RequestMapping
  5. View Resolver
'Spring/Spring MVC' 카테고리의 다른 글
  • HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form
  • [스프링 MVC] 요청 매핑
  • 컴포넌트 스캔
  • 스프링 MVC 시작하기
hapBday
hapBday
hapBday
개발자로 성장하기 위한 기록들
hapBday
전체
오늘
어제
  • 분류 전체보기 (201) N
    • CS (12)
      • 컴퓨터네트워크 (11)
      • 운영체제 (0)
      • 분산 시스템 (0)
      • 데이터베이스 (1)
    • Spring (47) N
      • Spring 핵심 원리 (13)
      • Spring MVC (15)
      • Spring DB (12)
      • Spring Security (6) N
    • JPA (14)
    • 알고리즘 (30)
      • 프로그래머스 (6)
      • 백준 (20)
    • Design Pattern (0)
    • 언어 (5)
      • JAVA (5)
    • ASAC 웹 풀스택 (38)
      • Spring Boot (21)
      • React (0)
      • DevOps (8)
    • 트러블슈팅 (14)
    • DevOps (5)
      • Docker (5)
    • ETC (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

인기 글

태그

  • docker best practices
  • currency control
  • CSRF
  • S3
  • 백준
  • CORS
  • 오블완
  • s-lock
  • x-lock
  • jwt
  • cookie
  • JPA
  • basicerrorcontroller
  • docker
  • Session
  • 트랜잭션
  • spring security
  • spring boot
  • docker workflow
  • Java
  • MVC
  • 인프런
  • aws lambda
  • multi-stage
  • Spring
  • 구현
  • 프로그래머스
  • 3-layerd 아키텍쳐 패턴
  • 김영한
  • 티스토리챌린지

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
hapBday
스프링 MVC 구조
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.