Search

HTTP

HTTP

HTTP(Hypertext Transfer Protocol)λŠ” μ›Ή μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 간에 데이터λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ 톡신 ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
HTTP(Hypertext Transfer Protocol)λŠ” μ›Ή μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 간에 데이터λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ 톡신 ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ή νŽ˜μ΄μ§€λ‚˜ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λ©΄, μ„œλ²„λŠ” 그에 λŒ€ν•œ 응닡을 μ œκ³΅ν•©λ‹ˆλ‹€. HTTPλŠ” 주둜 μ›Ή λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ κ°„μ˜ 톡신에 μ‚¬μš©λ˜λ©°, HTML λ¬Έμ„œ, 이미지, λ™μ˜μƒ λ“±μ˜ λ¦¬μ†ŒμŠ€λ₯Ό μ „μ†‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
HTTPλŠ” ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ λͺ¨λΈμ„ 기반으둜 λ™μž‘ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” HTTP μš”μ²­ λ©”μ‹œμ§€λ₯Ό 보내고, μ„œλ²„λŠ” 이λ₯Ό λ°›μ•„ μ²˜λ¦¬ν•œ ν›„ HTTP 응닡 λ©”μ‹œμ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€. μš”μ²­ λ©”μ‹œμ§€μ—λŠ” μš”μ²­ν•˜λŠ” λ¦¬μ†ŒμŠ€μ˜ 경둜, λ©”μ„œλ“œ(GET, POST, PUT λ“±), 헀더 정보 등이 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. 응닡 λ©”μ‹œμ§€μ—λŠ” μƒνƒœ μ½”λ“œ, 헀더 정보, μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ˜ λ‚΄μš© 등이 ν¬ν•¨λ©λ‹ˆλ‹€.
HTTPλŠ” μƒνƒœλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠλŠ”(stateless) ν”„λ‘œν† μ½œμ΄κΈ° λ•Œλ¬Έμ—, 각각의 μš”μ²­μ€ λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. μ΄λŠ” μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό κΈ°μ–΅ν•˜μ§€ μ•Šκ³ , ν΄λΌμ΄μ–ΈνŠΈμ™€μ˜ 톡신이 각각의 μš”μ²­μ— λŒ€ν•΄ μƒˆλ‘­κ²Œ 이루어짐을 μ˜λ―Έν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈκ°€ 인증 정보λ₯Ό μ œκ³΅ν•΄μ•Ό ν•  경우, 맀번 인증 정보λ₯Ό ν•¨κ»˜ 전솑해야 ν•©λ‹ˆλ‹€.
HTTPλŠ” λ³΄μ•ˆμ„ μœ„ν•΄ HTTPS(Hypertext Transfer Protocol Secure)둜 ν™•μž₯될 수 μžˆμŠ΅λ‹ˆλ‹€. HTTPSλŠ” SSL(Secure Socket Layer) λ˜λŠ” TLS(Transport Layer Security)λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ•”ν˜Έν™”ν•˜κ³ , μ•ˆμ „ν•œ 톡신을 μ œκ³΅ν•©λ‹ˆλ‹€.

Overview

β€’
HTTP λ©”μ‹œμ§€
β€’
μš”μ²­ λ©”μ‹œμ§€
β—¦
μš”μ²­ λ©”μ†Œλ“œ
β—¦
μš”μ²­ 헀더
β€’
응닡 λ©”μ‹œμ§€
β—¦
μƒνƒœμ½”λ“œ
β—¦
응닡 헀더
β€’
데이터 ν˜•μ‹
β—¦
JSON
β—¦
XML
β€’
HTTP μš”μ²­ λ©”μ‹œμ§€μ™€ μžλ°” μ›Ήκ°œλ°œ
β€’
Spring Boot μ—μ„œ HTTP μš”μ²­ 보내기
β€’
RestTemplate, WebClient 을 μ΄μš©ν•œ HTTP μš”μ²­ μ‹€μŠ΅

