Posts πŸ’» 01. HTTP κ°œμš”
Post
Cancel

πŸ’» 01. HTTP κ°œμš”

HTTP κ°œμš”

λ„€νŠΈμ›Œν¬λ₯Ό κ³΅λΆ€ν•˜κΈ° μœ„ν•΄ developer.mozilla.org의 HTTP Overview λ¬Έμ„œλ₯Ό μš”μ•½ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

HTTPλž€?

HTTP(HyperText Transfer Protocol)은 www μƒμ—μ„œ 정보λ₯Ό μ£Όκ³  받을 수 μžˆλŠ” ν”„λ‘œν† μ½œμœΌλ‘œ μ›Ήμ—μ„œ μ΄λ£¨μ–΄μ§€λŠ” λͺ¨λ“  데이터 κ΅ν™˜μ˜ 기초라 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³„μΈ΅μ˜ ν™•μž₯ κ°€λŠ₯ν•œ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

ν”„λ‘œν† μ½œ

톡신 ν”„λ‘œν† μ½œ(κ·œμ•½, Protocal)μ΄λž€ 데이터λ₯Ό μ£Όκ³  λ°›λŠ”(톡신) μƒν˜Έ 간에 이 과정을 μ›ν™œν•˜κ²Œ ν•˜λ„λ‘ ν•΄μ£ΌλŠ” 미리 μ•½μ†λœ κ·œμΉ™μ„ λ§ν•©λ‹ˆλ‹€. μ‚¬λžŒκ³Ό μ‚¬λžŒμ΄ 톡신할 λ•Œ μ„œλ‘œ 이해할 수 μžˆλŠ” μ–Έμ–΄λ₯Ό μ‚¬μš©ν•΄μ•Ό λŒ€ν™”λ₯Ό ν•  수 μžˆλŠ” κ²ƒμ²˜λŸΌ, 컴퓨터와 컴퓨터 사이에도 톡신을 ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ‘œν† μ½œμ΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ 계측

nextwork layer

HTTPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³„μΈ΅μ˜ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. μΈν„°λ„·μ˜ λ³΅μž‘ν•¨κ³Ό κ±°λŒ€ν•œ ꡬ쑰둜 인해 λ„€νŠΈμ›Œν¬ μ„€κ³„μžλŠ” 인터넷을 κ³„μΈ΅ν™”ν•˜μ—¬ μ„€κ³„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ„€νŠΈμ›Œν¬ κ³„μΈ΅μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측은 μœ„μ™€ 같이 μ΅œμƒμœ„μ— μœ„μΉ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. HTTPλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측에 μœ„μΉ˜ν•˜κ³  있으며, TCPλ₯Ό 전솑 κ³„μΈ΅μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

HTTP 기반 μ‹œμŠ€ν…œμ˜ ꡬ성 μš”μ†Œ

HTTP 기반 μ‹œμŠ€ν…œμ˜ ꡬ성 μš”μ†ŒλŠ” 크게 ν΄λΌμ΄μ–ΈνŠΈ(μ‚¬μš©μž μ—μ΄μ „νŠΈ)와 μ›Ή μ„œλ²„, 그리고 κ·Έ μ€‘κ³„μž 역할을 ν•˜λŠ” ν”„λ‘μ‹œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈ: μ‚¬μš©μž μ—μ΄μ „νŠΈ

