@Controller와 @RestController의 차이점

2025. 7. 1. 14:00·탐구하기

@Controller와 @RestController는 둘 다 Spring MVC에서 클라이언트 요청을 처리하는 컨트롤러 클래스를 나타내지만, 응답 방식에서 중요한 차이가 있습니다.


✅ 간단 비교

항목 @Controller @RestController

응답 방식 뷰(View) 반환 데이터(JSON) 반환
주 용도 JSP/Thymeleaf 등의 화면 렌더링 REST API 응답 (React, Vue 등과 연동 시)
내부 구성 @Component + @ResponseBody(X) @Controller + @ResponseBody(자동)
예시 응답 HTML 페이지 JSON, 문자열, 객체 등

✅ 1. @Controller

  • 주로 HTML 페이지를 반환할 때 사용
  • 템플릿 엔진(JSP, Thymeleaf 등)과 함께 사용
  • 뷰 이름을 반환하면 DispatcherServlet → ViewResolver가 HTML을 찾아서 렌더링

📌 예시

@Controller
public class PageController {

    @GetMapping("/hello")
    public String helloPage(Model model) {
        model.addAttribute("name", "홍길동");
        return "hello"; // => /templates/hello.html 렌더링
    }
}

✅ 2. @RestController

  • REST API 개발 시 사용
  • 반환값이 뷰가 아니라 **객체나 문자열(JSON 형태)**로 응답됨
  • 내부적으로 @ResponseBody가 포함되어 있어서 객체 → JSON 자동 변환

📌 예시

@RestController
public class ApiController {

    @GetMapping("/api/hello")
    public String helloApi() {
        return "Hello, JSON";
    }

    @GetMapping("/api/member")
    public Member getMember() {
        return new Member("홍길동", 30); // 자동으로 JSON 변환됨
    }
}

🔁 응답 형태

{
  "name": "홍길동",
  "age": 30
}

✅ 내부적으로 무슨 차이?

@Controller

@Controller
public class Example {
  @GetMapping("/test")
  public String test() {
    return "home"; // → ViewResolver → home.html
  }
}

@RestController = @Controller + @ResponseBody

@RestController
public class Example {
  @GetMapping("/test")
  public String test() {
    return "home"; // → "home"이라는 문자열 자체를 응답 (JSON 또는 text)
  }
}

✅ 어떤 걸 언제 써야 하나요?

사용 상황 선택

웹 페이지 렌더링 (JSP, Thymeleaf 등) @Controller
JSON 데이터 응답 (React, Vue, 모바일 앱 등과 연동) @RestController
REST API 서버 구축 @RestController

✅ 결론

요약 설명

@Controller 뷰(View)를 반환하는 전통적인 웹 방식
@RestController JSON 등의 데이터만 반환하는 API 방식

 

'탐구하기' 카테고리의 다른 글

Dispatcher Servlet은 무엇일까?  (0) 2025.07.02
인터셉터(Interceptor)와 필터(Filter)  (1) 2025.07.02
JPA와 MyBatis의 차이점  (0) 2025.07.01
JPA란 무엇일까?  (0) 2025.07.01
MyBatis란 무엇일까?  (0) 2025.06.30
'탐구하기' 카테고리의 다른 글
  • Dispatcher Servlet은 무엇일까?
  • 인터셉터(Interceptor)와 필터(Filter)
  • JPA와 MyBatis의 차이점
  • JPA란 무엇일까?
ayinyun
ayinyun
ayinyun 님의 블로그 입니다.
  • ayinyun
    ayinyun 님의 블로그
    ayinyun
  • 전체
    오늘
    어제
    • 분류 전체보기 (75)
      • SQL 개발 공부 (8)
      • JAVA 개발 공부 (4)
      • JavaScript(JS) (1)
      • React (1)
      • 탐구하기 (38)
      • KPT회고록 (14)
      • SpringBoot (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ayinyun
@Controller와 @RestController의 차이점
상단으로

티스토리툴바