공부기록/Spring

[Spring] (Spring MVC) API 계층

taecode 2025. 1. 6. 19:05

( JSON ) : 문자열 형식의 데이터 ***************************************************************************************************

 - 직렬화 : JSON형식의 데이터로 바꾸는 것
 - 역직렬화 :  직렬화 반대

 

자바에서 역/직렬화 하기 위해 내장된 것 : JACKSON

그 외에 GSON

 

Spring MVC

 

Spring의 모듈 중에는 웹 계층을 담당하는 몇 가지 모듈이 있는데, 서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데, 이 모듈 이름이 바로 spring-webmvc이다.

 

 

Model

  • 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다.
  • 작업의 결과 데이터를 클라이언트에게 응답으로 돌려줘야 하는데, 이때 작업의 처리 결과 데이터를 Model이라고 한다.

 

View

  • Model 데이터를 이용해서 웹브라우저 같은 클라이언트 애플리케이션의 화면에 보이는 리소스를 제공하는 역할
  • 데이터를 특정 형식의 포맷으로 변환해서 전달
  • 실질적으로 학습하는 View는 JSON 포맷의 데이터를 생성

 

Controller

  • 클라이언트 측의 요청을 직접적으로 전달받는엔드포인트로써 Model과 View의 중간에서 상호 작용을 해주는 역할
  • Model데이터가 만들어지면, 이 데이터를 View로 전달하는 역할 

 

MVC 전체적인 동작 흐름

 

동작 방식 및 구성 요소

  1. 클라이언트의 요청 전송시 DispatcherServlet 클래스에 요청 전달
  2. DispatcherServlet은 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에 요청
  3. HandlerMapping은 클라이언트 요청과 매핑되는 핸들러 객체를 다시 DispatcherServlet에게 리턴
    - 핸들러 객체는 해당 핸들러의 Handler 메서드 정보를 포함하고 있다.
    - Handler 메서드는 Controller 클래스 안에 구현된 요청 처리 메서드 의미.
  4. DispatcherServlet 은 찾은 Handler 메서드를 직접 호출하지 않고 HandlerAdapter에게 Handler 메서드 호출 위임.
  5. HandlerAdapter는 전달받은 Controller 정보를 기반으로 해당 메서드 호출
  6. Controller의 Handler 메서드는 비즈니스 로직 처리 후 리턴 받은 Model 데이터를 HandlerAdapter에게 전달.
  7. HandlerAdapter는 전달받은 Model데이터와 View 정보를 다시 DispatcherServlet에게 전달
  8. DispatcherServlet은 전달받은 View 정보를 다시 ViewResolver에게 전달해서 View검색 요청.
  9. ViewResolver는 View 정보에 해당하는 View를 찾아서 View를 다시 리턴.
  10. DispatcherServlet은 ViewResolver로부터 전달받은 View객체를 통해 Model 데이터를 넘겨주면서 응답 데이터 생성 요청.
  11. View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 전달
  12. DispatcherServlet은 View로부터 전달받은 응답 데이터를 최종적으로 클라이언트에게 전달.

 

DispatcherServlet

DispatcherServlet 이 가장 앞단에 배치되어 다른 구성요소들과 상호작용을 하면서 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 부름.

Controller 앞에서 동작하기 때문에

 

 

인증/인가를 두가지 방법으로 처리할 수 있는데 DispatcherServlet에 요청을 받았을 때 처리하는 방법과 HandlerAdapter에서 Controller를 호출할 때 처리하는 방법이 있다. Spring Security는 전자의 방식을 채택하고있다.

 

 

RestController는 @ResponseBody 내장함

 

@RequestMapping 은 클래스 위 or 메서드 위에 붙을 수 있음.

클래스 위에 붙는건 속한 핸들러에서 중복된 것들 뺴놓은것.

 

ResponseEntity로 리턴 하면 JSON으로 바꿔서 나오는 이유는 @RestController 내부의 @ResponseBody 어노테이션이 바꿔주기 때문임.

 

 

'공부기록 > Spring' 카테고리의 다른 글

[Spring] API 계층 Controller(2/2)  (0) 2025.01.07
[Spring] @SpringBootApplication의 역할  (0) 2025.01.06
[Spring] Spring DI, AOP / 25.01.06  (0) 2025.01.06
Spring Boot 란?  (0) 2025.01.03
[Spring] Spring Framework 모듈 구성  (1) 2025.01.03