Spring MVC, @Controller와 @RestController의 차이

김민규·2026년 9월 20일

겅부

목록 보기
8/18

Spring MVC에서 클라이언트의 요청 처리 흐름

클라이언트 → 디스패처서블릿(DispatcherServlet) → Controller → Service → Repository → Controller → 디스패처서블릿(DispatcherServlet) → 클라이언트

  • 클라이언트가 HTTP 요청을 보낸다.
  • DispatcherServlet이 요청을 받는다.
  • DispatcherServlet은 HandlerMapping을 통해 적절한 Controller를 찾는다.
  • Controller는 필요한 경우 Service와 Repository를 호출하여 비즈니스 로직과 데이터 처리를 수행한다.
  • 처리 결과를 Controller가 반환한다.
  • 반환 방식에 따라 View나 HTTP를 클라이언트에 반환한다.

@Controller와 @RestController의 차이

@Controller

주로 View를 반환하는 MVC에서 사용한다.

@Controller 
public class UserController { 
	@GetMapping("/users") 
    public String users(Model model) { 
    model.addAttribute("users", userService.findAll()); return "users"; 
    } 
}    
  • 위 코드처럼 model을 통해 view를 렌더링하여 클라이언트에 응답한다.
  • 클라이언트 요청 → HTTP 요청 → DispatcherServlet → HandlerMapping → Controller
    → View 이름 반환 → DispatcherServlet → ViewResolver → View 렌더링 → HTML 응답 → 클라이언트

@RestController

주로 HTTP 응답을 반환할 때 사용한다.(Ex : REST API)

@RestController 
public class UserController { 
	@GetMapping("/users") 
    public ResponseEntity<List<User>> users() { 
    List<User> users = userService.findAll(); 
    return ResponseEntity.ok(users); 
    } 
}
  • 위 코드처럼 주로 ResponseEntity를 통해 HTTP로 반환한다.
  • ResponseEntity는 응답 전체를 표현하는 객체로 데이터외에 HTTP 상태 코드, 헤더도 동봉가능하다.
  • 클라이언트 요청 → HTTP 요청 → DispatcherServlet → HandlerMapping → Controller
    → ResponseEntity 반환 → HttpMessageConverter → JSON 변환 → 클라이언트

View 이름 반환, ResponseEntity 반환 전단계의 Controller에서 Controller > Service > Repository > Controller가 될 수 있으나 항상 서비스와 레포지토리를 사용하는 건 아님

@Controller, @RestController 두 방식의 차이

구분@Controller@RestController
주요 용도MVC 웹 페이지REST API
반환값의 기본 의미View 이름응답 Body 데이터
ViewResolver사용 가능일반적으로 사용하지 않음
@ResponseBody별도로 사용 가능기본적으로 적용됨
주된 응답 형태HTML 등 ViewJSON, XML 등의 데이터

0개의 댓글