μ‚¬μš©μž μ—μ΄μ „νŠΈλŠ” μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ λ™μž‘ν•˜λŠ” λͺ¨λ“  도ꡬλ₯Ό λ§ν•˜κ³ , 주둜 λΈŒλΌμš°μ €μ— μ˜ν•΄ μˆ˜ν–‰λ©λ‹ˆλ‹€. λΈŒλΌμš°μ €λŠ” 항상 μš”μ²­μ„ λ³΄λ‚΄λŠ” 개체이고 μ„œλ²„κ°€ 될 수 μ—†μŠ΅λ‹ˆλ‹€. μ›Ή νŽ˜μ΄μ§€λ₯Ό ν‘œμ‹œν•˜κΈ° μœ„ν•΄μ„œ λΈŒλΌμš°μ €λŠ” HTML λ¬Έμ„œμ— λŒ€ν•œ μš”μ²­ν•˜κ³ , 슀크립트 및 λ ˆμ΄μ•„μ›ƒ 정보에 λŒ€ν•΄ 좔가적인 μš”μ²­μ„ν•˜κ³ , 받은 λ¦¬μ†ŒμŠ€λ₯Ό ν˜Όν•©ν•˜λŠ” 과정을 κ±°μΉ©λ‹ˆλ‹€. ν•˜μ΄νΌ ν…μŠ€νŠΈ λ¬Έμ„œμΈ μ›Ή νŽ˜μ΄μ§€λŠ” μƒˆλ‘œμš΄ μ›ΉνŽ˜μ΄μ§€λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•œ 링크λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”λ°, λΈŒλΌμš°μ €λŠ” HTTP μš”μ²­ λ‚΄μ—μ„œ μ΄λŸ¬ν•œ μ§€μ‹œ 사항을 λ³€ν™˜ν•˜κ³  응닡을 ν•΄μ„ν•΄μ„œ μ‚¬μš©μžμ—κ²Œ λͺ…ν™•ν•œ 응닡을 ν‘œμ‹œν•©λ‹ˆλ‹€.

μ›Ή μ„œλ²„

(λ…Όλ¦¬μ μœΌλ‘œ) 단일 기계인 μ„œλ²„λŠ” μœ„μ™€ 같은 μš”μ²­μ— λ¬Έμ„œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ—¬λŸ¬ 개의 μ„œλ²„λ₯Ό λ™μΌν•œ λ¨Έμ‹  μœ„μ— ν˜ΈμŠ€νŒ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν”„λ‘μ‹œ

ν”„λ‘μ‹œ

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ μ‚¬μ΄μ—μ„œ λ™μž‘ν•˜λŠ” λ¨Έμ‹ λ“€ 쀑 특히 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ³„μΈ΅μ—μ„œ λ™μž‘ν•˜λŠ” 것을 ν”„λ‘μ‹œλΌκ³  λΆ€λ¦…λ‹ˆλ‹€. ν”„λ‘μ‹œλŠ” 캐싱, 필터링, λ‘œλ“œ λ°ΈλŸ°μ‹±, 인증, λ‘œκΉ… λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.

HTTP 기초

HTTPλŠ” κ°„λ‹¨ν•©λ‹ˆλ‹€. HTTP λ©”μ‹œμ§€λ₯Ό ν”„λ ˆμž„λ³„λ‘œ μΊ‘μŠν™”ν•˜μ—¬ 간결함을 μœ μ§€ν•œ 덕뢄에 μ‚¬λžŒμ΄ 읽고 이해할 수 μžˆμ–΄ ν…ŒμŠ€νŠΈν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

HTTPλŠ” ν™•μž₯ κ°€λŠ₯ν•©λ‹ˆλ‹€. HTTP 헀더λ₯Ό 톡해 μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

HTTPλŠ” μƒνƒœκ°€ μ—†μŠ΅λ‹ˆλ‹€(Stateless). ν΄λΌμ΄μ–ΈνŠΈμ™€μ˜ 첫 번째 ν†΅μ‹ μ—μ„œ 데이터λ₯Ό μ£Όκ³  λ°›μ•˜λ‹€κ³  해도, 두 번째 ν†΅μ‹ μ—μ„œ 이전 데이터λ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ HTTPλŠ” μΏ ν‚€λ₯Ό 톡해 μƒνƒœκ°€ μžˆλŠ” μ„Έμ…˜μ„ λ§Œλ“€μ–΄ 톡신과 톡신 사이에 연속성을 λ§Œλ“€μ–΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

