Computer Science/HTTP

HTTP 메서드 활용

nayoon030303 2022. 4. 9. 23:39

클라이언트에서 서버로 데이터 전송 방법

클라이언트에서 서버로 데이터를 전송하는 방법은 크게 2가지이다. 

  • 쿼리 파라미터를 통한 데이터 전송 (GET)
  • 메시지 바디를 통한 데이터 전송 (POST, PUT, PATCH)

클라이언트에서 서버로 데이터를 전송하는 상황은 크게 총 4가지이다. 

  • 정적 데이터 조회
    • 정적 데이터 조회는 이미지, 텍스트 등 쿼리 파라미터 없이 리소스를 경로로 조회한다.
  • 동적 데이터 조회
    • 쿼리 파라미터를 사용해서 검색, 정렬 필터 등으로 사용된다.
  • HTML Form을 통한 데이터 전송
    • GET, POST만 지원한다. 
    • 컨트롤 URI: 이런 제약을 해결하기 위해 동사로 된 리소스 경로를 사용한다.
  • HTTP API를 통한 데이터 전송 
    • HTML에서 FORM전송 대신 자바스크립트를 통한 통신에 사용된다.
    • API를 호출할 때 메시지 바디에 데이터를 넣어서 전송
    • 클라이언트 -> 서버뿐만 아니라
    • 서버 -> 서버
    • 앱 클라이언트 등에서도 사용된다.

HTTP API 설계 예시

회원 관리 시스템을 만든다고 한다면

- 회원 목록 /members -> GET
- 회원 등록/members -> POST
- 회원 조회/members/{id} -> GET
- 회원 수정/members/{id} -> POST, PATCH, PUT
- 회원 삭제/memvers/{id} -> DELETE

위처럼 만들 것이다. 

다른 것들은 어떤 HTTP 메서드를 써야 할지 명확하지만 회원 수정에서 어떤 메서드를 사용해야 할까?

PUT: 기존의 리소스를 삭제하고 덮어버린다.

PATCH: 부분적으로 수정한다. 

 

회원 수정을 할 때면 대체로 PATCH를 사용하는 것이 좋다.

게시판에 게시글을 수정할 때는 PUT을 사용한다. 게시판을 수정하는 것은 안에 내용들을 덮어쓰는 것이기 때문이다.

그럼 이런 의문이 든다. 회원 등록을 할 때도 PUT을 사용할 수 있는 게 아닐까? 

 

어떤 상황에서 POST를 사용하고 어떤 상황에서 PUT을 사용해야 하는 것 일까?

PUT과 POST의 차이점

POST

  • 클라이언트는 등록될 리소스 URI를 모른다.
    • POST/members
  • 서버가 등록된 리소스 URI를 생성해준다. 
    • /members/100
  • 이러한 형식을 컬렉션이라고 한다. 
    • /members

PUT

  • 클라이언트가 리소스 URI를 알고 있어야 한다. 
    • PUT/files/cat.jpg
  • 이러한 형식을 스토어라고 한다. 
    • /files

PUT과 POST의 차이점은 클라이언트가 리소스 URI를 알고 있나 모르고 있나에 차이점이다. 

만약 회원 등록을 한다고 하면 그 회원이 몇 번째 회원인지는 서버에서 확인할 수 있다. 즉 클라이언트는 리소스 URI를 알 수 없다. 

참고하면 좋은 URI 설계 개념

  • 문서(document)
    • 하나의 개념(파일 하나, 인스턴스, 데이터베이스 row)
  • 컬렉션(collection)
    • 서버가 관리하는 리소스 디렉터리
  • 스토어(store)
    • 클라이언트가 관리하는 리소스 디렉터리
  • 컨트롤러(controller), 컨트롤러 URI
    • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스를 실행할 때 사용
    • 동사를 직접 사용