javarestcontrollercontrollerrestcontroller와 controller 차이backend

[Java] @RestController와 @Controller의 차이점 이해하기

KUKJIN LEE
KUKJIN LEE
2024년 3월 22일
193
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를 사용한 웹 개발에서 매우 중요합니다. 적절한 어노테이션 사용은 효율적인 개발뿐만 아니라 애플리케이션의 명확한 구조를 제공하는 데에도 도움이 됩니다.

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12