CS(computer science)/Computer Network

[인프런 김영한 강의 정리 - 인터넷과 http- 5] -5. HTTP METHOD 활용

ebang 2023. 2. 10. 23:00

본 게시물은 인프런 강의(김영한 강사님의 '모든 개발자를 위한 http 강의)를 듣고 정리한 메모입니다. 

 

어떤 식으로 HTTP METHOD가 개발에서 활용되는가를 보려고 한다.

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

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

  1. 쿼리 파라미터 사용하기
    GET 메소드를 활용할 때 사용하고, 주로 정렬이나 필터를 이용 시에 사용한다.
  2. 메시지 바디를 활용한 메시지 전송
    PUT, PATCH, POST 메소드를 활용할 때 사용하고, 회원가입, 회원 등록, 회원 변경, 상품 주문등에 사용한다.

*상황 별 메소드 사용법

1. 정적 데이터 조회
GET 메소드를 기본적으로 사용한다.

2. 동적 데이터 조회
GET 메소드를 사용하되, 쿼리 파라미터도 사용한다. 

GET /search?=ebang&hl=ko HTTP/1.1
HOST: www.google.com

 

  1. → 조회는 GET을 사용하고, 필터나 정렬까지 할 땐 쿼리 파라미터까지 이용한다.
     

3. HTML Form 데이터 전송
    이 방식은 GET, POST만 사용할 수 있다.

1. POST

<form action="/save" method="post">
	<input type="text" name="username" />
	<input type="text" name="age" />
	<botton type="submit">전송</button>
</form>
POST /save HTTP/1.1
Host:localhost:8080
Content-Type:application/x-www-form-urlencoded

username=mickymouse&age=30

Content-Type:application/x-www-form-urlencoded
→ 메시지 바디를 활용한다. 내용에서는 쿼리파라미터와 유사하게 &으로 묶인 key=value형태로 작성되어있다.

 

2. GET

GET /members?username=mickeymousem&age=30 HTTP/1.1
Host:localhost:8080

GET도 쿼리 파라미터를 이용해서 HTML form 을 이용할 수 있다.

<form action="/save" method="post" enctype="multipart/form-data>
	<input type="text" name="username" />
	<input type="text" name="age" />
	<input type="file name="file1" />
	<botton type="submit">전송</button>
</form>
POST /save HTTP/1.1
Host:localhost:8080
Content-Type:application/x-www-form-urlencoded=---XXX

---XXX
Content-Disposition:form-data; name="username"

Mickymouse
---XXX
Content-Disposition:form-data; name="age"

30
---XXX
Content-Disposition:form-data; name="file"
Content=Type:image/png

---XX--

3. multipart/form-data

다른 종류의 파일과 폼의 내용을 함께 전송할 수 있다.

파일은 바이너리 파일 전송 시 많이 사용한다.

 

<form action="/save" method="post" enctype="multipart/form-data>
	<input type="text" name="username" />
	<input type="text" name="age" />
	<input type="file name="file1" />
	<botton type="submit">전송</button>
</form>
POST /save HTTP/1.1
Host:localhost:8080
Content-Type:application/x-www-form-urlencoded=---XXX

---XXX
Content-Disposition:form-data; name="username"

Mickymouse
---XXX
Content-Disposition:form-data; name="age"

30
---XXX
Content-Disposition:form-data; name="file"
Content=Type:image/png

---XX--

application/x-www-form-urlencoded=---XXX

=이후로 —-XXX 문자열: 이걸로 멀티 파트를 구분한다.
마지막에는’’도 붙여서 끝임을 알린다.

 

 

4. HTML API 데이터 전송

  • 서버에서 서버로 보내는 백엔드 시스템 통신이다.
  • 웹 클라이언트의 경우 HTML에서 Form 전송 대신 자바 스크립트를 통한 통신에 사용한다. (AJAX)
  • Content-Type : application/json을 주로 사용한다. 과거에는 XML도 사용했으나 요즘에는 거의 사용하지 않는다고 한다.

 

 

 

 

2. HTTP API 설계 예시

  1. HTTP API - 컬렉션
    컬렉션은 서버에서 리소스를 관리하는 리소스 디렉토리이다.
    POST 메소드로 리소스를 등록하려고 할 때 서버에서 리소스 URI를 지정한 뒤, 응답메시지에서 Location을 알려준다.

  2. HTTP API - STORE
    STORE 는 클라이언트에서 리소르를 관리하는 리소스 디렉토리이다. 
    PUT 메소드로 리소스를 등록할 때, 클라이언트가 직접 리소스 URI를 지정해서 메시지에 보낸다.

  3. HTML FORM 사용
    GET, POST만 사용해서 할 수 있다.
    제약이 있기 때문에 더 필요한 경우 control URI를 사용해서 한다.


  • document
    : 단일 개념(파일 하나, 객체 인스턴스, 데이터베이스 row)
    • ex) file/file1. members/100
  • collection
     서버가 관리하는 리소스 디렉터리
    서버가 리소스의 URI를 생성하고 관리한다.(POST 메서드 사용시 활용)
  • store
    클라이언트가 관리하는 리소스 디렉터리
    클라이언트가 리소스의 URI를 생성하고 관리한다.(PUT 메서드 사용시 활용)
  • controller, control URI
    문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
    동사를 직접 사용한다.
    ex) members/{id}/delete

설계 참고 사이트

https://restfulapi.net/resource-naming/