Computer Science/Network

[CS] HTTP와 REST

The Engineer, Lucy 2024. 11. 21. 16:08

HTTP

  • μΈν„°λ„·μƒμ—μ„œ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•œ ν”„λ‘œν† μ½œλ‘œ, TCP/IP 4κ³„μΈ΅μ—μ„œ μ‘μš© 계측에 속함.
  • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ ν†΅μ‹ ν•˜κΈ° μœ„ν•΄ μ •ν˜•ν™”λœ 데이터인 HTTP λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μŒ.

HTTP νŠΉμ§•

  1. λΉ„μ—°κ²°μ„±(Connectionless)
  • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­μ„ 보낸 ν›„ μ„œλ²„λ‘œλΆ€ν„° 응닡을 λ°›μœΌλ©΄ 연결을 λŠλŠ” 것
  • 비연결성은 λΆˆνŠΉμ • λ‹€μˆ˜λ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” μ„œλΉ„μŠ€μ— 유리.
  • μ„œλ²„μ—μ„œ 응닡을 λ°›κ³  λ‚˜μ„œλ„ 연결을 μœ μ§€ν•˜λ €λ©΄ 그만큼 μžμ›μ„ μ‚¬μš©ν•˜κ²Œ 됨. ➑️ 비연결성은 연결을 μœ μ§€ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ μžμ›μ„ μ•„λ‚„ 수 있음.
  • 연결을 μœ μ§€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό κΈ°μ–΅ν•  수 μ—†μŒ.
  • λ™μΌν•œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ—°μ†μ μœΌλ‘œ μš”μ²­μ΄ 였면 μ—°κ²°κ³Ό μ—°κ²° ν•΄μ œ 과정을 λ°˜λ³΅ν•˜κ²Œ λ˜μ–΄ μžμ›μ„ λ‚­λΉ„ν•˜κ²Œ 됨.
  • 단점을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ 일정 μ‹œκ°„ λ™μ•ˆ 연결을 μœ μ§€ν•  수 μžˆλ„λ‘ HTTP Keep Aliveλ₯Ό μ‚¬μš©ν•¨. ➑️ λ§ˆμ§€λ§‰ 응닡 이후 일정 μ‹œκ°„ λ™μ•ˆ 연결을 μœ μ§€ν•΄ λ™μΌν•œ ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° μš”μ²­μ΄ 였면 μ—°κ²° κ³Όμ • μƒλž΅ κ°€λŠ₯.
  1. λ¬΄μƒνƒœ(Stateless)
  • μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ” 것
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 이전에 μš”μ²­ν•œ 사항을 μ„œλ²„μ— μ €μž₯ν•˜μ§€ μ•ŠμŒ. ➑️ ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ— ν•„μš”ν•œ 데이터λ₯Ό λͺ¨λ‘ κ°€μ§€κ³  μžˆκ±°λ‚˜ μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° 받은 μš”μ²­ 사항을 λͺ¨λ‘ μ €μž₯ν•΄μ•Ό 함. 이 방법듀을 각각 μΏ ν‚€(Cookie)와 μ„Έμ…˜(Session)이라고 함.
  • μ„œλ²„ ν™•μž₯성이 λ†’μŒ. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— μ‘λ‹΅ν•˜λŠ” μ„œλ²„κ°€ λ°”λ€Œμ–΄λ„ 되기 λ•Œλ¬Έμ— μ„œλ²„λ₯Ό 계속 ν™•μž₯해도 됨. ➑️ νŠΉμ • μ„œλ²„μ— λ¬Έμ œκ°€ 생겨 μ‘λ‹΅ν•˜μ§€ λͺ»ν•˜λŠ” 문제점 보완 κ°€λŠ₯.

