안녕하세요 http를 다루는 2번째 시간입니다. 저번 시간에 간략하게 http 전반과 역할에 대해 알아봤는데요. 빠르게 복습 후에 구체적으로 http는 어떤 문서를 통해 소통하는지 알아보겠습니다.

1. 통신과 http

앞선 시간에 다뤘듯이 http는 컴퓨터가 서로 소통하는 언어입니다. HTTP는 HyperText Transfer Protocol의 약자로 쉽게 말하면 문서가 서로 링크로 연결된 방식의 소통을 하는 약속이죠.

2. http의 두 가지 특징

  • request와 response : http는 인간과 마찬가지로 요청과 응답이라는 형태로 대화합니다. 컴퓨터의 대화이긴 하지만 개발 단계에서 사람의 대화 구조를 차용한 것이죠.
  • stateless : 상태가 없다는 뜻으로 개별 통신이 독립적인 http의 특징입니다. stateless의 가장 두드러지는 부분은 통신의 결과를 보존하지 않는다는 것입니다. 때문에 매번 요청시 새로 모든 것을 요청하는 것이 원칙입니다. 이로 인해 정보를 저장해야 하지 않기 때문에 서버 디자인은 간결해지지만 요청자 입장에선 불편합니다. 이런 불편을 해소하기 위해 입력의 반복이 번거로운 요소는 ‘토큰’이라는 이름으로 저장해 해소하기도 합니다.

3. Request와 Response

요청과 응답을 조금 더 자세히 알아보도록 하겠습니다.

요청 메시지의 구조
  • Start Line: 요청의 첫번째 줄에 해당한다. 이 시작 줄도 세 부분(Method, Request target, HTTP version)으로 구성되어있다.

  • Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.

  • Body: 해당 요청의 실제 내용. 주로 Body를 사용하는 메소드는 POST다.

response 메시지 구조
  • Status Line: 응답의 상태 줄이다. 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다. 마치, 편지의 응답에 “응. 잘 지냈어” 라고 안부 인사를 건네는 것과 같다. 응답의 Status Line 도 세 부분으로 구성된다.

  • Headers: 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분이다. 다만, 응답에서만 사용되는 헤더의 정보들이 있다. (ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)

  • Body: 요청의 Body와 일반적으로 동일하다. 요청의 메소드에 따라 Body가 항상 존재하지 않듯이. 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다. 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.

4. HTTP Request Methods

개발을 진행하다보면 request method를 자주 사용할 수밖에 없습니다. 가장 중요한 3가지 메소드를 예시와 함께 살펴보겠습니다.

Get : 데이터를 서버에서 받아오는데 사용하는 메서드 이다.

GET /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm"
}

위와 같은 형태로 서버에 데이터를 요청하면

Get에 대한 답변

HTTP/1.1 200 SUCCESS
Body: {
	"message": "SUCCESS"
	"carts": [
		{
			"productId": 10
			"name": "Pro Display XDR - Nano-texture 글래스"
			"price": "₩7,899,000"
			"quantity": 1
		},
		{
			"productId": 20
			"name": "Mac Pro"
			"price": "₩73,376,000"
			"quantity": 2
		}
	]
}

이러한 형식으로 답변을 받습니다.

Post : 데이터를 생성, 수정 할 때 주로 사용하는 메서드
POST /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm"
}
Body: {
	product: {
		"productId": 30
		"name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
		"color": "스페이스 그레이"
		"price": "₩1,499,000"
		"quantity": 1
	}
}

(응답)
HTTP/1.1 201 SUCCESS
Body: {
	"message": "SUCCESSFULLY CARTS UPDATED"
}

데이터를 수정하는 방식도 마찬가지 입니다. 이번에는 요청과 응답을 한번에 보여드리겠습니다. 요청 형식은 앞서 설명드렸듯이 startline, header, body로 구성됩니다.

Delete : 특정 데이터를 서버에서 삭제요청
DELETE /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
}
Body: {
	productId: 30
}

(응답)
HTTP/1.1 201 SUCCESS
Body: {
	"message": "productId 30 DELETED"
}

브라우저에 따라 delete를 받아들이는 방식이 다른데요. 크롬의 경우 body를 날려버리기 때문에 delete를 사용할 때는 body를 비워두는게 좋습니다.

5. Status Code

Status Code는 http에서 가장 우리가 익숙하게 볼 만한 요소죠. 쉽게 요약하면 200대는 요청과 응답 성공, 400대는 요청 실패, 500대는 응답 실패(서버 문제)라고 보시면 됩니다. 200,201, 400, 401 등등 뒤에 붙는 숫자에 따라서 세부적인 문제 등을 전달하지만 큰 틀에서는 모두 앞선 설명의 방식을 따릅니다.

Tags:

Categories:

Updated: