๐Ÿฆ ๋ฉ‹์‚ฌ 8๋ฒˆ์งธ ํ•™์Šต

ํ™ฉ๋‹ค์€ยท2023๋…„ 5์›” 29์ผ
0


๋†€๋Ÿฌ๊ฐ€์„œ ํ–‰๋ณตํ•œ ๊ณ ๋ช…์ด ์‚ฌ์ง„์œผ๋กœ ๊ณผ์ œ ์‹œ์ž‘ํ•˜๊ธฐ~~ ์ธ๊ฐ„์ด๋‚˜ ๊ฐœ๋‚˜ ๋†€๋Ÿฌ๊ฐ€๋Š”๊ฒŒ ์ต์˜ค๊ตฌ๋‚˜...



์ด๋ฒˆ ๊ณผ์ œ๋Š” ์ง€๋‚œ 7๋ฒˆ์งธ ํ™œ๋™๊ณผ ์ด์–ด์„œ ์ง„ํ–‰๋œ๋‹ค.

6. ์ƒ์„ฑ ๊ธฐ๋Šฅ

์šฐ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ์šด Todo๋ฅผ ์—…๋กœ๋“œ ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€์—์„œ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์€ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด ์ƒ์„ฑ ๋ฒ„ํŠผ๋งŒ ํด๋ฆญํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•ด๋†“์€ ์–‘์‹์— ๋งž๊ฒŒ ์ž‘์„ฑ๋งŒ ํ•˜๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ Todo๋ฅผ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํผ์„ ์ด์šฉํ•œ๋‹ค. ์ƒ์„ฑ์€ CRUD ์ค‘ C์— ํ•ด๋‹นํ•œ๋‹ค.

๋จผ์ € todo์•ฑ ์•ˆ์— forms.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์žฅ๊ณ ์˜ ModelForm์„ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

  • django์˜ forms๋ฅผ ํ˜ธ์ถœํ•ด TodoForm ํด๋ž˜์Šค๋ฅผ ModelForm์„ ์ƒ์†๋ฐ›๋„๋ก ํ•œ๋‹ค.
  • ํ˜„์žฌ ํด๋” ์•ˆ์— ์žˆ๋Š” models.py์— ์ •์˜ํ•œ Todo ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  • Todo ๋ชจ๋ธ์„ model์— ์ €์žฅํ•œ๋‹ค.
  • ์ž…๋ ฅ๋ฐ›์„ ํผ์— ๋ชจ๋ธ์˜ ์–ด๋–ค ํ•„๋“œ๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ธ์ง€ ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.



6-1. ์ƒ์„ฑ ํ…œํ”Œ๋ฆฟ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ T์— ํ•ด๋‹นํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋จผ์ € ๋งŒ๋“ ๋‹ค. ํผ์€ POST ๋ฐฉ์‹์ด๋ฏ€๋กœ CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด csrf_token์ด ํ•„์ˆ˜๋กœ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค. ๊ทธ๋ž˜๊ณ  form.as_pํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด ํ•œ ํ•„๋“œ ๋‹น pํƒœ๊ทธ๋กœ ์ถœ๋ ฅ๋˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋งŒ๋“ ๋‹ค.

todo/templates/todo/todo_post.html์„ ์ƒ์„ฑํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.



6-2.์ƒ์„ฑ ๋ทฐ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ V์— ํ•ด๋‹นํ•˜๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ ๋‹ค. ์ƒ์„ฑ์„ ์œ„ํ•ด form method๊ฐ€ POST ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค.

  • ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด POST์ธ์ง€ GET์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ  POST์ด๋ฉด ํผ์„ ๊ฒ€์ฆํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด GET์ด๋ฉด ํผ์„ ํฌํ•จํ•œ ํ…œํ”Œ๋ฆฟ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • ํผ์„ ์ „๋‹ฌํ•ด ํ…œํ”Œ๋ฆฟ์— ํผ์„ ๋‚˜ํƒ€๋‚ด๊ณ , ์ •์ƒ์ ์ธ POST์š”์ฒญ์€ form ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ €์žฅํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.



