๐Ÿฆ๋ฉ‹์Ÿ์ด ์‚ฌ์ž์ฒ˜๋Ÿผ 11๊ธฐ/๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ Django Rest Framework

chapter4 p.103 DRF ์ปจ์…‰ ์ตํžˆ๊ธฐ

1son 2023. 4. 14. 08:31
๋ชจ๋ธ

์˜์ง„๋‹ท์ปด ์‚ฌ์ดํŠธ์— ์žˆ๋Š” ๋„์„œ ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์„ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๋ชจ๋ธ์„ ์ž‘์„ฑํ•˜์˜€์œผ๋‹ˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•ด์•ผ๊ฒ ์ฃ  

 

์‹œ๋ฆฌ์–ผ๋ผ์ด์ €

๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ๋ทฐ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „, ๋ฐ”๋กœ ์ด ๋‹จ๊ณ„์—์„œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” ํŒŒ์ด์ฌ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ณ€ํ™˜๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— 

๋ชจ๋ธ ๋ฐ์ดํ„ฐ์˜ ์–ด๋–ค ์†์„ฑ์„ JSON์— ๋„ฃ์–ด์ค„์ง€ ์„ ์–ธ์„ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

JSON์—๋‹ค๊ฐ€ ๋ชจ๋ธ์˜ ๋ชจ๋“  ์†์„ฑ์„ ๋„ฃ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ๊นŒ์š”,

์™ธ๋ถ€๋กœ ๊ณต๊ฐœ๋˜๋Š” API์˜ ๊ฒฝ์šฐ ๋”๋”์šฑ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋ž˜์„œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์—๋„ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

create()๋‚˜ update()๋Š” ๋‚˜์ค‘์— POST์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ํŒŒ์ด์ฌ ๋ชจ๋ธ ํ˜•ํƒœ๋กœ

์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ง‘์–ด๋„ฃ์„ ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. 

 

์•”ํŠผ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๊ฐ™์€ ๋‚ด์šฉ์ด ๋ฐ˜๋ณต๋˜๊ณ  ์ฝ”๋“œ๊ฐ€ ๊ธธ๋‹ค๋Š” ๋А๋‚Œ์ด ๋“ค์ง€์š”?

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋” ๋‚˜์€ ๋Œ€์•ˆ์ธ serializers.ModelSerializer๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

์—„์ฒญ ๊ฐ„๋‹จํ•ด์กŒ์ฃ ?

ModelSerializer๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ชจ๋ธ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์ž…๋‹ˆ๋‹ค. 

์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ํ•„๋“œ ์„ ์–ธ๋„ ๋ชจ๋ธ์—์„œ ์ด๋ฏธ ํ–ˆ์œผ๋‹ˆ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์—์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์—…์„ ๋งˆ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด์ œ ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. 

๋ทฐ๋Š” ๊ฐœ๋… ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

4.3.2 DRF FBV, CBV, API View

DRF ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์žฅ๊ณ ์—์„œ๋Š” ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ๋ทฐ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜๊ธฐ๋ฐ˜ ๋ทฐ -> FBV
ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ๋ทฐ -> CBV

 

์ด ๋‘˜์€ ๊ทธ์ € ๋ทฐ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ–ˆ๋Š”์ง€ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑํ–ˆ๋Š”์ง€์˜ ์ฐจ์ด์ผ๋ฟ ๊ธฐ๋Šฅ ์ƒ ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค. 

๊ทธ๋ ‡๋‹ค๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋™์•ˆ ์ž‘์„ฑํ–ˆ๋˜ ๋ทฐ๋Š” ๋ชจ๋‘ FBV(ํ•จ์ˆ˜๊ธฐ๋ฐ˜ ๋ทฐ)๊ฒ ๋„ค์š”!

 

์ด ๋‘˜์„ ๊ณตํ†ต์ ์œผ๋กœ ๋„์™€์ฃผ๋Š” ์นœ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ APIView๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

 


 

 

APIView๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์š”์ฒญ์˜ ์œ ํ˜•์— ๋Œ€ํ•ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. 

 

ํด๋ž˜์Šคํ˜• ๋ทฐ์—์„œ๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ค๋•Œ APIView๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค์˜ ํ˜•ํƒœ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

 

์ด๋ฒˆ ๋‹จ์›์€ DRF๋ฅผ ๊ฐ€๋ณ๊ฒŒ ์ตํ˜€๋ณด๋Š” ๊ฒƒ์— ์žˆ์œผ๋‹ˆ, ๋„์„œ ์ •๋ณด API๋ฅผ ๋น ๋ฅด๊ฒŒ ์™„์„ฑํ•ด๋ด…์‹œ๋‹ค!

