SpringBoot/웹 애플리케이션 개발
컨트롤러(@RestController, @Controller)
DEVLIB
2025. 4. 14. 10:31
728x90
Controller란?
스프링 MVC에서 Controller는 사용자의 요청(Request)을 받아 처리하고, 적절한 응답(Response)을 돌려주는 역할을 합니다. MVC 구조에서 **"C(Controller)"**에 해당하죠.
@Controller
특징
- HTML 뷰(View)를 반환할 때 사용
- 주로 Thymeleaf, JSP 등 템플릿 엔진과 함께 사용
- 반환 값은 뷰 이름이며, 템플릿에서 해당 파일을 찾아 렌더링함
예시
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "단비");
return "hello"; // → resources/templates/hello.html 렌더링
}
}
return "hello"는 hello.html 템플릿 파일을 의미합니다.
@RestController
특징
- JSON, XML 같은 데이터 자체를 응답할 때 사용
- @Controller + @ResponseBody의 축약형
- 주로 REST API 개발에 사용
예시
@RestController
public class HelloRestController {
@GetMapping("/api/hello")
public String hello() {
return "안녕하세요!"; // 문자열 자체가 HTTP 응답 본문으로 반환됨
}
@GetMapping("/api/user")
public UserDto user() {
return new UserDto("홍길동", 25);
}
}
응답 결과 (JSON):
{
"name": "홍길동",
"age": 25
}
차이점 요약
구분 | @Controller | @RestController |
목적 | 뷰 렌더링 | 데이터(JSON) 반환 |
반환값 | 뷰 이름 (ex: "home") | HTTP Response Body |
사용처 | 웹 페이지 | REST API 서버 |
내부 구성 | + @ResponseBody 필요 | 자동 적용됨 |
함께 알아두면 좋은 애너테이션
애너테이션 | 설명 |
@GetMapping | GET 요청 처리 |
@PostMapping | POST 요청 처리 |
@RequestParam | URL 파라미터 받기 |
@PathVariable | 경로에 있는 값 받기 |
@RequestBody | JSON 본문을 객체로 바인딩 |
@ResponseBody | 반환 데이터를 HTTP 응답으로 변환 |
실제 사용 시 기준
상황 | 추천 |
사용자에게 HTML 페이지 보여줘야 함 | @Controller |
클라이언트(앱/프론트)와 JSON으로 통신 | @RestController |
SEO가 중요하고 템플릿 뷰가 필요 | @Controller + Thymeleaf |
마이크로서비스, SPA와 백엔드 연동 | @RestController + JSON API |
마무리
핵심 요약 |
@Controller: HTML 뷰 반환 (Thymeleaf 등) |
@RestController: JSON 등 데이터 반환 (API) |
상황에 따라 역할을 명확히 구분해서 사용해야 유지보수 및 협업이 쉬워집니다. |
LIST