6-3. ์ƒ์„ฑ URL ์—ฐ๊ฒฐ

๋ทฐ๋ฅผ ์ƒ์„ฑํ–ˆ์œผ๋‹ˆ url์„ ์—ฐ๊ฒฐํ•œ๋‹ค. ๋จผ์ € todo/urls.py ํŒŒ์ผ์— path๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • views.py์˜ todo_post ํ•จ์ˆ˜ํ˜• ๋ทฐ๋ฅผ ์‹คํ–‰ํ•ด render์— ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ํ˜ธ์ถœํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ชฉ๋กํ™”๋ฉด์—์„œ Add Todo๋ฅผ ํด๋ฆญํ•˜๋ฉด url ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ฅผ ๋”ฐ๋ผ name='todo_post'์ธ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹น path์—์„œ ์‹คํ–‰ํ•  ๋ทฐ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. ![](https://velog.velcdn.com/images/topping12/post/46211b17-392c-4afa-84f9-e7a2f3b3e6f5/image.png)


## 7. ์ˆ˜์ • ๊ธฐ๋Šฅ ์ˆ˜์ • ๊ธฐ๋Šฅ์€ ์ƒ์„ฑ ๊ธฐ๋Šฅ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค. ์ฐจ์ด์ ์ด ์žˆ๋‹ค๋ฉด ํผ์— ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋˜, ํฐ ์ œ๋ชฉ๊ณผ ๋ฒ„ํŠผ ๊ธ€์”จ๋ฅผ ๋ฐ”๊พธ๊ณ  ํผ์— ๊ธฐ์กด Todo ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.



7-1. ์ˆ˜์ • ํ…œํ”Œ๋ฆฟ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ T์— ํ•ด๋‹นํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ๋จผ์ € ์ƒ์„ฑํ•œ๋‹ค.
todo/templates/todo/todo_update.html์„ ์ƒ์„ฑํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ๊ฐ€ todo_post.html๊ณผ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค.



7-2. ์ˆ˜์ • ๋ทฐ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ V์— ํ•ด๋‹นํ•˜๋Š” ๋ทฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ƒ์„ฑ ๋ทฐ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ค์—ˆ๋˜ Todo๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ๊ธฐ์กด์— ์ž…๋ ฅํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ๊ธฐ์กด Todo๋ฅผ id๊ฐ’์œผ๋กœ ๊ตฌ๋ถ„ํ•ด todo ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
  • ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด POST์ธ์ง€ GET์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ  POST์ผ ๊ฒฝ์šฐ ์œ„์—์„œ ์ €์žฅํ•œ todo ๋ณ€์ˆ˜๋ฅผ instance ๋ณ€์ˆ˜์— ์ „๋‹ฌํ•œ ํ›„์— ํผ์„ ๊ฒ€์ฆํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์ด GET์ผ ๊ฒฝ์šฐ ํผ์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • todo ๋ฐ์ดํ„ฐ๋ฅผ ํผ์— ๋‹ด์•„ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก todo_edit.html๋กœ ์ „๋‹ฌํ•œ๋‹ค.

    instance ๋ณ€์ˆ˜๋กœ ์ˆ˜์ • ๋Œ€์ƒ์ด ๋  ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์ •ํ•˜๊ณ , ํผ์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ instance๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•œ๋‹ค.



7-3. ์ˆ˜์ • URL ์—ฐ๊ฒฐ

๋ทฐ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋‹ˆ url์„ ์—ฐ๊ฒฐํ•œ๋‹ค. todo/urls.py์— edit path๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • pk๋ฅผ int๋กœ ์„ ์–ธํ•ด ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ›์•„์˜ค๊ณ , ์ด pk๋Š” ๋ช‡๋ฒˆ์งธ todo์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ณ€์ˆ˜๋กœ ํ™œ์šฉํ•œ๋‹ค.

  • ๋ชฉ๋กํ™”๋ฉด์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด url ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ์— ์„ ์–ธํ•œ todo_edit๋ฅผ pk๋ฅผ ํ†ตํ•ด ๋ช‡๋ฒˆ์งธ todo์ธ์ง€ ํƒ์ƒ‰ํ•˜๊ณ  pk์— ํ•ด๋‹นํ•˜๋Š” todo๋ฅผ name='todo_edit์ธ path๋ฅผ ์ฐพ์•„ ์—ฌ๊ธฐ์—์„œ ์„ ์–ธํ•œ view๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.



8. ์™„๋ฃŒ ๊ธฐ๋Šฅ

์šฐ๋ฆฌ๋Š” ๋ชฉ๋กํ™”๋ฉด์—์„œ ์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์œ„์— ์™„๋ฃŒํ•œ Todo ๋ชฉ๋ก์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์™„๋ฃŒ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Todo ๋ชจ๋ธ์„ ์ƒ์„ฑํ•  ๋•Œ ์„ ์–ธํ•œ ํ•„๋“œ์ธ complete๋ฅผ True๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.



8-1. ์™„๋ฃŒ ๋ชฉ๋ก ํ…œํ”Œ๋ฆฟ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ T์— ํ•ด๋‹นํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•œ๋‹ค. Todo ๋ชฉ๋ก ํŽ˜์ด์ง€์™€ ์œ ์‚ฌํ•˜๋‹ค.
todo/templates/todo/done_list.html ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

  • ํ™ˆ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก url์„ ์ง€์ •ํ•œ๋‹ค.
  • ์ œ๋ชฉ์„ ๋ˆ„๋ฅด๋ฉด ์ƒ์„ธ ์กฐํšŒ๋ฅผ ํ•  ์ˆ˜์žˆ๋„๋ก url์„ ์ง€์ •ํ•œ๋‹ค.



8-2. ์™„๋ฃŒ ๋ทฐ

MTV ํŒจํ„ด์„ ๋”ฐ๋ผ V์— ํ•ด๋‹นํ•˜๋Š” ๋ทฐ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋Š” ๋ทฐ๋ฅผ 2๊ฐœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ ์™„๋ฃŒ๋œ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ธฐ๋Šฅ๊ณผ Todo๋ฅผ ์™„๋ฃŒ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
๋จผ์ € ์™„๋ฃŒ๋œ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ทฐ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

  • ์šฐ๋ฆฌ๊ฐ€ ์—…๋กœ๋“œํ•œ Todo๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ complete=True๋กœ ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ๋งŒ dones ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
  • todo์˜ done_list.html ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก render ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Todo๋ฅผ ์™„๋ฃŒ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ทฐ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ![](https://velog.velcdn.com/images/topping12/post/edc84e8d-d315-400b-a1dc-35d1bb86e461/image.png)
  • ์™„๋ฃŒ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด Todo ๊ฐ์ฒด๋ฅผ id๋กœ ๊ตฌ๋ถ„ํ•ด ๊ฐ€์ ธ์™€์„œ todo ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ€์ ธ์˜จ todo ๋ณ€์ˆ˜์— ์ €์ž์˜ค๋””์–ด์žˆ๋Š” Todo ๊ฐ์ฒด๋ฅผ complete=True๋กœ ์„ค์ •ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ ํ›„ redirect ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด todo_list ํ…œํ”Œ๋ฆฟ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•œ๋‹ค.



8-3. ์™„๋ฃŒ URL ์—ฐ๊ฒฐ

๋ทฐ๋ฅผ ์ž‘์„ฑํ–ˆ์œผ๋‹ˆ ์™„๋ฃŒ url์„ ์—ฐ๊ฒฐํ•œ๋‹ค. todo/urls.py ํŒŒ์ผ์— done path๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • views.py์˜ done_list ๋ทฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ๋ทฐ์˜ render์— ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • views.py์˜ todo_done ๋ทฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด ๋ทฐ์˜ render์— ์ •์˜๋œ ํ…œํ”Œ๋ฆฟ์„ ํ˜ธ์ถœํ•œ๋‹ค.

๋ชฉ๋กํ™”๋ฉด์—์„œ ์™„๋ฃŒ๋ฅผ ํด๋ฆญํ•˜๋ฉด url ํ…œํ”Œ๋ฆฟํƒœ๊ทธ์— ์˜ํ•ด name='todo_done'์ด๊ณ  ๋ช‡๋ฒˆ์งธ pk์ธ์ง€ ๊ตฌ๋ถ„ํ•ด path๋ฅผ ์ฐพ์•„ ์ •์˜๋˜์–ด์žˆ๋Š” ๋ทฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

๋ชฉ๋กํ™”๋ฉด์—์„œ ์™„๋ฃŒํ•œ Todo ๋ชฉ๋ก์„ ํด๋ฆญํ•˜๋ฉด url ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ์— ์˜ํ•ด name='done_list'์ธ path๋ฅผ urls.py์—์„œ ์ฐพ์•„ ํ•ด๋‹น ๊ฒฝ๋กœ์— ์ง€์ •ํ•œ ๋ทฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ TodoList ์‹ค์Šต์ด๋‹ค!!!


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


์ด์ œ ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•˜๊ธฐ ์ •๋ง ๋‘๋ ค์› ๋˜ API์™€ Serializer........ ๋จธ๋ฆฌ๋กœ๋Š” ์ดํ•ดํ–ˆ์ง€๋งŒ ์„ค๋ช…ํ•˜๊ธฐ ๋ฒ…์ฐจ๊ณ ..... ์Œ.. ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋„ ์ด๊ฒŒ ๋งž๋‚˜ ์‹ถ์€... ์ฐธ.......... ๋‚˜๋„ ๋” ๊ณต๋ถ€ํ•ด์•ผ์ง€...

1. API

API๋Š” Application Programming Interface์˜ ์•ฝ์ž๋กœ ๋‘ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋งํ•œ๋‹ค. ์ฆ‰, ์šด์˜์ฒด์ œ์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋‚˜ ๋ฉ”์‹œ์ง€ ํ˜•์‹์„ ๋งํ•˜๋Š”๋ฐ 2๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•˜์ž.

์˜ˆ์‹œ 1. ์‹๋‹น

  1. ๊ณ ๊ฐ์ด ์ง์›์—๊ฒŒ ์ฃผ๋ฌธ์„ ํ•˜๋ฉด ์ง์›์€ ์ฃผ๋ฌธ์„ ์ ‘์ˆ˜ํ•œ๋‹ค.
  2. ์ง์›์€ ์ ‘์ˆ˜ํ•œ ์ฃผ๋ฌธ์„ ์ฃผ๋ฐฉ์— ์ „๋‹ฌํ•œ๋‹ค.
  3. ์ฃผ๋ฐฉ์€ ์ „๋‹ฌ๋ฐ›์€ ์ฃผ๋ฌธ๋Œ€๋กœ ์กฐ๋ฆฌํ•œ ํ›„ ์Œ์‹์„ ์ง์›์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  4. ์ง์›์€ ์ „๋‹ฌ๋ฐ›์€ ์Œ์‹์„ ๊ณ ๊ฐ์—๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌํ•œ๋‹ค.
    => ์—ฌ๊ธฐ์„œ ์ง์›์€ ๊ณ ๊ฐ๊ณผ ์ฃผ๋ฐฉ ์‚ฌ์ด์—์„œ ์ค‘๊ฐ„ ์ „๋‹ฌ์ž ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์ด ๋ฐ”๋กœ API์˜ ์—ญํ• ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ค‘๊ฐ„์—์„œ ์–‘์ชฝ์˜ ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ๋งํ•œ๋‹ค.


์˜ˆ์‹œ 2. ๊ธฐ์ƒ์ฒญ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ

  1. ์˜ค๋Š˜ ๋‚ ์”จ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ๋‚ ์”จ ์•ฑ์„ ํ‚ค๊ณ  ๋‚ ์”จ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  2. ๋‚ ์”จ ์•ฑ์€ ๊ธฐ์ƒ์ฒญ ์‹œ์Šคํ…œ๊ณผ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ์˜ค๋Š˜ ๊ธฐ์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค.
  3. ๊ธฐ์ƒ์ฒญ ์‹œ์Šคํ…œ์€ ์š”์ฒญํ•œ ์˜ค๋Š˜ ๊ธฐ์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ ์”จ ์•ฑ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  4. ๋‚ ์”จ ์•ฑ์€ ์ „๋‹ฌ๋ฐ›์€ ์˜ค๋Š˜ ๋‚ ์”จ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค.
    => ์—ฌ๊ธฐ์„œ ๋‚ ์”จ์•ฑ๊ณผ ๊ธฐ์ƒ์ฒญ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ๋Œ€ํ™”๊ฐ€ ์ค‘๊ฐ„ ์ „๋‹ฌ์ž ์—ญํ• ์„ ํ•˜๋Š”๋ฐ, ์ด ์—ญํ• ์ด ๋ฐ”๋กœ API์˜ ์—ญํ• ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž‘๋™๋ฐฉ๋ฒ•

API ์•„ํ‚คํ…์ฒ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ธก๋ฉด์—์„œ ์„ค๋ช…๋œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
  • ์„œ๋ฒ„๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‹ค.
    ์œ„์—์„œ ๋“ค์—ˆ๋˜ 2๊ฐ€์ง€ ์˜ˆ์‹œ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ์ดํ•ดํ•˜์ž๋ฉด

    ํด๋ผ์ด์–ธํŠธ = ๊ณ ๊ฐ, ๋‚ ์”จ ์–ดํ”Œ
    ์„œ๋ฒ„ = ์ฃผ๋ฐฉ, ๊ธฐ์ƒ์ฒญ ๋‚ ์”จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

์ด๋ ‡๊ฒŒ ์ดํ•ดํ•  ์ˆ˜์žˆ๋‹ค.

API๋Š” ์ด 4๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š”๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

1. SOAP API

๋‹จ์ˆœ ๊ฐ์ฒด ์ ‘๊ทผ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” XML์„ ์‚ฌ์šฉํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.
  • ๊ณผ๊ฑฐ์— ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง€๋Š” API๋‹ค. (๋ฌด๊ฑฐ์›Œ์„œ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค.)

2. RPC API

์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ถœ๋ ฅ์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ—ˆ์šฉํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
  • ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋” ํŽธํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ๊ฐ€์ง„ ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.

3. Websocket API

JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ตœ์‹  ์›น API ๊ฐœ๋ฐœ์ด๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์•ฑ๊ณผ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ์ฝœ๋ฐฑ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด REST API๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค.

4. REST API

Representational State Transfer์˜ ์•ฝ์ž๋กœ ์˜ค๋Š˜๋‚  ์›น์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ์œ ์—ฐํ•œ API์ด์ž ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ์‹์ด๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ฐ์ดํ„ฐ๋กœ ์ „์†กํ•œ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์ด ํด๋ผ์ด์–ธํŠธ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•ด ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šค ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ ์ง‘ํ•ฉ(GET, PUT, DELETE ๋“ฑ)์„ ์ •์˜ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” HTTP๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.
  • ์ฃผ๋œ ํŠน์ง•์€ ๋ฌด์ƒํƒœ(์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๊ฐ„์— ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ)์ด๋‹ค.

Open API

๋ˆ„๊ตฌ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ๋œ API๋‹ค.
๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ์ •๋ถ€์˜ ๊ณต๊ณต ๋ฐ์ดํ„ฐ ํฌํ„ธ (www.data.go.kr)์„ ํ†ตํ•ด ๊ตญ๊ฐ€ ๊ธฐ๊ด€์ด ๋ณด์œ ํ•œ ์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ API ํ˜•ํƒœ๋กœ ๋ฌด๋ฃŒ๋กœ ๊ณต๊ฐœํ•˜๊ณ  ์žˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋กœ ์ฝ”๋กœ๋‚˜ ํ™•์ง„์ž, ์„œ์šธ์‹œ ๋”ฐ๋ฆ‰์ด ์ด์šฉ ํ˜„ํ™ฉ ๋“ฑ์ด ์žˆ๊ณ , ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€์—์„œ๋„ ๋ฌด๋ฃŒ๋กœ Open API๋ฅผ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค.



API์˜ ์œ ํ˜•์€ ์ด 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

1. Private(ํ”„๋ผ์ด๋น—)

๊ธฐ์—… ๋‚ด๋ถ€์— ์žˆ์œผ๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋‚ด์—์„œ ์‹œ์Šคํ…œ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š๋ฐ์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.


#### 2. Publie(ํผ๋ธ”๋ฆญ) ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๊ณ  ์ œ 3์ž์™€ API๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
#### 3. Partner(ํŒŒํŠธ๋„ˆ) B2B ํŒŒํŠธ๋„ˆ์‰ฝ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋œ ์™ธ๋ถ€ ๊ฐœ๋ฐœ์ž๋งŒ ์•ก์„ธ์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. API๋ฅผ ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ํŒŒํŠธ๋„ˆ์™€ ๊ณต์œ ํ•˜๋Š” API๋‹ค.
#### 4. ๋ณตํ•ฉ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„œ๋กœ ๋‹ค๋ฅธ API๋ฅผ ๊ฒฐํ•ฉํ•ด ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ์ด๋‚˜ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋Š” API๋‹ค.



API์˜ ์žฅ์ 

์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋Š”์ง€ ๋ชฐ๋ผ๋„ ์šฐ๋ฆฌ๋Š” ๊ทธ์ € ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ์„ ํ•  ํ•„์š” ์—…์ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๊ฐ์†Œํ•˜๊ณ  ๋น„์šฉ์ด ์ ˆ๊ฐ๋˜๋ฉฐ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด ํ˜‘์—…์— ์šฉ์ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋˜ํ•œ ์ˆ˜์›”ํ•˜๋‹ค.




DRF

Django REST Framework์˜ ์•ฝ์ž๋กœ Django๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ REST API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.

  • ์ž์ฒด์ ์ธ ํ…œํ”Œ๋ฆฟ์— ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์—ˆ๋˜ ํ”„๋กœ์ ํŠธ ๋ฐฉ์‹์—์„œ DRF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด,
    JSON๊ฐ™์€ ์–‘์‹์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” API ์„œ๋ฒ„ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

#### DRF ์„ค์น˜ ๋ฐ ๋“ฑ๋ก ๋ฐฉ๋ฒ• Django ์„ค์น˜๋ฐฉ๋ฒ•๊ณผ ๋™์ผํ•˜๊ฒŒ pip install๋กœ ์„ค์น˜ํ•œ๋‹ค. `pip install djangorestframework`
ํ”„๋กœ์ ํŠธ ํด๋” ๋‚ด์— ์žˆ๋Š” settings.pyํŒŒ์ผ์— ์•ฑ์„ ๋“ฑ๋กํ•œ๋‹ค. `INSTALLED_APPS = [] ์•ˆ์— 'rest_framework' ์ถ”๊ฐ€`

DRF Serializer

์‚ฌ์ „์  ์ •์˜๋Š” ์ง๋ ฌํ™”๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉฐ Django ํ”„๋กœ์ ํŠธ์—์„œ ๋งŒ๋“  ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ๋ฝ‘์€ ์ฟผ๋ฆฌ์…‹์ธ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋ฅผ JSON ํƒ€์ž…์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์ด๋‹ค.

  • DRF๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด Django์˜ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ €์žฅํ•œ๋‹ค.
  • ๋ชจ๋ธ์€ DB ํ…Œ์ด๋ธ”์„ ์ถ”์ƒํ™”ํ•œ ๊ฐœ๋…์ธ๋ฐ, ORM์„ ํ†ตํ•ด ํŒŒ์ด์ฌ ๋ฌธ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด Django์—์„œ ๋ฐ์ดํ„ฐ๋Š” ํŒŒ์ด์ฌ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.
  • ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด API์˜ ์—ญํ• ์ด๋‹ค.

    ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฌธ์ž์—ด(JSON)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์œผ ์ง๋ ฌํ™”๋ผ๊ณ  ํ•œ๋‹ค.
    ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ API ๊ฐ„ ๋ฐ์ดํ„ฐ ์–‘์‹์„ ๋งž์ถฐ์ฃผ๋Š” ๋ณ€ํ™˜๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ด๋ฏธ์ง€๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋ณด์ž๋ฉด ์™ผ์ชฝ์€ ๊ธฐ์กด์— ์šฐ๋ฆฌ๊ฐ€ ์‹ค์Šตํ–ˆ๋˜ ๋‚ด์šฉ์ด๊ณ  ์˜ค๋ฅธ์ชฝ์€ ์ดํ›„์— ์‹ค์Šตํ•  ๋‚ด์šฉ์ด๋‹ค.
๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ Field๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์ง€๋งŒ ๊ธฐ์กด์— ์šฐ๋ฆฌ๋Š” HTML Form์„ ๋งŒ๋“ค์–ด ํผ์„ ์ด์šฉํ•ด ํผ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ Serializer๋ฅผ ์ด์šฉํ•˜๋ฉด JSON ๊ฐ™์€ ๋ฌธ์ž์—ด์„ ์ด์š”ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ํผ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.


์‹œ๋ฆฌ์–ผ๋ผ์ด์ €๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ๋ชจ๋ธ->๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ž‘์—…->**์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ์ž‘์„ฑ**->๋ทฐ ์ž‘์„ฑ ๋ณดํ†ต ์ด๋Ÿฌํ•œ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” startapp ๋ช…๋ น์œผ๋กœ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•  ์•ฑ์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ๋งŒ๋“ค์–ด์ง„ ์•ฑ ํด๋” ์•ˆ์— serializers.py ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์•ˆ์— ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ models.py์— ์ •์˜ํ•œ ๋ชจ๋ธ์˜ ์–ด๋–ค ํ•„๋“œ๋ฅผ JSON์— ๋„ฃ์–ด์ค„์ง€ ์—ฌ๊ธฐ์„œ ๋‹ค์‹œํ•œ๋ฒˆ ์„ ์–ธํ•ด์•ผํ•œ๋‹ค.



FBV, ํ•จ์ˆ˜ํ˜• ๋ทฐ

Function Based View์˜ ์•ฝ์ž๋กœ @api_view์™€ ๊ฐ™์ด ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ˜•ํƒœ๋กœ API View๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ž€ ํ•จ์ˆ˜๋ฅผ ๊พธ๋ฏธ๋Š” ์—ญํ• ๋กœ @ ํ‘œ์‹œ์™€ ํ•จ๊ผ ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ๋‹ค.
ํ•ด๋‹น ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์Šคํƒ€์ผ์„ ํ‘œ์‹œํ•ด์ฃผ๋Š” ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด @api_view(['GET']) ์€ GET ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์ด๋‹ค.

from rest_framework import viewsets, permissions, generics, status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view

ํ•จ์ˆ˜ํ˜• ๋ทฐ๋ฅผ API View์™€ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋ฏธ๋ฆฌ ์ž„ํฌํŠธ ๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค.


CBV, ํด๋ž˜์Šคํ˜• ๋ทฐ

Class Based View์˜ ์•ฝ์ž๋กœ APIView ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.
๊ธฐ๋Šฅ์ ์ธ ๋ถ€๋ถ„์—์„œ ํฐ ์ฐจ์ด๋Š” ์—†์ง€๋งŒ ํด๋ž˜์Šค ๋‚ด์— get๊ณผ post๋ฅผ ๋”ฐ๋กœ ์ •์˜ํ•˜๋ฏ€๋กœ FBV์™€ ๋‹ฌ๋ฆฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๊ฐ€ ํ•„์š”์—†๋‹ค.

์š”์ฒญ์ด GET์ธ์ง€ POST์ธ์ง€ ์กฐ๊ฑด๋ฌธ์œผ๋กœ ๋”ฐ์ ธ๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค.

์šฐ๋ฆฌ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ์–ด๋–ค ๋ทฐ๊ฐ€ ๋” ๊ดœ์ฐฎ์„์ง€ ํŒ๋‹จํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๋‹ค ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

from rest_framework import viewsets, permissions, generics, status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view

์œ„์—์„œ APIView ํด๋ž˜์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ž„ํฌํŠธ ํ•ด ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•œ๋‹ค.



์ฑ… ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์„œ BookAPI๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ์‹ค์Šต์„ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

1) ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ํŒŒ์ด์ฌ์˜ ๋ฒ„์ „์„ ํ™•์ธํ•œ๋‹ค.
python --version

2) ํ™œ์„ฑํ™”๋œ ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ Django์™€ DRF ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
pip install django djangorestframework

