π HTTP(HyperText Transfer Protocol)
νμ΄νΌν
μ€νΈλ₯Ό κ΅ννκΈ° μν νλ‘ν μ½μ΄λ€. HTTPμ HTML, TEXT, IMAGE, μμ±, μμ, νμΌ, JSON, XML (API) λ± κ±°μ λͺ¨λ ννμ λ°μ΄ν° λ΄μ μ μ‘ν μ μλ€. μλ² κ°μ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ λλ λλΆλΆ HTTPλ₯Ό μ¬μ©νλ€.
π HTTP μμ¬
- HTTP/0.9 (1991λ ): GET λ©μλλ§ μ§μ, HTTP ν€λX
- HTTP/1.0 (1996λ ): λ©μλ, ν€λ μΆκ°
- HTTP/1.1 (1997λ ): κ°μ₯ λ§μ΄ μ¬μ©, μ°λ¦¬μκ² κ°μ₯ μ€μν λ²μ
π RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)- HTTP/2 (2015λ ): μ±λ₯ κ°μ
- HTTP/3 (μ§ν μ€): TCP λμ μ UDP μ¬μ©, μ±λ₯ κ°μ
π HTTPμ κΈ°λ° νλ‘ν μ½
HTTP/1.1, HTTP/2λ TCP νλ‘ν μ½ μμμ λμνλ€. HTTP/3λ UDP νλ‘ν μ½ κΈ°λ°μΌλ‘ κ°λ°λμ΄ μλ€. TCPλ 3 way handshakeλ₯Ό μννκ³ λ°μ΄ν°μμ΄ λ§κ³ λ©μ»€λμ¦ μμ²΄κ° μλκ° λλ¦° νΈμ΄λ€.
μ΄ λλ¬Έμ UDP νλ‘ν μ½ μμ μ ν리μΌμ΄μ
λ¨κ³μμ μ±λ₯μ μ΅μ ννλλ‘ μλ‘ μ€κ³νλ€. νμ¬ HTTP/1.1 μ£Όλ‘ μ¬μ©νμ§λ§, HTTP/2, HTTP/3μ μ¬μ©λ μ μ μ¦κ°νκ³ μλ€.
π μΉ μ¬μ΄νΈ κ°λ°μ λꡬμμ νμ¬ μΉ μ¬μ΄νΈμ νλ‘ν μ½μ νμΈν μ μλ€. μΈνλ° κ°μ μ¬μ΄νΈλ HTTP/2 λ²μ μ΄ μ¬μ©λκ³ μλ€.
π HTTP νΉμ§
HTTPλ ν΄λΌμ΄μΈνΈ μλ² κ΅¬μ‘°λ‘ λμνλ€. 무μν νλ‘ν μ½(stateless)μ΄κ³ λΉμ°κ²°μ±μ΄λΌλ νΉμ§μ΄ μλ€. λν, HTTP λ©μμ§λ₯Ό ν΅ν΄μ ν΅μ νκ³ λ¨μνκ³ νμ₯ κ°λ₯νλ€.
π Request Response ꡬ쑰
HTTPλ ν΄λΌμ΄μΈνΈκ° HTTP λ©μμ§λ₯Ό ν΅ν΄ μλ²μ μμ²μ 보λ΄κ³ μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μλ΅μ΄ μ¬ λκΉμ§ κΈ°λ€λ¦°λ€. μλ²κ° μμ²μ λν κ²°κ³Όλ₯Ό λ§λ€μ΄μ μλ΅μ΄ μ€λ©΄, κ·Έ μλ΅ κ²°κ³Όλ₯Ό μ΄μ΄ ν΄λΌμ΄μΈνΈκ° λμνλ€.
π‘ ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό λΆλ¦¬νλ μ΄μ
ν΄λΌμ΄μΈνΈμ μλ²λ₯Ό λΆλ¦¬ν΄μ ν΄λΌμ΄μΈνΈλ UIμ μ¬μ©μ±μ μ§μ€νκ³ , μλ²λ λΉμ§λμ€ λ‘μ§κ³Ό λ°μ΄ν°μ μ§μ€νκ² νλ€.
μ΄μκ° λ°μν΄λ μλ‘μ μν μ΄ λ€λ₯΄κΈ° λλ¬Έμ μν₯μ λ―ΈμΉμ§ μκ³ λ 립μ μΌλ‘ μ΄μμ λμνλ©΄μ μ§νν μ μλ€.
πββοΈ κ³ κ°μ λ ΈνΈλΆ 2κ°λ₯Ό μ μ©μΉ΄λλ‘ κ΅¬λ§€ν μμ μ΄λ€.
πββοΈ Stateful, Statelessμ λ°λ₯Έ κ³ κ°κ³Ό μ μμ μν λ³νλ₯Ό μμ보μ.
π μν μ μ§(Stateful)
μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό μ μ§νλ€. ν΄λΌμ΄μΈνΈμ μμ² μ 보λ₯Ό λ§€μΉλ μλ²μ κ³μ μ μ§ν΄μΌ νλ―λ‘ μλ²λ₯Ό λ릴 μκ° μλ€. μ€κ°μ μ μ§ν΄μΌ νλ μλ²μ μ₯μ κ° λ°μνμ¬ μλ²κ° λ³κ²½λλ€λ©΄, ν΄λΌμ΄μΈνΈκ° μ 보λ₯Ό λ€μ μμ²ν΄μΌ νλ€.
μ μ(μλ²)μ΄ 'κ³ κ°μ΄ λ ΈνΈλΆ 2κ°λ₯Ό μ μ©μΉ΄λλ‘ κ΅¬λ§€ν κ²μ΄λ€.'λΌλ λ΄μ©μ κΈ°μ΅νκ³ μλλ€.
π 무μν(Stateless)
μλ²κ° ν΄λΌμ΄μΈνΈμ μνλ₯Ό μ μ§νμ§ μλλ€. ν΄λΌμ΄μΈνΈμ λͺ¨λ μμ² μ 보λ₯Ό μλ²μ μμ²νλ©΄ μλ²λ μνλ₯Ό 보쑴νμ§ μκ³ μλ΅λ§ νλ€. μ€κ°μ μλ²μ μ₯μ κ° λ°μν΄λ ν΄λΌμ΄μΈνΈ μμ²μ νμν μ λ³΄κ° λͺ¨λ λ΄κ²¨μκΈ° λλ¬Έμ λ€λ₯Έ μλ²μ μμ²νκ³ μλ²κ° μλ΅ν μ μλ€.
π 무ν μλ² μ¦μ€ κ°λ₯.
κ³ κ°μ΄ μ§μμκ² κ²°μ λ₯Ό μμ²ν λ 'λ ΈνΈλΆ 2κ°λ₯Ό μ μ©μΉ΄λλ‘ κ΅¬λ§€ν κ²μ΄λ€.' μ κ°μ΄ λͺ¨λ μμ² λ΄μ©μ κ°μ΄ λ§νλ€.
π 무μν μ€μΌμΌ μμ
무μνλ μν νμ₯μ μ 리νλ€. λ§μ½ λ‘κ·ΈμΈ μμ΄ κ²μλ§ ν κ²½μ°, κ²μ μλ²μ νΈλν½μ΄ λ§μ΄ μ¬λΌκ°λλΌλ κ²μ μλ²μ ν΄λΌμ΄μΈνΈμ μνκ° μ μ§λμ§ μμμ μλ²λ₯Ό λ§μ΄ λ릴 μ μλ€. λν, μνλ₯Ό μ μ§ν νμκ° μμ΄ μ€κ³κ° μ©μ΄νλ€.
π μν μ μ§(Stateful)μ 무μν(Stateless)μ νκ³
π‘μν μ μ§(Stateful)μ νκ³
- λ‘κ·ΈμΈν΄μΌ νλ κ²½μ°, λ‘κ·ΈμΈν μ¬μ©μκ° λ‘κ·ΈμΈνλ€λ μνλ₯Ό μλ²μ μ μ§ν΄μΌ νλ€.
- λΈλΌμ°μ μμ μΏ ν€μ μΈμ μ κ°μ΄ μ‘°ν©ν΄μ μνλ₯Ό μ μ§νλ κΈ°λ₯μ μ¬μ©νλ€.
π μλ²μ μΈμ μ΄ λ μκ°κ±°λ μΈμ μλ²κ° μ£½μ΄λ²λ¦¬λ©΄ λ‘κ·ΈμΈμ΄ νλ¦°λ€.- μν μ μ§λ μ΅μνλ§ μ¬μ©νλ€.
π‘무μν(Stateless)μ νκ³
- ν΄λΌμ΄μΈνΈ μμ² μ 보λ₯Ό λ΄μμΌ νκΈ° λλ¬Έμ λ°μ΄ν°μμ΄ λ§λ€.
π μ°κ²°μ μ μ§νλ λͺ¨λΈ
μ¬λ¬ ν΄λΌμ΄μΈνΈμμ μλ²λ‘ μλ΅μ μμ²νλ©΄ μλ²λ μμ²μ΄ λ€μ΄μ¨ ν΄λΌμ΄μΈνΈλ§λ€ μ°κ²°μ μ μ§ν΄μ μνλ₯Ό μ μ₯νλ€. ν΄λΌμ΄μΈνΈκ° λ§μμ§μλ‘ μ°κ²°μ μ μ§νλ μλ² μμμ΄ κ³μ μλͺ¨λλ€λ λ¨μ μ΄ μλ€.
π μ°κ²°μ μ μ§νμ§ μλ λͺ¨λΈ
ν΄λΌμ΄μΈνΈκ° μμ²ν λλ§λ€ μλ²λ μλ΅λ§ 보λ΄μ£Όκ³ μ°κ²°μ μ’ λ£νκΈ° λλ¬Έμ μ΅μνμ μμμ μ¬μ©νλ€.
π λΉμ°κ²°μ±
HTTPλ μΌλ°μ μΌλ‘ μ΄ λ¨μ μ΄νμ λΉ λ₯Έ μλλ‘ μλ΅νκΈ° λλ¬Έμ κΈ°λ³Έμ μΌλ‘ μ°κ²°μ μ μ§νμ§ μλ λͺ¨λΈμ΄λ€. 1μκ° λμ μμ² λͺ
μ΄ μλΉμ€λ₯Ό μ¬μ©ν΄λ μ€μ μλ²μμ λμμ μ²λ¦¬νλ μμ²μ μμ κ° μ΄νλ‘ λ§€μ° μκΈ° λλ¬Έμ μλ² μμμ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€.
π λΉμ°κ²°μ±μ νκ³
TCP/IP μ°κ²°μ μλ‘ λ§Ίμ λλ§λ€ 3 way handshake μκ°μ΄ μΆκ°λΌμ ν΄λΌμ΄μΈνΈ μ μ₯μμλ λ리λ€.
μΉ λΈλΌμ°μ λ‘ μ¬μ΄νΈλ₯Ό μμ²νλ©΄ HTMLλΏλ§ μλλΌ μλ°μ€ν¬λ¦½νΈ, css, μΆκ° μ΄λ―Έμ§ λ± μλ§μ μμμ΄ ν¨κ» λ€μ΄λ‘λλλ€.
π μ΄λλ§λ€ μ°κ²°νκ³ λκ³ λ₯Ό λ°λ³΅νλ©΄ λΉν¨μ¨μ μ΄λ€.
π λΉμ°κ²°μ±μ νκ³ κ·Ήλ³΅
HTTP μ§μ μ°κ²°(Persistent Connections)λ‘ λΉμ°κ²°μ±μ νκ³λ₯Ό 극볡ν μ μλ€. HTTP/2, HTTP/3μμ μ§μ μ°κ²°μ΄ λμ± μ΅μ ν λμ΄μλ€.
π‘ HTTP μ΄κΈ°
π 'μ°κ²°νκ³ μμ²/μλ΅νκ³ μ’ λ£'λ₯Ό λ°λ³΅νλ―λ‘ μλκ° λ리λ€.
π‘ HTTP μ§μ μ°κ²°(Persistent Connections)
π μ°κ²°μ μ μ§νλ©΄μ λ΄λΆ λ©μ»€λμ¦μΌλ‘ μμ²/μλ΅μ μλ£ν ν μ’ λ£νλ―λ‘ μλκ° λΉ λ₯΄λ€.
ββ
Statelessλ₯Ό κΈ°μ΅νμ
μλ² κ°λ°μλ€μ΄ μ΄λ €μνλ μ
무λ μ μ°©μ μ΄λ²€νΈ, λͺ
μ KTX μμ½κ³Ό κ°μ΄ κ°μ μκ°μ λ± λ§μΆ°μ λ°μνλ λμ©λ νΈλν½ κ΄λ¦¬μ΄λ€. μ΄μ κ°μ μν©μμλ Stateless νκ² μ€κ³νλ κ² κ°μ₯ μ€μνλ€.
π HTTP λ©μμ§ κ΅¬μ‘°
HTTP λ©μμ§λ start-line, header, empty line(CRLF), message body 4κ°μ κ΅¬μ‘°λ‘ λλλ€.
π HTTP μμ² λ©μμ§
β‘ start-line = request-line
GET/search?q=hello&hl=ko HTTP/1.1
method SP(곡백) request-target SP(곡백) HTTP-version CRLF(μν°)Host: www.google.com
field-name":" OWS field-value OWS Β Β Β Β Β Β (OWS:λμ΄μ°κΈ° νμ©)
method
HTTP λ©μλ μ’
λ₯: GET, POST, PUT, DELETE λ±μ΄ μκ³ μλ²κ° μνν΄μΌ ν λμμ μ§μ νλ€.
(EX) GET: 리μμ€ μ‘°ν, POST: μμ² λ΄μ μ²λ¦¬
request-target
/absolute-path[?query]
/μ λκ²½λ‘[?쿼리]
μ λκ²½λ‘λ "/"λ‘ μμνκ³ λ€μ 쿼리λ₯Ό ν©μΉλ€.
(*http://...?x=yμ κ°μ΄ λ€λ₯Έ μ νμ κ²½λ‘μ§μ λ°©λ²λ μλ€.)
π HTTP μλ΅ λ©μμ§
β‘ start-line = status-line
HTTP/1.1 200 OK
HTTP-version SP status-code SP reason-phrase CRLF
status-code (HTTP μν μ½λ)
ν΄λΌμ΄μΈνΈ μμ²μ΄ μ±κ³΅νλμ§ μ€ν¨νλμ§λ₯Ό λνλΈλ€.
βοΈ 200: μ±κ³΅, 400: ν΄λΌμ΄μΈνΈ μμ² μ€λ₯, 500: μλ² λ΄λΆ μ€λ₯
reason-phrase(μ΄μ 문ꡬ)
μ¬λμ΄ μ΄ν΄ν μ μλ μ§§μ μν μ½λ μ€λͺ
μ΄λ€.
β‘ HTTP header
μ μ¬μ§μμ
field-nameμ Content-Type, Content-Length
field-valueλ 'text/html;charset=UTF-8', ': 3423'
- field-name: λμλ¬Έμ κ΅¬λΆ β
- field-value: λμλ¬Έμ κ΅¬λΆ β
HTTP ν€λλ λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, μμ² ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ ) μ 보, μλ² μ ν리μΌμ΄μ μ 보, μΊμ κ΄λ¦¬ μ 보 λ± HTTP μ μ‘μ νμν λͺ¨λ λΆκ° μ 보λ₯Ό λ΄κ³ μλ€.
νμ€ ν€λκ° λ§€μ° λ§κ³ νμμ μμμ ν€λλ₯Ό μΆκ°ν μ μλ€.
β‘ HTTP λ©μμ§ λ°λ
μ€μ μ μ‘ν λ°μ΄ν°κ° λ΄κ²¨μλ€. HTML λ¬Έμ, μ΄λ―Έμ§, μμ, JSON λ± byteλ‘ ννν μ μλ λͺ¨λ λ°μ΄ν°κ° μ μ‘ κ°λ₯νλ€.