์–ด๋А ํ˜•ํƒœ์˜ ๋ทฐ๋กœ ์ž‘์„ฑํ•ด๋„ ์ƒ๊ด€ ์—†์ง€๋งŒ, ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘๋กœ ๋˜‘๊ฐ™์ด ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๋„์„œ ์ •๋ณด API๋Š” ์•ž์„œ ์‚ดํŽด๋ดค๋˜ ๊ฒƒ์ฒ˜๋Ÿผ

์ „์ฒด ๋„์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API(GET/book/)์™€ 

bid์— ํ•ด๋‹นํ•˜๋Š” ๋„์„œ 1๊ถŒ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API(GET/book/1/)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋˜ํ•œ ๋„์„œ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” API(POST/book/)๊นŒ์ง€ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์—ฌ๊ธฐ์„œ ํ•˜๋‚˜ ๊ธฐ์–ตํ•˜๊ณ  ๋„˜์–ด๊ฐˆ ๊ฒƒ์€

์ „์ฒด ๋„์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API์™€

๋„์„œ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” API์˜ ์ฃผ์†Œ๊ฐ€ ๋™์ผํ•˜๊ฒŒ '/book/' ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ด…์‹œ๋‹ค! ๋จผ์ € ํ•จ์ˆ˜ํ˜•๋ทฐ (FBV)๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 

 

์ผ๋‹จ /book/ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ๋‘ API์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” booksAPI()๋ผ๋Š” ํ•จ์ˆ˜์—์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋กœ GET, POST๋ฅผ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ฃผ์—ˆ๊ณ , 

์กฐ๊ฑด๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹น ์š”์ฒญ์ด GET์ธ์ง€ POST์ธ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

GET ์š”์ฒญ์€ 

๋„์„œ ์ „์ฒด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์— ์ง‘์–ด๋„ฃ์–ด ์ง๋ ฌํ™”๋ฅผ ํ•˜๊ณ 

๊ทธ๋ ‡๊ฒŒ ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ๊ณผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. 

๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๊ฐ€์ ธ์™”์œผ๋ฉด 200 ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 

 

POST ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š”

์˜คํžˆ๋ ค ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ชจ๋ธ์— ์ง‘์–ด๋„ฃ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋จผ์ € ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์— request.data๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. 

 

๋‹ค์Œ์œผ๋กœ๋Š” 

bookAPI() ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ํŠน์ • bid์˜ ์ฑ… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. 

 

 

4.3.3 ๋„์„œ ์ •๋ณด API ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ธฐ

์ด์ œ URL์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋„์„œ ์ •๋ณด API ์˜ˆ์ œ๋ฅผ ์™„์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๋ทฐ๋ฅผ ๋ชจ๋‘ URL์— ์—ฐ๊ฒฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

example ์•ฑ์˜ urls.py๋ฅผ ์—ด์–ด ์•„๋ž˜ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

 

์‹คํ–‰ํ•ด๋ณด๋‹ˆ ์œ„์ฒ˜๋Ÿผ ๋‚˜์˜ค๋„ค์š”, 

์•„์ง ๋„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๊ฒฐ๊ณผ๊ฐ€ ๋„์ฐฉํ•˜๊ณ , ์ด ์ฃผ์†Œ๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 

POST ์š”์ฒญ์„ ์œ„ํ•œ ํผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. 

๊ทธ๋Ÿผ POST ๊ธฐ๋Šฅ๋„ ํ•œ ๋ฒˆ ํ™œ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

์œ„์™€ ๊ฐ™์€ JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ 

์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์˜ POST ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด ? 

 

POST ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— ๋‹ค์‹œ /fbv/books/๋กœ GET์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋œ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค. 

์•„๊นŒ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ POST๋กœ ์ถ”๊ฐ€ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ GET ์š”์ฒญ ํ™”๋ฉด์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์ด๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋ฒˆ์—๋Š” bid๊ฐ’์œผ๋กœ ์ฑ…์„ ์ฐพ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์ฃผ์†Œ์ฐฝ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. 

http://127.0.0.1:8000/example/fbv/book/1/

 

 

์œ„ ์ฃผ์†Œ๋กœ ๋“ค์–ด๊ฐ€๋‹ˆ bid๊ฐ€ 1์ธ ๋„์„œ์˜ ์ •๋ณด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. 