HTTP의 연결은 μ‹ λ’°ν•  수 μžˆλŠ” 전솑 ν”„λ‘œν† μ½œμΈ TCP에 κΈ°λ°˜ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ HTTPλ₯Ό μš”μ²­/μ‘λ‹΅μœΌλ‘œ κ΅ν™˜ν•˜κΈ° 전에 TCP 연결을 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. HTTP/1.0 λ•ŒλŠ” 각 μš”μ²­/응닡에 λŒ€ν•΄ λ³„λ„μ˜ TCP 연결을 μ—΄μ—ˆμŠ΅λ‹ˆλ‹€. HTTP/1.1은 νŒŒμ΄ν”„λΌμ΄λ‹κ³Ό 지속적인 μ—°κ²° κ°œλ…μ„ λ„μž…ν•΄ 이전 λ²„μ „μ˜ λΉ„νš¨μœ¨μ„±μ„ κ°œμ„ ν•˜κ³ μž ν–ˆμŠ΅λ‹ˆλ‹€. 이후 HTTP/2λŠ” 단일 μ—°κ²° μƒμ—μ„œ λ©”μ‹œμ§€λ₯Ό 닀쀑 전솑(multiplex)ν•˜μ—¬ 연결을 μ’€ 더 지속적이고 효율적으둜 μœ μ§€ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

νŒŒμ΄ν”„λΌμ΄λ‹ μ΄λž€?: λ™μ‹œμ— μ—¬λŸ¬ 개의 λͺ…λ Ήμ–΄λ₯Ό μ²˜λ¦¬ν•¨μœΌλ‘œμ¨ μ²˜λ¦¬λŸ‰μ„ μ˜¬λ¦¬λŠ” 기법이닀.

HTTP둜 μ œμ–΄ν•  수 μžˆλŠ” 것

μΊμ‹œ

HTTPλŠ” λ¬Έμ„œκ°€ μΊμ‹œλ˜λŠ” 방식을 μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„œλ²„λŠ” μΊμ‹œ λŒ€μƒκ³Ό 기간을 ν”„λ‘μ‹œμ™€ ν΄λΌμ΄μ–ΈνŠΈμ— μ§€μ‹œν•  수 있고, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ €μž₯된 λ¬Έμ„œλ₯Ό λ¬΄μ‹œν•˜λΌκ³  쀑간 μΊμ‹œ ν”„λ‘μ‹œμ— μ§€μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μΊμ‹œλž€? λ°μ΄ν„°λ‚˜ 값을 미리 볡사해 λ†“λŠ” μž„μ‹œ μ €μž₯μ†Œλ₯Ό 카리킨닀. μΊμ‹œμ— 데이터λ₯Ό 미리 볡사해 λ†“μœΌλ©΄ κ³„μ‚°μ΄λ‚˜ μ ‘κ·Ό μ‹œκ°„ 없이 λΉ λ₯Έ μ†λ„λ‘œ 데이터에 μ ‘κ·Όν•  수 μžˆλ‹€. μΊμ‹œλŠ” μ‹œμŠ€ν…œμ˜ νš¨μœ¨μ„±μ„ μœ„ν•΄ μ—¬λŸ¬ λΆ„μ•Όμ—μ„œ 두루 쓰이고 μžˆλ‹€. HTTPμ—μ„œ 캐싱은 보톡 GET μš”μ²­μ—μ„œ κ°€μ Έμ˜¨ λ¦¬μ†ŒμŠ€λ₯Ό μ €μž₯해두고 μž¬μ‚¬μš©ν•˜μ—¬ μ„±λŠ₯을 높인닀.

origin μ œμ•½μ‚¬ν•­ μ™„ν™”

λΈŒλΌμš°μ €λŠ” λ™μΌν•œ originμœΌλ‘œλΆ€ν„° 온 νŽ˜μ΄μ§€λ§Œμ΄ μ›Ή νŽ˜μ΄μ§€μ˜ 전체 정보에 μ ‘κ·Όν•  수 있게 ν•©λ‹ˆλ‹€(same-origin policy). κ·ΈλŸ¬λ‚˜ HTTP헀더λ₯Ό 톡해 μ΄λŸ¬ν•œ μ œμ•½μ‚¬ν•­μ„ μ™„ν™”ν•˜μ—¬ λ‹€λ₯Έ λ„λ©”μΈμœΌλ‘œλΆ€ν„° μ „λ‹¬λœ 정보λ₯Ό 짜 맞좜 수 μžˆμŠ΅λ‹ˆλ‹€.

