[Spring] @Controller, @RestController에 대해서

giggle·2023년 7월 6일
0

자바에서 컨트롤러란 클라이언트의 요청을 처리하고, 비즈니스 로직을 실행하며, 응답을 반환하는 역할을 담당하는 클래스입니다. Spring에서 컨트롤러를 사용하는 방법은 @Controller과 @RestController가 있는데, 이 두 가지에 대해 알아보겠습니다.

@Controller란?

@Controller 어노테이션은 일반적인 컨트롤러를 정의할 때 사용됩니다. 메서드에서의 반환 값은 스프링 MVC의 ViewResolver를 통해 뷰(View)를 나타내는 뷰 이름으로 처리됩니다. 이와 같은 컨트롤러의 메서드는 주로 HTML 페이지를 렌더링하는 데 사용됩니다.

@Controller
public class ExampleController {
    
    @GetMapping("/home")
    public String home(Model model) {
        model.addAttribute("message", "Hello World!");
        return "home";
    }
}

addAttribute() 메서드는 Model 객체에 속성(attribute)을 추가합니다. 위의 코드에서는 message라는 속성과 "Hello World!"라는 값을 추가해뷰에서 사용할 수 있는 데이터를 제공합니다.

하지만 일반적으로 개발을 진행하다보면 렌더링하는 것 이외에도 클라이언트에 데이터를 전달해야하는 경우가 발생합니다. 이때는 추가적으로 @ResponseBody 추가해서 사용하면 됩니다. 그럼 @ResponseBody는 어떤 기능을 할까요?


@ResponseBody란?

@ResponseBody를 메서드에 적용하면 메서드의 반환 값이 HTTP 응답의 본문으로 처리되어 데이터 형식(JSON, XML)으로 클라이언트에 전달됩니다. 이를 통해 RESTful API를 구현할 때 데이터를 직접 반환하고, 뷰를 사용하지 않는 방식으로 동작하게 됩니다.

@Controller
public class ExampleController {
    @ResponseBody
    @GetMapping("/api/data")
    public ResponseEntity<Data> getData() {
        Data data = dataService.getData();
        return ResponseEntity.ok(data);
    }
}

ResponseEntity를 사용하여 반환 값과 함께 상태 코드 및 헤더를 지정할 수도 있습니다.

하지만 친절한 Spring은 @Controller와 @ResponseBody와 같이 두 번의 어노테이션을 사용하는 수고를 덜어주기 위해 @RestController를 지원합니다.


@RestController란?

@RestController 어노테이션은 RESTful 웹 서비스를 제공하는 컨트롤러를 정의할 때 사용되며, 메서드의 반환 값이 JSON, XML 등과 같은 데이터로 처리됩니다.
@Controller와 @ResponseBody 어노테이션을 합친 형태로 생각할 수 있습니다.
따라서 사용자는 @ResponseBody를 추가할 필요가 없습니다.

@RestController
public class ExampleRestController {
    
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }

피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글