HTTP λ©”μ‹œμ§€

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 μ „μ†‘λ˜λŠ” 데이터
μš”μ²­κ³Ό μ‘λ‹΅μ˜ ν˜•νƒœλ₯Ό 가지며 μ‹œμž‘ 쀄(start line), 헀더(header) 및 선택적인 λ³Έλ¬Έ(body)으둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μš”μ²­ λ©”μ‹œμ§€

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ „μ†‘λ˜λŠ” 데이터
HTTP μš”μ²­ λ©”μ‹œμ§€λŠ” 일반적으둜 ν…μŠ€νŠΈ 기반의 λ¬Έμžμ—΄λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.

μš”μ²­ λ©”μ‹œμ§€ ꡬ성

1.
HTTP λ©”μ†Œλ“œ (HTTP Method) : μš”μ²­μ˜ λͺ©μ μ„ λ‚˜νƒ€λ‚΄λŠ” λ©”μ†Œλ“œ. κ°€μž₯ 일반적인 λ©”μ†Œλ“œλŠ” GET, POST, PUT, DELETE, PATCH 등이 μžˆμŠ΅λ‹ˆλ‹€. 각각의 λ©”μ†Œλ“œλŠ” μ„œλ²„μ— μˆ˜ν–‰ν•  μž‘μ—…μ„ μ§€μ •ν•©λ‹ˆλ‹€.
2.
URL (Uniform Resource Locator) : μš”μ²­ λŒ€μƒμ˜ μ£Όμ†Œ. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—μ„œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ” 곳의 μ£Όμ†Œλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
3.
헀더 (Headers) : μΆ”κ°€ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” λΆ€λΆ„. 이 μ •λ³΄λŠ” ν΄λΌμ΄μ–ΈνŠΈ 및 μ„œλ²„ κ°„ 톡신을 μ œμ–΄ν•˜κ³  κ΅¬μ„±ν•©λ‹ˆλ‹€. Content-Type, Accept, Authorization 등이 ν”ν•œ 헀더 κ°’λ“€μž…λ‹ˆλ‹€.
4.
λ³Έλ¬Έ (Body) : POST, PUT, PATCH와 같은 λ©”μ†Œλ“œμ—μ„œ μ „λ‹¬λ˜λŠ” 데이터. μ΄λŠ” μš”μ²­ λ©”μ‹œμ§€μ˜ μ‹€μ œ 데이터λ₯Ό ν¬ν•¨ν•˜λ©°, 예λ₯Ό λ“€μ–΄ HTML 양식 데이터, JSON, XML λ˜λŠ” 파일과 같은 ν˜•μ‹μœΌλ‘œ 전솑될 수 μžˆμŠ΅λ‹ˆλ‹€.

μš”μ²­ λ©”μ‹œμ§€ μ˜ˆμ‹œ

GET /path/to/resource HTTP/1.1 Host: www.example.com Content-Type: application/json { "name": "aloha", "age": 20 }
VB.Net
볡사
Start Line κ³Ό Headers 사이, 그리고 Headers 와 Body 사이에 곡백 쀄이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

μš”μ²­ λ©”μ†Œλ“œ

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μˆ˜ν–‰ν•˜κΈΈ μ›ν•˜λŠ” λ™μž‘μ„ μ§€μ •ν•˜λŠ” HTTP ν”„λ‘œν† μ½œμ˜ λͺ…λ Ή
μžμ›μ„ μš”μ²­ν•˜λŠ” 방식 같은 경둜둜 μš”μ²­ν•˜λ”λΌλ„, μš”μ²­ λ©”μ†Œλ“œκ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ μš”μ²­μœΌλ‘œ 인식

μš”μ²­ λ©”μ†Œλ“œ μ’…λ₯˜

HTTP λ©”μ†Œλ“œ
μ„€λͺ…
GET
μ„œλ²„λ‘œλΆ€ν„° μžμ›μ„ κ°€μ Έμ˜€κΈ°λ₯Ό μš”μ²­ν•˜λŠ” 방식
POST
μ„œλ²„μ— 데이터 μž…λ ₯을 μš”μ²­ν•˜λŠ” 방식
PUT
μ„œλ²„μ— 데이터 변경을 μš”μ²­ν•˜λŠ” 방식
DELETE
μ„œλ²„μ— 데이터 μ‚­μ œλ₯Ό μš”μ²­ν•˜λŠ” 방식
OPTIONS
ν•΄λ‹Ή URL둜 μ§€μ›ν•˜λŠ” μš”μ²­ λ©”μ†Œλ“œ μ’…λ₯˜λ₯Ό ν™•μΈν•˜λŠ” 방식
HEAD
λ©”μ‹œμ§€μ˜ 헀더λ₯Ό μš”μ²­ν•˜λŠ” 방식 (응닡 λ©”μ‹œμ§€μ— bodyκ°€ μ—†μŒ)
TRACE
경둜 쑰사λ₯Ό μš”μ²­ν•˜λŠ” 방식

