HTTP (HyperText Transfer Protocol)

ν•œμ„œμ—°Β·2022λ…„ 2μ›” 25일
0
post-thumbnail

πŸ’»HTTPλŠ” μ›Ή μ„œλΉ„μŠ€ 개발자라면 λ‹Ήμ—°νžˆ μ•Œκ³  μžˆμ–΄μ•Ό ν•  핡심 ν”„λ‘œν† μ½œμ΄λ‹€. HTTP톡신은 μ–΄λ–»κ²Œ κ΅¬μ„±λ˜κ³  μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λŠ”μ§€, κ·Έ νŠΉμ§•κ³Ό κ°œλ…μ— λŒ€ν•œ 정리λ₯Ό ν•΄λ³΄μž.



HTTPλž€?

HTTP(HyperText Transfer Protocol)λŠ” 컴퓨터듀 μ‚¬μ΄μ—μ„œ HTMLνŒŒμΌμ„ 주고받을 수 μžˆλ„λ‘ ν•˜λŠ” μ†Œν†΅λ°©μ‹ λ˜λŠ” 약속이닀.

HTTP의 μ•½μžλ₯Ό ν•˜λ‚˜ν•˜λ‚˜ μ‚΄νŽ΄λ³΄μž.

  • HyperText
    : 일반 ν…μŠ€νŠΈμ™€ λ‹€λ₯΄κ²Œ λ¬Έμž₯μ΄λ‚˜ 단어 등이 링트λ₯Ό 톡해 μ„œλ‘œ μ—°κ²°λœ λ„€νŠΈμ›Œν¬μ²˜λŸΌ ꡬ성 된 λ¬Έμ„œμ΄λ‹€.

  • Transfer
    : μ „μ†‘μ΄λΌλŠ” 의미λ₯Ό 가지고 있으며, λ³΄λ‚΄λŠ” μ£Όν…Œμ™€ λ°›λŠ” 주체가 μžˆλ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆλ‹€.

  • Protocal
    : ν˜‘μ•½, ν†΅μ‹ κ·œμ•½μ΄λΌλŠ” 의미λ₯Ό 가지고 있으며, 물리적으둜 λ–¨μ–΄μ ΈμžˆλŠ” 컴퓨터끼리 μ–΄λ– ν•œ λ°©μ‹μœΌλ‘œ HTML파일(HyperText)을 μ£Όκ³  받을지에 λŒ€ν•œ 약속이닀.



1. HTTP의 μ£Όμš” νŠΉμ§•

HTTPλŠ” 컴퓨터듀 μ‚¬μ΄μ—μ„œ 정해진 약속이라고 ν•œλ‹€. 약속을 ν•˜λŠ”λ°μ—λŠ” 항상 μ–΄λ– ν•œ 쑰항듀이 λ”°λ₯΄κΈ° 마련인데, HTTPμ—λŠ” μ–΄λ– ν•œ μ‘°ν•­λ“€λ‘œ 이루어져 μžˆλŠ”μ§€ μ•Œμ•„λ³΄μž.

Request / Response

μ†Œν†΅μ˜ ν•΅μ‹¬μ—λŠ” μš”μ²­(Request)κ³Ό 응닡(Response)이 μžˆλ‹€.

HTTPν†΅μ‹ μ˜ 핡심은 μš”μ²­κ³Ό 응닡이라고 말할 수 μžˆλ‹€.
문자둜 예λ₯Ό 듀어보면 λ°œμ‹ μž(λ³΄λ‚΄λŠ” 주체)와 μˆ˜μ‹ μž(λ°›λŠ” 주체)κ°€ λͺ…ν™•ν•΄μ•Ό μ„œλ‘œ μ†Œν†΅μ΄ 잘 이루어진닀. 만일 λ‚΄κ°€ bλΌλŠ” μˆ˜μ‹ μžμ—κ²Œ μ—°λ½ν•΄μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μΌμ„ cλΌλŠ” μˆ˜μ‹ μžμ—κ²Œ μ—°λ½ν•˜λ©΄ μ›ν™œν•œ μ†Œν†΅μ΄ λ˜κ² λŠ”κ°€? 아닐것이닀.

