( JSON ) : 문자열 형식의 데이터 ***************************************************************************************************
- 직렬화 : JSON형식의 데이터로 바꾸는 것
- 역직렬화 : 직렬화 반대
자바에서 역/직렬화 하기 위해 내장된 것 : JACKSON
그 외에 GSON
Spring MVC
Spring의 모듈 중에는 웹 계층을 담당하는 몇 가지 모듈이 있는데, 서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데, 이 모듈 이름이 바로 spring-webmvc이다.
Model
- 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다.
- 작업의 결과 데이터를 클라이언트에게 응답으로 돌려줘야 하는데, 이때 작업의 처리 결과 데이터를 Model이라고 한다.
View
- Model 데이터를 이용해서 웹브라우저 같은 클라이언트 애플리케이션의 화면에 보이는 리소스를 제공하는 역할
- 데이터를 특정 형식의 포맷으로 변환해서 전달
- 실질적으로 학습하는 View는 JSON 포맷의 데이터를 생성
Controller
- 클라이언트 측의 요청을 직접적으로 전달받는엔드포인트로써 Model과 View의 중간에서 상호 작용을 해주는 역할
- Model데이터가 만들어지면, 이 데이터를 View로 전달하는 역할
MVC 전체적인 동작 흐름

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