Web

[Web] REST APIλž€?

s_ih_yun 2025. 6. 4. 01:05
728x90

 

 

 

1. REST

πŸ’‘ REpresentational State Transfer
  • λ“±μž₯ λ°°κ²½ : λ³΅μž‘ν•œ λ„€νŠΈμ›Œν¬ 톡신(ex. 인터넷)κ³Ό λ©€ν‹° ν”Œλž«νΌ(ex. λ‹€μ–‘ν•œ λΈŒλΌμš°μ €μ™€ λͺ¨λ°”일 λ””λ°”μ΄μŠ€ λ“±)의 λ“±μž₯에 따라 이λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ μ§€μΉ¨μœΌλ‘œ λ§Œλ“€μ–΄μ‘Œλ‹€

 

1.1. REST λž€?

  • μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œκ·Έλž¨ μ•„ν‚€ν…μ²˜μ˜ ν•œ ν˜•μ‹
    • HTTP URI(Uniform Resource Identifier)λ₯Ό 톡해 μžμ›(Resource)λ₯Ό λͺ…μ‹œν•˜κ³ 
    • HTTP Method (POST, GET, PUT, DELETE, PATCH λ“±)을 톡해
    • ν•΄λ‹Ή μžμ›(URI)에 λŒ€ν•œ CRUD Operation을 μ μš©ν•˜λŠ” 것을 의미
      • Create : 데이터 생성 (POST)
      • Read : 데이터 쑰회 (GET)
      • Update : 데이터 μˆ˜μ • (PUT, PATCH)
      • Delete : 데이터 μ‚­μ œ (DELETE)μžμ›μ„ μ΄λ¦„μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•΄λ‹Ή μžμ›μ˜ μƒνƒœλ₯Ό μ£Όκ³  λ°›λŠ” λͺ¨λ“  것

 

1.2. κ΅¬μ„±μš”μ†Œ

  1. μžμ›(Resource) : HTTP URI
    • ClientλŠ” URIλ₯Ό μ΄μš©ν•΄ μžμ›μ„ μ§€μ • ν•΄λ‹Ή μžμ›μ˜ μƒνƒœ(정보=Payload)의 μ‘°μž‘μ„ Server에 μš”μ²­
  2. μžμ›μ— λŒ€ν•œ ν–‰μœ„(Verb) : HTTP Method
  3. μžμ›μ— λŒ€ν•œ ν–‰μœ„μ˜ ν‘œν˜„(Representation of Resource)
    • JSON, XML, TEXT, RSSλ“± μ—¬λŸ¬ ν˜•νƒœμ˜ 응닡

 

1.3. νŠΉμ§• 및 μž₯단점

  • νŠΉμ§•
    1. Uniform (μœ λ‹ˆνΌ μΈν„°νŽ˜μ΄μŠ€)
      • λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•˜λŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌ
    2. Stateless (λ¬΄μƒνƒœμ„±)
      • μž‘μ—…μ„ μœ„ν•œ μƒνƒœ 정보λ₯Ό λ”°λ‘œ μ €μž₯ / κ΄€λ¦¬ν•˜μ§€ μ•ŠλŠ”λ‹€
    3. Cacheable (μΊμ‹œ κ°€λŠ₯)
      • HTTPλΌλŠ” κΈ°μ‘΄ μ›Ή ν‘œμ€€μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©
      • → HTTP의 캐싱 κΈ°λŠ₯ 적용 κ°€λŠ₯ (Last-Modified νƒœκ·Έ, E-Tagλ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν˜„ κ°€λŠ₯)
    4. Self-descriptiveness (자체 ν‘œν˜„ ꡬ쑰)
      • REST API λ©”μ‹œμ§€λ§Œ 보고도 μ‰½κ²Œ 이해 κ°€λŠ₯
    5. Client-Server ꡬ쑰
      • Client, Serverμ—μ„œ κ°œλ°œν•  λ‚΄μš©μ΄ λͺ…ν™•ν•˜κ³  μ˜μ‘΄μ„± κ°μ†Œ
        • 각각 ClientλŠ” μ‚¬μš©μž μΈμ¦μ΄λ‚˜ μ»¨ν…μŠ€νŠΈ(μ„Έμ…˜, 둜그인 정보), ServerλŠ” API 제곡 등을 직접 κ΄€λ¦¬ν•˜λŠ” ꡬ쑰
    6. κ³„μΈ΅ν˜• ꡬ쑰
      • 닀쀑 계측 ꡬ성 κ°€λŠ₯→ PROXY, κ²Œμ΄νŠΈμ›¨μ΄ 같은 λ„€νŠΈμ›Œν¬ 기반 쀑간 맀체 μ‚¬μš© κ°€λŠ₯
      • → λ³΄μ•ˆ, λ‘œλ“œ λ°ΈλŸ°μ‹±, μ•”ν˜Έν™” 계측 μΆ”κ°€ν•˜λŠ” ꡬ쑰상 μœ μ—°μ„±
  • μž₯단점