컴퓨터 μ‚¬μ΄μ˜ μ†Œν†΅λ„ λ§ˆμ°¬κ°€μ§€λ‘œ μš”μ²­κ³Ό 응닡이 λͺ…ν™•ν•΄μ•Όν•œλ‹€.
λž©νƒ‘μ„ μ—°λ‹€ -> μœ νˆ¬λΈŒμ— μ ‘μ†ν•œλ‹€ -> λ‚΄κ°€ ν‰μ†Œ 즐겨보던 유투브 μ˜μƒμ˜ 링트λ₯Ό λˆ„λ₯Έλ‹€.
이 μˆœκ°„ λ‚˜μ˜ λž©νƒ‘μ€ κ΅¬κΈ€μ˜ μ„œλ²„μ—κ²Œ μš”μ²­μ„ 보낸닀. "강아지 μ˜μƒ μ£Όμ„Έμš”" κ΅¬κΈ€μ˜ μ„œλ²„λŠ” 이 μš”μ²­μ„ μ²˜λ¦¬ν•œ λ’€ λ‹€μ‹œ μš”μ²­μ„ 보낸 λ‚˜μ˜ λž©νƒ‘μ— 응닡을 보낸닀. "κ·€μ—¬μš΄ 강아지 μ˜μƒ λ“œλ¦½λ‹ˆλ‹€".

이처럼 HTTPλŠ” μš°λ¦¬μ—κ²Œ μΉœμˆ™ν•œ μ†Œν†΅λ°©μ‹μ„ μ»΄ν“¨ν„°μ˜ μ†Œν†΅λ°©μ‹μ—λ„ μ μš©ν•œ κ²ƒμœΌλ‘œ μ–΄λ ΅κ²Œ 생각할 ν•„μš”κ°€ 없을 λ“― ν•˜λ‹€.


Stateless

State(μƒνƒœ)κ°€ less(μ—†μŒ)μ΄λΌλŠ” μ˜λ―Έν•˜λ©°, μ§μ—­ν•˜μ—¬ μƒνƒœκ°€ μ—†λ‹€λŠ” λœ»μ΄λ‹€.

HTTP의 νŠΉμ§• 쀑 μ ˆλŒ€ μžŠμ–΄μ„œλŠ” μ•ˆλ˜λŠ” μ€‘μš”ν•œ νŠΉμ§•μ΄λ‹€.
독립적인 성격을 가지고 μžˆλŠ” HTTPλŠ” 과거에 ν–ˆλ˜ 톡신, 즉 과거에 ν–ˆλ˜ μš”μ²­κ³Ό 응닡에 λŒ€ν•œ λ‚΄μš©μ„ μ „ν˜€ κΈ°μ–΅ν•˜μ§€ λͺ»ν•œλ‹€.
즉, μ΄μ „μ˜ μƒνƒœμ— λŒ€ν•œ 기얡이 μ—†κΈ°λ•Œλ¬Έμ— 맀 ν†΅μ‹ λ§ˆλ‹€ ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό λ‹΄μ•„ μš”μ²­μ„ 보내야 ν•œλ‹€.

