HTTP 메서드

JeongHoHyun·2025년 2월 2일

HTTP

목록 보기
4/9

HTTP 메서드 종류

⭐️ GET (조회)

  • 리소스 조회.
  • 서버에 전달하고싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달.
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음.

⭐️ POST (등록)

  • 요청 데이터 처리, 주로 등록에 사용.
  • 메시지 바디를 통해 서버로 요청 데이터 전달.
  • 서버는 요청 데이터를 처리.
    • 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
  • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용.
  • POST 메서드는 대상 리소스가 리소스의 고유 한 의미 체계에 따라 요청에 포함 된 표현을 처리하도록 요청.
    • ex) HTML FORM에 입력 한 정보로 회원가입, 주문
    • 게시판 글쓰기, 댓글 달기
    • 신규 주문 생성
    • 한 문서 끝에 내용 추가
  1. 새 리소스 생성(등록)
    • 서버가 아직 식별하지 않은 새 리소스 생성
  2. 요청 데이터 처리
    • 프로세스를 처리해야하는 경우 (ex) 결재완료->배달시작->배달완료 (컨트롤 URI)
  3. 다른 메서드로 처리하기 애매한 경우
    • ex) JSON으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우

⭐️ PUT (덮어쓰기)

  • 리소스를 대체, 해당 리소스가 없으면 생성
    • 리소스가 있으면 대체
      • 기존 리소스를 삭제하고 덮어쓰는 개념이기 때문에 필드 1, 2, 3이 기존에 존재하는 곳에 필드 3만 넣고 보내면 1, 2, 3이 삭제되고 새로 넣은 3만 들어가게 되니 ⚠️ 주의 필요
    • 리소스가 없으면 생성
    • 덮어쓰기 개념
  • ⚠️ 클라이언트가 리소스를 식별
    • 클라이언트가 리소스 위치를 알고 URI 지정
      • POST와 차이점

⭐️ PATCH (업데이트)

  • 리소스 부분 변경 (업데이트)
  • PUT과 다르게 삭제 후 생성이 아니고 기존 값을 수정하는 개념
  • PATCH가 지원이 안되면 POST를 사용하면 된다.

⭐️ DELETE (삭제)

  • 리소스 삭제
  • GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환

OPTIONS

  • 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명 (주로 CORS에서 사용)

CONNECT

  • 대상 자원으로 식별되는 서버에 대한 터널을 설정

TRACE

  • 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

HTTP 메서드의 속성

안전 (Safe)

  • 호출해도 리소스를 변경하지 않는다.
    • GET, HEAD, OPTIONS, TRACE

멱등 (Idempotent)

  • f(f(x)) = f(x)
  • 한 번 호출하던 두 번 호출하던 100번 호출하던 결과가 모두 같다
    • GET, PUT, DELETE
  • 활용
    • 자동 복구 메커니즘
  • 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.

캐시가능 (Cacheable)

  • 응답 결과 리소스를 캐시해서 사용해도 되는가?
    • GET, HEAD, POST, PATCH 캐시 가능
    • 실제로는 GET, HEAD 정도만 캐시로 사용
    • POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현이 쉽지 않음

📌 클라이언트 - 서버 데이터 전송

정적 데이터 조회

GET/static/star.jpg HTTP/1.1
Host: localhost:8080

  • 쿼리 파라미터 미사용
  • 이미지, 정적 텍스트 문서
  • 조회는 GET 사용
  • 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능

동적 데이터 조회

GET/search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

  • 쿼리 파라미터 사용 (쿼리 파라미터를 기반으로 정렬 필터해서 결과를 동적으로 생성)
  • 주로 검색, 게시판 목록에서 정렬 필터(검색어)
  • 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용
  • 조회는 GET 사용
  • GET은 쿼리 파라미터를 사용해서 데이터 전달

HTML Form 데이터 전송

Post 전송 - 저장

POST/save HTTP 1.1
Host: localhost:8080
Content-type:application/x-www-form-urlencoded

username=kim&age=20

  • HTML Form submit시 POST 전송
    • 회원 가입, 상품 주문, 데이터 변경 등에 사용
  • Content-Type: application/x-www-form-urlencoded
    • form의 내용을 메시지 바디를 통해서 전송 (key=value, 쿼리 파라미터 형식)
    • 전송 데이터를 url encoding처리 (서버에서 별도 디코딩 작업 필요)
      • ex) abc김 -> abc%EA%B9%80
  • HTML Form은 GET도 전송 가능 (조회)

multipart/form-data

POST/save HTTP/1.1
Host: localhost:8080
Content-Type: multipart/form-data; boundary=----XXX

------XXX
Content-Disposition:form-data; name="username"

kim
------XXX
Content-Disposition:form-data; name="age"

20
------XXX
Content-Disposition:form-data; name="file1"; filename="intro.png"
Content-Type: image/png

109238a9o0p3eqwokjasd09ou3oirjwoe9u34ouief...
------XXX--

  • Content-Type: multipart/form-data
    • 파일 업로드 같은 바이너리 데이터 전송시 사용
    • 다른 종류의 여러 파일과 폼의 내용 함께 전송 가능

📌HTML Form 전송은 GET, POST만 지원

HTTP API 전송

POST/memebers HTTP/1.1
Content-Type:application/json

{
"username": "jeong",
"age": 20
}

  • 서버 to 서버
    • 백엔드 시스템 통신
  • 앱 클라이언트
    • 아이폰, 안드로이드
  • 웹 클라이언트
    • HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용(AJAX)
    • React, Vue.js 같은 웹 클라이언트와 API 통신
  • POST, PUT, PATCH : 메시지 바디를 통해 데이터 전송
  • GET : 조회, 쿼리 파라미터로 데이터 전달
  • Content-Type : application/json 사용
    • TEXT, XML, JSON 등
profile
Java Back-End 2022.11.01 💻~ing

0개의 댓글