REST 와 REST API

UnKnown12Β·2023λ…„ 1μ›” 5일
0

Web Application Server

λͺ©λ‘ 보기
1/3

πŸ“Œ {REST}

μ›Ή ν•˜μ΄νΌλ―Έλ””μ–΄ μ‹œμŠ€ν…œμ„ μœ„ν•œ 개발 아킀텍쳐

  • μ›Ήμ˜ κΈ°μ‘΄ 기술과 HTTP ν”„λ‘œν† μ½œμ„ κ·ΈλŒ€λ‘œ ν™œμš©ν•˜κ³ 
    μ›Ήμ˜ μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” 아킀텍쳐 μŠ€νƒ€μΌ

πŸ“Œ REST κ°œλ…

HTTP URIλ₯Ό 톡해 λ¦¬μ†ŒμŠ€λ₯Ό λͺ…μ‹œν•˜κ³ 
HTTP METHOD( POST / GET / UPDATE / DELETE ) λ₯Ό 톡해
ν•΄λ‹Ή μžμ›μ˜ CRUD Operation을 μ μš©ν•˜λŠ”κ²ƒμ„ 의미
(
CRUD Operation = Create(POST) / Read(GET) / Update / Delete )

πŸ€” REST κ°€ ν•„μš”ν•œ 이유

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 뢄리 와 톡합
  • μ–΄λ– ν•œ ν΄λΌμ΄μ–ΈνŠΈ , ν”Œλž«νΌ (ex 크둬, νŒŒμ΄μ–΄ν­μŠ€, μ•ˆλ“œλ‘œμ΄λ“œ , μ• ν”Œ )
    μ—μ„œλ„ 톡신이 κ°€λŠ₯ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

πŸ“Œ REST μž₯점

  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ™„μ „νžˆ 뢄리
  • HTTP ν‘œμ€€μ„ μ‚¬μš©ν•˜κΈ° 에 λ³„λ„μ˜ 인프라 없이 λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš©κ°€λŠ₯
  • REST API λ₯Ό 톡해 μ˜λ„ν•˜λŠ” λ°”λ₯Ό μ‰½κ²Œ νŒŒμ•…κ°€λŠ₯

πŸ“Œ REST ꡬ성 μš”μ†Œ

  • μžμ›(Resoruce) - URI
  • ν–‰μœ„(Verb) - HTTP METHOD
  • ν‘œν˜„(Representations)

둜 κ΅¬μ„±λ˜μ–΄ 있으며 μ›Ή μ„œλΉ„μŠ€ λ‚΄μ—μ„œ
μžμ›μ˜ 이름 ( μžμ›μ˜ ν‘œν˜„) 으둜 κ΅¬λΆ„ν•˜μ—¬ ν•΄λ‹Ή μžμ›μ˜ μƒνƒœ(정보)λ₯Ό μ£Όκ³  λ°›λŠ” λͺ¨λ“  것을 μ˜λ―Έν•œλ‹€.

  • μžμ›μ˜ ν‘œν˜„ ( Resource Representaiton)

    • μžμ›(Resource) : ν•΄λ‹Ή μ†Œν”„νŠΈμ›¨μ–΄κ°€ κ΄€λ¦¬ν•˜λŠ” λͺ¨λ“ κ²ƒ
      Ex) 데이터, κ·Έλ¦Ό&λ¬Έμ„œ , ν•΄λ‹Ή μ†Œν”„νŠΈμ›¨μ–΄ 자체 ... λ“±λ“±
    • μžμ›μ˜ ν‘œν˜„: κ·Έ μžμ›μ„ ν‘œν˜„ν•˜κΈ° μœ„ν•œ 이름
      Ex) DBμ—μ„œ "ID" 의 데이터가 μžμ›μΌ λ•Œ, 'id' λ₯Ό μžμ›μ˜ ν‘œν˜„μœΌλ‘œ μ§€μ •ν•œλ‹€.
  • μƒνƒœ(정보) 전달

    • 데이터가 μš”μ²­λ˜μ–΄μ§€λŠ” μ‹œμ μ—μ„œ μžμ›μ˜ μƒνƒœ(정보)λ₯Ό μ „λ‹¬ν•œλ‹€.
      Ex) 주둜 JSON ν˜Ήμ€ XML 을 톡해 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이 일반적
    • Spring μ—μ„œλŠ” Controller μ˜μ—­μ—μ„œ μ‚¬μš©μžμ˜ 업무λ₯Ό μ²˜λ¦¬ν•  λ•Œ
      Mapping λ‹¨κ³„μ—μ„œ 정보λ₯Ό μ£Όκ³ λ°›λŠ”λ‹€