μž₯점 - HTTP ν”„λ‘œν† μ½œ 인프라λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ—¬, REST APIλ₯Ό μœ„ν•œ 별도 인프라 ꡬ좕 ν•„μš” X
- HTTP ν”„λ‘œν† μ½œ ν‘œμ€€μ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬, μ—¬λŸ¬ 좔가적인 μž₯점 ν•¨κ»˜ 가져감
- HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯
- Hypermedia API의 기쀀을 μΆ©μ‹€νžˆ μ§€ν‚€λ©° λ²”μš©μ„± 보μž₯
- REST API λ©”μ‹œμ§€κ°€ μ˜λ„ν•˜λŠ” λ°”λ₯Ό λͺ…ν™•νžˆ λ‚˜νƒ€λƒ„ → μ˜λ„ν•˜λŠ” λ°” μ‰½κ²Œ νŒŒμ•… κ°€λŠ₯
- μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€ λ””μžμΈμ—μ„œ 생길 수 μžˆλŠ” 문제 μ΅œμ†Œν™” - μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 역할을 λͺ…ν™•νžˆ 뢄리
단점 - ν‘œμ€€μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ
- μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ†Œλ“œκ°€ 4κ°€μ§€ λΏμž„ (HTTP Method ν˜•νƒœκ°€ μ œν•œμ )
- λΈŒλΌμš°μ €λ₯Ό 톡해 ν…ŒμŠ€νŠΈν•  일이 λ§Žμ€ μ„œλΉ„μŠ€λΌλ©΄, μ‰½κ²Œ 고칠수 μžˆλŠ” URL보닀 Header μ •λ³΄μ˜ 값을 μ²˜λ¦¬ν•΄μ•Ό ν•˜λ―€λ‘œ 전문성이 μš”κ΅¬λ¨
- κ΅¬ν˜• λΈŒλΌμš°μ €κ°€ μ œλŒ€λ‘œ 지원해주지 λͺ»ν•˜λŠ” λΆ€λΆ„ 쑴재 (ex. PUT / DELETE μ‚¬μš© λΆˆκ°€, pushState 지원 μ•ˆν•¨)

 

 

 

2. REST API

πŸ’‘REST의 원리λ₯Ό λ”°λ₯΄λŠ” API

 

2.0. API λž€?

πŸ’‘Application Programming Interface
  • μ†Œν”„νŠΈμ›¨μ–΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ ꡬ성 μš”μ†Œ λ˜λŠ” μ„œλΉ„μŠ€μ™€ μƒν˜Έ μž‘μš©ν•˜κΈ° μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 기술

 

2.1. REST API 섀계 κ·œμΉ™

2.1.1. 쀑심 κ·œμΉ™

  1. URIλŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€
  2. μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method (GET, POST, PUT, DELETE λ“±)으둜 ν‘œν˜„ν•œλ‹€
    • ν–‰μœ„λŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€

