출처:https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/
클라이언트에서 서버로 데이터를 전달하는 방법은 크게 두 가지이다.
1) 쿼리 파라미터를 이용하기
* GET (정렬 필터, 검색어)
2) 메세지 바디를 이용하기
* POST, PUT, PATCH (회원가입, 상푼주문, 리소스 등록 변경)
클라이언트가 서버로 데이터를 전송할 때의 4가지 상황에 대해 하나씩 알아보자.
- 정적 데이터 조회(이미지, 정적 텍스트 문서)
이 경우 쿼리 파라미터를 사용하지 않는다.
그저, 리소스 경로로 단순하게 조회가 가능하다.
2. 동적 데이터 조회
주로 검색, 게시판 목록에서 정렬 필터(검색어) 등에 사용.
조회는 GET을 사용한다. GET이기에, 쿼리 파라미터를 사용해서 데이터를 전달한다.
3. HTML Form 데이터 전송
HTML Form의 경우 전송은 GET, POST만 지원한다.
HTML Form 형식으로 전달하면 method = "post"이기에 웹 브라우저가 post로 생성해준다.
여기서 주목할 것은, Content-Type가 'applicaton/x-www-form-urlencoded'이다. post이니까 바디 형식이다.
method = "get"으로 바뀐다면? GET이니까 방식이 메세지 바디가 아니라 쿼리 파라미터 형식으로 바뀐다.
물론 이 예제의 경우, save라는 action을 하고 싶은데 GET으로 하는 건 맞지 않겠지. GET은 조회만 하니까.
Content-type : multipart/form-data의 경우는 파일 업로드와 같은 바이너리 데이터 전송 시 사용한다.
다른 종류의 여러 파일과 폼의 내용을 함께 전송이 가능하다.
지금 예제의 경우 file을 같이 보내므로 사용하였다.
간단히 정리하자면, HTML Form의 경우 GET과 POST만 지원한다.
여기서 submit을 하려면 POST로 전송을 해야겠지. 회원가입을 한다거나, 상품 주문을 한다거나.
4. HTTP API 데이터 전송
주로 json 형식으로 통신을 진행한다.
서버에서 서버끼리의 경우 html이 필요없으니 이렇게 진행하고
앱 클라이언트(아이폰,안드로이드)의 경우도 필요한 정보가 필요할 때 json으로 받는다.
웹 클라이언트의 경우 HTML에서 Form 전송 대신 자바스크립트를 통해 통신하기도 한다.
_______________________________________________________________________________
*HTTP API 설계 예시
1. 회원 관리 시스템 ( API 설계 - POST 기반 등록)
우리가 POST /members 를 한다면 서버가 새로 등록된 리소스의 URL을 생성해준다.
ex) Location : /members/100
여기서 컬렉션이라는 개념이 등장하는데, 말 그대로
서버가 관리하는 리소스 디렉토리이다.
서버가 리소스의 URI을 생성하고 관리하는 것이지. 여기선 /members가 된다.
2. 파일 관리 시스템(API 설계 - PUT 기반 등록)
PUT의 경우 클라이언트가 리소스의 URL을 알고 있어야한다.
*PUT/files/star.jpg 이렇게..
즉, 클라이언트가 직접 리소스의 url을 지정한다.
여기서 스토어(store) 개념이 나오는데,
컬렉션과 내용은 비슷하다.
여기선 서버가 아닌 클라이언트가 관리하는 리소스 저장소이다.
클라이언트가 리소스의 URI을 알고 관리하는거지.
3. HTML FORM 사용
html form은 get, post만 지원한다했다.
그러다보니 제약사항이 많다.
강사님은 위의 예시에서 회원 등록폼은 /members/new -> GET, /members/new -> POST 이렇게 같은 꼴로 만드는 게 유지보수에 유리하다고 했다. 나 역시도 왠지 그게 편할 것 같기도...
GET과 POST만 사용하다보니, 어쩔수 없이 /new, /edit, /delete 같이 컨트롤 URI를 추가적으로 사용하게 된다.
'스프링 강의 필기 > HTTP 웹 지식 정리' 카테고리의 다른 글
7) HTTP 헤더1 - 일반 헤더 (0) | 2022.07.20 |
---|---|
6) HTTP 상태코드 (0) | 2022.07.20 |
4) HTTP 메소드 (0) | 2022.07.16 |
3) HTTP 기본 (0) | 2022.07.16 |
2) URI과 웹 브라우저 요청 흐름 (0) | 2022.07.16 |