I. Controller의 종류와 정의
- Controller란?
Spring의 Controller는 MVC 패턴에서 View와 Model의 사이의 중간자 역활을 하며, 클라이언트 요청을 처리하는 비지니스 로직을 실행하거나 서비스 계층과 상호작용 한다.
(추가로 정리해야할 정의 요소들)
MVC 패턴(링크기재)
https://doltae.tistory.com/443
Spring MVC 패턴
I. Spring MVC란?· Model-View-Controller 아키텍처 패턴을 기반으로 한 Spring Framework의 웹 애플리케이션 개발 모듈이다.· 애플리케이션의 각 관심사를 명확히 분리하여 유연하고 유지보수하기 쉬운 코드
doltae.tistory.com
클라이언트 요청(링크기재)
https://doltae.tistory.com/444
클라이언트 요청이란?
클라이언트 요청은 브라우저, 모바일 앱,다른 서버 등 다양한 클라이언트가 서버에 HTTP 프로토콜을 사용해 정보를 요청하는 행위입니다. 이 요청은 HTTP 메서드 (GET, POST, PUT, DELETE 등)와 함께 특정
doltae.tistory.com
서비스 계층(링크기재)
https://doltae.tistory.com/445
서비스 계층이란?
서비스 계층은 애플리케이션의 비즈니스 로직을 처리하는 핵심 계층으로, 컨트롤러와 데이터 접근 계층(DAO/Repository) 사이에서 중간 역할을 한다.
doltae.tistory.com
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. 둘의 차이점을 설명해봐.
'Study > Spring' 카테고리의 다른 글
클라이언트 요청이란? (0) | 2025.01.22 |
---|---|
Spring MVC 패턴 (1) | 2025.01.22 |