Spring MVC

박채은·2022년 12월 18일
0

Spring

목록 보기
11/35

Spring MVC

  • Spring Framework = Spring에서 지원하는 모든 기능들

  • Spring Web MVC

    • Spring Framework의 모듈 중 웹 계층을 담당하는 모듈
      = 웹 프레임워크 중 하나

    • 클라이언트의 요청을 편리하게 처리해주는 프레임워크

    • 서블릿 API를 기반으로 클라이언트의 요청을 처리

Spring Web MVC
= Spring Web Framework
= Spring MVC


서블릿

  • 웹 요청 처리에 특화된 Java 클래스
  • Spring MVC 내부에서 웹 요청을 처리할때에 내부적으로 Servlet을 사용한다.
  • 아파치 톰캣(Apache Tomcat)은 서블릿들이 웹 애플리케이션으로 실행될 수 있도록 해주는 서블릿 컨테이너 중 하나이다.

Spring MVC 기반의 웹 애플리케이션의 동작 방식

  1. 클라이언트의 요청을 받음

  2. Controller가 요청 데이터를 수신

  3. 비즈니스 로직을 통해 요청을 처리

  4. Model 데이터가 생성됨

  5. ControllerView에게 Model 데이터를 전달

  6. ViewModel 데이터를 변환해서 응답 데이터 생성

  7. 클라이언트에게 응답


MVC

  • 디자인 패턴 중 하나

Model

  • Model : 클라이언트에게 응답으로 돌려줄 결과 데이터
  • 서비스 계층 : 클라이언트의 요청 사항을 처리하는 영역
  • 비즈니스 로직 : 요청 사항을 처리하기 위해 구현한 코드

-> 서비스 계층의 비즈니스 로직을 통해서 Model을 생성한다.

View

  • Model 데이터를 클라이언트 애플리케이션(웹 브라우저)의 화면에 제공하는 역할을 한다.

✔️ View 의 형태

  1. HTML 페이지를 출력
    = SSR(Server Side Rendering)

    • 서버쪽에서 HTML을 렌더링해서 클라이언트 측에 전송해준다.
      (서버에서 HTML 페이지에 Model 데이터를 채워 넣어 HTML 파일 자체를 전송해줌)
  2. PDF, Excel 등의 문서 형태로 출력

  3. XML, JSON 등의 특정 형식의 포멧으로 변환해서 전달
    = CSR(Client Side Rendering)

    • Model 데이터를 특정 프로토콜 형태로 변환해서 클라이언트에 전송
    • 프런트엔드 측에서 이 데이터를 기반으로 HTML 페이지를 만든다.

JSON 이란?
Spring MVC에서 클라이언트 애플리케이션과 서버 애플리케이션이 주고 받는 데이터 형식


Controller

✔️ Controller의 역할

  1. 클라이언트의 요청을 직접적으로 받는 엔드포인트 역할
  2. ModelView의 중간에서 상호 작용해주는 역할

Spring MVC의 내부적인 동작 방식

  • DispatcherServlet: 클라이언트의 요청을 제일 먼저 전달 받는다.

    • HandlerMapping 인터페이스에게 Controller의 검색을 위임한다.
    • HandlerAdpater에게 Controller 클래스내에 있는 Handler 메서드 호출을 위임한다.
    • ViewResolver에게 View 검색을 위임한다.
    • View에게 Model 데이터를 전달한 후, 응답 데이터 생성을 위임한다.
    • 최종 응답 데이터를 클라이언트에게 전달한다.
  • HandlerMapping: 핸들러 객체를 찾아 DispatcherServlet에게 리턴해준다.

    • 핸들러 객체 = Handler 메서드(Controller)의 정보를 포함한 객체
    • Handler 메서드 = Controller 클래스 안에 존재하는 실제 요청 처리 메서드
  • HandlerAdapter: Controller의 Handler 메서드를 호출한 후, Model 데이터를 리턴받아 DispatcherServlet에게 전달

  • Controller: Controller의 Handler 메서드는 비즈니스 로직을 처리한 후, 리턴받은 Model 데이터를 HandlerAdapter에게 전달한다.

  • ViewResolver: 전달받은 View 정보를 통해 View 객체를 찾아 리턴해준다.

  • View: Model 데이터를 변환해서 응답 데이터 생성

DispatcherServlet의 역할

대부분의 Spring MVC 구성 요소들과 상호 작용하고 있다.
DispatcherServlet은 굉장히 바빠보이지만 실제로 요청에 대한 처리는 다른 구성 요소들에게 위임(Delegate)하고 있다.
-> DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다.


용어 정리

Handler

  • 클라이언트의 요청을 처리하는 처리자 = Controller 클래스

Handler Method

  • Controller 클래스 내부에 있는 @GetMapping, @PostMapping 같은 애너테이션이 붙은 메서드

HandlerMapping

  • 클라이언트의 요청과 요청을 처리하는 Handler를 매핑해주는 것

Adapter

  • 무언가를 다른 형식이나 형태로 바꿔주는 역할

Entrypoint 클래스

  • main() 메서드가 포함된 클래스 = 애플리케이션의 시작점

  • @SpringBootApplication

    • 자동 구성을 활성화한다. (@EnableAutoConfiguration)
    • 내부에 @ComponentScan이 있어서, @Component가 붙은 클래스를 찾아 Bean으로 등록한다.
    • 내부에 @SpringBootConfiguration이 있어서, @Configuration 클래스를 추가적으로 임포트해준다.

🚨 주의할 것! 🚨
@ComponentScan 시에, Entrypoint 클래스가 포함된 패키지와 그 하위 패키지 내의 클래스들만 탐색한다.
따라서 무조건 루트나 상위 패키지에 Entrypoint 클래스를 둘 것!


  • SpringApplication.run(Application.class, args);
    • Spring 애플리케이션을 부트스트랩하고, 실행하는 역할을 한다.

💡 부트스트랩이란?
애플리케이션이 실행되기 전에, 여러 가지 설정 작업을 수행하여 실행 가능한 애플리케이션으로 만드는 단계

0개의 댓글