1 minute read

๐Ÿ“˜ REST ๋ž€?

  • REST๋Š” Representational State Transfer์˜ ์•ฝ์ž๋กœ์จ, ๋Œ€ํ‘œ ์ƒํƒœ ์ „์†ก ์ด๋ž€ ๋œป์ด๋‹ค.
  • ์ฆ‰, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž์›์— ๋Œ€ํ•˜์—ฌ ๋Œ€ํ‘œ์ ์ธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ 
  • URI์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ
  • ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๐Ÿ“Œ ๊ตฌ์„ฑ์š”์†Œ

  • ์ž์›(Resource) : URI
  • ํ–‰์œ„(Verb) : HTTP Method
  • ํ‘œํ˜„(Representation of Resource)

๐Ÿ“Œ ํŠน์ง•

  • Server-Client (ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜)
    • ์„œ๋กœ์— ๋Œ€ํ•œ ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๋Š” ๊ธฐ๋Šฅ
  • Stateless (๋ฌด์ƒํƒœ์„ฑ)
    • ์„œ๋ฒ„์— ์ƒํƒœ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ฐ๊ฐ์˜ ๋ชจ๋“  ์š”์ฒญ์„ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ , ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • Cacheable (์บ์‹œ ๊ฐ€๋Šฅ์„ฑ)
    • ์›น ํ‘œ์ค€ HTTP ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์บ์‹œ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์บ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ •๋ณด์— ๋Œ€ํ•ด์„œ๋Š” ์บ์‹œ์— ์ €์žฅํ•ด๋‘๊ณ  ๊ฐ™์€ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • Layered System (๊ณ„์ธตํ™”)
    • REST ์„œ๋ฒ„๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์— ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ•˜์ง€๋งŒ, Clients๋Š” REST API Server ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
  • Uniform Interface (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)
    • REST ์„œ๋ฒ„๋Š” HTTP ํ‘œ์ค€ ์ „์†ก ๊ทœ์•ฝ์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋– ํ•œ ์–ธ์–ด๋กœ ๋งŒ๋“ค์—ˆ๋Š”์ง€์™€ ์ƒ๊ด€์—†์ด, ํ”Œ๋žซํผ ๋ฐ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ํƒ€ ์–ธ์–ด, ํ”Œ๋žซํผ, ๊ธฐ์ˆ ๊ณผ ํ˜ธํ™˜ ๋ฐ ์—ฐ๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Code-On-Demand
    • Server๋กœ๋ถ€ํ„ฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ›์•„์„œ Client์—์„œ ์‹คํ–‰ํ•œ๋‹ค.


๐Ÿ“– API ๋ž€?

API๋ž€ Application Programming Interface์˜ ์•ฝ์ž๋กœ, API๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
์—ฌ๋Ÿฌ๊ฐ€์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด ํ†ต์‹ ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ, ์„œ๋กœ ์–ด๋– ํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด๋‚˜ ๋ฐ˜์‘์— ๋Œ€ํ•œ ํ†ต์‹ ๊ทœ์•ฝ์„ ์ •์˜ํ•œ ๊ฒƒ์„ ์ •์˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ API ๋ฅผ ํ†ตํ•˜์—ฌ ์„œ๋ฒ„๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“Œ REST API

  • REST API ๋Š” REST์˜ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” API ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • REST ์•„ํ‚คํ…์ณ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ RESTFULํ•˜๋‹ค ๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.


๐Ÿ“– REST์˜ URL ์„ค๊ณ„ ๊ทœ์น™

  • ๋„ํ๋จผํŠธ : ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์™€ ์œ ์‚ฌํ•œ ๊ฐœ๋…
  • ์ปฌ๋ ‰์…˜ : ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ผ๋Š” ๋ฆฌ์†Œ์Šค
  • ์Šคํ† ์–ด : ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ

  • ULR์—๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผํ•œ๋‹ค.
    • ๋™์‚ฌ -> ๋ช…์‚ฌ, ๋Œ€๋ฌธ์ž -> ์†Œ๋ฌธ์ž
    • ์ปฌ๋ž™์…˜ ์ด๋ฆ„์œผ๋กœ๋Š” ๋ณต์ˆ˜๋ช…์‚ฌ ์‚ฌ์šฉ
    • ์Šคํ† ์–ด ์ด๋ฆ„์œผ๋กœ๋Š” ๋ณต์ˆ˜๋ช…์‚ฌ ์‚ฌ์šฉ
  • ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/)
    • URL์˜ ๋งˆ์ง€๋ง‰์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ•˜์ดํฐ ์‚ฌ์šฉ (-)
    • ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๊ธด URL ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒœ๋‚ผ ๋•Œ ์‚ฌ์šฉ
    • ์–ธ๋”๋ฐ” (_)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํŒŒ์ผ์˜ ํ™•์žฅ์ž๋Š” URL์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • HTTP ์—์„œ ์ œ๊ณตํ•˜๋Š” Accept ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.



๊ฐœ์ธ ๊ณต๋ถ€ ๊ธฐ๋ก์šฉ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
ํ‹€๋ฆฌ๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์ œ๋ณดํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.๐Ÿ˜