Spring Boot

Spring Boot에서 컨트롤러(@RestController)를 사용하는 방법

Pro.Dev 2025. 1. 8. 13:13
반응형

Spring Boot에서 컨트롤러(@RestController)를 사용하는 방법

Spring Boot에서 @RestController는 RESTful 웹 서비스를 개발할 때 주로 사용되는 어노테이션입니다. 이 글에서는 @RestController의 기본 개념과 사용법을 쉽게 이해할 수 있도록 설명합니다.


1. @RestController란?

@RestController는 Spring MVC에서 제공하는 어노테이션으로, 주로 JSON 형식의 데이터를 반환하는 API를 개발할 때 사용됩니다. 사실 @RestController는 두 가지 어노테이션을 결합한 것과 같습니다:

  • @Controller: Spring의 컨트롤러 역할
  • @ResponseBody: 반환값을 JSON 형식으로 변환

이 조합 덕분에 추가적인 어노테이션 없이도 JSON 데이터를 간단히 반환할 수 있습니다.


2. @RestController 기본 사용법

Step 1: 간단한 REST API 작성

아래는 @RestController를 사용해 간단한 API를 작성하는 예제입니다:

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

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "안녕하세요, Spring Boot!";
    }
}

설명:

  1. @RestController는 해당 클래스가 RESTful 웹 서비스를 제공함을 나타냅니다.
  2. @GetMapping("/hello")는 HTTP GET 요청을 처리합니다.
  3. 문자열 "안녕하세요, Spring Boot!"가 JSON 형태로 반환됩니다.

Step 2: 애플리케이션 실행

  • 애플리케이션을 실행한 뒤 브라우저나 Postman으로 http://localhost:8080/hello에 접속하면 "안녕하세요, Spring Boot!"라는 응답을 확인할 수 있습니다.

3. 다양한 요청 처리 방법

  1. GET 요청 처리
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/api/data")
    public String getData() {
        return "데이터 요청 성공";
    }
}
  1. POST 요청 처리
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @PostMapping("/api/save")
    public String saveData(@RequestBody String data) {
        return "저장된 데이터: " + data;
    }
}

설명:

  • @RequestBody는 클라이언트에서 전송된 JSON 데이터를 Java 객체로 변환합니다.
  1. PathVariable 사용
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/api/user/{id}")
    public String getUser(@PathVariable String id) {
        return "사용자 ID: " + id;
    }
}

설명:

  • @PathVariable은 URL 경로에서 동적으로 값을 가져옵니다.
  1. RequestParam 사용
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ApiController {

    @GetMapping("/api/search")
    public String search(@RequestParam String query) {
        return "검색어: " + query;
    }
}

설명:

  • @RequestParam은 URL 쿼리 파라미터를 처리합니다.

4. @RestController와 @Controller의 차이

어노테이션 주요 역할
@Controller 뷰(HTML 등)를 반환하며 템플릿 엔진과 함께 사용됩니다.
@RestController JSON 또는 XML 데이터를 반환하며 RESTful 서비스를 구현합니다.

5. JSON 객체 반환

Java 객체를 JSON 형식으로 반환하려면 Spring Boot에서 제공하는 Jackson 라이브러리를 활용할 수 있습니다.

예제:

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

@RestController
public class ApiController {

    @GetMapping("/api/user")
    public User getUser() {
        return new User("홍길동", 30);
    }

    static class User {
        private String name;
        private int age;

        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }

        // Getter와 Setter
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

결과:

{
    "name": "홍길동",
    "age": 30
}

반응형