HTTPS

  • λ³΄μ•ˆ 계측인 SSL/TLSλ₯Ό μ΄μš©ν•΄ HTTP의 λ³΄μ•ˆμ„ κ°•ν™”ν•œ μ›Ή 톡신 ν”„λ‘œν† μ½œ.
  • HTTPλŠ” 데이터 μ•”ν˜Έν™”λ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  μ „μ†‘ν•΄μ„œ λ³΄μ•ˆμ— 취약함. 이λ₯Ό λ³΄μ™„ν•œ HTTPS λ“±μž₯.
  • SSL은 λ„·μŠ€μΌ€μ΄ν”„μ—μ„œ κ°œλ°œν•œ μ•”ν˜Έν™” ν”„λ‘œν† μ½œλ‘œ λͺ‡ κ°€μ§€ 문제점이 μžˆλŠ”λ°, 이λ₯Ό 보완해 μƒˆλ‘œμš΄ μ•”ν˜Έν™” ν”„λ‘œν† μ½œμΈ TLS 개발.
  • 데이터λ₯Ό 솑신할 λ•Œ μ‘μš© κ³„μΈ΅μ—μ„œ λ³΄μ•ˆ κ³„μΈ΅μ˜ SSL/TLS둜 데이터λ₯Ό 보내면 데이터λ₯Ό μ•”ν˜Έν™”ν•΄ 전솑 κ³„μΈ΅μœΌλ‘œ 전달.
  • 데이터λ₯Ό μˆ˜μ‹ ν•  λ•Œ 전솑 κ³„μΈ΅μ—μ„œ 보낸 데이터λ₯Ό λ³΄μ•ˆ κ³„μΈ΅μ˜ SSL/TLSμ—μ„œ λ°›μ•„ λ³΅ν˜Έν™”ν•œ ν›„ μ‘μš© κ³„μΈ΅μœΌλ‘œ 보냄.

REST

  • HTTP 톡신을 μ‰½κ²Œ ν™œμš©ν•  수 μžˆλŠ” λŒ€ν‘œμ μΈ 방법.

REST(Representational State Transfer)λž€?

  • HTTP 톡신을 ν™œμš©ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλœ μ•„ν‚€ν…μ²˜.
  • Representational 은 μΈν„°λ„·μƒμ˜ μžμ›μ„ URI둜 λ‚˜νƒ€λ‚Ό 수 μžˆμŒμ„ 의미.
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” URI둜 ν‘œν˜„λœ μžμ›μ„ HTTP λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ CRUD(Create, Read, Update, Delete) μ—°μ‚° κ°€λŠ₯.
  • State Transfer λŠ” μžμ›μ˜ μƒνƒœλ₯Ό μ£Όκ³ λ°›λŠ” 것, 즉 μš”μ²­λ°›μ€ μžμ›μ˜ μƒνƒœλ₯Ό μ „λ‹¬ν•˜λŠ” 것.
  • RestλŠ” μžμ›μ„ λͺ…μ‹œν•΄ 연산을 μˆ˜ν–‰ν•˜κ³  μƒνƒœλ₯Ό μ£Όκ³ λ°›λŠ” 것.
  • REST νŠΉμ§•
    • μΌκ΄€λœ μΈν„°νŽ˜μ΄μŠ€: μžμ›μ„ λ‚˜νƒ€λ‚΄λŠ” URIλ₯Ό HTTP λ©”μ„œλ“œλ‘œ μ‘°μž‘ν•˜λŠ” μΌκ΄€λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©. HTTPλ₯Ό λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ REST μ‚¬μš© κ°€λŠ₯.
    • ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ ꡬ쑰: ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ 간에 μš”μ²­-μ‘λ‹΅μ˜ 독립적인 ꡬ쑰λ₯Ό 가짐. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ— μš”μ²­μ„ 보내고 응닡 λŒ€κΈ°. μ„œλ²„λŠ” μžμ›μ„ κ°€μ§€κ³  있으며 ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 응닡.
    • λ¬΄μƒνƒœμ„±: μ„œλ²„μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ €μž₯ν•˜κ±°λ‚˜ κ΄€λ¦¬ν•˜μ§€ μ•ŠμŒ. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ μ²˜λ¦¬μ™€ μ‘λ‹΅λ§Œ 함. μ‚¬μš©μž 인증, 둜그인 정보 등은 ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 직접 관리.
    • 캐싱 κ°€λŠ₯: HTTP ν‘œμ€€μ„ μ‚¬μš©ν•˜λ―€λ‘œ ν΄λΌμ΄μ–ΈνŠΈλŠ” 이전에 μ„œλ²„λ‘œλΆ€ν„° 받은 응닡을 μ €μž₯ 및 μž¬μ‚¬μš©ν•˜λŠ” 캐싱 κ°€λŠ₯. 캐싱은 ν΄λΌμ΄μ–ΈνŠΈμ˜ λ§Žμ€ μš”μ²­μœΌλ‘œλΆ€ν„° μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄여 μ£Όκ³ , ν΄λΌμ΄μ–ΈνŠΈλŠ” 비ꡐ적 빨리 응닡을 받을 수 있게 함.
    • 자체 ν‘œν˜„ ꡬ쑰: REST APIλŠ” μžμ›, ν–‰μœ„, ν‘œν˜„μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ REST API λ©”μ‹œμ§€λ₯Ό 보고 μ–΄λ–€ μš”μ²­μ„ ν•˜λŠ”μ§€ μ•Œ 수 있음.
    • κ³„μΈ΅ν˜• ꡬ쑰: REST μ„œλ²„λŠ” 닀쀑 κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 μžˆμ–΄μ„œ λ³΄μ•ˆ, μ•”ν˜Έν™”μ™€ 같은 계측을 μΆ”κ°€ν•΄ μ„œλ²„μ— λŒ€ν•œ κΈ°λŠ₯을 μœ μ—°ν•˜κ²Œ ν™•μž₯ κ°€λŠ₯.
  • REST νŠΉμ§•κ³Ό ν•¨κ»˜ HTTPλ₯Ό 기반으둜 ν•˜κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ 인프라λ₯Ό ꡬ좕할 ν•„μš”κ°€ μ—†μŒ. ➑️ HTTP ν‘œμ€€μ„ λ”°λ₯΄λ©΄ RESTλ₯Ό μ‰½κ²Œ μ‚¬μš© κ°€λŠ₯.
  • HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ μžμ›μ— λŒ€ν•œ 연산을 μ²˜λ¦¬ν•˜λ―€λ‘œ λ™μž‘μ΄ ν•œμ •μ .

