πŸ”ŽΒ REST

κ°€μ˜€λ¦¬Β·2023λ…„ 2μ›” 12일
0

keyword

λͺ©λ‘ 보기
6/6
post-thumbnail

REST: REpresentational State Transfer

  • API μž‘λ™ 방식에 λŒ€ν•œ 쑰건을 λΆ€κ³Όν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜
  • 인터넷과 같은 λ³΅μž‘ν•œ λ„€νŠΈμ›Œν¬μ—μ„œ 톡신을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ§€μΉ¨μœΌλ‘œ λ§Œλ“€μ–΄μ‘Œλ‹€.
  • REST 기반 μ•„ν‚€ν…μ²˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ€κ·œλͺ¨μ˜ κ³ μ„±λŠ₯ 톡신을 μ•ˆμ •μ μœΌλ‘œ 지원할 수 있고 μ‰½κ²Œ κ΅¬ν˜„ν•˜κ³  μˆ˜μ •ν•  수 μžˆμ–΄ λͺ¨λ“  API μ‹œμŠ€ν…œμ„ νŒŒμ•…ν•˜κ³  μ—¬λŸ¬ ν”Œλž«νΌμ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.



REST κ΅¬μ„±μš”μ†Œ

  1. Resource: μžμ› - URI
    • λͺ¨λ“  μžμ›μ— κ³ μœ ν•œ IDκ°€ μ‘΄μž¬ν•˜κ³  이 μžμ›μ€ μ„œλ²„μ— μ‘΄μž¬ν•œλ‹€.
    • μžμ›μ„ κ΅¬λ³„ν•˜λŠ” IDλŠ” β€˜/todos/:todo_id’와 같은 HTTP URI
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” URIλ₯Ό μ΄μš©ν•΄μ„œ μžμ›μ„ μ§€μ •ν•˜κ³  ν•΄λ‹Ή μžμ›μ˜ μƒνƒœμ— λŒ€ν•œ μ‘°μž‘μ„ μ„œλ²„μ— μš”μ²­ν•œλ‹€.
  2. Verb: ν–‰μœ„ - HTTP Method
    • HTTP ν”„λ‘œν† μ½œμ€ GET, POST, DELETE, PUTκ³Ό 같은 λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.
  3. Representation of Resource: ν‘œν˜„
    - ν΄λΌμ΄μ–ΈνŠΈκ°€ μžμ›μ˜ μƒνƒœμ— λŒ€ν•œ μ‘°μž‘μ„ μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” μ μ ˆν•œ 응닡을 보낸닀.
    - RESTμ—μ„œ ν•˜λ‚˜μ˜ μžμ›μ€ JOSN, XML, TEXT λ“± μ—¬λŸ¬ ν˜•νƒœμ˜ ν‘œν˜„μœΌλ‘œ λ‚˜νƒ€λ‚΄μ–΄μ§ˆ 수 μžˆλ‹€.
    - JSON(ν˜Ήμ€ XML)을 톡해 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이 μΌλ°˜μ μ΄λ‹€.



