REST λž€

REST λž€

REST(Representational State Transfer) λŠ” μ›Ή μƒμ—μ„œ λΆ„μ‚° μ‹œμŠ€ν…œ, 특히 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μƒν˜Έ μž‘μš©μ„ μ„€κ³„ν•˜κΈ° μœ„ν•œ μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμž„.

2000λ…„ 둜이 필딩이 μžμ‹ μ˜ λ°•μ‚¬ν•™μœ„ λ…Όλ¬Έμ—μ„œ 처음 μ†Œκ°œν•œ κ°œλ…μœΌλ‘œ, μ˜€λŠ˜λ‚  RESTful API λ₯Ό 톡해 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 데이터λ₯Ό μ£Όκ³ λ°›λŠ” ν‘œμ€€ 방식 쀑 ν•˜λ‚˜λ‘œ 자리 μž‘μ•˜μŒ.


핡심 κ°œλ…

Resource

  • μ •μ˜ : REST μ—μ„œλŠ” λͺ¨λ“  것이 λ¦¬μ†ŒμŠ€(λ°μ΄ν„°λ‚˜ κΈ°λŠ₯)둜 취급됨. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μž, κ²Œμ‹œκΈ€, 사진 등이 λͺ¨λ‘ λ¦¬μ†ŒμŠ€μž„.

  • 식별 : 각 λ¦¬μ†ŒμŠ€λŠ” κ³ μœ ν•œ URI(Uniform Resource Identifier) λ₯Ό 톡해 식별됨. 예λ₯Ό λ“€μ–΄, https://api.example.com/users/123 λŠ” ID κ°€ 123인 μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λƒ„.

ν‘œν˜„(Representation)

  • μ •μ˜ : ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” λ¦¬μ†ŒμŠ€μ˜ μƒνƒœλ₯Ό 전솑할 λ•Œ κ·Έ λ¦¬μ†ŒμŠ€μ˜ 'ν‘œν˜„'(Representation) 을 μ£Όκ³ λ°›μŒ. 일반적으둜 JSON, XML, HTML λ“± λ‹€μ–‘ν•œ ν˜•μ‹μœΌλ‘œ ν‘œν˜„λ¨.

  • μ—­ν•  : ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„κ°€ 보낸 ν‘œν˜„μ„ ν•΄μ„ν•˜μ—¬ 화면에 ν‘œμ‹œν•˜κ±°λ‚˜, 좔가적인 처리λ₯Ό ν•  수 있음.

HTTP λ©”μ„œλ“œ

  • GET : λ¦¬μ†ŒμŠ€ 쑰회

  • POST : λ¦¬μ†ŒμŠ€ 생성

  • PUT/PATCH : λ¦¬μ†ŒμŠ€ μˆ˜μ •(전체 λ˜λŠ” 일뢀)

  • DELETE : λ¦¬μ†ŒμŠ€ μ‚­μ œ


REST 의 μ œμ•½ 쑰건

REST μ•„ν‚€ν…μ²˜λŠ” λͺ‡ κ°€μ§€ μ€‘μš”ν•œ μ œμ•½ 쑰건을 따름. 이 μ œμ•½ 쑰건듀을 μ§€ν‚΄μœΌλ‘œμ¨ μ‹œμŠ€ν…œμ€ ν™•μž₯μ„±κ³Ό μ„±λŠ₯, 독립성을 확보할 수 있음.

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

  • μ„€λͺ… : ν΄λΌμ΄μ–ΈνŠΈ(μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€)와 μ„œλ²„(데이터 및 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직) κ°€ λΆ„λ¦¬λ˜μ–΄ μ„œλ‘œ λ…λ¦½μ μœΌλ‘œ λ°œμ „ν•  수 있음.

  • μž₯점 : μ„œλ‘œ λ‹€λ₯Έ 기술 μŠ€νƒμ„ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©°, λ³΄μ•ˆ, ν™•μž₯μ„±, μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§.