β€» URI(Uniform Resource Identifier): 인터넷에 μžˆλŠ” μžμ›μ„ λ‚˜νƒ€λ‚΄λŠ” μ£Όμ†Œ. URIλŠ” μΈν„°λ„·μ—μ„œ μš”κ΅¬ν•˜λŠ” κΈ°λ³Έ 쑰건으둜 인터넷 ν”„λ‘œν† μ½œμ— 항상 λΆ™μ–΄ λ‹€λ‹˜. URI의 ν•˜μœ„ κ°œλ…μœΌλ‘œ URL, URN이 있음.
β€» URL(Uniform Resource Locator): μΈν„°λ„·μ—μ„œ μžμ›μ˜ μœ„μΉ˜λ₯Ό μ•Œ 수 μžˆλŠ” κ·œμ•½. μ›Ή μ‚¬μ΄νŠΈ μ£Όμ†Œμ™€ μΈν„°λ„·μ˜ λͺ¨λ“  μžμ›μ„ λ‚˜νƒ€λ‚Ό 수 있음.
β€» URN(Uniform Resource Name): μžμ›μ˜ μœ„μΉ˜ 정보가 μ•„λ‹Œ μ‹€μ œ μžμ›μ„ νŠΉμ •.

REST API

  • RESTλ₯Ό 기반으둜 ν•œ API.
  • μžμ›μ˜ 식별은 URI둜 ν•˜κ³ , μžμ›μ— λŒ€ν•œ ν–‰μœ„(처리)λŠ” HTTP λ©”μ„œλ“œλ‘œ λ‚˜νƒ€λƒ„. μ „λ‹¬λ˜λŠ” λ°μ΄ν„°λŠ” JSON λ˜λŠ” XML λ“±μœΌλ‘œ ν‘œν˜„.