http의 동작방식과 spring이 http를 지원해주는 방식

HTTP의 동작 방식

HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 데이터를 주고받기 위한 프로토콜이다. 기본적으로 요청(request)과 응답(response) 구조로 동작한다. 이 동작 방식을 단계별로 설명하면 다음과 같다.

  1. 클라이언트 요청: 웹 브라우저나 HTTP 클라이언트가 특정 리소스(URL)를 요청한다. 이 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 함께 전송된다.
  2. 서버 처리: 서버는 요청을 받아, 해당 요청을 처리할 수 있는 서버 애플리케이션이 요청을 해석하고 처리한다.
  3. 응답 반환: 서버가 요청을 처리한 후, 클라이언트에게 응답을 돌려준다. 응답에는 상태 코드(200 OK, 404 Not Found, 500 Internal Server Error 등), 헤더(header), 그리고 필요한 경우 데이터(body)가 포함된다.
  4. 클라이언트 처리: 클라이언트는 서버로부터 받은 응답을 처리하여 웹 페이지를 렌더링하거나 데이터를 사용한다.

HTTP 메서드

  • GET: 리소스를 조회하기 위한 요청을 보낸다.
  • POST: 리소스를 생성하거나 데이터를 서버로 전송하기 위한 요청을 보낸다.
  • PUT: 기존 리소스를 수정하기 위한 요청을 보낸다.
  • DELETE: 리소스를 삭제하기 위한 요청을 보낸다.

HTTP 상태 코드

  • 2xx (성공): 요청이 성공적으로 처리되었음을 나타낸다 (ex: 200 OK).
  • 4xx (클라이언트 오류): 클라이언트의 잘못된 요청을 나타낸다 (ex: 404 Not Found).
  • 5xx (서버 오류): 서버에서 처리할 수 없는 오류가 발생했음을 나타낸다 (ex: 500 Internal Server Error).

Spring이 HTTP를 지원하는 방식

Spring은 Spring MVC를 통해 HTTP 요청과 응답을 처리할 수 있도록 지원한다. Spring MVC는 웹 애플리케이션에서 HTTP 프로토콜을 간단하게 다룰 수 있는 다양한 편의 기능을 제공한다.

DispatcherServlet

Spring의 HTTP 요청 처리는 DispatcherServlet을 통해 이루어진다. DispatcherServlet은 클라이언트로부터 들어오는 모든 HTTP 요청을 받아 이를 처리할 컨트롤러로 전달한다.

  1. 클라이언트가 HTTP 요청을 보낸다.
  2. DispatcherServlet이 요청을 가로채고, 알맞은 컨트롤러를 찾아 해당 요청을 전달한다.
  3. 컨트롤러는 비즈니스 로직을 처리한 후, View 또는 데이터를 반환한다.
  4. DispatcherServlet이 클라이언트에게 응답을 반환한다.

Controller와 Request Mapping

Spring에서는 @Controller@RequestMapping 어노테이션을 사용하여 특정 HTTP 요청을 처리하는 메서드를 정의한다.

@Controller
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }

    @PostMapping("/data")
    public ResponseEntity<String> postData(@RequestBody String data) {
        return ResponseEntity.ok("Data received: " + data);
    }
}
  • /hello 경로로 GET 요청이 들어오면 hello() 메서드가 호출된다.
  • /data 경로로 POST 요청이 들어오면 postData() 메서드가 호출되어 데이터를 처리한다.

HTTP 요청 파라미터 처리

Spring은 HTTP 요청의 파라미터, 헤더, 본문 등을 쉽게 가져올 수 있는 어노테이션을 제공한다.

  • @RequestParam: 쿼리 파라미터를 받아온다.
  • @PathVariable: URL 경로에 포함된 변수를 받아온다.
  • @RequestBody: HTTP 본문에 포함된 데이터를 객체로 변환하여 받아온다.

RestController와 REST API

Spring에서는 @RestController를 사용하여 RESTful 웹 서비스를 쉽게 구축한다. @RestController는 JSON 또는 XML 형식의 데이터를 반환하는 HTTP 엔드포인트를 만드는 데 사용된다.

@RestController
public class ApiController {

    @GetMapping("/api/hello")
    public String apiHello() {
        return "Hello from API";
    }

    @PostMapping("/api/data")
    public ResponseEntity<String> apiData(@RequestBody String data) {
        return ResponseEntity.ok("Received: " + data);
    }
}

HTTP 상태 코드 및 예외 처리

Spring은 ResponseEntity를 사용하여 HTTP 응답 코드, 헤더, 바디를 명시적으로 설정할 수 있다.


@GetMapping("/api/error")
public ResponseEntity<String> error() {
    return new ResponseEntity<>("Error Occurred", HttpStatus.BAD_REQUEST);

또한, Spring은 @ExceptionHandler를 사용하여 전역 또는 특정 컨트롤러 내에서 발생하는 예외를 처리한다.

Reference

https://docs.spring.io/spring-framework/reference/integration/rest-clients.html



© 2022. by taewoo

Powered by taewoo