πŸ“Œ REST νŠΉμ§• 6가지

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

  • μ„œλ²„ 와 ν΄λΌμ΄μ–ΈνŠΈ λ₯Ό λͺ…ν™•νžˆ κ΅¬λΆ„ν•˜μ—¬
    μ„œλ‘œ κ°„μ˜ μ˜μ‘΄μ„±μ„ 두지 μ•ŠλŠ”λ‹€.

  • μ„œλ²„ : API λ₯Ό μ œκ³΅ν•˜κ³  λΉ„μ§€λ‹ˆμŠ€ 둜직 처리 및 μ €μž₯을 κ΄€λ¦¬ν•˜κ³  μ±…μž„μ§„λ‹€.

  • ν΄λΌμ΄μ–ΈνŠΈ : μ‚¬μš©μžμ˜ 인증 , μ„Έμ…˜ 및 둜그인 정보λ₯Ό 직접 κ΄€λ¦¬ν•˜κ³  μ±…μž„μ§„λ‹€

2. Stateless λ¬΄μƒνƒœ

  • HTTP ν”„λ‘œν† μ½œ 의 λ¬΄μƒνƒœμ„±μœΌλ‘œ
    μ„Έμ…˜Β·μΏ ν‚€μ— 신경쓰지 μ•Šμ•„λ„ λ˜κΈ°μ— κ΅¬ν˜„μ΄ λ‹¨μˆœν•΄μ•Όν•œλ‹€.

  • ❗ μ„œλ²„μ—μ„œ μš”μ²­μ„ μ™„μ „νžˆ λ³„κ°œμ˜ κ²ƒμœΌλ‘œ μΈμ‹ν•˜μ—¬
    각각의 μš”μ²­μ„ λ³„λ„λ‘œ μ²˜λ¦¬ν•œλ‹€.

ex) 각 API μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­λ§Œμ„ λ‹¨μˆœ μ²˜λ¦¬ν•œλ‹€.
이 λ•Œ, 이전 μš”μ²­μ΄ λ‹€μŒ μš”μ²­μ˜ μ²˜λ¦¬μ— μ—°κ΄€λ˜μ–΄μ„œλŠ” μ•ˆλœλ‹€.
( λ¬Όλ‘  이전 μš”μ²­μ΄ DBλ₯Ό μˆ˜μ •ν•˜μ—¬ DB에 μ˜ν•΄ λ°”λ€ŒλŠ” 것은 ν—ˆμš© )
μ΄λ‘œμΈν•΄ μ„œλ²„μ˜ μ²˜λ¦¬λ°©μ‹μ— 일관성이 λΆ€μ—¬λ˜κ³ , 뢀담이 쀄어듀며 μ„œλΉ„μŠ€μ˜ μžμœ λ„κ°€ 높아진닀.

3. Cacheable μΊμ‹œ 처리 κ°€λŠ₯

  • HTTP의 인프라λ₯Ό μ‚¬μš©ν•˜μ—¬
    HTTP의 캐싱 κΈ°λŠ₯이 μ‚¬μš©κ°€λŠ₯ν•΄μ•Όν•œλ‹€.

+캐싱 κΈ°λŠ₯을 톡해 응닡이 빨라 지고
μ„œλ²„ νŠΈλžœμž­μ…˜μ΄ λ°œμƒν•˜μ§€ μ•Šκ³  μ„œλ²„μžμ› 이용λ₯ μ„ ν–₯μƒμ‹œν‚¨λ‹€.

4. Layered System 계측화

  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 였직 REST API μ„œλ²„λ§Œ ν˜ΈμΆœν•œλ‹€
    λ”°λΌμ„œ REST μ„œλ²„λŠ” λ‹€μΈ΅μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€.

  • API μ„œλ²„λŠ” 순수 λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ³ 
    λ³΄μ•ˆ Β· λ‘œλ“œλ°ΈλŸ°μ‹± Β· μ•”ν˜Έν™” Β· μ‚¬μš©μžμΈμ¦ λ“±μ˜ κ΅¬μ‘°λŠ”
    λ‹€λ₯Έκ³„측에 μ„€μ •ν•˜μ—¬ κ΅¬μ‘°μƒμ˜ μœ μ—°μ„±μ— μœ λ¦¬ν•˜λ‹€.

