자바와 스프링 부트로 생애 최초 서버 만들기

#12 RESTful 방식과 RestController vs @Controller 24.12.19

박태정 입니다. 2025. 2. 12. 16:25
반응형

RESTful 방식과 @RestController vs @Controller 차이! 🚀

안녕하세요! 오늘은 제가 최근에 배우면서 느꼈던 @RestController@Controller의 차이점에 대해 정리해보려고 합니다. 사실 저는 지금까지 RESTful 방식을 잘 모르고, 그냥 @Controller만 사용해서 서버를 구축했어요. 그런데 이번에 RESTful 방식과 @RestController에 대해 배우면서 "아, 이렇게도 할 수 있구나!"라고 느꼈습니다. 저처럼 배워가는 과정에 있는 분들에게 도움이 되길 바라며 시작해볼게요! 😊


1. RESTful 방식이란? 🤔

RESTful 방식은 클라이언트와 서버가 데이터를 주고받는 방식이에요. 쉽게 말하면, 클라이언트(사용자나 애플리케이션)가 서버에 요청을 보내면, 서버는 데이터를 JSON 같은 형태로 돌려주는 거예요.

  • REST API: 클라이언트가 데이터를 요청할 때 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용합니다.
  • 주요 특징:
    • 서버는 데이터를 "리소스(Resource)"라고 부르며, 각 리소스는 고유한 URL로 식별됩니다.
    • 클라이언트는 URL과 HTTP 메서드를 통해 서버에 요청을 보냅니다.
    • 기존(뷰를 중심)과 달리 데이터를 중심으로 개발을 하는 방식

저는 기존에 데이터를 HTML로 렌더링해서 반환하거나, 그냥 뷰(View) 중심으로만 개발했었는데, RESTful 방식은 데이터를 주고받는 게 훨씬 직관적이더라고요!


2. @Controller vs @RestController

기존에 사용하던 @Controller와 제가 새롭게 배운 @RestController의 차이점을 간단히 비교해볼게요.

@Controller

@Controller는 주로 HTML 파일을 렌더링하는 데 사용해요. 제가 기존에 하던 방식이 이거였어요. 뷰(View) 템플릿 엔진(e.g., Thymeleaf, JSP)으로 HTML 페이지를 만들어서 사용자에게 반환합니다.

  • 기본 동작: 메서드의 반환값이 뷰 이름으로 처리돼요.
  • 뷰 템플릿 엔진을 통해서 HTML을 만들어 보여줍니다.
  • 예시 코드:
@Controller
public class MyController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, MVC!");
        return "hello"; // templates/hello.html
    }
}
  • 요청: GET http://localhost:8080/hello
  • 응답: 클라이언트는 hello.html 파일을 렌더링해서 보게 됩니다.

@RestController

@RestController는 RESTful API를 만들 때 사용해요. 데이터를 응답 본문에 직접 반환합니다. 쉽게 말하면, 서버에서 JSON 형태로 데이터를 바로 돌려준다고 보면 돼요.

  • 기본 동작: 메서드의 반환값이 바로 JSON이나 XML로 직렬화돼서 클라이언트로 넘어갑니다.
  • 내부적으로: @Controller@ResponseBody를 합쳐놓은 느낌이에요.

    • 여기서 @ResponseBody는 메서드의 반환값을 뷰 이름이 아니라 JSON이나 XML과 같은 데이터 형식으로 직접 HTTP 응답 본문에 담아 반환하도록 해주는 역할을 해요. 덕분에 클라이언트는 데이터를 더 직관적으로 받을 수 있어요.

  • 예시 코드:
@RestController
public class MyRestController {

    @GetMapping("/api/hello")
    public String sayHello() {
        return "Hello, REST!";
    }
}
  • 요청: GET http://localhost:8080/api/hello
  • 응답: 클라이언트는 그냥 Hello, REST!라는 텍스트를 데이터로 받아요.

3. 주요 차이점 비교

저도 배우면서 가장 헷갈렸던 부분인데, 이렇게 표로 정리하니까 이해가 더 잘되더라고요. 😊

특성 @RestController @Controller
주된 목적 REST API 응답 HTML 페이지 렌더링
기본 반환값 처리 데이터(JSON/XML 등) 직접 반환 뷰 이름 반환 및 템플릿 렌더링
내부 동작 @Controller + @ResponseBody 순수 @Controller
주로 사용되는 용도 RESTful 웹 서비스 전통적인 서버 사이드 웹 애플리케이션

4. 요약 및 정리

배워보니 @RestController는 데이터를 쉽게 주고받을 수 있게 해줘서 RESTful API를 구현하기에 정말 편리하더라고요. 반면, 기존의 @Controller는 HTML 파일 렌더링에 강점을 가지고 있어서, 사용 목적에 따라 선택하면 될 것 같아요.

  • @RestController: 데이터를 JSON으로 반환.
  • @Controller: HTML을 반환.

저도 아직 배우는 중이라, 더 깊이 공부하면서 새로운 걸 알게 되면 또 정리해볼게요!

반응형