[Spring] @RestController와 @Controller의 차이

2025. 5. 30. 17:56·Spring

1. 응답 방식의 근본적인 차이

  • @Controller
    이 어노테이션이 붙은 클래스는 전통적인 Spring MVC 컨트롤러 역할을 합니다. 주요 목적은 Model 객체에 데이터를 담아 View(예: HTML, JSP)를 찾아 반환하는 것입니다. 즉, 서버 사이드 렌더링(SSR) 방식의 웹 애플리케이션에서 주로 사용되며, 클라이언트에게 완전한 웹 페이지를 전달합니다.
  • @RestController
    이 어노테이션은 RESTful 웹 서비스를 구축하는 데 특화된 컨트롤러입니다. @Controller와 달리 View를 찾지 않고, 메서드가 반환하는 객체 데이터를 HTTP 응답 본문에 직접 담아 전송합니다. 주로 JSON이나 XML 형식으로 데이터를 주고받는 API 서버(백엔드)에서 사용되며, 클라이언트(프론트엔드, 모바일 앱 등)는 이 데이터를 받아 자체적으로 화면을 구성합니다. @RestController는 내부적으로 @Controller와 @ResponseBody 어노테이션을 합쳐놓은 것과 같습니다.

2. 어노테이션의 역사와 구성

  • @Controller
     Spring이 어노테이션을 지원하기 시작하면서부터 존재했으며, 공식적으로 Spring 2.5 버전에서 추가되었습니다. 내부적으로는 @Component 어노테이션이 달려 있어 Spring의 컴포넌트 스캔 대상이 됩니다.
  • @RestController
    Spring 4.0에서 RESTful 웹 서비스 개발을 더욱 편리하게 하기 위해 추가되었습니다.
    이는 @Controller와 @ResponseBody를 결합한 편의(Convenience) 어노테이션입니다.

3. 메서드 반환 값 처리 방식

  • @Controller
    일반적으로 메서드가 String을 반환하면 View의 논리적인 이름을 의미하여 해당 View를 찾아 렌더링합니다. Model 객체를 파라미터로 받아 데이터를 View에 전달할 수 있습니다.

  • @RestController
    이 어노테이션이 클래스 레벨에 붙으면, 해당 컨트롤러 내의 모든 메서드에 @ResponseBody가 자동으로 적용됩니다. 따라서 메서드가 객체를 반환하면 스프링이 해당 객체를 HTTP 응답 본문으로 직렬화(Serialization)하여 JSON 또는 XML 형태로 클라이언트에 전송합니다. ViewResolver를 거치지 않습니다.

요약

주요 목적 View 반환 (서버 사이드 렌더링) 객체 데이터 반환 (RESTful API)
내부 구성 @Component @Controller + @ResponseBody
메서드 처리 View 이름 반환, Model 데이터 전달 메서드 반환 객체를 HTTP 응답 본문으로 직렬화
등장 시기 Spring 2.5 Spring 4.0
주 사용처 전통적인 웹 애플리케이션 (HTML, JSP 등) RESTful API 서버, 모바일/프론트엔드 백엔드

 

일반적인 Spring MVC 처리과정

 

'Spring' 카테고리의 다른 글

[Spring JPA] 즉시로딩과 지연로딩  (0) 2025.06.21
[Spring] Spring MVC란 무엇인가?  (0) 2025.06.05
'Spring' 카테고리의 다른 글
  • [Spring JPA] 즉시로딩과 지연로딩
  • [Spring] Spring MVC란 무엇인가?
싹난 감자🥔🌱
싹난 감자🥔🌱
개발 블로그
  • 싹난 감자🥔🌱
    감자에 싹이나서 잎이나서
    싹난 감자🥔🌱
  • 전체
    오늘
    어제
    • 분류 전체보기 (44) N
      • Spring (3)
      • Java (17)
      • LLM (1)
      • DevOps (4)
      • Algorithm (14)
        • 백준 (4)
        • 프로그래머스 (0)
        • 코드업 (10)
      • Computer Science (3)
        • Operating System (2)
        • Computer Architecture (1)
      • Trouble Shooting 🚀 (0)
      • 회고 & 성장기록 (2) N
      • 설계 📐 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    docker
    자바BufferedReader
    코딩테스트
    구간합
    자바 입력
    BufferedReader
    Java
    Scanner
    배포
    자바성능
    비트
    2차원 배열
    2진수
    자바Scanner비교
    알고리즘입력
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
싹난 감자🥔🌱
[Spring] @RestController와 @Controller의 차이
상단으로

티스토리툴바