스프링

클라이언트에서 서버로 데이터 전송 / HTTP API 설계

eunkyung 2023. 5. 15. 14:38

인프런 모든 개발자를 위한 HTTP 웹 기본 지식 섹션 5

 

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

데이터 전달 방식은 크게 2가지로 나뉨

  1. 쿼리 파라미터를 통한 데이터 전송
    -GET / 주로 정렬 필터(검색어나 정렬 조건 등)
  2. 메세지 바디를 통해 데이터 전송
    -POST,PATCH,PUT / 회원 가입, 상품 주문, 리소스 등록, 리소스 변경

4가지 상황으로 나눠 살펴보자

  1. 정적 데이터 조회
    예를 들어 이미지 요청이 이에 해당하는 경우이다. 이미지 요청 시(GET 사용) 서버는 해당 경로(ex-static/star.jpg)의 이미지를 만들어 다시 전송하면 되기에 쿼리파라미터를 사용하지 않고 단순 리소스 경로로 조회 가능.
  2. 동적 데이터 조회
    주로 검색, 게시판 목록에서 정렬 필터에 사용. 조회 시 GET + 쿼리 파라미터 사용해 전달
  3. HTML Form을 통한 데이터 전송(GET, :POST만 지원)
    POST 전송. form의 데이터가 HTTP 메세지로 전달. form 내용을 메세지 바디 통해 전공되고 Content-Type:application/x-www-form-urlencoded 사용. 전송 데이터를 url encoding 처리.
    GET으로도 form에서 전송 가능(조회 시에만). 이때는 HTTP 메세지에 form의 데이터가 뭐리 파라미터 형식으로 전달
  4. HTTP API를 통한 데이터 전송
    클라이언트에서 서버로 데이터 바로 전송해야할 때(앱 클라이언트, 웹 클라이언트). 서버 to 서버 통신 시

    GET은 조회용으로, 데이터 전달은 쿼리 파라미터로 전달. 나머지는 메세지 바디에 데이터 전달
    Content-Type은 applicaton/json 주로 사용(XML은 예전에 많이 사용 했지만 현재는 json이 표준처럼 사용)

HTTP API 설계

앞서 섹션 4에서 학습 했다시피 URI는 리소스만 식별하고 행위는 HTTP메소드로 구분해야 하는데 조회는 GET, 등록은 POST(미리 규칙 정의 필요), 삭제는 DELETE를 사용하면 되는데 회원 수정은? 부분 수정하는 경우가 많기에 주로 PATCH사용. 게시물 수정과 같이 전체 수정 시에만 PUT사용. 애매할 때는 POST 사용.

- 그렇다면 POST와 PUT 둘다 등록을 할 수 있는데 무슨 차이일까????

  • HTTP API -컬랙션
     POST는 경로를 /members로 등록 요청 시 서버에서 신규 리소스 식별자를 생성해준다. 응답 시 location을 통해 전달해준다. 클라이언트는 등록될 리소스릐 URI를 요청 시에 모르고, 서버가 URI를 생성해주는 것이다.

    이러한 형식을 컬랙션이라고 하는데 컬랙션은 서버가 관리하는 리소스 디렉터리로 서버가 리소스의 URI를 생성하고 관리. 여기서 컬랙션은 /members이다.
  • HTTP API -스토어
    PUT
    은 파일 업로드 시와 같이 이미 클라이언트가 파일명을 알고 있고, 덮어쓰기 기능을 사용해도 될때 등록의 용도로 사용한다.
    즉, 클라이언트가 리소스의 URI를 알고 있어서 요청 시 URI를 지정해서 전송해야 한다( PUT /files/hw.pdf 형식으로 요청)
    이러한 형식을 스토어라고 하는데 스토어는 클라이언트가 관리하는 리소스 저장소로 클라이언트가 리소스의 URI를 알고 관리한다. 여기서 스토어는 /files다.

=>대부분 POST 사용☆

  • HTML Form은 GET, POST만 지원. (AJAX 등을 이용해 해결 가능하나 이를 배제하고 생각)
    조회 시 당연히 GET사용. 
    회원 등록/수정 폼 요청 시에는 어떤것을 사용할까? -> 폼 요청으로 인해 변경이 일어나지 않으므로 GET 사용.
    회원 등록/수정/삭제 시 는 POST를 사용.(URI는 폼 요청 URI와 맞추는게 좋음)
    GET, POST만 사용하기에 제약O. 해결 위해 동사로 된 리소스 경로 사용하는데 이를 컨트롤 URI라고 한다. 예를 들어 /members/{id}/edit과 같이 /edit, /new, /delete 등을 사용한다. 이는 HTTP메소드로 해결하기 애매한 경우 사용하는데 실무에서 많이많이 사용됨

참고 (https://restfulapi.net/resource-naming)

- 문서 (단일 개념)

- 컬랙션(서버가 관리하는 리소스 디렉터리)🔴🔴

- 스토어(클라이언트가 관리하는 자원 저장소)

-컨트롤러, 컨트롤 URI( 위 3개로 해결하기 어려운 추가 프로세스 실행 시 사용. 어떠한 동닥을 하는 것이기에 동작을 직접 사용한다. /members/{id}/delete와 같은 형식으로)🔴🔴

-> 방법 : 리소스를 식별하고 대부분 컬렉션이기에 /orders , /members와 같은 형식으로. 상세는 /id와 같이 사용. 이것으로 해결이 안될 때는 컨트롤 URI사용.

 

 

 

'스프링' 카테고리의 다른 글

HTTP API 설계  (0) 2023.05.15