[네트워크] 클라이언트에서 서버로의 데이터 전송에 대한 나름의 이해

2023. 11. 3. 14:33네트워크

클라이언트에서 서버로의 데이터 전달 방식은 크게 두가지이다.

1. 쿼리 파라미터(스트링)를 통한 전달

- GET method를 통해 가능

2. HTTP 메시지 Body를 통한 전달

- POST, PUT, PATCH를 통해 가능

- 회원가입, 상품 주문, 리소스 등록, 리소스 변경

 

클라이언트에서 서버로의 데이터 전달 상황은 크게 4가지이다.

1. 정적 조회

- 쿼리 파라미터를 사용하지 않는다.

- 이미지, 정적 텍스트 문서

2. 동적 조회

- 쿼리 파라미터를 사용한다.

- 검색, 카테고리 선택, 정렬 필터

3. Form을 통한 전송

- Content-Type: application/x-www-form-urlencoded를 사용한다.

- POST, GET 모두 가능하다.

- GET으로 하게 되면 쿼리 파라미터 형태로 전달된다. 하지만 GET은 조회할 때 사용되기 때문에 이를 통해 데이터를 바꾸는 등의 행위는 지양한다.

- POST로 하게 되면 Body에 데이터가 들어간다. 

- Body에는 key, value 형태로 들어간다.

- 여러개의 데이터를 보낼때는 multipart/form-data를 이용한다.

- multipart/form-data는 HTTP 메시지 body에 데이터가 구분선으로 나누어진다. 각 구역안에는 하나의 데이터에 대한 header와 body가 들어간다

4. HTTP API를 통한 전송

- API를 통한 전송은 HTML form 데이터를 이용하지 않는다.

- 데이터를 body에 직접 담아 보낸다.

- 서버에서 서버간 통신에 사용한다

- 앱 클라이언트에 사용한다

- 리액트, 뷰와 같은 웹 클라이언트에 사용한다. 이때 자바스크립트를 통한 통신에 사용된다.

- Content-Type: application/json을 주로 사용한다. 즉, 전송데이터 형식으로 JSON을 많이 사용한다.

- POST, PUT, PATCH를 이용해 body에 넣어 전송한다.

- GET으로 조회한다.

 

URI를 설계해보자.

1. 신규 리소스 등록을 설계해보자. 

다음과 같은 방법이 가능하다.

ㄱ. POST METHOD 이용

ㄴ. PUT METHOD 이용

 

ㄱ. POST METHOD

POST METHOD를 통해 신규 자원을 등록할 때 가장 중요하게 생각할 점은 컬렉션(collection)이다.

컬렉션은 서버가 자원의 URI를 관리하는 것이다.

예를 들어, 새로운 멤버를 생성할 때, /members/100가 아닌 /members에만 요청하면 되는 것이다.

그러면 서버는 알아서 100에 만들어서 응답해준다.

 

ㄴ. PUT METHOD

PUT METHOD를 통해 신규 자원을 등록할 때 가장 중요하게 생각할 점은 스토어(store)이다.

스토어는 클라이언트가 자원의 URI를 관리하는 것이다.

예를 들어, 새로운 멤버를 생성할 때, /members에 요청을 하면 서버가 알아서 100에 만들어주는 것이 아니라 /members/100에 요청을 해야 하는 것이다.

파일 시스템에서 파일 등록 같은 곳에서 활용할 수 있다.

 

현재 신규 리소스 등록에는 POST METHOD가 대부분 사용된다. 

왜냐하면 컬렉션을 사용하고 PUT METHOD는 덮어쓰기이기 때문이다.

자원을 서버가 관리하는게 독립적인 수행에 중요하다.

덮어쓰기는 불안정하다. 하지만 게시판 같은 곳에서는 적절하다. 왜냐하면 쓴 글을 한번에 붙여넣기만 하면 되기 때문이다.

 

2. HTML Form 활용

회원가입을 한다.

폼을 불러와야 한다. 이때 /members/new에서 GET을 통해 폼을 불러온다.

폼을 작성한다. /members/new 또는 /members를 통해 POST로 보낼 수 있다. 하지만 /members/new로 보내는 게 invalid한 입력일 때 다시 폼을 불러오기에 보다 적합하다.

회원 정보를 확인한다. 이때 /members/{id}에서 GET을 통해 회원 정보 폼을 불러온다.

폼을 수정한다. /members/{id} 또는 /members/{id}/edit을 통해 POST로 보낼 수 있다. 하지만 여기도 /members/{id}/edit으로 보내는 게 적절하다.

 

여기서 /new라든지 /edit은 컨트롤 URI(또는 controller)이다. POST, GET으로만 하기에는 한계가 있기 때문이다.

이렇게 한계가 있는 경우 컨트롤 URI를 사용한다.

하지만 무분별하게 사용하면 안된다.

제일 먼저 리소스와 HTTP METHOD만으로 나타내본다.

만약 도저히 이렇게 설계할 수 없을때 컨트롤 URI를 활용한다.

 

/members/100이나 /files/star.img와 같이 하나의 단일개념(데이터베이스 row, 파일 하나, 객체 인스턴스)을 문서(document)라고 한다.

 

Reference


https://www.inflearn.com/course/lecture?courseSlug=http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC&unitId=61369

 

학습 페이지

 

www.inflearn.com