
@Controller와 @RestController의 차이
@Controller와 @RestController는 Spring Framework에서 웹 컨트롤러를 정의할 때 사용하는 애노테이션입니다. 이 두 애노테이션의 차이는 주로 응답 처리 방식에 있습니다.
@Controller
@Controller는 MVC 패턴의 컨트롤러를 정의할 때 사용됩니다. 이 애노테이션은 일반적으로 HTML 뷰를 반환하는 메서드를 작성할 때 사용됩니다. @Controller는 기본적으로 JSP, Thymeleaf 같은 템플릿 엔진을 통해 뷰를 생성하는 데 사용됩니다.
예시:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ViewController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Thymeleaf!");
return "hello"; // 이 문자열은 'hello.html' 뷰를 가리킵니다.
}
}
위 예시에서 hello 메서드는 hello.html이라는 뷰 이름을 반환하고, Model 객체에 데이터를 추가하여 뷰에서 이를 사용할 수 있도록 합니다.
@RestController
@RestController는 RESTful 웹 서비스의 컨트롤러를 정의할 때 사용됩니다. 이 애노테이션은 JSON 또는 XML 형식의 데이터 응답을 생성합니다. @RestController는 @Controller와 @ResponseBody를 결합한 형태로, 각 메서드의 반환 값이 자동으로 JSON/XML 형식으로 변환되어 HTTP 응답 본문에 직접 작성됩니다.
예시:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String hello() {
return "Hello, REST!";
}
}
위 예시에서 hello 메서드는 문자열 “Hello, REST!“를 반환하며, 이 문자열은 HTTP 응답 본문에 직접 작성됩니다.
주요 차이점 요약
• 응답 형식:
• @Controller: 일반적으로 뷰 이름을 반환하며, 뷰 리졸버에 의해 HTML, JSP 등으로 변환됩니다.
• @RestController: 데이터(주로 JSON 또는 XML)를 반환하며, 반환 값이 HTTP 응답 본문에 직접 작성됩니다.
• 용도:
• @Controller: 주로 웹 애플리케이션의 UI를 생성하는 데 사용됩니다.
• @RestController: RESTful API를 작성하는 데 사용됩니다.
• 결합된 애노테이션:
• @Controller는 @ResponseBody와 결합되지 않았습니다. 데이터 응답이 필요하면 메서드에 @ResponseBody를 추가해야 합니다.
• @RestController는 @Controller와 @ResponseBody를 결합한 형태입니다. 모든 메서드에 자동으로 @ResponseBody가 적용됩니다.
이 두 애노테이션을 사용하여 프로젝트의 요구사항에 맞게 컨트롤러를 작성하면 됩니다. HTML 뷰를 렌더링하는 경우 @Controller를 사용하고, JSON 데이터를 반환하는 RESTful API를 작성하는 경우 @RestController를 사용하면 됩니다 :D
'Framework > Spring' 카테고리의 다른 글
[Spring] RESTful API 컨트롤러의 @GetMapping 에서 데이터를 받는 방법 (0) | 2024.07.03 |
---|---|
[Spring] Spring Boot 기본, 자주 사용하는 어노테이션 (애너테이션) (0) | 2024.07.02 |
[Spring Boot] application.yml이란? application.yml 설정 방법 (0) | 2024.06.29 |
[Spring Boot] application.properties와 application.yml 차이 (0) | 2024.06.29 |
[Spring] message.yml 이란? 사용 목적, 사용 예시 (0) | 2024.06.29 |

@Controller와 @RestController의 차이
@Controller와 @RestController는 Spring Framework에서 웹 컨트롤러를 정의할 때 사용하는 애노테이션입니다. 이 두 애노테이션의 차이는 주로 응답 처리 방식에 있습니다.
@Controller
@Controller는 MVC 패턴의 컨트롤러를 정의할 때 사용됩니다. 이 애노테이션은 일반적으로 HTML 뷰를 반환하는 메서드를 작성할 때 사용됩니다. @Controller는 기본적으로 JSP, Thymeleaf 같은 템플릿 엔진을 통해 뷰를 생성하는 데 사용됩니다.
예시:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class ViewController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Thymeleaf!");
return "hello"; // 이 문자열은 'hello.html' 뷰를 가리킵니다.
}
}
위 예시에서 hello 메서드는 hello.html이라는 뷰 이름을 반환하고, Model 객체에 데이터를 추가하여 뷰에서 이를 사용할 수 있도록 합니다.
@RestController
@RestController는 RESTful 웹 서비스의 컨트롤러를 정의할 때 사용됩니다. 이 애노테이션은 JSON 또는 XML 형식의 데이터 응답을 생성합니다. @RestController는 @Controller와 @ResponseBody를 결합한 형태로, 각 메서드의 반환 값이 자동으로 JSON/XML 형식으로 변환되어 HTTP 응답 본문에 직접 작성됩니다.
예시:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String hello() {
return "Hello, REST!";
}
}
위 예시에서 hello 메서드는 문자열 “Hello, REST!“를 반환하며, 이 문자열은 HTTP 응답 본문에 직접 작성됩니다.
주요 차이점 요약
• 응답 형식:
• @Controller: 일반적으로 뷰 이름을 반환하며, 뷰 리졸버에 의해 HTML, JSP 등으로 변환됩니다.
• @RestController: 데이터(주로 JSON 또는 XML)를 반환하며, 반환 값이 HTTP 응답 본문에 직접 작성됩니다.
• 용도:
• @Controller: 주로 웹 애플리케이션의 UI를 생성하는 데 사용됩니다.
• @RestController: RESTful API를 작성하는 데 사용됩니다.
• 결합된 애노테이션:
• @Controller는 @ResponseBody와 결합되지 않았습니다. 데이터 응답이 필요하면 메서드에 @ResponseBody를 추가해야 합니다.
• @RestController는 @Controller와 @ResponseBody를 결합한 형태입니다. 모든 메서드에 자동으로 @ResponseBody가 적용됩니다.
이 두 애노테이션을 사용하여 프로젝트의 요구사항에 맞게 컨트롤러를 작성하면 됩니다. HTML 뷰를 렌더링하는 경우 @Controller를 사용하고, JSON 데이터를 반환하는 RESTful API를 작성하는 경우 @RestController를 사용하면 됩니다 :D
'Framework > Spring' 카테고리의 다른 글
[Spring] RESTful API 컨트롤러의 @GetMapping 에서 데이터를 받는 방법 (0) | 2024.07.03 |
---|---|
[Spring] Spring Boot 기본, 자주 사용하는 어노테이션 (애너테이션) (0) | 2024.07.02 |
[Spring Boot] application.yml이란? application.yml 설정 방법 (0) | 2024.06.29 |
[Spring Boot] application.properties와 application.yml 차이 (0) | 2024.06.29 |
[Spring] message.yml 이란? 사용 목적, 사용 예시 (0) | 2024.06.29 |