Stateless(λ¬΄μƒνƒœμ„±)

  • μ„€λͺ… : 각 μš”μ²­μ€ μ„œλ²„κ°€ μ΄μ „μ˜ μš”μ²­ μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠλŠ” 독립적인 λ‹¨μœ„λ‘œ 처리됨. λͺ¨λ“  ν•„μš”ν•œ μ •λ³΄λŠ” μš”μ²­ μ•ˆμ— ν¬ν•¨λ˜μ–΄μ•Ό 함.

  • μž₯점 : μ„œλ²„μ˜ λ³΅μž‘μ„±μ„ 쀄이고, ν™•μž₯성을 높이며, μš”μ²­μ΄ λ…λ¦½μ μ΄λ―€λ‘œ λΆ€ν•˜ 뢄산이 μš©μ΄ν•¨.

μΊμ‹œ 처리 κ°€λŠ₯(Cacheable)

  • μ„€λͺ… : HTTP ν”„λ‘œν† μ½œμ˜ μΊμ‹œ λ©”μ»€λ‹ˆμ¦˜μ„ ν™œμš©ν•˜μ—¬, ν΄λΌμ΄μ–ΈνŠΈλ‚˜ 쀑간 ν”„λ‘μ‹œκ°€ 응닡을 μ €μž₯ν•΄ 두고 λ™μΌν•œ μš”μ²­μ— λŒ€ν•΄ μ„œλ²„μ˜ λΆ€ν•˜λ₯Ό 쀄일 수 있음.

  • μž₯점 : 응닡 속도가 빨라지고, λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ΄ 쀄어듬.

κ³„μΈ΅ν™”λœ μ‹œμŠ€ν…œ(Layered System)

  • μ„€λͺ… : ν΄λΌμ΄μ–ΈνŠΈλŠ” 보톡 μ„œλ²„μ— 직접 μ ‘κ·Όν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ—¬λŸ¬ 쀑간 계측(예 : λ‘œλ“œ λ°ΈλŸ°μ„œ, ν”„λ‘μ‹œ, κ²Œμ΄νŠΈμ›¨μ΄ λ“±) 을 톡해 μ„œλ²„μ™€ 톡신함.

  • μž₯점 : λ³΄μ•ˆ, λ‘œλ“œ λΆ„μ‚°, 그리고 μ‹œμŠ€ν…œ ꡬ쑰의 μœ μ—°μ„±μ΄ ν–₯상됨.

κ· μΌν•œ μΈν„°νŽ˜μ΄μŠ€(Uniform Interface)

  • μ„€λͺ… : REST λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μƒν˜Έμž‘μš©μ„ λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ μΌκ΄€λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•¨. 이λ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ κ°„μ˜ μƒν˜Έ μš΄μš©μ„±μ΄ μ¦λŒ€λ¨.

  • μ£Όμš” 원칙 :

    • λ¦¬μ†ŒμŠ€ 식별 : URI λ₯Ό ν†΅ν•œ λͺ…ν™•ν•œ 식별

    • ν‘œν˜„μ˜ 전솑 : λ°μ΄ν„°λŠ” λ‹€μ–‘ν•œ 포맷(JSON, XML λ“±) 으둜 전솑

    • 자체 μ„œμˆ μ  λ©”μ‹œμ§€ : λ©”μ‹œμ§€ μžμ²΄μ— μΆ©λΆ„ν•œ 정보가 ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό 함.

    • ν•˜μ΄νΌλ―Έλ””μ–΄μ˜ μ‚¬μš©(HATEOAS) : 응닡에 ν¬ν•¨λœ 링크λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€μŒ 행동을 κ²°μ •ν•  수 μžˆλ„λ‘ 지원

μ½”λ“œ 온 λ””λ§¨λ“œ(선택적)

  • μ„€λͺ… : μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό 전솑할 수 μžˆλŠ” μ˜΅μ…˜μž„. 예λ₯Ό λ“€μ–΄ JavaScript μ½”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보내 μ‹€ν–‰ν•˜κ²Œ ν•  수 있음.

  • 주의 : 이 μ œμ•½ 쑰건은 선택적이며, λͺ¨λ“  RESTful μ‹œμŠ€ν…œμ— μ‚¬μš©λ˜μ§€λŠ” μ•ŠμŒ.


