12월 6일 수요일 TIL

장숭혁·2023년 12월 6일
0

TIL작성

목록 보기
26/60

🎨 HTTP 요청을 처리하고 데이터를 추출하기

  • @RequestBody : 이 어노테이션은 HTTP 요청의 본문(body) 데이터를 Java 객체로 매핑할 때 사용된다. 주로 POST나 PUT 요청과 함께 JSON 또는 XML 형태의 데이터를 받을 때 사용된다. 예를 들어, 컨트롤러 메소드의 매개변수에 @RequestBody 어노테이션을 붙이면 Spring은 요청 바디의 데이터를 해당 객체로 변환한다.
@PostMapping("/create")
public ResponseEntity<User> createUser(@RequestBody User user) {
    // 처리 로직
}
  • @RequestParam: 이 어노테이션은 HTTP 요청의 파라미터를 메소드의 매개변수로 바인딩할 때 사용된다. 주로 GET 요청에서 쿼리 파라미터를 받거나, POST 요청에서 form 데이터를 받을 때 사용된다.
    • @RequestParam : Spring MVC에서 HTTP 요청 파라미터를 컨트롤러 메소드의 매개변수로 바인딩하는 데 사용된다.
    • @RequestParam 어노테이션의 주요 속성은 다음과 같다.
      • value 또는 name: 매핑할 요청 파라미터의 이름을 지정한다.
      • required: 필수 파라미터 여부를 지정한다 기본값은 true이며, 만약 요청 파라미터가 누락되면 예외가 발생한다. false로 설정하면 해당 파라미터가 없어도 오류 없이 메소드가 실행된다.
      • defaultValue: 요청 파라미터가 없을 경우 사용할 기본 값이다. required가 false로 설정되어 있고, 해당 파라미터가 요청에 없을 때 사용된다.
      @GetMapping("/user")
    public ResponseEntity<User> getUserById(
        @RequestParam(value = "id", required = false, defaultValue = "0") Long userId
    ) {
        // userId를 이용한 사용자 정보 검색 및 처리
    }
  • @ModelAttribute: 이 어노테이션은 주로 폼(form) 데이터를 컨트롤러 메소드의 매개변수로 바인딩할 때 사용된다. 주로 HTML form에서 입력한 데이터를 받을 때 사용한다. Spring MVC는 @ModelAttribute를 사용하여 해당 객체를 자동으로 생성하고, 요청 파라미터를 이 객체에 매핑한다. 만약에 폼의 input 이름과 객체의 필드 이름이 다르다면, @ModelAttribute 내에 파라미터 이름을 지정해줄 수 있다.
    @PostMapping("/update")
    public ResponseEntity<User> updateUser(@ModelAttribute("newUser") User user) {
      // 처리 로직
    }

    @ModelAttribute 이 어노테이션을 메소드 매개변수 앞에 붙이면 Spring은 해당 객체를 자동으로 생성하고, HTTP 요청의 파라미터를 이 객체에 바인딩한다. 주로 POST 요청의 form 데이터를 처리할 때 사용된다. HTML 폼과 백엔드 Java 코드 간의 데이터 전달을 편리하게 처리할 수 있도록 도와준다.

  • @PathVariable : 이 어노테이션은 Spring MVC에서 URL 경로의 일부를 메소드의 매개변수로 바인딩하는 데 사용된다. 주로 RESTful API에서 동적인 URL을 처리할 때 활용된다.
    @GetMapping("/users/{id}")
    public ResponseEntity<User> getUserById(@PathVariable Long id) {
      // id를 이용한 사용자 정보 검색 및 처리
    }
  • @RequestHeader : 이 어노테이션은 HTTP 요청 헤더의 값을 컨트롤러 메소드의 매개변수로 받을 때 사용된다. 헤더에 포함된 정보를 가져와 사용할 수 있다.
    @GetMapping("/headers")
    public ResponseEntity<String> getHeaderInfo(@RequestHeader("User-Agent") String userAgent) {
      // User-Agent 헤더 정보 사용
    }
    • 위의 예시에서 @RequestHeader("User-Agent")는 HTTP 요청의 User-Agent 헤더 값을 userAgent 매개변수로 가져온다. 이렇게 함으로써 해당 컨트롤러 메소드에서 이 헤더 정보를 활용할 수 있다.

HTTP Request/Response 구조