μš”μ²­ 헀더

ν΄λΌμ΄μ–ΈνŠΈκ°€ HTTP λ©”μ‹œμ§€μ— ν¬ν•¨μ‹œν‚€λŠ” 뢀가적인 정보

μ£Όμš” μš”μ²­ 헀더

HTTP 헀더
μ„€λͺ…
Content-Type
μš”μ²­ λ˜λŠ” 응닡 λ°”λ””μ˜ 데이터 ν˜•μ‹μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Accept
ν΄λΌμ΄μ–ΈνŠΈκ°€ 받아듀일 수 μžˆλŠ” μ‘λ‹΅μ˜ λ―Έλ””μ–΄ νƒ€μž…μ„ μ§€μ •ν•©λ‹ˆλ‹€.
Authorization
ν΄λΌμ΄μ–ΈνŠΈ 인증 정보λ₯Ό μ„œλ²„μ— μ œκ³΅ν•©λ‹ˆλ‹€.
User-Agent
μš”μ²­μ„ λ³΄λ‚΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 정보λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
Cookie
ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ μ „λ‹¬λ˜λŠ” μΏ ν‚€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Host
μš”μ²­μ„ λ°›λŠ” μ„œλ²„μ˜ 호슀트λͺ…κ³Ό 포트번호λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Referer
ν˜„μž¬ μš”μ²­λœ μžμ›μ„ μ°Έμ‘°ν•œ URL을 μ œκ³΅ν•©λ‹ˆλ‹€.
Cache-Control
μΊμ‹œ λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ μ§€μ‹œμ‚¬ν•­μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.

응닡 λ©”μ‹œμ§€

μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ „μ†‘λ˜λŠ” 데이터
HTTP 응닡 λ©”μ‹œμ§€λ„ 일반적으둜 ν…μŠ€νŠΈ 기반의 λ¬Έμžμ—΄λ‘œ ν‘œν˜„λ©λ‹ˆλ‹€.

응닡 λ©”μ‹œμ§€ ꡬ성

1.
Start Line (μ‹œμž‘ 쀄) : HTTP μ‘λ‹΅μ˜ μƒνƒœ μ½”λ“œμ™€ μƒνƒœ ν…μŠ€νŠΈκ°€ ν¬ν•¨λ©λ‹ˆλ‹€. μƒνƒœ μ½”λ“œλŠ” μš”μ²­μ˜ 성곡 λ˜λŠ” μ‹€νŒ¨λ₯Ό κ°€λ¦¬ν‚€λŠ” 숫자 μ½”λ“œμž…λ‹ˆλ‹€.
2.
헀더 (Headers) : μΆ”κ°€ 정보λ₯Ό ν¬ν•¨ν•˜λŠ” λΆ€λΆ„. ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신을 μ œμ–΄ν•˜κ³  κ΅¬μ„±ν•©λ‹ˆλ‹€. Date, Content-Type, Server 등이 ν”ν•œ 헀더 κ°’λ“€μž…λ‹ˆλ‹€.
3.
λ°”λ”” (Body) : μš”μ²­μ— λŒ€ν•œ μ‹€μ œ 응닡 데이터. HTML νŽ˜μ΄μ§€, JSON, XML, 이미지 λ“± λ‹€μ–‘ν•œ ν˜•μ‹μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

응닡 λ©”μ‹œμ§€ μ˜ˆμ‹œ

HTTP/1.1 200 OK Date: Sat, 29 Oct 2023 12:00:00 GMT Content-Type: application/json { "message": "Response received successfully" }
VB.Net
볡사
Start Line κ³Ό Headers 사이, 그리고 Headers 와 Body 사이에 곡백 쀄이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