2.1.2. μ„ΈλΆ€ κ·œμΉ™

  1. URIλŠ” μ „λ‹¬ν•˜κ³ μž ν•˜λŠ” μžμ›μ˜ λͺ…사λ₯Ό μ‚¬μš©ν•œλ‹€
    • 컨트둀 μžμ›μ„ μ˜λ―Έν•˜λŠ” 경우 μ˜ˆμ™Έμ μœΌλ‘œ 동사 ν—ˆμš©
  2. URI κ²½λ‘œμ—λŠ” μ†Œλ¬Έμžκ°€ μ ν•©ν•˜λ‹€
  3. 파일 ν™•μž₯μžλŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€
  4. μŠ¬λž˜μ‹œ κ΅¬λΆ„μž(/)λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©ν•œλ‹€
  5. URI λ§ˆμ§€λ§‰ 문자둜 μŠ¬λž˜μ‹œ(/)λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€
  6. 밑쀄(_)은 URI에 μ‚¬μš©ν•˜μ§€ μ•Šκ³ , ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©ν•œλ‹€
  7. λ¦¬μ†ŒμŠ€ 간에 μ—°κ΄€ 관계가 μžˆλŠ” 경우(ex. GET : /users/{userid}/devices (일반적으둜 μ†Œμœ (has)의 관계λ₯Ό ν‘œν˜„ν•  λ•Œ) )
  8. → /λ¦¬μ†ŒμŠ€λͺ…/λ¦¬μ†ŒμŠ€ ID/관계가 μžˆλŠ” λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λͺ…

 

 

 

3. RESTful API

πŸ’‘REST API의 섀계 κ·œμΉ™μ„ μ˜¬λ°”λ₯΄κ²Œ 지킨 μ‹œμŠ€ν…œ
    - RESTλ₯Ό RESTλ‹΅κ²Œ μ“°κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œ, λˆ„κ΅°κ°€ 곡식적 λ°œν‘œν•œ 것은 μ•„λ‹ˆλ‹€
  • REST API의 ꡬ성 μš”μ†Œλ₯Ό λ”°λ₯΄λ©΄μ„œ, URI와 HTTP λ©”μ†Œλ“œλ₯Ό μ μ ˆν•˜κ²Œ μ‚¬μš©ν•˜μ—¬ μžμ› μ‘°μž‘
    • REST APIλ₯Ό κ°œμ„ ν•˜κ³ , 보닀 일관성 μžˆλŠ” API κ΅¬ν˜„ν•˜λ„λ‘ ν•΄μ€€λ‹€
    • μš”μ²­μ„ λ³΄λ‚΄λŠ” μ£Όμ†Œλ§ŒμœΌλ‘œλ„ μ–΄λ–€ 것을 μš”μ²­ν•˜λŠ”μ§€ νŒŒμ•… κ°€λŠ₯ (더 κ°„νŽΈν•˜κ³  직관적인 ꡬ쑰)
  • μ„±λŠ₯이 μ€‘μš”ν•œ 상황이라면 ꡳ이 RESTfulν•œ APIλ₯Ό κ΅¬ν˜„ν•  ν•„μš” X
  • λͺ©μ  : μ΄ν•΄ν•˜κΈ° 쉽고 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ REST APIλ₯Ό λ§Œλ“œλŠ” 것

 

 

 

999. 정리

  • REST : HTTP 기반으둜 λ„€νŠΈμ›Œν¬ μƒμ—μ„œ Client-Server 사이 톡신 방식 쀑 ν•˜λ‚˜
  • REST API : RESTλ₯Ό 기반으둜 μ„œλΉ„μŠ€ APIλ₯Ό κ΅¬ν˜„ν•œ 것
  • RESTful : RESTλ₯Ό RESTλ‹΅κ²Œ, REST 원리λ₯Ό λ”°λ₯΄λŠ” μ‹œμŠ€ν…œ

 

 

 

 

 


πŸ“Œ References

https://junvelee.tistory.com/107

https://khj93.tistory.com/entry/λ„€νŠΈμ›Œν¬-REST-APIλž€-REST-RESTfulμ΄λž€#google_vignette

https://velog.io/@dongjun187/APIλž€-무엇인가

https://dev-coco.tistory.com/97

https://velog.io/@somday/RESTful-API-μ΄λž€#rest-api-탄생-λ°°κ²½

https://digitaloasis.tistory.com/entry/rest-api-and-restful-api

https://dev-coco.tistory.com/97

https://uiop5809.tistory.com/166

 

 

 

 

 

 

 

 

 

728x90