REST API

Min's Study Note·2024년 6월 14일

Spring

목록 보기
3/4

@ResponseBody의 주요 기능

1. 데이터 직접 반환:

@ResponseBody가 적용된 메서드는 뷰 이름이 아니라 데이터를 직접 반환합니다. Spring은 이 데이터를 HTTP 응답 바디에 쓰기 위해 적절한 메시지 변환기를 사용합니다.

2. 메시지 변환:

반환되는 객체는 JSON이나 XML 등의 형식으로 변환됩니다. 이는 주로 Jackson이나 Gson 같은 라이브러리를 통해 이루어집니다.

사용 예시

Copy code
@RestController
public class MyRestController {

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

위 코드에서 @RestController는 @Controller와 @ResponseBody를 결합한 것으로, 메서드 hello()의 반환 값 "Hello, World!"는 HTTP 응답 바디에 직접 포함됩니다.

@ResponseBody와 @Controller 조합
@Controller와 함께 @ResponseBody를 사용하는 경우:

Copy code
@Controller
public class MyController {

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

여기서 @ResponseBody는 메서드 수준에서 사용되어, hello() 메서드의 반환 값이 뷰 이름으로 해석되는 대신 HTTP 응답 바디에 직접 포함됩니다.

JSON 데이터 반환 예시

Copy code
@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User("John", "Doe");
    }
}

이 경우 User 객체가 JSON 형식으로 변환되어 클라이언트에게 응답됩니다. JSON 변환은 Jackson 라이브러리를 통해 자동으로 처리됩니다.

@RestController 사용
@RestController는 @ResponseBody의 편리한 형태로, 클래스 전체에 적용됩니다. 각 메서드에서 별도로 @ResponseBody를 지정할 필요가 없습니다.

Copy code
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/message")
    public String getMessage() {
        return "Hello, World!";
    }

    @GetMapping("/user")
    public User getUser() {
        return new User("John", "Doe");
    }
}

@ResponseBody의 동작 원리

1. 요청 처리:

클라이언트가 HTTP 요청을 보냅니다.

2. 메서드 실행:

Spring은 해당 요청을 처리하는 컨트롤러 메서드를 실행합니다.

3. 응답 변환:

메서드의 반환 값을 메시지 변환기(HttpMessageConverter)를 사용해 JSON, XML 등으로 변환합니다.

4. 응답 반환:

변환된 데이터를 HTTP 응답 바디에 포함시켜 클라이언트에게 반환합니다.

요약

  • @ResponseBody는 컨트롤러 메서드의 반환 값을 뷰 이름으로 해석하지 않고, HTTP 응답 바디에 직접 포함시킵니다.
  • @RestController는 @Controller와 @ResponseBody를 결합한 형태로, 클래스의 모든 메서드에 대해 자동으로 데이터가 응답 바디에 포함됩니다.
  • @ResponseBody를 사용하면 JSON, XML, 텍스트 등의 형식으로 데이터를 클라이언트에게 반환할 수 있습니다.

◼ RESTful

REST(Representational State Transfer)는 웹 서비스를 설계하는 아키텍처 스타일로, HTTP 프로토콜을 기반으로 리소스를 정의하고 이를 CRUD(Create, Read, Update, Delete) 방식으로 조작하는 것을 의미합니다. RESTful은 REST 아키텍처 스타일을 따르는 웹 서비스를 의미합니다.

REST의 주요 원칙

  1. 클라이언트-서버 아키텍처: 클라이언트와 서버가 분리되어 있어, 클라이언트는 사용자 인터페이스와 사용자 경험에 집중하고, 서버는 데이터 저장 및 비즈니스 로직을 처리합니다.

  2. 무상태(Stateless): 각 요청은 클라이언트의 상태를 서버에 저장하지 않고, 모든 요청은 독립적입니다. 클라이언트의 상태는 각 요청에 포함되어 전달됩니다.

  3. 캐시 가능(Cacheable): HTTP 응답은 캐시될 수 있어야 하며, 이를 통해 클라이언트는 서버와의 통신을 최소화하고 성능을 향상시킬 수 있습니다.

  4. 계층화된 시스템(Layered System): 클라이언트는 중간 서버와의 상호작용을 통해서도 데이터를 얻을 수 있으며, 이러한 계층은 보안, 로드 밸런싱 등을 제공합니다.

  5. 일관된 인터페이스(Uniform Interface): 리소스는 일관된 방식으로 접근되고 조작되어야 합니다. URI를 통해 리소스를 식별하고, HTTP 메서드를 통해 조작합니다.

  6. 리소스 기반: 리소스는 URI(Uniform Resource Identifier)를 통해 식별됩니다. 각 리소스는 고유한 URI를 가지며, 클라이언트는 이 URI를 통해 리소스에 접근합니다.

HTTP 메서드와 RESTful API

  • GET: 리소스를 조회합니다.
  • POST: 리소스를 생성합니다.
  • PUT: 리소스를 업데이트합니다.
  • DELETE: 리소스를 삭제합니다.
  • RESTful 예시
Copy code
@RestController
@RequestMapping("/api")
public class UserController {

    @GetMapping("/users")
    public List<User> getAllUsers() {
        // 모든 사용자 목록을 반환합니다.
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // ID로 사용자를 조회합니다.
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        // 새로운 사용자를 생성합니다.
    }

    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        // 기존 사용자를 업데이트합니다.
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable Long id) {
        // 사용자를 삭제합니다.
    }
}

요약

  • @Controller는 주로 뷰를 반환하는 데 사용되며, 템플릿 엔진과 함께 HTML 페이지를 생성합니다.
  • @RestController는 JSON 또는 XML 데이터를 반환하는 데 사용되며, API 엔드포인트를 정의하는 데 적합합니다.
  • RESTful은 HTTP 프로토콜을 기반으로 리소스를 정의하고 이를 CRUD 방식으로 조작하는 웹 서비스 아키텍처 스타일입니다. RESTful API는 일관된 인터페이스를 제공하며, HTTP 메서드를 통해 리소스를 관리합니다.

0개의 댓글