κ°œλ°œμ„ ν•˜λ©° 둜그인 토큰 λ˜λŠ” λΈŒλΌμš°μ €μ˜ μΏ ν‚€, μ„Έμ…˜, λ‘œμ»¬μŠ€ν† λ¦¬μ§€ 같은 κΈ°μˆ λ“€μ„ λ“€μ–΄ λ³Έ 적이 μžˆμ„ν…λ°, 이것듀은 μ—¬λŸ¬λ²ˆμ˜ ν†΅μ‹ μ˜ μ§„ν–‰κ³Όμ •μ—μ„œ μ—°μ†λœ 데이터 μ²˜λ¦¬κ°€ ν•„μš”ν•œ 경우(온라인 μ‡Όν•‘λͺ°μ—μ„œ 둜그인 ν›„ μž₯λ°”κ΅¬λ‹ˆ κΈ°λŠ₯ λ“±)λ₯Ό μœ„ν•΄ ν•„μš”μ— μ˜ν•΄ λ§Œλ“€μ–΄μ§„ κΈ°μˆ μ΄λ‹€.



2. HTTP Request Methods

HTTPμ—λŠ” 자주 μ‚¬μš©λ˜λŠ” 세가지 λ©”μ†Œλ“œκ°€ μžˆλ‹€. 각각의 λ©”μ†Œλ“œκ°€ μ§€λ‹Œ μ˜λ―Έμ™€ μ˜λ„λ₯Ό ν”„λ‘ νŠΈμ—”λ“œμ˜ μž…μž₯μ—μ„œ ν•œ 번 μ •λ¦¬ν•΄λ³΄μ•˜λ‹€.

GET

νŠΉμ • 데이터λ₯Ό μ„œλ²„λ‘œ λΆ€ν„° λ°›μ•„(GET)올 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

κ°€μž₯ κ°„λ‹¨ν•˜κ³  많이 μ‚¬μš©λ˜λŠ” HTTPλ©”μ†Œλ“œλ‘œ, 데이터λ₯Ό λ°›μ•„μ˜€κΈ°λ§Œ ν•  λ•Œ μ‚¬μš©λœλ‹€.

ex) μž₯λ°”κ΅¬λ‹ˆμ— λ‹΄κΈ΄ μ œν’ˆ μ‘°νšŒν•˜κΈ°

(μΆ•μ•½λœ μš”μ²­ 메세지)
GET /shop/bag HTTP/1.1
Headers: {
	"HOST": "https://www.apple.com/kr"
	"Authroization": "kldiduajsadm@9df0asmzm" 
    //μœ μ €κ°€ λ³ΈμΈμž„μ„ 증λͺ…ν•  수 μžˆλŠ” 인증/인가 토큰
}

(μΆ•μ•½λœ 응닡 λ©”μ‹œμ§€)
HTTP/1.1 200 SUCCESS
Body: {
	"message": "SUCCESS"
	"carts": [
		{
			"productId": 10
			"name": "Pro Display XDR - Nano-texture κΈ€λž˜μŠ€"
			"price": "β‚©7,998,000"
			"quantity": 2
		},
		{
			"productId": 20
			"name": "Mac Pro"
			"price": "β‚©79,465,000"
			"quantity": 1
		}	
	]
}

POST

데이터λ₯Ό 생성, λ˜λŠ” μˆ˜μ •ν•  λ•Œ 주둜 μ‚¬μš©λ˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

데이터λ₯Ό 생성 및 μˆ˜μ •ν•  λ•Œ 많이 μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— λŒ€λΆ€λΆ„μ˜ 경우 μš”μ²­μ— bodyκ°€ ν¬ν•¨λ˜μ„œ 보내진닀.

ex) λ§ˆμŒμ— λ“œλŠ” μƒν’ˆμ„ μž₯λ°”κ΅¬λ‹ˆμ— λ‹΄κΈ°

(μΆ•μ•½λœ μš”μ²­ 메세지)
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,299,000"
		"quantity": 1
	}
}

(μΆ•μ•½λœ 응닡 λ©”μ‹œμ§€)
HTTP/1.1 201 SUCCESS
Body: {
	"message": "SUCCESSFULLY CARTS UPDATED"
}

DELETE

μ„œλ²„μ— νŠΉμ • 데이터λ₯Ό μ‚­μ œ μš”μ²­ 보낼 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

