[CS] μ›Ή μ„œλ²„ (WEB SERVER)

🧠·2022λ…„ 5μ›” 15일
0

CS

λͺ©λ‘ 보기
3/4

μ›Ή 기초

μ›Ή ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” HTTP(Hypertext Transfer Protocol) 라고 ν•˜λŠ” ν…μŠ€νŠΈ 기반 ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄μ„œ 데이터λ₯Ό μ£Όκ³  λ°›λŠ”λ‹€.

μ›Ή μ„œλ²„

  • HTML둜 λ§Œλ“  μ›Ή νŽ˜μ΄μ§€κ°€ λ“€μ–΄ μžˆλŠ” νŒŒμΌμ„ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•˜λŠ” μ„œλ²„ ν”„λ‘œκ·Έλž¨

μ›Ή ν΄λΌμ΄μ–ΈνŠΈ

  • λ„€νŠΈμ›Œν¬λ₯Ό μ΄μš©ν•˜μ—¬ μ„œλ²„μ— μ—°κ²°λœ μ‚¬μš©μžλ₯Ό λ§ν•œλ‹€.
  • μ„œλ²„μ—μ„œ λ°›μ•„μ˜¨ 데이터λ₯Ό 화면에 ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ›Ή λΈŒλΌμš°μ €λ₯Ό μ‚¬μš©

μ„œλ²„-ν΄λΌμ΄μ–ΈνŠΈ ꡬ쑰

  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 1:N ꡬ쑰둜 μ—°κ²°λ˜μ–΄ μžˆλ‹€.
  • ν•œ λŒ€μ˜ μ„œλ²„κ°€ μ‘΄μž¬ν•˜λ©° λ‹€μˆ˜μ˜ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‘΄μž¬ν•œλ‹€.

[ μž₯점 ]

  • 데이터λ₯Ό μ—¬λŸ¬ 곳에 λΆ„μ‚°μ‹œν‚€μ§€ μ•Šκ³  λ‹¨μΌν•œ μ„œλ²„μ— μ €μž₯ν•˜μ—¬ κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°μ˜ μœ μΌμ„±κ³Ό 톡일성을 보μž₯ν•œλ‹€.
  • 쀑앙 μ„œλ²„λ§Œ κ΄€λ¦¬ν•˜λ©΄ 되기 λ•Œλ¬Έμ— μœ μ§€κ΄€λ¦¬ λΉ„μš©μ΄ 적게 λ“ λ‹€.

[ 단점 ]

  • ν•΄ν‚Ή 곡격과 λ””λ„μŠ€ 및 λžœμ„¬μ›¨μ–΄ 곡격등에 μ·¨μ•½ν•˜λ‹€.
  • 쀑앙 μ„œλ²„κ°€ ν•΄ν‚Ή λ‹Ήν•˜μ—¬ 데이터가 μœ„λ³€μ‘° λ‹Ήν•  경우 λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλ“€μ— 잘λͺ»λœ 정보가 μ „λ‹¬λœλ‹€.
  • 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 좔가적인 λΉ„μš©μ΄ λ“€μ–΄κ°„λ‹€.

HTTP ν”„λ‘œν† μ½œ

Hypertext Transfer Protocol

  • 웹을 μ΄μš©ν•˜μ—¬ HTML둜 μž‘μ„±λœ ν•˜μ΄νΌν…μŠ€νŠΈ λ¬Έμ„œλ₯Ό 주고받을 수 μžˆλŠ” ν”„λ‘œν† μ½œ
  • μ›Ήμ„œλ²„μ™€ μ›ΉλΈŒλΌμš°μ € μ‚¬μ΄μ—μ„œ 정보λ₯Ό 주고받을 수 μžˆλ‹€.
  • 포트 λ²ˆν˜ΈλŠ” 80λ²ˆμ΄λ‹€.

[μ£Όμš” νŠΉμ„±]

  • λΉ„μ—°κ²°μ„± (Connectionless)
    - ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­μ„ ν•œ ν›„ μ„œλ²„λ‘œ λΆ€ν„° 응닡을 λ°›μœΌλ©΄ κ·Έ 연결을 λŠμ–΄ 버린닀.
    - 헀더에 keep-alive λΌλŠ” 값을 μ£Όλ©΄ 컀λ„₯μ…˜μ„ μž¬ν™œμš©ν•˜λŠ”λ° HTTP 1.1 μ—μ„œλŠ” λ””ν΄νŠΈλ‹€.
    - HTTPλŠ” TCPμœ„μ—μ„œ κ΅¬ν˜„λ¨, keep-alive μ˜΅μ…˜μœΌλ‘œ μ—°κ²°λΉ„μš©μ„ μ€„μ΄λŠ” 것을 비연결지ν–₯이라고 ν•œλ‹€.
  • λ¬΄μƒνƒœ (Stateless)
    - μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°„ 연결이 λŠκΈ°λŠ” μˆœκ°„ 톡신이 λλ‚˜λ©° μƒνƒœ μ •λ³΄λŠ” μœ μ§€ν•˜μ§€ μ•ŠλŠ”λ‹€.

두 가지 νŠΉμ„±μ„ λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 쿠킀와(Cookie)와 μ„Έμ…˜(Session)을 μ‚¬μš©ν•œλ‹€.

URI

