I. Controller의 종류와 정의
- Controller란?
Spring의 Controller는 MVC 패턴에서 View와 Model의 사이의 중간자 역활을 하며, 클라이언트 요청을 처리하는 비지니스 로직을 실행하거나 서비스 계층과 상호작용 한다.
(추가로 정리해야할 정의 요소들)
MVC 패턴(링크기재)
클라이언트 요청(링크기재)
서비스 계층(링크기재)
II. Controller의 주요 Annotation
- @Controller
1. Spring MVC에서 사용되는 기본 컨트롤러 어노테이션
2. 주로 HTML, View를 반환할 때 사용한다.
3. 반환 값은 기본적으로 View 이름으로 간주한다.
(사용예제)
@Controller
public class MyController {
@GetMapping("/hello")
public String hello() {
return "hello"; // 뷰 이름 반환 (hello.jsp 또는 hello.html)
}
}
A. @Controller는 어디에 사용합니까?
· 주로 HTML 뷰를 반환하거나 템플릿 엔진(JSP, Thymeleaf 등)을 통해 UI를 렌더링하는데 사용한다.
A. 해당 컨트롤러는 Spring 내부에서 어떻게 동작합니까?
1. 컴포넌트 스캔
· @Controller로 선언된 클래스는 Spring의 컴포넌트 스캔을 통해 Bean으로 등록된다.
· 등록된 컨트롤러 클래스는 HandlerMapping과 연관되어 특정 요청 URL을 처리한다.
2. 요청 매핑
· 클래스나 메서드에 정의된 @RequestMapping 및 세부 매핑 어노테이션(@GetMapping, @PostMapping 등)을 기반으로 요청을 매핑한다.
· 요청이 들어오면 DispatcherServlet이 요청 URL에 따라 적절한 컨트롤러와 메서드를 찾는다.
3. 핸들러 실행
· 요청을 처리한 후, 컨트롤러 메서드는 뷰 이름(String)을 반환하거나 Model 객체를 뷰에 전달한다.
· 반환된 뷰 이름은 ViewResolver를 통해 실제 뷰 파일(JSP, HTML 등)로 매핑된다.
4. 뷰 렌더링
· Model에 추가된 데이터를 기반으로 템플릿 엔진이 뷰를 렌더링하고, 최종적으로 클라이언트에게 HTML 응답을 반환한다.
(코드 예제)
@Controller
public class MyController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Home Page");
return "home"; // "home.html" 또는 "home.jsp"로 매핑
}
}
(추가로 정리해야할 요소들)
동작 과정을 그림으로 간단하게 그린 플로우 차트, Bean, HandlerMapping, DispatcherServlet, ViewResolver
- @RestController
1. @Controller와 @ResponseBody를 결합한 어노테이션.
2. HTTP 응답 본문에 데이터를 반환하는 데 사용된다.(주로 JSON 또는 XML)
3. RESTful API를 개발할 때 주로 사용한다.
@RestController
public class MyRestController {
@GetMapping("/api/data")
public String getData() {
return "Hello, World!"; // 응답 본문 반환
}
}
(추가로 정리해야할 정의 요소들)
RESTful API, JSON, XML, @ResponseBody
A. @RestController는 어디에 사용됩니까?
주로 RESTful 웹 서비스를 구현할 때 사용되는데, 반환값이 HTTP 응답 본문(Response Body)에 직접 매핑된다.
A. 해당 컨트롤러는 Spring 내부에서 어떻게 동작합니까?
1. 컴포넌트 스캔
· Spring의 컴포넌트 스캔을 통해 Bean으로 등록된다.
2. 요청 매핑
· @RequestMapping, @GetMapping, @PostMapoing 등의 요청 매핑 어노테이션이 사용된다.
· 요청 URL에 따라 DispatcherServlet이 적절한 컨트롤러 메서드를 찾는다.
3. 핸들로 실행
· 메서드의 반환 값은 ViewResolver를 거치지 않고, HttpMessageConverter를 통해 JSON, XML, 또는 텍스트 형태로 변환된다.
· 기본적으로 Jackson 라이브러리를 사용하여 객체를 JSON으로 변환한다.
4. 응답 반환
· 변환된 데이터는 HTTP 응답 본문으로 전송한다.
· 클라이언트는 JSON 또는 XML 형식의 데이트를 받는다.
(코드 예제)
@RestController
public class MyRestController {
@GetMapping("/api/greeting")
public Map<String, String> greeting() {
return Map.of("message", "Hello, World!"); // JSON으로 변환
}
}
(추가로 정리해야할 요소들)
동작 과정을 그림으로 간단하게 그린 플로우 차트, HttpMessageConverter, Jackson 라이브러리, HTTP
III. Controller와 @RestController의 주요 차이점
특성 | @Controller | @RestController |
목적 | HTML 뷰 반환 및 템플릿 렌더링 | JSON, XML, 또는 문자열 데이터 반환 |
자동 포함 어노테이션 | 없음 | @ResponseBody |
응답 데이터 처리 방식 | ViewResolver를 통해 템플릿 엔진을 호출 | HttpMessageConverter를 통해 데이터 변환 |
용도 | 전통적인 웹 애플리케이션 | RESTful API 개발 |
IIII. 과제 답변해보기.
A. @Controller랑 @RestController는 Spring 내부에서 어떻게 동작하는지 설명해봐.
A. 둘의 차이점을 설명해봐.