1. @Controller
[ @Controller 실행과정 ]
① Client가 HTTP 프로토콜(= URI 형식)로 웹 서비스에 요청을 보낸다.
② Dispatcher Servlet(= Web Application Server, Tomcat)이 요청을 위임할 Controller를 찾는다(= Handler Mapping).
③ Handler Mapping을 통해 요청을 위임할 Controller를 찾았으면 Handler Adapter를 통해 Controller 선택한다.
(Handler Mapping과 Handler Adpater는 Spring에서 자동으로 등록한다.)
④ Controller는 요청을 받고 처리된 View Name(밑에 예제에서 나오는 getMain() 메서드의 return 값)을 Handler Adapter에 반환한 후 Dispatcher Servlet에 전달한다.
⑤ Dispatcher Servlet은 View Resolver를 통해 View Name에 해당하는 View를 찾아 Client에게 반환한다.
→ Dispatcher Servlet : HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러
[ @Controller의 특징 ]
View(= JSP)를 반환하기 위해 사용한다.
특정 View로 데이터(= 값)를 전달 시 Model객체를 사용하여 View에 넘긴다.
Spring MVC(= Model, View, Controller)에서 요청을 처리하고 View Resolver를 활용하여 실제 View를 반환한다.
[ Spring MVC 개념 ]
- MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴으로 애플리케이션의 개발 영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다.
- Model
: 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 하며, 처리한 작업의 결과 데이터를 클라이언트에게 응답을 돌려주어야 하는데, 이때 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라 한다.
- View
: Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스(Resource)를 제공하는 역할을 한다.
- View의 역할
① HTML 페이지 출력
② PDF, Excel 등의 문서 형태로 출력
③ JSON 등 특정 형식의 포맷으로 변환
- Controller
: 클라이언트 측의 요청을 직접적으로 전달받는 엔드포인트(Endpoint)로써 Model과 View의 중간에서 상호작용을 해주는 역할을 한다.
: 클라이언트 측의 요청을 전달받아 비즈니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.
- MVC패턴의 구조
[ @Controller 예시 ]
[MainController.java]
@Controller
public class MainContoller {
@GetMapping(value="/main.do")
public String getMain(Model model) {
model.addAttribute("name", "apple");
return "main";
}
}
[main.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h1>${name}</h1>
</body>
</html>
[웹에서 localhost:8080/main.do 입력 시]
2. @RestController
[ @RestController 실행과정 ]
① Client가 HTTP 프로토콜(= URI 형식)로 웹 서비스에 요청을 보낸다.
② Dispatcher Servlet이 요청을 위임할 Controller를 찾는다(= Handler Mapping).
③ Handler Mapping을 통해 요청을 위임할 Controller를 찾았으면 Handler Adapter를 통해 Controller 선택한다.
④ Controller는 요청을 처리한 객체를 Handler Adapter에 반환한 후 Dispatcher Servlet에 전달한다.
⑤ Dispatcher Servlet으로 반환된 객체는 JSON으로 Serialize되어 Client에게 반환된다.
→ Serialize : 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술이다.
[ @RestController 특징 ]
@RestController = @Controller + @ResponseBody
@Controller처럼 View를 반환하는 것이 아닌 객체를 반환한다.
객체를 반환하면 결과를 XML 또는 JSON 형식으로 반환한다.
[MainController.java]
@RestController
public class MainController {
@GetMapping(value="/main.do")
public String getMain() {
return "내용 그대로 출력된다.";
}
}
[웹에서 localhost:8080/main.do 입력 시]
3. @Controller와 @RestController의 차이점
- @Controller는 클래스를 Spring MVC Controller로 표시하는데 사용되는데, @RestController는
RESTful 웹 서비스에서 사용되는 특수 컨트롤러이다.
- @Controller는 View의 이름을 반환하지만, @RestController는 모든 메서드가 객체로 반환된다.
→ RESTful 웹 서비스 : ‘REST API’를 제공하는 웹 서비스
→ REST API : REST를 기반으로 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며,
서로 정보를 교환가능 하도록 하는 것
→ REST : HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
4 |
fetch()와 await fetch()
![]() | 김지훈 | 2025.04.17 | 11 |
3 |
Spring Security 적용법
![]() | 김지훈 | 2024.09.20 | 53 |
» |
@Controller와 @RestController의 차이점
![]() | 김지훈 | 2024.07.19 | 31 |
1 | SpringToolSuite 4를 이용한 Spring Boot Web 프로그래밍 기초 | Eugene | 2023.10.17 | 1849 |