티스토리 뷰

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런...

www.inflearn.com

인프런 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강한 뒤 정리한 글입니다.

 

목차

 인터넷 네트워크

 URI와 웹 브라우저 요청 흐름

 HTTP 기본

 HTTP 메소드

 HTTP 메소드 활용

 HTTP 상태코드

 HTTP 헤더1(일반헤더)

 HTTP 헤더2 : 캐시와 조건부 요청

 

클라이언트에서 서버로의 데이터를 전달하는 방식

1. 쿼리 파라미터를 통한 전송

 - HTTP 메서드 : GET

 - 게시판 정렬필터 에서 주로 사용

2. 메시지 바디를 통한 전송

 - HTTP 메서드 : POST, PUT, PATCH

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

 

클라이언트에서 서버로 데이터를 전송하는 예시

1. GET을 이용한 정적 데이터(이미지, 텍스트문서) 조회하는 경우

 - 클라이언트에서 이미지(정적 데이터)에 접근하는 경우 추가적인 데이터(쿼리파라미터)를 전달하지 않아도 된다. (리소스 경로만으로도 이미지 조회 가능)

 

2. GET을 이용한 동적 데이터 조회

 - 검색어(필터), 정렬조건 등 추가적인 조건을 통해 조회하는 경우 쿼리파라미터를 이용한다. 서버는 쿼리파라미터의 key, value값을 적절히 이용해 조건에 맞는 데이터를 반환

 

3. POST, GET을 이용한 HTML Form 데이터 전송 (GET, POST만 지원)

  - form 태그로 회원가입을 한다고 가정할 때 사용자가 입력한 가입정보는 (웹브라우저에 의해) 쿼리파라미터와 유사한 형식을 가지도록 만들어 message body에 담아 서버로 전송한다.

 - GET 메서드는 message body를 이용하지 않고 쿼리파라미터를 생성한다.

 

4. HTTP API 데이터 전송 

 - 서버간 통신하는 경우 사용한다.

 - 앱 클라이언트에서 서버로 바로 데이터를 전송하는 경우 HTTP API를 전송한다고 한다.

 - 웹 클라이언트에서 자바스크립트를 통한 Ajax 통신에 사용

 - POST, PUT, PATCH 메서드에서 메시지 바디를 통한 데이터 전송

 - 쿼리파라미터로 데이터를 전달하는 GET 조회 Content-Type은 json을 주로 사용한다. (text, xml, json 등)

 

 - 파일과 같은 바이너리 데이터를 전송하는 경우 multipart/form-data 인코딩타입을 이용한다. HTTP 메시지에서 파일과 텍스트 정보는 boundary를 이용해 구분한다.

form에 파일과 텍스트를 전송했을 때 생성되는 메시지

 

HTTP API 설계예시

1. POST와 PUT 기반 등록의 차이 - 컬렉션 vs 스토어

POST (컬렉션)

POST를 이용해 데이터를 등록할 때는 클라이언트의 요청을 서버에서 받아 리소스를 만들어준다. 이 때 클라이언트는 등록될 리소스의 URI를 모른다. 서버가 관리하는 리소스 디렉토리 또는 서버가 리소스 URI를 생성하고 관리하는 형태를 컬렉션이라고한다. URI에서 컬렉션은 /members 이다.

 

PUT (스토어)

PUT기반 등록은 클라이언트가 리소스 URI를 알고 있다. (파일등록 예시) 클라이언트가 직접 리소스의 URI를 지정한다는 것은 클라이언트가 리소스 URI를 관리한다는 뜻이다. 클라이언트가 관리하는 리소스 저장소 또는 클라이언트가 리소스의 URI를 알고 관리하는 형태를 스토어 라고 한다. URI에서 스토어는 /files 이다.

 

* 신규자원 등록은 대부분 POST를 사용하며 PUT을 기반으로한 등록은 잘 이루어지지 않는다.

 

2. API 설계 - POST 기반 등록

리소스를 식별하는 것에 유의

회원 목록 /members (GET) : 회원목록을 모두 조회해서 화면에 뿌려준다.

회원 등록 /members (POST) : 회원정보를 보내면 등록처리하도록 약속한

회원 조회 /members/{id} (GET) : 회원이 많은 경우 검색어를 이용한다.

회원 수정 /members/{id} (PATCH, PUT, POST)

- PUT : 기존 정보를 삭제하고 완전 대체한다. 회원정보를 모두 보내면 가능하지만 비효율적이다.

- PATCH : 부분 수정이 가능하다. 회원정보 수정에 주로 사용된다.

- POST : 위의 메서드를 사용하기 애매한 상황에 사용

회원 삭제 /members/{id} DELETE : 회원정보를 삭제한다.

 

3. API 설계 - PUT 기반 등록

파일 목록 /files (GET) : files에 있는 파일들을 조회

파일 조회 /files/{filename} (GET) : 파일을 하나 조회

파일 등록 /files/{filename} (PUT) : 파일을 등록한다. 파일이 있는경우 덮어쓰기 하기 때문에 PUT을 이용한다.

파일 삭제 /files/{filename} (DELETE) : 파일을 삭제한다.

파일 대량 등록 /files (POST) : POST의 의미를 임의로 정할 수 있다. 현재 API 설계에선 대량 등록처리로 정했다.

 

4. HTML FORM을 사용한 API 설계

HTML FROM만을 이용할 때는 GET, POST만을 지원한다. 이러한 제약사항을 해결하기 위해 리소스 경로에 동사를 사용하는 컨트롤 URI를 이용한다.

 

주의: HTTP 메서드로 API를 만들 수 없는 상황에서만 컨트롤URI를 사용하며 컨트롤 URI를 최대한 지양한다.

 

회원 목록      /members (GET)

회원 등록 폼 /members/new (GET)

회원 등록      /members/new, /members (POST)

회원 조회      /members/{id} (GET)

회원 수정 폼 /members/{id}/edit (GET)

회원 수정      /members/{id}/edit, /members/{id} (POST)

회원 삭제      /members/{id}/delete (POST)

 

POST를 이용해 회원등록할 때 폼(GET)과 URI를 맞추거나 컬렉션형태로(/members) 별도로 URI를 생성해줄 수 있다.

방법이 정해진 것은 없으나 URI를 동일하게 맞출 경우 회원등록 중 문제가 발생해 회원등록폼으로 다시 돌아오는 경우 URI 경로를 바꾸지 않아도 된다는 편의성이 있다.

 

회원 수정 폼 자체는 조회의 영역이기 때문에 GET을 이용한다. 회원수정 정보를 보낼 때의 URI 또한 폼의 URI와 맞추거나 컬렉션 형태로 생성할지 선택해준다.

 

HTML FORM은 DELETE 메서드를 이용할 수 없기 때문에 회원삭제를 수행할 때 POST메서드를 이용하고 delete를 포함시킨 컨트롤 URI를 이용해야한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함