์šฐ๋ฆฌ์˜ ํ•จ์ˆ˜ํ˜• ๋ทฐ API๊ฐ€ ๋ชจ๋‘ ์ •์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋™์•ˆ ํ•จ์ˆ˜ํ˜• ๋ทฐ์™€ ํด๋ž˜์Šคํ˜• ๋ทฐ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

์ด๋“ค์„ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €์™€ ์—ฐ๊ฒฐํ•˜๊ณ , ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋Š” ๋ชจ๋ธ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. 

 

์ด ๋“ค ๋ชจ๋‘ ๊ฒฐ๊ตญ์—” ๊ฐ request์˜ method์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. 

์ด๋•Œ ๊ฐ™์€ URL์„ ์“ฐ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์€ ํ•˜๋‚˜์˜ ํ˜น์€ ํด๋ž˜์Šค๋กœ ๋ฌถ์—ฌ ๊ทธ๋Œ€๋กœ URL์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. 

 

์ด์ œ Django REST Framework์˜ ๊ธฐ์ดˆ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. 

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ๋‚˜๋งˆ ์šฐ๋ฆฌ๋Š” API ์„œ๋ฒ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

์ด์ œ๋ถ€ํ„ฐ ์•„๋ž˜์—์„œ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ์•Œ๋ฉด ์•„์ฃผ ์œ ์šฉํ•œ DRF์˜ ๊ธฐ๋Šฅ๋“ค์ž…๋‹ˆ๋‹ค. 

DRF์˜ ๊ฐœ๋ฐœ ์ ˆ์ฐจ๋ฅผ ํ•œ ๋ฒˆ ๋” ๋ณต์Šตํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

Model -> Serializers -> Views -> Urls(๋‹ค์‹œ Serializers)

 

DRF์˜ ๊ธฐ๋ณธ ํŽ˜์ด์ง€๋กœ API ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ, ์–ด๋””๊นŒ์ง€๋‚˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์Œ

APIํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ „์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ช‡๊ฐ€์ง€ ์žˆ๋Š”๋ฐ, 

Insomnia๋ผ๋Š” ๋ฌด๋ฃŒ ํˆด ์ถ”์ฒœ,

 

+๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  New Folder๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. 

 

ํด๋”๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

New Request๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. 

์š”์ฒญ์˜ ์ด๋ฆ„๊ณผ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ผ๋‹จ GET์š”์ฒญ์„ ๋งŒ๋“ค ๊ฒƒ์ด๊ณ ,

๋นˆ์นธ์œผ๋กœ ๋‘๊ณ  ์ƒ์„ฑํ•˜๋ฉด ์š”์ฒญ์˜ ์ฃผ์†Œ๊ฐ€ ์ด๋ฆ„์ด ๋œ๋‹ค๊ณ  ์ ํ˜€์žˆ์œผ๋‹ˆ ๋นˆ ์นธ์œผ๋กœ ๋งŒ๋“ญ์‹œ๋‹ค. 

 

๋งจ ์œ„์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ณณ์— ์šฐ๋ฆฌ์˜ API ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. 

 

http://127.0.0.1:8000/example/fbv/books/

 

send๋ฅผ ๋ˆ„๋ฅด๋ฉด 200 OK์™€ ํ•จ๊ป˜ ์šฐ๋ฆฌ์˜ ๋„์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค. 

์ด๋ฒˆ์—” POST ์š”์ฒญ์„ ํ•ด๋ณผ๊นŒ์š”?

 

 

 

POST๋กœ ์„ค์ •ํ•˜๊ณ  body์˜ ์–‘์‹์„ JSON์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. 

์•ž์— ์ž…๋ ฅํ•œ๊ฒƒ๊ณผ ๊ฐ™์€ JSON์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

send๋ฅผ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ํ•˜๋ฉด?

์‹คํ–‰๊ฒฐ๊ณผ 201 created๊ฐ€ ๋‚˜์˜ค๋ฉฐ ์ž˜ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‹ค์‹œ GET์„ ์‹คํ–‰ํ•ด ์ž˜ ๋“ค์–ด๊ฐ”๋Š” ์ง€ ํ™•์ธํ•ด ๋ณด๋ฉด?

 

 

4.4 Django REST Framework ์‹ฌํ™” ๊ฐœ๋… ๋ณด์ถฉํ•˜๊ธฐ
4.4.1 DRF์˜ ๋‹ค์–‘ํ•œ ๋ทฐ

