
1. @Controller란?
@Controller는 Spring MVC에서 사용되는 애너테이션으로, 주로 HTML 페이지를 반환하는 경우에 사용됩니다. 뷰(View) 템플릿과 함께 사용되며, ModelAndView 또는 Model 객체를 활용하여 데이터를 전달할 수 있습니다.
@Controller 예제
아래는 @Controller를 사용하여 뷰를 반환하는 예제입니다.
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring Boot!");
return "home"; // templates/home.html 파일을 렌더링함 (Thymeleaf 기준)
}
}
위 코드에서 /home URL로 요청이 들어오면 home.html 템플릿을 렌더링하며, 모델에 message 데이터를 추가하여 화면에 표시할 수 있습니다.
2. @RestController란?
@RestController는 @Controller와 @ResponseBody를 합친 개념으로, JSON 또는 XML 데이터를 반환하는 API를 만들 때 사용됩니다. 즉, 뷰 템플릿을 사용하지 않고, 데이터를 직접 반환합니다.
@RestController 예제
아래는 @RestController를 사용하여 JSON 데이터를 반환하는 예제입니다.
@RestController
public class ApiController {
@GetMapping("/api/message")
public Map<String, String> getMessage() {
Map<String, String> response = new HashMap<>();
response.put("message", "Hello, REST API!");
return response; // JSON 형식으로 반환됨
}
}
위 코드에서 /api/message URL로 요청이 들어오면, Map<String, String>을 JSON 형태로 변환하여 클라이언트에 반환합니다. 별도의 @ResponseBody를 사용할 필요 없이 자동으로 JSON 변환이 이루어집니다.
3. @Controller vs @RestController 차이점
구분 | @Controller | @RestController |
주 용도 | HTML 페이지 반환 | JSON/XML 데이터 반환 |
뷰 템플릿 사용 | O (Thymeleaf, JSP 등과 함께 사용) | X (데이터 직접 반환) |
기본 반환 타입 | String (뷰 이름) | 객체(JSON 변환됨) |
@ResponseBody 필요 여부 | 필요 (@ResponseBody 직접 사용) | 불필요 (기본적으로 적용됨) |
4. @ResponseBody를 활용한 차이점
@Controller에서 JSON을 반환하려면 @ResponseBody 애너테이션을 명시적으로 추가해야 합니다.
@Controller에서 @ResponseBody 사용 예제
@Controller
public class UserController {
@GetMapping("/user")
@ResponseBody
public User getUser() {
return new User("John", 30);
}
}
위 코드에서 @ResponseBody를 사용하지 않으면 getUser()의 반환값은 뷰 이름으로 해석됩니다. 하지만 @ResponseBody를 추가하면 JSON으로 변환되어 응답됩니다.
이와 동일한 기능을 @RestController를 사용하면 @ResponseBody 없이도 자동 변환됩니다.
@RestController
public class UserApiController {
@GetMapping("/api/user")
public User getUser() {
return new User("John", 30);
}
}
이처럼 @RestController는 @ResponseBody를 생략할 수 있어 RESTful API 개발에 더 적합합니다.

- @Controller는 HTML을 반환하는 전통적인 웹 애플리케이션 개발에 적합합니다.
- @RestController는 RESTful API 개발에 적합하며, 데이터를 JSON 형태로 쉽게 반환할 수 있습니다.
- @Controller에서 JSON을 반환하려면 @ResponseBody를 추가해야 하지만, @RestController에서는 자동으로 처리됩니다.
언제 @Controller를 사용해야 할까?
- 서버에서 동적인 HTML 페이지를 렌더링해야 할 때
- Thymeleaf, JSP와 같은 템플릿 엔진을 사용할 때
언제 @RestController를 사용해야 할까?
- JSON 또는 XML 데이터를 반환하는 RESTful API를 개발할 때
- 모바일 앱, 프론트엔드(Vue.js, React 등)와 통신하는 백엔드를 개발할 때
'Back_End > Spring' 카테고리의 다른 글
Spring Boot(스프링부트) Bean 생명주기 관리 (1) | 2025.05.14 |
---|---|
스프링 @Bean, @Configuration, @Component 이란? (0) | 2025.03.31 |
비밀번호 해싱(Hashing) (1) | 2025.03.27 |
@Component와 @Configuration 비교 (1) | 2024.12.26 |
스프링 핵심 개념: IoC, DI, AOP 알아보기 (2) | 2024.12.05 |