Uniform Resource Identifiers

  • 인터넷에 μ‘΄μž¬ν•˜λŠ” 각쒅 μ •λ³΄λ“€μ˜ μœ μΌν•œ μ΄λ¦„μ΄λ‚˜ μœ„μΉ˜λ₯Ό ν‘œμ‹œν•˜λŠ” μ‹λ³„μž
  • μΈν„°λ„·μ—μ„œ μš”κ΅¬λ˜λŠ” 기본쑰건으둜 인터넷 ν”„λ‘œν† μ½œμ— 항상 λΆ™μ–΄ λ‹€λ‹Œλ‹€.
  • μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ•Œλ €μ£ΌκΈ° μœ„ν•œ ν”„λ‘œν† μ½œ

ex) https://velog.io/@supssson

  • https: μžμ›μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ μ›Ή ν”„λ‘œν† μ½œ (HTTPS)
  • velog.io: μžμ›μ΄ μ €μž₯된 μ»΄ν“¨ν„°μ˜ μœ„μΉ˜
  • @supssson: μš”μ²­ν•  μžμ›μ˜ 이름

μ›Ή 컨텐츠

μ›Ή μ„œλ²„κ°€ λ°˜ν™˜ν•˜λŠ” λͺ¨λ“  λ‚΄μš©λ“€μ€ μ„œλ²„κ°€ κ΄€λ¦¬ν•˜λŠ” νŒŒμΌμ— μ—°κ΄€λœλ‹€.

파일 각각은 κ³ μœ ν•œ 이름을 κ°€μ§€λŠ”λ° 이λ₯Ό URL (Universal Resouce Locator)이라고 ν•œλ‹€.

정적 컨텐츠

  • λ³€ν™”κ°€ μ—†λŠ” 데이터
  • μ›Ή μ„œλ²„μ˜ λ””μŠ€ν¬μ— μ €μž₯λ˜μ–΄ 있으며 μ–΄λ–€ μ ‘μ†μžμ—κ²Œλ“  λ™μΌν•œ 데이터λ₯Ό λ°˜ν™˜

ex) http://www.google.com:80/index.html

  • 포트 80μ—μ„œ λ“£κ³  μžˆλŠ” μ›Ή μ„œλ²„κ°€ κ΄€λ¦¬ν•˜λŠ” 인터넷 호슀트 www.google.com의 /index.htmlμ΄λΌλŠ” HTML νŒŒμΌμ„ 지정

동적 컨텐츠

  • μ ‘μ†μžμ˜ μš”μ²­μ— 따라 λ‹€λ₯Έ ν˜•νƒœλ‘œ λ°˜ν™˜λ˜λŠ” 데이터

ex) http://bluefish.ics.cs.cmu.edu:8000/cgi-bin/adder?15000&213

  • μ‹€ν–‰νŒŒμΌμ„ μœ„ν•œ URL은 파일 이름 뒀에 ν”„λ‘œκ·Έλž¨μ˜ 인자λ₯Ό 포함할 수 μžˆλ‹€.
  • /cgi-bin/adderλΌλŠ” μ‹€ν–‰νŒŒμΌμ„ μ‹λ³„ν•˜κ³  "15000", "213" 두 개의 μΈμžμ™€ ν•¨κ»˜ ν˜ΈμΆœλœλ‹€.

MIME νƒ€μž…

Content-Type: text/html

  • μœ„ ν—€λ”λŠ” λ©”μ‹œμ§€μ˜ νƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ„ λ‚˜νƒ€λ‚Έλ‹€.
  • νƒ€μž…κ³Ό μ„œλΈŒνƒ€μž…μ„ ν•©μ³μ„œ MIME νƒ€μž…μ΄λΌκ³  λΆ€λ₯΄λ©° λ‹€μ–‘ν•œ 파일 포맷이 MIME νƒ€μž…μœΌλ‘œ λ“±λ‘λ˜μ–΄ μžˆλ‹€.
  • MIME νƒ€μž…μ€ μ „μž μš°νŽΈμ„ μœ„ν•΄ μ •μ˜λœ κ²ƒμ΄μ§€λ§Œ μ§€κΈˆμ€ HTTP, SIP와 같은 인터넷 ν”„λ‘œν† μ½œμ—μ„œ ν•¨κ»˜ μ‚¬μš©ν•˜κ³  μžˆλ‹€.

HTTP μš”μ²­ λ©”μ†Œλ“œ (Method)

  • μœ„ 사진은 μš”μ²­λ°μ΄ν„°μ˜ 기본적인 포맷이닀
  • GET (μš”μ²­ λ©”μ†Œλ“œ) + /woosik.gif (μš”μ²­ URI) + HTTP/1.1 (HTTP ν”„λ‘œν† μ½œ 버전)
  • GET: 정보λ₯Ό μš”μ²­ (SELECT)
  • POST: 정보λ₯Ό μ‚½μž… (INSERT)
  • PUT: 정보λ₯Ό μ—…λ°μ΄νŠΈ (UPDATE)
  • DELETE: 정보λ₯Ό μ‚­μ œ (DELETE)

HTTP 응닡

  • μœ„ 사진은 μ‘λ‹΅λ°μ΄ν„°μ˜ 기본적인 포맷이닀.
  • HTTP/1.0 200 OK (HTTP ν”„λ‘œν† μ½œ 버전과 μ‘λ‹΅μ½”λ“œ)
  • Server: Tiny Web Server (μ„œλ²„ ν”„λ‘œκ·Έλž¨ 정보)
  • Connection: close (ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ 연결에 λŒ€ν•œ μ˜΅μ…˜)
  • Content-length: 98026 (μ‘λ‹΅ν•œ 컨텐츠 길이)
  • Content-type: image/gif (μ‘λ‹΅ν•œ 컨텐츠 MIME νƒ€μž…)

0개의 λŒ“κΈ€