Spring - @Controller 와 @RestController 차이

2025. 3. 1. 18:58·[Spring]
목차
  1. ✅ @RestController vs @Controller 차이점
  2. 🔍 @Controller (웹 애플리케이션 용도)
  3. 🔍 @RestController (REST API 용도)
  4. ✅ @Controller vs @RestController 차이 정리
  5. ❓ 결론 : 어떤 경우에 사용하면 좋을까?

✅ @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 내부를 들여다보면 @Controller 와 @ResponseBody가 합쳐진 모습 확인 가능

📌 @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
  1. ✅ @RestController vs @Controller 차이점
  2. 🔍 @Controller (웹 애플리케이션 용도)
  3. 🔍 @RestController (REST API 용도)
  4. ✅ @Controller vs @RestController 차이 정리
  5. ❓ 결론 : 어떤 경우에 사용하면 좋을까?
'[Spring]' 카테고리의 다른 글
  • 다양한 Lock 기법을 활용한 동시성 제어 방법 ( Synchronized , Database , Redis )
  • Spring Boot JPA : @Entity를 사용할 때 @NoArgsConstructor를 하지 않으면 에러가 나는 이유
  • Bean을 등록하는 2가지 방법 (@Component / @Bean + @Configuration)
  • Spring Security로 로그인 구현해보기
7.06com
7.06com
우당탕탕 코딩하기
  • 7.06com
    우당탕탕 개발자의 이야기
    7.06com
  • 전체
    오늘
    어제
    • 분류 전체보기 (57)
      • [Spring] (7)
      • [JAVA] (3)
      • [디자인패턴] (1)
      • [TIL] (8)
      • [CI,CD] (5)
      • [협업] (1)
      • [Database] (5)
      • [CS] (2)
      • [코딩테스트] (15)
      • [알고리즘] (0)
      • [후기-회고] (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
7.06com
Spring - @Controller 와 @RestController 차이
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.