RESTful API

REST 의 원칙을 λ”°λ₯΄λŠ” μ›Ή API λ₯Ό ν”νžˆ RESTful API 라고 뢀름. RESTful API λŠ” λ‹€μŒκ³Ό 같은 νŠΉμ§•μ„ 가짐.

  • μžμ›μ˜ λͺ…ν™•ν•œ ν‘œν˜„ : 각 λ¦¬μ†ŒμŠ€λŠ” URI λ₯Ό 톡해 μ‹λ³„λ˜κ³ , HTTP λ©”μ„œλ“œλ₯Ό 톡해 μ‘°μž‘λ¨.

  • λ¬΄μƒνƒœμ„± : 각 μš”μ²­μ€ 독립적이며 ν•„μš”ν•œ λͺ¨λ“  정보λ₯Ό 포함함.

  • ν‘œμ€€ν™”λœ 응닡 : 응닡은 주둜 JSON λ˜λŠ” XML 포맷으둜 μ œκ³΅λ˜μ–΄, λ‹€μ–‘ν•œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‰½κ²Œ νŒŒμ‹±ν•  수 있음.

  • ν™•μž₯μ„± 및 μœ μ§€λ³΄μˆ˜ 용이 : ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 뢄리가 λͺ…ν™•ν•˜μ—¬, μ‹œμŠ€ν…œ ν™•μž₯이 μš©μ΄ν•˜κ³  μœ μ§€ λ³΄μˆ˜κ°€ νŽΈλ¦¬ν•¨.


REST 의 μž₯단점

μž₯점

  • λ‹¨μˆœμ„± : HTTP ν”„λ‘œν† μ½œμ˜ ν‘œμ€€ λ©”μ„œλ“œμ™€ URI λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΄ν•΄ν•˜κΈ° 쉬움.

  • μœ μ—°μ„± : λ‹€μ–‘ν•œ ν΄λΌμ΄μ–ΈνŠΈ(μ›Ή, λͺ¨λ°”일 λ“±)와 μ‰½κ²Œ 톡신할 수 있음.

  • ν™•μž₯μ„± : λ¬΄μƒνƒœμ„±κ³Ό κ³„μΈ΅ν™”λœ μ•„ν‚€ν…μ²˜ 덕뢄에 μ„œλ²„ ν™•μž₯이 μš©μ΄ν•¨.

  • 캐싱 : HTTP μΊμ‹œλ₯Ό ν™œμš©ν•΄ 응닡 속도λ₯Ό 높이고 μ„œλ²„ λΆ€ν•˜λ₯Ό 쀄일 수 있음.

단점

  • λ³΅μž‘ν•œ νŠΈλžœμž­μ…˜ 처리의 어렀움 : μƒνƒœλ₯Ό μ„œλ²„μ— μ €μž₯ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, μ—¬λŸ¬ μš”μ²­ κ°„μ˜ νŠΈλžœμž­μ…˜ 관리가 μ–΄λ €μšΈ 수 있음.

  • HATEOAS κ΅¬ν˜„μ˜ 어렀움 : μ™„μ „ν•œ ν•˜μ΄νΌλ―Έλ””μ–΄ μ œμ–΄λ₯Ό κ΅¬ν˜„ν•˜κΈ°κ°€ ν˜„μ‹€μ μœΌλ‘œ λ³΅μž‘ν•  수 있음.

  • HTTP μ˜μ‘΄μ„± : REST λŠ” 주둜 HTTP ν”„λ‘œν† μ½œμ— κΈ°λ°˜ν•˜λ―€λ‘œ, λ‹€λ₯Έ ν”„λ‘œν† μ½œμ—μ„œλŠ” 적용이 μ–΄λ €μšΈ 수 있음.

Last updated

Was this helpful?