REST νŠΉμ§•

  1. Uniform Interface: κ· μΌν•œ μΈν„°νŽ˜μ΄μŠ€
    • λͺ¨λ“  RESTful μ›Ή μ„œλΉ„μŠ€ λ””μžμΈμ˜ κΈ°λ³Έ
    • μ„œλ²„κ°€ ν‘œμ€€ ν˜•μ‹μœΌλ‘œ 정보λ₯Ό 전솑함을 λ‚˜νƒ€λ‚΄λ©° ν˜•μ‹μ΄ μ§€μ •λœ λ¦¬μ†ŒμŠ€λ₯Ό REST라고 ν‘œν˜„ν•œλ‹€.
    • 이 ν˜•μ‹μ€ μ„œλ²„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μžˆλŠ” λ¦¬μ†ŒμŠ€ λ‚΄λΆ€ ν‘œν˜„κ³Ό λ‹€λ₯Ό 수 μžˆλ‹€. μ„œλ²„λŠ” 데이터λ₯Ό ν…μŠ€νŠΈλ‘œ μ €μž₯ν•˜μ§€λ§Œ HTML ν‘œν˜„ ν˜•μ‹μœΌλ‘œ 전솑할 수 μžˆλ‹€.
    • νŠΉμ§•
      1. μš”μ²­μ„ λ¦¬μ†ŒμŠ€λ₯Ό 식별해야 ν•˜λ©° 이λ₯Ό μœ„ν•΄ κ· μΌν•œ λ¦¬μ†ŒμŠ€ μ‹λ³„μžλ₯Ό μ‚¬μš©ν•œλ‹€.

      2. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ›ν•˜λŠ” 경우 λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •, μ‚­μ œν•˜κΈ°μ— μΆ©λΆ„ν•œ 정보λ₯Ό λ¦¬μ†ŒμŠ€ ν‘œν˜„μ—μ„œ 가지고 μžˆλ‹€.

        μ„œλ²„λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μžμ„Ένžˆ μ„€λͺ…ν•˜λŠ” 메타 데이터λ₯Ό μ „μ†‘ν•˜μ—¬ 이 쑰건을 μΆ©μ‘±ν•œλ‹€.

      3. ν΄λΌμ΄μ–ΈνŠΈλŠ” ν‘œν˜„μ„ μΆ”κ°€λ‘œ μ²˜λ¦¬ν•˜λŠ” 방법에 λŒ€ν•œ 정보λ₯Ό μˆ˜μ‹ ν•œλ‹€.

        이λ₯Ό μœ„ν•΄ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€λ₯Ό μ μ ˆν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 방법에 λŒ€ν•œ 메타 데이터가 ν¬ν•¨λœ λͺ…ν™•ν•œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•œλ‹€.

      4. ν΄λΌμ΄μ–ΈνŠΈλŠ” μž‘μ—…μ„ μ™„λ£Œν•˜λŠ” 데 ν•„μš”ν•œ λ‹€λ₯Έ λͺ¨λ“  κ΄€λ ¨ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 정보λ₯Ό μˆ˜μ‹ ν•œλ‹€.

        이λ₯Ό μœ„ν•΄ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 더 λ§Žμ€ λ¦¬μ†ŒμŠ€λ₯Ό λ™μ μœΌλ‘œ 검색할 수 μžˆλ„λ‘ ν‘œν˜„μ— ν•˜μ΄νΌλ§ν¬λ₯Ό λ„£μ–΄ μ „μ†‘ν•œλ‹€.


  1. Stateless: λ¬΄μƒνƒœμ„±

    • μ„œλ²„κ°€ μ΄μ „μ˜ λͺ¨λ“  μš”μ²­κ³Ό λ…λ¦½μ μœΌλ‘œ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ„ μ™„λ£Œν•˜λŠ” 톡신 방법을 λ‚˜νƒ€λ‚Έλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” μž„μ˜μ˜ μˆœμ„œλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•  수 있고 λͺ¨λ“  μš”μ²­μ€ λ‹€λ₯Έ μš”μ²­κ³Ό λΆ„λ¦¬λœλ‹€.
  2. Cacheable: μΊμ‹œ κ°€λŠ₯

    • HTTPλΌλŠ” κΈ°μ‘΄ μ›Ή ν‘œμ€€μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°μ‘΄ 인프라λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©μ΄ κ°€λŠ₯ν•˜κ³  HTTPκ°€ 가진 캐싱 κΈ°λŠ₯이 적용 κ°€λŠ₯ν•˜λ‹€.
  3. Code-On-Demand(optional)

    • μ„œλ²„λŠ” μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œκ·Έλž˜λ° μ½”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ— μ „μ†‘ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ κΈ°λŠ₯을 μΌμ‹œμ μœΌλ‘œ ν™•μž₯ν•˜κ±°λ‚˜ μ‚¬μš©μž 지정할 수 μžˆλ‹€.
    • μ›Ή μ‚¬μ΄νŠΈμ—μ„œ 등둝 양식을 μž‘μ„±ν•˜λ©΄ λΈŒλΌμš°μ €λŠ” 잘λͺ»λœ μ‹€μˆ˜λ₯Ό κ°•μ‘° ν‘œμ‹œν•œλ‹€.
    • μ„œλ²„μ—μ„œ μ „μ†‘ν•œ μ½”λ“œλ‘œ 인해 이 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€.
  4. Client-Server ꡬ쑰

    • μžμ›μ΄ μžˆλŠ” μͺ½μ΄ Server, μžμ›μ„ μš”μ²­ν•˜λŠ” μͺ½μ΄ Clientκ°€ λœλ‹€.
      • REST Server: APIλ₯Ό μ œκ³΅ν•˜κ³  λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리 및 μ €μž₯을 μ±…μž„μ§„λ‹€.
      • Client: μ‚¬μš©μž μΈμ¦μ΄λ‚˜ context(μ„Έμ…˜, 둜그인 정보) 등을 직접 κ΄€λ¦¬ν•˜κ³  μ±…μž„μ§„λ‹€.
    • μ„œλ‘œ κ°„ μ˜μ‘΄μ„±μ΄ 쀄어든닀.
  5. κ³„μΈ΅ν˜• ꡬ쑰

    • ClientλŠ” REST API Server만 ν˜ΈμΆœν•œλ‹€.
    • REST ServerλŠ” 닀쀑 κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 μžˆλ‹€.
      • API ServerλŠ” 순수 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ³  κ·Έ μ•žλ‹¨μ— λ³΄μ•ˆ, λ‘œλ“œλ°ΈλŸ°μ‹±, μ•”ν˜Έν™”, μ‚¬μš©μž 인증 등을 μΆ”κ°€ν•˜μ—¬ κ΅¬μ‘°μƒμ˜ μœ μ—°μ„±μ„ 쀄 수 μžˆλ‹€.
      • λ˜ν•œ λ‘œλ“œλ°ΈλŸ°μ‹±, 곡유 μΊμ‹œ 등을 톡해 ν™•μž₯μ„±κ³Ό λ³΄μ•ˆμ„±μ„ ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
    • PROXY, κ²Œμ΄νŠΈμ›¨μ΄ 같은 λ„€νŠΈμ›Œν¬ 기반의 쀑간 맀체λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
profile
κ°€μ˜€λ¦¬μ˜ 코딩일기

0개의 λŒ“κΈ€