-하이퍼 텍스트 문서를 교환하기 위한 프로토콜이다.(통신규약이다.)

  • 프론트 엔드 서버(프론트 엔드 개발에 관련된 서버)와 클라이언트간의 통신에 사용된다.

  • 프로트엔드 서버와 클라이언트 서버간의 통신에도 사용된다.

  • HTTP는 TCP/IP 기반으로 되어있다.

  • 클라이어트와 서버의 모든 통신이 요청과 응답으로 이루어진다.

    Request Message

    HTTP Request Message는 공백을 제외하고 3가지 부분으로 나누어진다.

    • Start Line
    • Headers
    • Body
  • start line : HTTP Request Message의 시작라인. 3가지 부분으로 구성된다.

    • HTTP method
    • Request target
    • HTTP version

      GET(HTTP method) /index.html(Request target) HTTP/1.1(HTTP version)

    Headers

    해당 request에 대한 추가정보를 담고 있다. request메세지 body의 총길이(Content-Length 등의 key:value 형태 header도 3가지 부분으로 나뉜다.

    • General Headers
    • Request Headers
    • Entity Headers
  • Host 요청하려는 서버 호스트 이름과 포트번호

  • User-agent 클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.

  • Referer 바로 직전에 머물렀던 웹 링크 주소 

  • Accept 클라이언트가 처리 가능한 미디어 타입 종류 나열

  • If-Modified-Since 여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.

  • Authorization 인증 토큰을 서버로 보낼 때 쓰이는 Header

  • Origin 서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.

  • Cookie 쿠키 값이 key-value로 표현된다.

    출처: https://hahahoho5915.tistory.com/62 [넌 잘하고 있어:티스토리]

    Host: example.com:8080
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
    Referer: https://www.google.com/search?q=example
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
    If-Modified-Since: Thu, 25 Nov 2023 12:00:00 GMT
    Authorization:
    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    Origin: https://www.example.com
    Cookie: sessionId=abc123; userId=987xyz

    body

    HTTP Request가 전송하는 데이터를 담고 있는 부분 전송하는 데이터가 없다면 body부분은 비어있다. 보통 post 요청일 경우, HTML 폼 데이터가 포함되어 있다.

    POST /test HTTP/1.1
    Accept: application/json
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Content-Length: 83
    Content-Type: application/json
    Host: google.com
    User-Agent: HTTPie/0.9.3
    {
      "test_id": "tmp_1234567",
      "order_id": "8237352"
    }
  • POST /test HTTP/1.1: 이 부분은 요청의 메서드, 엔드포인트, 그리고 사용하는 HTTP 버전을 보여줍니다. 여기서는 POST 메서드를 사용하고 '/test' 엔드포인트로 요청을 보내고 있으며, HTTP 버전은 1.1을 사용하고 있습니다.

  • Accept: application/json: 이 헤더는 클라이언트가 JSON 형식의 응답을 원한다는 것을 나타냅니다. 서버가 JSON 형식으로 응답할 수 있으면 이를 사용하여 응답할 수 있습니다.

  • Accept-Encoding: gzip, deflate: 이 헤더는 클라이언트가 서버에서 gzip 또는 deflate 압축 방식으로 응답을 받을 수 있다는 것을 나타냅니다. 이렇게 함으로써 서버는 응답을 압축하여 전송할 수 있습니다.

  • Connection: keep-alive: 이 헤더는 클라이언트와 서버 간의 연결을 유지하고 있다는 것을 나타냅니다. 이는 추가 요청을 위해 동일한 연결을 계속 사용할 수 있도록 합니다.

  • Content-Length: 83: 이 헤더는 요청 본문의 길이를 나타냅니다. 여기서는 요청 본문의 길이가 83바이트임을 나타냅니다.

  • Content-Type: application/json: 이 헤더는 요청의 본문(body)의 데이터 타입을 나타냅니다. 여기서는 JSON 형식으로 데이터를 보내고 있음을 나타냅니다.

  • Host: google.com: 이 헤더는 요청이 전송되는 호스트를 나타냅니다. 여기서는 'google.com' 호스트로 요청을 보내고 있습니다.

  • User-Agent: HTTPie/0.9.3: 이 헤더는 클라이언트 소프트웨어의 정보를 포함합니다. 여기서는 'HTTPie/0.9.3'이라는 클라이언트 소프트웨어를 사용하여 요청을 보내고 있습니다.

    Response Message

    • HTTP Response Message는 request와 동일하게 공백을 제외하고 3가지 부분으로 나누어진다.
      -status line
      -headers
      -body
    • Status Line
      HTTP Response의 상태를 간략하게 나타내주는 부분
      HTTP Response의 status line 또한 3가지 부분으로 구성
      -HTTP version
      -Status Code
      -Status Text

      HTTP/1.1 200 OK
      [HTTP version][Status Code] [Status Text]

    • Headers
      Request의 Headers와 동일 respponse에서만 사용되는 header값들이 있다
      User-Agent 대신에 Server 헤더가 사용딘다.
    • body
profile
코딩 기록

0개의 댓글

관련 채용 정보