본문 바로가기
Programming/Spring

[Spring] - Controller vs RestController

by jenlve 2024. 2. 4.

컨트롤러란

컨트롤러의 역할

비즈니스 로직과 클라이언트의 요청을 연결해준다. 

클라이언트로부터 요청을 받고, 해당 요청에 대해 서비스 레이어에 구현된 적절한 메서드를 호출해서 결과값을 받는다. 

요청과 응답을 전달하는 역할만 맡는다. 

(@Controller 사용시 주의..) "member/login"과 같은 경로를 접근할 때 Spring Boot는 가장 먼저 @Controller 또는 @RestController에서 매핑된 경로를 찾게 된다.!

➡️ Controller란?

@Controller는 전통적인 스프링 MVC 컨트롤러를 정의할 때 사용된 것으로,

주로 뷰 템플릿을 반환하는 데 사용한다.

예를 들어, Thymeleaf나 JSP와 같은 뷰 템플릿을 렌더링하기 위해 사용한다.

@Controller
public class MyViewController {

    @RequestMapping("/greeting")
    public String greeting(Model model) {
        model.addAttribute("message", "Hello, World!");
        return "greeting"; // 뷰 이름을 반환. 예를 들어 "greeting.jsp" 뷰 파일로 매핑될 수 있음
    }
}

   


 

➡️ RestController란?

  @Controller에 @ResponseBody가 결합된 어노테이션이다.

 

반면 @RestController는 스프링 4.0부터 도입된 어노테이션으로,

주로 RESTful한 웹 서비스를 개발할 때 사용한다.

 

@Controller와 @ResponseBody를 합친 것으로,  

컨트롤러 클래스의 모든 메소드가 기본적으로 HTTP 응답 본문에 데이터를 반환한다고 가정한다.

예를 들어, 주로 JSON이나 XML과 같은 형식의 데이터를 반환하는 API를 개발할 때 사용한다.

 

@RestController
public class MyRestController {

    @GetMapping("/greeting")
    public Map<String, String> greeting() {
        Map<String, String> result = new HashMap<>();
        result.put("message", "Hello, World!");
        return result; // JSON 객체로 변환되어 HTTP 응답 본문에 직접 반환됨
    }
}

 

 

따라서 html을 포함한 어떤 웹 애플리케이션을 작업할 것이라면 @Controller를 사용하고, 

정말 백엔드 작업 등 구현 로직에 신경을 쓸 예정이며, 결과는 Postman으로 JSON 형태로 보고자 한다면 @RestController 사용을 권장한다.