μŠ€λˆ„ν•‘μ΄λž€? λ„€νŠΈμ›Œν¬ μƒμ˜ 정보λ₯Ό μ—Όλ‹΄ν•˜μ—¬ λΆˆλ²•μ μœΌλ‘œ μ–»λŠ” 것을 μ˜λ―Έν•œλ‹€. μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œκ·Έλž¨(μŠ€λˆ„νΌ)λ₯Ό ν†΅ν•΄μ„œ μ›κ²©μœΌλ‘œ λ‹€λ₯Έ μ»΄ν“¨ν„°μ˜ 정보λ₯Ό μ—Ώλ³Ό 수 μžˆμ–΄ 개인적인 λ©”μ‹ μ € λ‚΄μš©, 둜그인 정보, μ „μž 우편 λ“±μ˜ 정보λ₯Ό λͺ°λž˜ νšλ“ν•  수 μžˆλ‹€. λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ λΆ„μ„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜κΈ°λ„ ν•œλ‹€.

동일-좜처 μ •μ±…(same-origin policy) μ΄λž€? μ–΄λ–€ μΆœμ²˜μ—μ„œ 뢈러온 λ¬Έμ„œλ‚˜ μŠ€ν¬λ¦½νŠΈκ°€ λ‹€λ₯Έ μΆœμ²˜μ—μ„œ κ°€μ Έμ˜¨ λ¦¬μ†ŒμŠ€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” 것을 μ œν•œν•˜λŠ” λ³΄μ•ˆ 방식이닀.

인증

WWW-Authenticate ν˜Ήμ€ μœ μ‚¬ν•œ 헀더λ₯Ό μ‚¬μš©ν•΄ κΈ°λ³Έ 인증을 κ±°μΉ˜κ±°λ‚˜ μΏ ν‚€λ‘œ νŠΉμ • μ„Έμ…˜μ„ μ„€μ •ν•¨μœΌλ‘œμ¨ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ³΄ν˜Έν•˜μ—¬ νŠΉμ • μ‚¬μš©μžλ§Œμ΄ μ ‘κ·Όν•  수 있게 ν•©λ‹ˆλ‹€.

ν”„λ‘μ‹œμ™€ 터널링

μ„œλ²„ ν˜Ήμ€ ν΄λΌμ΄μ–ΈνŠΈλŠ” μΈνŠΈλΌλ„·μ— μœ„μΉ˜ν•˜μ—¬ μ‹€μ œ μ£Όμ†Œλ₯Ό μˆ¨κΈ°κΈ°λ„ ν•˜λŠ”λ°, μ΄λ•Œ HTTP μš”μ²­μ€ λ„€νŠΈμ›Œν¬ μž₯벽을 κ°€λ‘œμ§€λ₯΄κΈ° μœ„ν•΄ ν”„λ‘μ‹œλ₯Ό 톡해 λ‚˜κ°‘λ‹ˆλ‹€.

μ„Έμ…˜

HTTPλŠ” 기본적으둜 μƒνƒœκ°€ μ—†μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 데이터 μœ μ§€κ°€ ν•„μš”ν•œ κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. 정보가 μœ μ§€λ˜μž μ•ŠμœΌλ©΄ 맀번 νŽ˜μ΄μ§€λ₯Ό 이동할 λ•Œλ§ˆλ‹€ λ‘œκ·ΈμΈμ„ ν•΄μ•Ό ν•˜κ³ , μƒν’ˆμ„ μ„ νƒν•˜κ³ λ„ ꡬ맀 νŽ˜μ΄μ§€μ— μ„ νƒν•œ μƒν’ˆμ΄ 없을 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. HTTP μΏ ν‚€λŠ” μ„Έμ…˜μ„ λ§Œλ“€μ–΄ μ„œλ²„ μƒνƒœλ₯Ό μš”μ²­κ³Ό μ—°κ²°ν•˜λ„λ‘ ν•΄μ€˜ 이에 λŒ€μ²˜ν•©λ‹ˆλ‹€.