5. Code - On - Demand ( ❗Optional )

  • μ„œλ²„λ‘œλΆ€ν„° 슀크립트λ₯Ό λ°›μ•„ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‹€ν–‰ν•œλ‹€.
    ❗ 이 μ˜΅μ…˜μ€ ν•„μˆ˜κ°€ μ•„λ‹Œ μ„ νƒμ˜΅μ…˜μ΄λ‹€

6. Uniform Interface μΈν„°νŽ˜μ΄μŠ€ 일관성

  • URI둜 μ§€μ •ν•œ Resource 에 λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •λœ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•œλ‹€.

  • HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ€ λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•΄μ•Όν•˜κΈ°μ—
    νŠΉμ • μ–Έμ–΄ λ‚˜ κΈ°μˆ μ— μ’…μ†λ˜μ–΄μ„  μ•ˆλœλ‹€.

πŸ“Œ REST API

Application Programming Interface

  • API λž€
    데이터와 κΈ°λŠ₯의 집합을 μ œκ³΅ν•˜μ—¬ ν”„λ‘œκ·Έλž¨κ°„ μ„œλ‘œ 정보λ₯Ό κ΅ν™˜κ°€λŠ₯ ν•˜λ„λ‘ ν•˜λŠ” 것.

REST 기반으둜 μ„œλΉ„μŠ€ API λ₯Ό κ΅¬ν˜„ν•œ 것을 REST API라 λΆ€λ₯Έλ‹€

πŸ“Œ REST API νŠΉμ§•

  • REST 기반으둜 μ‹œμŠ€ν…œμ„ λΆ„μ‚°ν•˜μ—¬ ν™•μž₯μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ λ†’νžˆκ³ 
    μœ μ§€λ³΄μˆ˜ Β· μš΄μš©μ„ νŽΈλ¦¬ν•˜κ²Œν•œλ‹€.

  • REST κΈ°λ°˜μ΄κΈ°μ— λ‹Ήμ—°νžˆ HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ„ 기반으둜 ν•˜λ©°,
    HTTP 의 μ„œλ²„ <-> ν΄λΌμ΄μ–ΈνŠΈμ˜ ꡬ쑰λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

πŸ“Œ REST API κ·œμΉ™

  1. URI λŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

  2. μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP METHOD ( POST , GET , UPDATE , DELETE ) 둜 ν‘œν˜„ν•΄μ•Όν•œλ‹€.

  3. μŠ¬λž˜μ‹œ (/) λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©ν•œλ‹€.

  4. ν•˜μ΄ν”ˆ (-) URI 가독성을 높이기 μœ„ν•΄ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€

  5. 언더바 (_) λŠ” URIμ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€

  6. URI κ²½λ‘œμ— λŒ€λ¬Έμž μ‚¬μš©μ„ ν”Όν•˜λ„λ‘ν•œλ‹€.

  7. 파일 ν™•μž₯자 (.file) 은 URI 에 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€

❗ REST API 섀계 μ˜ˆμ‹œ

πŸ“Œ RESTful

  • REST 아킀텍쳐λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό ν‰κ°€ν•˜λŠ” μš©μ–΄

  • REST κ°œλ…κ³Ό νŠΉμ§•μ„ 잘 μ‚¬μš© Β· ν‘œν˜„ν•œ μ›Ή μ„œλΉ„μŠ€λ₯Ό
    "RESTful" 둜 ν˜•μš©ν•œλ‹€

πŸ“Œ RESTful의 λͺ©μ 

  • μ΄ν•΄ν•˜κΈ° 쉽고 μ‚¬μš©ν•˜κΈ° μ‰¬μ›Œμ•Όν•œλ‹€
    λ˜ν•œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ–΄λ– ν•œ ν™˜κ²½ Β· μš”μ²­μ΄μ—¬λ„ ν˜Έν™˜ν•˜μ—¬
    λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•΄μ•Όν•œλ‹€.

πŸ“Œ Not RESTful

  • CRUD κΈ°λŠ₯을 POST둜만 μ²˜λ¦¬ν•˜λŠ” 경우

  • REST API κ·œμΉ™ Β· νŠΉμ§•μ— λ§žμ§€ μ•ŠλŠ” 경우

자료 μΆœμ €

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

profile
Hyobin12

0개의 λŒ“κΈ€