본문으로 건너뛰기
Advertisement

3.1 @RestController와 @RequestMapping

스프링 부트로 웹 애플리케이션을 만들 때, 사용자의 요청을 가장 먼저 받아내는 문지기 역할을 하는 '컨트롤러(Controller)'에 대해 알아봅니다.

1. @Controller vs @RestController

스프링에서 컨트롤러를 선언하는 애너테이션은 크게 두 가지가 있습니다. 현대의 REST API 서버에서는 주로 @RestController를 사용합니다.

  • @Controller: 과거 서버 사이드 렌더링(JSP, Thymeleaf) 환경에서 주로 사용되었습니다. 메서드가 반환하는 문자열을 바탕으로 ** HTML 뷰(View) 파일**을 찾아 응답으로 내려줍니다.
  • @RestController: 프론트엔드(React, Vue)나 모바일 앱과 통신하는 최신 REST API 환경의 표준입니다. HTML 화면을 찾는 대신, 반환하는 데이터를 자동으로 ** JSON 형식**으로 변환하여 응답 본문(Body)에 직접 꽂아줍니다.

(@RestController는 내부적으로 @Controller@ResponseBody가 합쳐진 형태입니다.)

2. @RequestMapping으로 URL 연결하기

문지기(컨트롤러)를 세웠다면, 이제 어떤 URL 주소로 요청이 왔을 때 어떤 메서드가 실행될지 경로를 연결(Mapping)해 주어야 합니다.

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController // REST API 컨트롤러로 지정 (응답은 JSON 형태)
public class HelloController {

// "/hello" 주소로 접근하면 이 메서드가 실행됨
@RequestMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!"; // 순수한 문자열 데이터만 브라우저로 응답됨
}
}

클래스 레벨의 @RequestMapping

보통 API를 설계할 때는 URL의 앞부분이 겹치는 경우가 많습니다. 이때 클래스 상단에 @RequestMapping을 붙여 기본 경로(Base Path)를 지정해 줄 수 있습니다.

@RestController
@RequestMapping("/api/v1/users") // 이 클래스 내의 모든 메서드는 이 경로로 시작함
public class UserController {

// 실제 호출되는 전체 URL: "/api/v1/users/info"
@RequestMapping("/info")
public String getUserInfo() {
return "User Info";
}
}

이제 주소만 연결하는 것을 넘어, "어떤 목적(생성, 수정, 삭제)으로 요청이 왔는지"를 구분하는 HTTP 메서드 매핑에 대해 다음 장에서 알아봅니다.

Advertisement