μΏ ν‚€λŠ” λΈŒλΌμš°μ €μ— μ €μž₯λ˜λŠ” μž‘μ€ 데이터 쑰각으둜 μž„μ‹œ 데이터 보관 ν˜Ήμ€ μ›Ή νŽ˜μ΄μ§€ κ°œμΈν™”μ— μ‚¬μš©λœλ‹€.

HTTP 흐름

  1. TCP 연결을 μ—°λ‹€.
  2. HTTP λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•œλ‹€.
  3. μ„œλ²„μ— μ˜ν•΄ μ „μ†‘λœ 응닡을 읽어듀인닀.
  4. 연결을 λ‹«κ±°λ‚˜ λ‹€λ₯Έ μš”μ²­λ“€μ„ μœ„ν•΄ μž¬μ‚¬μš©ν•œλ‹€.

HTTP λ©”μ‹œμ§€

HTTP/2λΆ€ν„°λŠ” HTTP λ©”μ‹œμ§€κ°€ ν”„λ ˆμž„ μ•ˆμœΌλ‘œ μΊ‘μŠν™”ν•˜μ—¬ λ³΅μž‘ν•΄μ‘Œμ§€λ§Œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ΄€μ μ—μ„œ λ³Ό λ•Œ λ©”μ‹œμ§€μ˜ κ΅¬μ‘°λŠ” λ™μΌν•©λ‹ˆλ‹€.

μš”μ²­

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

  • Method: ex) GET, POST, OPTIONS, HEAD
  • Path: ν”„λ‘œν† μ½œ(http://), 도메인(developer.mozilla.org), TCP 포트(80)을 μ œμ™Έν•œ λ¦¬μ†ŒμŠ€μ˜ URL
  • Headers 뢀가적인 정보 제곡

응닡

HTTP 응닡 λ©”μ‹œμ§€

  • HTTP Headers: ex) User-Agent, Referer, If-Modified-Since, If-None-Match, μΏ ν‚€ λ“± 정보 포함

HTTP 기반 API

  • XMLHttpRequest API: 전체 νŽ˜μ΄μ§€μ˜ μƒˆλ‘œκ³ μΉ¨ 없이도 URLλ‘œλΆ€ν„° 데이터λ₯Ό λ°›μ•„μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, νŽ˜μ΄μ§€μ˜ 일뢀λ₯Ό μ—…λ°μ΄νŠΈν•  수 있게 ν•΄μ€λ‹ˆλ‹€.
  • Fetch API: μ΅œμ‹  API둜 XMLHttpRequest와 λΉ„μŠ·ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜μ§€λ§Œ 보닀 κ°•λ ₯ν•˜κ³  μœ μ—°ν•œ μ‘°μž‘μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • Server-sent Events: μ›λž˜ μ›ΉνŽ˜μ΄μ§€λŠ” μƒˆλ‘œμš΄ 데이터λ₯Ό λ°›μœΌλ €λ©΄ μ„œλ²„λ‘œ μš”μ²­μ„ 보내야 ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Server-sent λ°©μ‹μœΌλ‘œλŠ” μš”μ²­ 없이도 μ–Έμ œλ“ μ§€ μ„œλ²„κ°€ μƒˆλ‘œμš΄ 데이터λ₯Ό λ³΄λ‚΄λŠ” 것이 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” λ„μ°©ν•œ λ©”μ‹œμ§€λ₯Ό Event 객체둜 μžλ™ λ³€ν™˜ν•΄ μ›ΉνŽ˜μ΄μ§€ μ•ˆμ—μ„œ Events + λ°μ΄ν„°λ‘œ λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.
This post is licensed under CC BY 4.0 by the author.

:coffee: [Java] μž…λ ₯κ³Ό 좜λ ₯

⚑ μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ ν•„κΈ° 3μž₯. μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계

Loading comments from Disqus ...