DRF์—์„œ ์ž‘์„ฑํ•˜๋Š” ๋ทฐ๋Š” ํฌ๊ฒŒ ํ•จ์ˆ˜ํ˜• ๋ทฐ์™€ ํด๋ž˜์Šคํ˜• ๋ทฐ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์šฐ๋ฆฌ API๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ์—๋Š” URL๊ณผ Method๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”๋ฐ,

์ด๋•Œ ๊ฐ™์€ URL ๋‚ด์˜ ์—ฌ๋Ÿฌ Method๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜ํ˜•๊ณผ ํด๋ž˜์Šคํ˜•์ด ๊ตฌ๋ถ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ฒฐ๊ตญ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด URL๊ณผ Method์˜ ์กฐํ•ฉ ์€ ๋ช‡๊ฐ€์ง€ ์ •๋„ ์žˆ์„๊นŒ์š”?

5๊ฐ€์ง€ ์ •๋„ ๋‚˜์˜ต๋‹ˆ๋‹ค. 

 

์ด ์ •๋„๋ฉด ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค. 

๊ฐ URL ์˜†์— ๋ถ™์€ ๋‹จ์–ด๋“ค์ด ๊ฐ ๊ธฐ๋Šฅ๋ณ„ ๋‹‰๋„ค์ž„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

์–ด๋–ค ๋ชจ๋ธ์— ๋Œ€ํ•ด retrieve๋ฅผ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ ๋ชจ๋ธ์˜ 1๊ฐœ ๊ฐœ์ฒด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

DRF๋กœ API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์œ„ 5๊ฐ€์ง€๊ฐ€ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. 

์ด 5๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜ํ˜• ๋ทฐ์™€ ํด๋ž˜์Šคํ˜• ๋ทฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋Š” ๋ชจ๋ธ API ๋งŒ๋“ค๊ธฐ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ์ด๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ด๋ฅผ ์ตœ๋Œ€ํ•œ ํŽธํ•˜๊ณ  ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐœ์ „ํ•˜์˜€๋Š”์ง€ mixins, generics, Viewset ๊นŒ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฐฐ์›Œ๋ด…์‹œ๋‹ค. 

 

 

4.4.2 DRF mixins

mixins ๋Š” APIView์—์„œ request์˜ method๋งˆ๋‹ค ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด

ํด๋ž˜์Šค ๋ ˆ๋ฒจ์—์„œ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ฐ method์—๋Š” ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ 

๊ฐ method๋ณ„ mixin์— ์—ฐ๊ฒฐํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

4.4.3 DRF generics

mixins ๋ฐฉ๋ฒ•์—์„œ ์‚ฌ์šฉํ•  mixins๋ฅผ ์ƒ์†๋ฐ›๋Š”๋ฐ ํ•œ ๋ฒˆ์— 2~3๊ฐœ ์”ฉ ์ƒ์†์„ ๋ฐ›์•„์•ผ ํ•˜๋‹ˆ ์ด๊ฒŒ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กœ์šด ๊ฒƒ 

 

 

4.4.4 DRF Viewset & Router

generics ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™” ํ•˜์˜€์ง€๋งŒ, ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

queryset์ด๋‚˜ serializer_class ๋ถ€๋ถ„์ด ๊ฒน์น˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ํ•˜๋‚˜์˜ ๋ชจ๋ธ์„ ์ „๋ถ€ ์ฒ˜๋ฆฌํ•ด์ค„ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์—†์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

Viewset์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

์ง€๊ธˆ๊นŒ์ง€ DRF์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ๋ฐฐ์›Œ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋™์•ˆ ๋ฐฐ์›Œ๋ณด์•˜์Šต๋‹ˆ๋‹ค. 

๋‹ค์Œ ์žฅ๋ถ€ํ„ฐ ๋งŒ๋“ค ํ”„๋กœ์ ํŠธ๋Š” ๊ฝค ํฐ ํ”„๋กœ์ ํŠธ๋กœ, ์‹ค์ œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ”„๋ก ํŠธ์—”๋“œ์™€

์—ฐ๋™ํ•˜๋Š” ๊ณผ์ •๊นŒ์ง€ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํฌํ•จํ•œ ํ”„๋กœ์ ํŠธ ์ž…๋‹ˆ๋‹ค. 

 

 

 

 

 

 

 

 

 

๋ฐฑ์—”๋“œ๋ฅผ ์œ„ํ•œ Django REST Framework with ํŒŒ์ด์ฌ

COUPANG

www.coupang.com

 

 

 

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."