ex) μž₯λ°”κ΅¬λ‹ˆμ—μ„œ μ œν’ˆμ„ μ‚­μ œν•œλ‹€

(μΆ•μ•½λœ μš”μ²­ 메세지)
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"
}



3. HTTP Status Code

μ‹€μ œ ν”„λ‘œμ νŠΈλ₯Ό 진행할 λ•Œ κ°€μž₯ 많이 보게 될 μ‘λ‹΅μ˜ μƒνƒœ μ½”λ“œλ“€μ„ 정리해 λ³΄μ•˜λ‹€. Status Code의 μˆ«μžμ—λŠ” 각각의 μ˜λ―Έκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ„œ 이 숫자만 보아도 응닡이 μ œλŒ€λ‘œ λλŠ”μ§€ μ•ˆλλŠ”μ§€λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€.


  • 200: OK
    κ°€μž₯ 자주 λ³΄κ²Œλ˜λŠ” Status Code
    λ¬Έμ œμ—†μ΄ μš”μ²­μ— λŒ€ν•œ μ²˜λ¦¬κ°€ λ°±μ—”λ“œ μ„œλ²„μ—μ„œ 이루어지고 λ‚˜μ„œ μ˜€λŠ” μ‘λ‹΅μ½”λ“œμ΄λ‹€.

  • 201: Created
    무언가가 잘 μƒμ„±λ˜μ—ˆμ„ λ•Œμ— μ˜€λŠ” Status Code
    λŒ€κ²Œ POST λ©”μ†Œλ“œμ˜ μš”μ²­μ— 따라 λ°±μ—”λ“œ μ„œλ²„μ— 데이터가 잘 생성 λ˜λŠ” μˆ˜μ • λ˜μ—ˆμ„ λ•Œμ— λ³΄λ‚΄λŠ” μ½”λ“œμ΄λ‹€.

  • 400: Bad Request
    ν•΄λ‹Ή μš”μ²­μ΄ 잘λͺ»λ˜μ—ˆμ„ λ•Œ λ³΄λ‚΄λŠ” Status Code
    주둜 μš”μ²­μ˜ Body에 λ³΄λ‚΄λŠ” λ‚΄μš©μ΄ 잘λͺ»λ˜μ—ˆμ„ λ•Œ μ‚¬μš©λ˜λŠ” μ½”λ“œμ΄λ‹€.

  • 401: Unauthorized
    μœ μ €κ°€ ν•΄λ‹Ή μš”μ²­μ„ μ§„ν–‰ν•˜λ €λ©΄ λ¨Όμ € λ‘œκ·ΈμΈμ„ ν•˜κ±°λ‚˜ νšŒμ›κ°€μž…μ΄ ν•„μš”ν•˜λ‹€λŠ” 의미의 Status Code
  • 403: Forbidden
    μ ‘κ·Ό λΆˆκ°€λŠ₯ν•œ 정보에 μ ‘κ·Όν–ˆμ„ 경우의 Status Code
    μœ μ €κ°€ ν•΄λ‹Ή μš”μ²­μ— λŒ€ν•œ κΆŒν•œμ΄ μ—†λ‹€λŠ” λœ»μ΄λ‹€.

  • 404: Not Found
    μš”μ²­λœ URI κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 의미

  • 500: Internal Server Error
    μ„œλ²„μ—μ„œ μ—λŸ¬κ°€ 났을 λ•Œμ˜ Status Code
    API κ°œλ°œμ„ ν•˜λŠ” λ°±μ—”λ“œ κ°œλ°œμžλ“€μ΄ μ‹«μ–΄ν•˜λŠ” μ½”λ“œμ΄λ‹€.
    (ν”„λ‘ νŠΈλŠ” λ‚΄ 잘λͺ» μ•„λ‹ˆλΌλŠ” 것을 증λͺ…ν•˜λŠ” μ½”λ“œ)πŸ€·β€β™‚οΈ

0개의 λŒ“κΈ€