✅ @RestController vs @Controller 차이점
Spring Boot에서 @RestController와 @Controller는 둘 다 컨트롤러 클래스에 붙이는 어노테이션이지만,
주된 차이점은 응답 방식에 있습니다.
🔍 @Controller (웹 애플리케이션 용도)
@Controller는 주로 HTML 같은 서버에 있는 뷰 페이지를 반환하는 경우에 사용됩니다.
📌 @Controller를 사용하여 View 반환
@Controller
public class PageController {
@GetMapping("/home")
public String home() {
return "home"; // "home.html" (Thymeleaf 템플릿) 반환
}
}
- return "home"; → src/main/resources/templates/home.html 파일을 찾아서 렌더링
- 주로 Thymeleaf, JSP, Freemarker 등의 템플릿 엔진을 사용할 때 활용
📌 @Controller + @ResponseBody를 사용해 JSON 응답 가능
만일 @Controller로 작성된 컨트롤러에서 JSON과 같은 데이터를 반환하고 싶을 땐 @ResposneBody 와 함께 쓰면 가능합니다.
@Controller
public class UserController {
@GetMapping("/user")
@ResponseBody // 데이터를 직접 반환하도록 설정
public User getUser() {
return new User(1L, "홍길동", "hong@example.com");
}
}
- @ResponseBody를 추가하면 JSON 데이터를 반환 가능
🔍 @RestController (REST API 용도)
- 결론적으로, @RestController는 @Controller + @ResponseBody 기능을 합쳐 놓은 어노테이션입니다.
- JSON 데이터를 반환하는 REST API를 만들 때 주로 사용됩니다.
📌 @RestController를 사용한 JSON 반환
@RestController
public class UserRestController {
@GetMapping("/user")
public User getUser() {
return new User(1L, "홍길동", "hong@example.com");
}
}
- @RestController를 사용하면 별도로 @ResponseBody를 붙이지 않아도 JSON 데이터를 반환 가능.
- Spring Boot의 Jackson 라이브러리가 자동으로 객체를 JSON으로 변환 (User → JSON) : 직렬화 수행
- REST API 개발할 때 사용
📌 출력 결과 (JSON)
{
"id": 1,
"name": "홍길동",
"email": "hong@example.com"
}
✅ @Controller vs @RestController 차이 정리
주요 용도 | 웹 뷰 반환 (Thymeleaf, JSP 등) | REST API (JSON 데이터 반환) |
반환 타입 | HTML 뷰 템플릿 (.html, .jsp) | JSON 또는 XML 데이터 |
기본 동작 | return "home"; → 뷰 페이지 렌더링 | return 객체; → JSON 변환 |
@ResponseBody 필요 여부 | 필요함 (@ResponseBody 붙여야 JSON 응답 가능) | 자동 JSON 변환 (필요 없음) |
예제 | @Controller + @ResponseBody | @RestController |
❓ 결론 : 어떤 경우에 사용하면 좋을까?
만일 JSON 데이터가 아닌, 웹 페이지를 반환시키고 싶은 경우엔 @Controller
단순 JSON 과 같은 데이터를 반환하고 싶을 땐 @RestController 를 사용하면 됩니다.
특별한 경우가 아니라면 백엔드 입장에서 단순 데이터를 전달하고, 그것을 프론트엔드가 활용하여 웹페이지를 구성하기 때문에
@RestController가 주로 사용됩니다.
@Controller | 뷰(HTML, JSP, Thymeleaf)를 반환 | 웹 페이지를 반환 할 때 |
@RestController | JSON 또는 XML 데이터를 반환 | REST API로 설계 할 때 |
'[Spring]' 카테고리의 다른 글
다양한 Lock 기법을 활용한 동시성 제어 방법 ( Synchronized , Database , Redis ) (1) | 2024.12.30 |
---|---|
Spring Boot JPA : @Entity를 사용할 때 @NoArgsConstructor를 하지 않으면 에러가 나는 이유 (6) | 2024.10.20 |
Bean을 등록하는 2가지 방법 (@Component / @Bean + @Configuration) (0) | 2024.08.04 |
Spring Security로 로그인 구현해보기 (0) | 2024.07.25 |
Lombok 롬복의 @Builder, @NoArgsConstructor 와의 충돌 이유 (0) | 2024.07.08 |