3) ํ˜„์žฌ์œ„์น˜์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
django-admin startproject bookInfo .



2. ์•ฑ ์ƒ์„ฑ

๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•  ์•ฑ์„ ์ƒ์„ฑํ•œ๋‹ค.
python manage.py startapp book



3. booInfo ํ”„๋กœ์ ํŠธ ์„ค์ •

์ƒ์„ฑํ•œ ์•ฑ์„ ํ”„๋กœ์ ํŠธ ํด๋”์˜ settings.py์— ๋“ฑ๋กํ•œ๋‹ค.
INSTALLED_APPS = [] ๋ถ€๋ถ„์— 'rest_framework'์™€ 'book'์„ ์ถ”๊ฐ€ํ•œ๋‹ค.



4. ๋งˆ์ด๊ทธ๋ ˆ์ดํŠธ ์ˆ˜ํ–‰

๋ณ€๊ฒฝ์‚ฌํ•ญ์„ DB์— ๋ฐ˜์˜ํ•œ๋‹ค.
python manage.py migrate



5. ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•œ๋‹ค.

python manage.py createsuperuser



6. ๋ชจ๋ธ ์ƒ์„ฑ

๋ชจ๋“  Djano ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์˜ ์‹œ์ž‘์€ ํ•ญ์ƒ ๋ชจ๋ธ์ด๋‹ค. book/models.py ํŒŒ์ผ์— ๋ชจ๋ธ์„ ์ž‘์„ฑํ•œ๋‹ค.

bid ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” primary_key=True๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ bid๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ณธํ‚ค๋กœ ์„ค์ •ํ–ˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ๊ธฐ๋ณธํ‚ค๋Š” ํ•„๋“œ ์ค‘์—์„œ ์ค‘๋ณต๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ  ์ด ๊ฐ์ฒด๋ฅผ ๋Œ€ํ‘œ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๋ฅผ ๋งํ•œ๋‹ค.
๋‚˜๋จธ์ง€ ํ•„๋“œ๋“ค์€ ๊ทธ ์ „์—๋„ ์ž‘์„ฑํ–ˆ๋˜ ๋ถ€๋ถ„์ด๊ธฐ๋•Œ๋ฌธ์— ๋ณ„๋‹ค๋ฅธ ์„ค๋ช…์ด ํ•„์š”์—†์œผ๋ฏ€๋กœ ์ƒ๋žตํ•œ๋‹ค.


๋ชจ๋ธ์„ ์ƒ์„ฑํ–ˆ์œผ๋‹ˆ ์šฐ๋ฆฌ๋Š” ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค. 1) ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. `python manage.py makemigrations book`
2) ์ƒ์„ฑํ•œ ํŒŒ์ผ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•œ๋‹ค. `python manage.py migrate`

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

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