[BE Study] #4. Django Rest Framework

kiteBยท2021๋…„ 9์›” 1์ผ
0

BE-Study

๋ชฉ๋ก ๋ณด๊ธฐ
4/4
post-thumbnail

๐Ÿ“Œ 4์ฃผ์ฐจ ์Šคํ„ฐ๋”” ํ‚ค์›Œ๋“œ ๋ฐ ์งˆ๋ฌธ


[ํ‚ค์›Œ๋“œ]

  • HTTP Method
  • REST API
  • RESTful API
  • Django Rest Framework
  • Postman

[์งˆ๋ฌธ๋ฆฌ์ŠคํŠธ]

  • REST API, RESTful API๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
  • HTTP Method์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

โœ” REST API, RESTful API๋ž€?


REST๋ž€?

REpresentational State Transfer์˜ ์•ฝ์ž๋กœ, ์›น์— ์กด์žฌํ•˜๋Š” ์ž์›์— ๊ณ ์œ ํ•œ URI๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

REST ๊ตฌ์„ฑ

  • ์ž์›(Resource): URI(Uniform Resource Identifier)๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ–‰์œ„(Verb): HTTP Method
  • ํ‘œํ˜„(Representations): ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

REST ํŠน์ง•

1. ํด๋ผ์ด์–ธํŠธ / ์„œ๋ฒ„ ๊ตฌ์กฐ (Client-Server)
์ž์›์ด ์žˆ๋Š” Server , ์ž์›์„ ์š”์ฒญํ•˜๋Š” Client์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

2. ๋ฌด์ƒํƒœ (Stateless)
HTTP๋Š” Stateless ํ”„๋กœํ† ์ฝœ ์ด๋ฏ€๋กœ REST ์—ญ์‹œ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ€์ง„๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ Context ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

3. ์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ (Cachealble)
์›น ํ‘œ์ค€ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ , ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

4. ๊ณ„์ธตํ™”
API ์„œ๋ฒ„๋Š” ์ˆœ์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ์•ž๋‹จ์— ์‚ฌ์šฉ์ž ์ธ์ฆ , ์•”ํ˜ธํ™” , ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ์„ ํ•˜๋Š” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

5. ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ(Uniform Interface)
URI๋กœ ์ง€์ •ํ•œ ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. HTTP ํ‘œ์ค€์—๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด ๋ชจ๋“  ํ”Œ๋žซํผ์— ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

6. ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ
๋™์‚ฌ(Method) + ๋ช…์‚ฌ(URI) ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์–ด ์–ด๋–ค ๋ฉ”์„œ๋“œ์— ๋ฌด์Šจ ํ–‰์œ„๋ฅผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ REST API ์ž์ฒด๊ฐ€ ๋งค์šฐ ์‰ฌ์›Œ์„œ API ๋ฉ”์„ธ์ง€ ์ž์ฒด๋งŒ ๋ณด๊ณ ๋„ API๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค

API๋ž€?

API(Application Programming Interface)๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค, ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํ‚ค๋ณด๋“œ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ‚ค๋ณด๋“œ๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ”๋“œ๋“ค๋ผ๋ฆฌ ์„œ๋กœ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด ๋ฐ”๋กœ API์ด๋‹ค.


REST API๋ž€?

REST ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ.

HTTP ํ‘œ์ค€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

RESTful API๋ž€?

REST๋ฅผ REST ๋‹ต๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • REST์˜ 6๊ฐ€์ง€ ๊ทœ์น™์„ ์ž˜ ์ง€์ผœ์„œ ์„ค๊ณ„๋œ API๋ฅผ ๋งํ•œ๋‹ค.
  • ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๊ฐœ๋ฐœ์ž๋“ค๋ผ๋ฆฌ ๋น„๊ณต์‹์ ์œผ๋กœ ์˜๊ฒฌ์„ ์ œ์‹œํ•œ ๊ฒƒ์ด๋ผ์„œ ๋ช…ํ™•ํ•œ ์ •์˜๋Š” ์—†๋‹ค.

๐Ÿ”— RESTful API ์„ค๊ณ„ ๊ฐ€์ด๋“œ


โœ” HTTP Method๋ž€?


ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›น ์„œ๋ฒ„์—๊ฒŒ ์‚ฌ์šฉ์ž ์š”์ฒญ์˜ ๋ชฉ์ ์ด๋‚˜ ์ข…๋ฅ˜๋ฅผ ์•Œ๋ฆฌ๋Š” ์ˆ˜๋‹จ์ด๋‹ค.

1. GET

์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ
  • ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” URL์— ๋‹ด์•„์„œ ์ „๋‹ฌํ•œ๋‹ค.

2. POST

์š”์ฒญ๋œ ์ž์›์„ ์ƒ์„ฑ(CREATE)ํ•œ๋‹ค.

  • HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ body์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์ €์žฅ๋˜์–ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ๋œ๋‹ค.

+) GET vs. POST

  • POST ์š”์ฒญ์€ ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ body์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, GET ์š”์ฒญ์€ ๋ชจ๋“  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ URL์— ํฌํ•จํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” POST๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. GET์€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ URL์— ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘์—๊ฒŒ ๋ณด์—ฌ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. PUT

์š”์ฒญ๋œ ์ž์›์„ ์ˆ˜์ •(UPDATE)ํ•œ๋‹ค.

  • ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€์ฒดํ•˜๊ณ , ์—†์œผ๋ฉด ๋Œ€์ฒดํ•œ๋‹ค. (๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ!)

4. DELETE

์š”์ฒญ๋œ ์ž์›์˜ ์‚ญ์ œ๋ฅผ ์š”์ฒญํ•œ๋‹ค.


โœ” DRF


DRF(Django Rest Framework)๋Š” Django ์•ˆ์—์„œ RESTful API ์„œ๋ฒ„๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

DRF ์‹ค์Šต

์ง์ ‘ DRF๋ฅผ ์ด์šฉํ•ด์„œ RESTful API๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!

(์‹ค์Šต์€ ์•„์ง ์ง„ํ–‰ ์ค‘์ด์–ด์„œ ๋‚˜์ค‘์— ์ˆ˜์ •ํ•ด์„œ ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!)


๐Ÿ“˜ ์ฐธ๊ณ ์ž๋ฃŒ


https://hckcksrl.medium.com/rest%EB%9E%80-c602c3324196
https://spidyweb.tistory.com/128
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
http://www.incodom.kr/REST#h_7237c49e9f306fd4839ad4ca1e3da8c1
https://velog.io/@ckstn0777/WEB-REST%EB%9E%80
https://blog.metafor.kr/165
https://prohannah.tistory.com/156
https://velog.io/@kimsj5259/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%A0%95%EB%A6%AC
https://kyun2da.dev/CS/http-%EB%A9%94%EC%86%8C%EB%93%9C%EC%99%80-%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C/

profile
๐Ÿšง https://coji.tistory.com/ ๐Ÿ 

0๊ฐœ์˜ ๋Œ“๊ธ€