μƒνƒœμ½”λ“œ

응닡 λ©”μ‹œμ§€μ— λ‹΄κΈ°λŠ”, HTTP μš”μ²­μ˜ 성곡, μ‹€νŒ¨ λ˜λŠ” 처리 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ„Έ 자리 숫자
HTTP μƒνƒœ μ½”λ“œ
μ„€λͺ…
200 (OK)
μš”μ²­μ΄ μ„±κ³΅ν–ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
201 (Created)
μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ μƒμ„±λ˜μ—ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
400 (Bad Request)
μš”μ²­μ΄ 잘λͺ»λ˜μ—ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
401 (Unauthorized)
μΈμ¦λ˜μ§€ μ•Šμ•˜μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
403 (Forbidden)
접근이 κΈˆμ§€λ˜μ—ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
404 (Not Found)
μš”μ²­ν•œ λ¦¬μ†ŒμŠ€κ°€ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
500 (Internal Server Error)
μ„œλ²„μ—μ„œ 였λ₯˜κ°€ λ°œμƒν–ˆμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
503 (Service Unavailable)
μ„œλ²„κ°€ μΌμ‹œμ μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜μ§€ λͺ»ν•¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

응닡 헀더

μ„œλ²„κ°€ HTTP λ©”μ‹œμ§€μ— ν¬ν•¨μ‹œν‚€λŠ” 뢀가적인 정보
HTTP 응닡 헀더
μ„€λͺ…
Content-Type
응닡 λ°”λ””μ˜ 데이터 ν˜•μ‹μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Content-Length
응닡 λ°”λ””μ˜ 길이λ₯Ό λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Server
μ„œλ²„μ— λŒ€ν•œ 정보λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Date
응닡이 λ§Œλ“€μ–΄μ§„ λ‚ μ§œμ™€ μ‹œκ°„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Set-Cookie
ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μΏ ν‚€λ₯Ό μ„€μ •ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
Cache-Control
μΊμ‹œ λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ μ§€μ‹œμ‚¬ν•­μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
Expires
λ¦¬μ†ŒμŠ€μ˜ λ§Œλ£ŒμΌμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
Last-Modified
λ¦¬μ†ŒμŠ€μ˜ λ§ˆμ§€λ§‰ μˆ˜μ •μΌμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

데이터 ν˜•μ‹

JSON (JavaScript Object Notation)

JSON은 μžλ°”μŠ€ν¬λ¦½νŠΈ 객체 ν‘œκΈ°λ²•μœΌλ‘œ ν”νžˆ μ‚¬μš©λ˜λŠ” 데이터 ν˜•μ‹μž…λ‹ˆλ‹€. 가독성이 μ’‹κ³ , 데이터 ꡬ쑰λ₯Ό λ‚˜νƒ€λ‚΄κΈ° 쉽고, λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ²”μš© ν˜•μ‹μž…λ‹ˆλ‹€. JSON은 ν‚€-κ°’ 쌍으둜 이루어진 객체와 배열을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.
μ˜ˆμ‹œ:
{ "name": "John", "age": 30, "city": "New York" }
JSON
볡사

XML (eXtensible Markup Language)

XML은 νŠΉμ • λͺ©μ μ— 맞게 νƒœκ·Έλ‘œ λ‘˜λŸ¬μ‹ΈμΈ 데이터λ₯Ό ν‘œν˜„ν•˜κΈ° μœ„ν•œ λ§ˆν¬μ—… μ–Έμ–΄μž…λ‹ˆλ‹€. 데이터λ₯Ό 계측 ꡬ쑰둜 ν‘œν˜„ν•  수 있으며, νƒœκ·ΈλŠ” μ‚¬μš©μžκ°€ μ •μ˜ν•  수 μžˆλŠ” μœ μ—°ν•œ ꡬ쑰λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€. XML은 μ›Ή μ„œλΉ„μŠ€ 톡신, 데이터 μ €μž₯ 및 κ΅ν™˜μ— 널리 μ‚¬μš©λ©λ‹ˆλ‹€.
μ˜ˆμ‹œ:
<person> <name>John</name> <age>30</age> <city>New York</city> </person>
XML
볡사