이 글을 작성하는 이유
계속 404가 뜨던 요청이
@Controller에서 @RestController을 붙이자마자 해결된 것이다
도대체 왜일까 내 10시간을 어디에 바친 것인가
그러나 이 모든 것은 내 무지에서 출발하였다...
한바탕 데이고 알아보는 두 어노테이션의 차이점.
✴️ @Controller ?
컨트롤러는 애플리케이션을 구성하는 핵심 요소 중 하나로,
URI와 매핑하여 클라이언트의 요청에 알맞은 응답을 반환하는 곳이다.
Spring의 @Controller 어노테이션은 View를 반환한다.
✴️ @RestController ?
Controller 앞에 Rest가 붙은 이 RestController는
@Controller + @ResponseBody 의 개념이라고 한다.
그래서 @RestController 어노테이션은 JSON 형태의 데이터를 반환한다.
🧩 왜 @RestController로 바꾸니까 404가 해결됐을까?
1. @Controller는 뷰를 반환한다고 생각한다
예를 들어,
@Controller
public class MyController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
- 이 경우, "hello"는 templates/hello.html이라는 뷰 파일을 찾는다.
- 만약 해당 뷰 파일이 없으면, 스프링은 404 에러를 응답하게 된다.
2. @RestController는 응답 바디로 데이터를 반환한다
@RestController
public class MyController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
- 여기서는 "hello"가 문자열 그대로 HTTP 응답 본문에 들어가고,
- 뷰 파일을 찾지 않기 때문에 404가 발생하지 않는다.
REST API 만들 때는 대부분 @RestController를 사용한다고 한다!
이제 실수하지 않도록 노력해야지...
'🍏 Spring Boot' 카테고리의 다른 글
[Spring Boot] Google OAuth2 로그인 설정 (0) | 2025.04.14 |
---|---|
[Spring Boot] Google Firebase와 Spring Boot 연결 (1) | 2025.04.14 |
[Spring Boot] The requestURI was rejected because it can only contain printable ASCII characters (0) | 2025.03.25 |
[Spring Boot] @RequestParam, @RequestBody (2) | 2025.03.17 |
[Spring Boot] 1. RDS MySQL 배포하기 (0) | 2025.03.17 |