์ƒˆ์†Œ์‹

๐Ÿ’ป Web/-- HTTP | Network

RESTful API, ์›น์„œ๋น„์Šค(Web Service)

  • -

RESTful Api๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

์•ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋Š” ํŒŒ์ผ์„ ๋”ฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์•ฑ ๋‚ด๋ถ€์— ๋„ฃ์–ด๋‘๊ณ , ์ด ํŒŒ์ผ์„ ์ฝ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ฝ˜ํ…์ธ  ์„œ๋น„์Šค ์•ฑ์€ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ต์‹ฌ์š”์†Œ์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋งˆ๋‹ค ์‚ฌ์šฉ์ž๋Š” ์•ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์•„์•ผํ•˜๊ณ , ๊ทธ๋Ÿด์ˆ˜๋ก ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์€ ์ ์  ๋‚˜๋น ์ง€๊ฒŒ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ๋‘๊ณ , ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ , ์•ฑ์€ ์ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„๋‚ด๋ฉด ์‚ฌ์šฉ์ž๋Š” ์•ฑ์—๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์—†์ด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

๋น„์—ฐ๊ฒฐ์„ฑ ์ง€ํ–ฅ ํ†ต์‹ 

๋ฒ”์šฉ์ ์ธ ๋ชจ๋ฐ”์ผ ํ†ต์‹ ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์€ ๋น„์—ฐ๊ฒฐ์„ฑ ์ง€ํ–ฅ ํ†ต์‹ (HTTP / HTTPS ํ”„๋กœํ† ์ฝœ)์ด๋‹ค. ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด, ๋งž๋Š” ์‘๋‹ต์„ ๋ณด๋‚ธ ํ›„์— ๋ฐ”๋กœ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์—ฐ๊ฒฐ์„ฑ ์ง€ํ–ฅ ํ†ต์‹ ์ด๋ผ ๋ถˆ๋ฆฐ๋‹ค.

 

 

์›น ์„œ๋น„์Šค(Web Service)

์ผ๋ฐ˜์ ์ธ ์›น์‚ฌ์ดํŠธ๋Š” HTMLํŒŒ์ผ์„ ๋ Œ๋”๋งํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐ€์ง€ UI๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋„์šด๋‹ค. ์›น ์„œ๋น„์Šค๋Š” HTTP/HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ชจ๋“ˆ์„ ๋งํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์›น ์„œ๋น„์Šค๋Š” ์•„ํ‚คํ…์ณ์— ๋”ฐ๋ผ์„œ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰œ๋‹ค

  • RESTful (Representational State Transfer)
  • SOAP (Simple Object Access Protocol)

๋ฐ์ดํ„ฐ ํƒ€์ž…๋„ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  • XML
  • JSON

RESTful์—์„œ๋Š” ์ฃผ๋กœ JSON๊ณผ ํ•จ๊ป˜ ์“ฐ์ด๊ณ , SOAP์—์„œ๋Š” XML์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

 

RESTful

REST๋Š” ์‹ค์งˆ์ ์ธ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์€ ์•„๋‹ˆ๊ณ , ๋„คํŠธ์›Œํฌ ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์ด๋‹ค. ์›น ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์ง€๋งŒ, ์ฟ ํ‚ค, SOAP๋“ฑ์˜ ์ „์†ก ํ”„๋กœํ† ์ฝœ ์—†์ด ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ํ˜•์‹์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญํ•˜๋ ค๋Š” ์ •๋ณด๋ฅผ URI๋ฅผ ํ†ตํ•ด์„œ ๋‚˜ํƒ€๋‚ธ๋‹ค. URI๋Š” ์Šฌ๋ž˜์‹œ๋ฅผ ํ†ตํ•ด ๋‹จ์œ„๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด http://mvmv.co.kr/movie/2021/action

์œ„ URI๋Š” ์˜ํ™”, 2021, ์•ก์…˜ ์ด๋ผ๋Š” ๊ณ„์ธต์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ ์žˆ๋‹ค. ์ด ์š”์ฒญํ˜•์‹์€ ์„œ๋ฒ„์˜ ์š”์ฒญ ๊ทœ๊ฒฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ด๋ฅผ ์ง€์ผœ์•ผํ•œ๋‹ค.

(์‹ค๋ฌด์—์„œ๋Š” ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์š”์ฒญ ํ˜•์‹์„ ์ •์˜ - > ์•ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋”ฐ๋ฅด๋Š” ๊ตฌ์กฐ)

 

 

RESTful API์—์„œ HTTP๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜

  • GET : ํŠน์ • ๋ฆฌ์†Œ์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ๋•Œ
  • POST : ID ์—†์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ / ์ˆ˜์ •
  • PUT : ID ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ / ์ˆ˜์ •
  • DELETE : ๋ฆฌ์†Œ์Šค ์‚ญ์ œ
  • HEAD : GET ๋ฐฉ์‹ ์š”์ฒญ์ด์ง€๋งŒ ๋‚ด์šฉ ์—†์ด ๋ฉ”ํƒ€ ์ •๋ณด ์š”์ฒญ
  • OPTION : ํŠน์ • URL์— ๋Œ€ํ•œ ๋ณด์กฐ ๋ฉ”์†Œ๋“œ ์—ญํ• 

 

HTTP๋ฉ”์„œ๋“œ๊ฐ€ ๋”ฐ๋กœ ์žˆ๋Š” ์ด์œ 

URI๊ตฌ์„ฑ ๊ถŒ๊ณ ์— ๋”ฐ๋ฅด๋ฉด RESTful์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ URI์—๋Š” ์ •๋ณด์˜ ๋ถ„๋ฅ˜ ์ฒด๊ณ„๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.์ฆ‰, ๋™์ž‘์— ๊ด€ํ•œ ๋ช…์„ธ๋Š” URI๊ฐ€ ์•„๋‹Œ ์œ„ HTTP๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘์„ ๊ตฌ๋ถ„ํ• ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด http://facebook/article/create ์ฒ˜๋Ÿผ URI์— ๋™์ž‘์ด ํฌํ•จ๋˜๋ฉด ์•ˆ๋œ๋‹ค.

 

 

REST์˜ ํŠน์ง•

  • ์›น์˜ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค(๋ฌธ์„œ,๊ทธ๋ฆผ,๋ฐ์ดํ„ฐ)๋Š” URI๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. Addressabililty
  • ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋Š” ๊ตฌ์กฐ์ ์ด๋ฉฐ, ์œ ๊ธฐ์ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Connectedness
  • ๋น„์ƒํƒœ ์ง€ํ–ฅ์ ์ธ ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅธ๋‹ค. Statelessness
  • ์ •ํ•ด์ง„ ๋ฉ”์„œ๋“œ(HTTP Method)๋งŒ์„ ์‚ฌ์šฉํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•„ํ‚คํ…์ณ์ด๋‹ค. Homogeneous interface

์•„ํ‚คํ…์ฒ˜ (architecture) : ์˜๋‹จ์–ด๋กœ๋Š” "๊ฑด์ถ•ํ•™"์ด๋ผ๋Š” ๋œป. ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„์™€ ๋””์ž์ธ(์ฒญ์‚ฌ์ง„ ? ์„ค๊ณ„๋„? ์ •๋„๋กœ ์ดํ•ดํ•˜๋ฉด ๋ ๊ฒƒ๊ฐ™๋‹ค.)

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.