[Java] @RestController와 @Controller의 차이점 이해하기
KUKJIN LEE • 8개월 전 작성
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Controller
웹 개발을 진행하면서 Spring Framework를 사용하는 개발자라면, @Controller와 @RestController 어노테이션에 대해 반드시 이해해야 합니다. 이 두 어노테이션은 Spring MVC에서 매우 중요한 역할을 하며, 사용 목적과 방식에 있어서 분명한 차이가 있습니다. 이 글에서는 그 차이점을 명확히 설명하고, 각각 어떤 상황에서 사용되어야 하는지 알아보겠습니다.
@Controller
@Controller 어노테이션은 Spring MVC의 핵심 요소 중 하나로, 주로 웹 애플리케이션에서 뷰 페이지를 반환하는 데 사용됩니다. 이는 클라이언트의 요청을 받아 서버에서 처리한 후, 그 결과를 HTML 페이지 같은 뷰 형식으로 만들어 반환하는 것을 목적으로 합니다. 예를 들어, 웹 사이트에서 사용자의 요청에 따라 특정 페이지를 보여주는 경우에 주로 사용됩니다.
@Controller 어노테이션을 사용한 클래스 내의 메소드는 뷰 이름을 문자열 형태로 반환합니다. Spring은 이 반환값을 사용하여 적절한 뷰 리졸버(view resolver)를 찾고, 그에 따라 뷰를 렌더링합니다. 필요한 경우, @ResponseBody 어노테이션을 특정 메소드에 추가하여, 그 메소드가 HTTP 응답 본문에 데이터를 직접 반환하도록 할 수도 있습니다. 이를 통해, @Controller를 사용하면서도 필요에 따라 RESTful API 응답을 생성할 수 있습니다.
@RestController
Spring 4.0부터 도입된 @RestController 어노테이션은 @Controller와 @ResponseBody 어노테이션의 결합으로 볼 수 있습니다. 이 어노테이션을 사용한 컨트롤러의 모든 메소드는 기본적으로 HTTP 응답 본문에 데이터를 반환합니다. 이는 주로 RESTful 웹 서비스를 구현할 때 사용되며, JSON이나 XML 같은 형태로 클라이언트에게 데이터를 전송하는 API 개발에 적합합니다.
@RestController 어노테이션을 사용하면 별도의 뷰 템플릿 없이 데이터 자체를 응답으로 반환할 수 있습니다. 이는 특히 다른 시스템이나 프로그램이 서버와 통신할 때 유용하며, 웹 브라우저가 아닌 클라이언트에게 데이터를 제공해야 할 때 주로 사용됩니다.
요약
-
@Controller는 주로 웹 애플리케이션에서 뷰를 반환하는 데 사용됩니다. 필요에 따라 @ResponseBody와 함께 사용하여 데이터를 반환할 수 있습니다.
-
@RestController는 RESTful 웹 서비스를 만드는 데 사용되며, 모든 메소드가 기본적으로 응답 본문에 데이터를 반환합니다. JSON이나 XML 형태로 클라이언트에게 데이터를 제공하는 API 개발에 적합합니다.
이러한 차이점을 이해하는 것은 Spring MVC를 사용한 웹 개발에서 매우 중요합니다. 적절한 어노테이션 사용은 효율적인 개발뿐만 아니라 애플리케이션의 명확한 구조를 제공하는 데에도 도움이 됩니다.