@Controller, @RestController 차이점

2024. 2. 25. 21:06·현업에 종사하면서 발견한 문제점

@Controller와 @RestController의 차이점을 알아보자.

@Controller와 @RestController 똑같은 기능 아닌가요?

나(Covy)는 업그레이드 버전이라고하고 당연시 사용하고있었습니다.
하지만 실무에서 개발을 진행하면서 안되어서 당황했던 부분이 존재하게 되었습니다.
오늘은 그부분에 대해서 설명을 하고 해당 내용들을 설명하도록 하겠습니다.

 

우선 아래에는 RestController와 Controller를 리턴값을 지정해주고 호출하면 어떻게 되는지 확인해봅시다.

해당 내용을 확인하고 설명을 들으시면 더 빠른 이해가 되실것 같아 순서를 변경하였습니다.

 

@RestController를 사용하여 Return타입을 String으로 지정하여 호출하면 어떻게 될까?

정상적으로 "안녕하세요"라는 문자열이 반환되는것을 볼 수 있다.

 

@Controller 사용하여 Return타입을 String으로 지정하여 호출하면 어떻게 될까?

404에러가 난다. 왜 해당 에러가 나는지는 밑에서 자세히 알아보도록하자.

 

@Controller란?

Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용합니다. 
@Controller 어노테이션을 사용하면 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환합니다

@Controller

@RestController란?

Spring MVC의 컨트롤러인 @RestController는 @Controller에 @ResponseBody가 추가된 업그레이드 버전입니다. RestController는 주된 용도는 Json객체를 반환합니다. 주로 데이터를 반환하므로 return되는 값을 ResponEntity로 감싸서 값을 내보내게 되는 형식입니다.
즉 @RestController는 @Controller의 업그레이드 버전으로 반환값에 ResponseEntity로 값싼후에 @ResponseBody로 값을 내보낼 수 있도록 업그레이드 버전으로 이해하시면 될것같습니다.

@RestController

즉 위의 그림과 같이 @RestController에서는 값이 반환되지만 @Controller에서는 값이 반환이 안되었던 이유는 실제 @Controller는 View를 반환하므로 실제 View의 경로로 이동되어야 하지만 실제 View의 이동경로가 존재하지 않으므로 404에러가 발생하였던 것이다.

 

 

그러면 실제 @Controller를 동일하게 반환을 하고 싶을 경우에는 어떻게 하면 될까?

@Controller에서 값을 반환하고 싶을경우 반환타입에 @ResponseBody를 붙여준 이후에 ResponseEntity로 반환값을 감싸서 내보내에 주면 실제 값이 반환이 된다.

위의 간소화한 업그레이드 버전이 @RestController입니다.

 

이상으로 @Controller와 @RestController의 차이점에 대하여 알아보았습니다.

해당 내용이 유익하셨으면 좋아요 부탁드리겠습니다! :)

'현업에 종사하면서 발견한 문제점' 카테고리의 다른 글

File과 Map을 동시에 Controller에서 동시에 받아야 할 경우  (1) 2025.01.03
DTO 와 VO의 차이에 대하여  (0) 2024.02.25
'현업에 종사하면서 발견한 문제점' 카테고리의 다른 글
  • File과 Map을 동시에 Controller에서 동시에 받아야 할 경우
  • DTO 와 VO의 차이에 대하여
Developer Covy
Developer Covy
🚀Let's become a growing developer again today!👊
  • Developer Covy
    Developer Covy
    Developer Covy
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • Kafka (3)
      • 트랜잭션 (1)
      • 현업에 종사하면서 발견한 문제점 (3)
      • SpringBatch (1)
      • Redis (2)
      • 운영체제 (1)
      • MSA (1)
      • DevOps (4)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    SpringBoot
    Java
    dto
    Controller
    운영체제
    RestController
    redis
    Cache
    vo
    트랜잭션
    spring
    SrpingBoot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Developer Covy
@Controller, @RestController 차이점
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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