[Django] RestFrameWork

Maryยท2024๋…„ 5์›” 22์ผ

#hufslion 2์ฃผ์ฐจ TIL

๐Ÿ“ข Django REST Framework

Django REST framework is a powerful and flexible toolkit for building Web APIs.

Some reasons you might want to use REST framework:

The Web browsable API is a huge usability win for your developers.
Authentication policies including packages for OAuth1a and OAuth2.
Serialization that supports both ORM and non-ORM data sources.
Customizable all the way down - just use regular function-based views if you don't need the more powerful features.
Extensive documentation, and great community support.
Used and trusted by internationally recognised companies including Mozilla, Red Hat, Heroku, and Eventbrite.

๐Ÿ“ข Django ORM

Objecting Relating Maping์˜ ์ค„์ž„๋ง์ด๋ฉฐ ๊ฐ์ฒด (Object)์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (Relational)์„ ์—ฐ๊ฒฐ(Mapping)ํ•ด์ค€๋‹ค๋Š” ๋œป.

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋ ค๋ฉด SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, Djanjo ORM์„ ์‚ฌ์šฉํ•˜๋ฉด๋‹ค๋ฉด <์ฟผ๋ฆฌ๋ฌธ ์—†์ด ํŒŒ์ด์ฌ ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

์˜ˆ์‹œ

from django.db import models

class User(models.Model):
    name     = models.CharField(max_length=45)
    email    = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=200)

    class Meta:
        db_table = 'users'

์œ„์™€ ๊ฐ™์€ model์„ django์„ ์ด์šฉํ•˜๋ฉฐ migrateํ•˜๋ฉด

mysql> desc users;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | bigint       | NO   | PRI | NULL    | auto_increment |
| name     | varchar(45)  | NO   |     | NULL    |                |
| email    | varchar(100) | NO   | UNI | NULL    |                |
| password | varchar(200) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+

์œ„์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ์›ํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

REST API ํ”„๋กœ๊ทธ๋ž˜๋ฐ: ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹
REST API: ์›น์‚ฌ์ดํŠธ์—์„œ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ, ์ด ์ •๋ณด๋“ค์ด '์ง€๊ธˆ ์–ด๋–ค ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€' '์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€' ์˜ ๋ฐฉ๋ฒ•

๐Ÿ“ข REST API

REST ์•„ํ‚คํ…์ฒ˜์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค

REST: API ์ž‘๋™๋ฐฉ์‹์— ๋Œ€ํ•œ ์กฐ๊ฑด์„ ๋ถ€๊ณผํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜
API: ๋‘ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์ƒ์ฒญ ์‹œ์Šคํ…œ(์†Œํ”„ํŠธ์›จ์–ด 1)์—

์ผ์ผ ๊ธฐ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค๋ฉด

ํœด๋Œ€ํฐ์˜ ๋‚ ์”จ ์•ฑ(์†Œํ”„ํŠธ์›จ์–ด 2)์€ API๋ฅผ ํ†ตํ•ด

์ด ๊ธฐ์ƒ์ฒญ ์‹œ์Šคํ…œ๊ณผ โ€˜๋Œ€ํ™”โ€™ํ•˜์—ฌ

์•ฑ์— ์ตœ์‹  ๋‚ ์”จ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์š”.

โ€‹

์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ผ์ด์–ธํŠธ,

์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

โ€‹

์œ„์— ์žˆ์—ˆ๋˜ ๊ธฐ์ƒ(๋‚ ์”จ) ์˜ˆ์—์„œ

๊ธฐ์ƒ์ฒญ์˜ ๋‚ ์”จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์„œ๋ฒ„์ด๊ณ 

๋ชจ๋ฐ”์ผ ์•ฑ์€ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ๋ณด๋ฉด ๋ผ์š”.

โ€‹

๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€

'์šฐ์ฃผ(๊ธฐ๋Šฅ์˜ ํ‹€)๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ'์ด๋ผ๋ฉด ํด๋ผ์ด์–ธํŠธ

๊ฐœ๋ฐœ์ž๋Š” ์ง€๊ตฌ(์„ธ๋ถ€ ๊ธฐ๋Šฅ)๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ'

[์ถœ์ฒ˜] '์„œ๋ฒ„ ๊ฐœ๋ฐœ'์ด ๋ญ”์ง€ ๊ถ๊ธˆํ•ด? REST API ์™€ DRF(Django Rest Framework) ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด๊ธฐ!!|์ž‘์„ฑ์ž SW๋งˆ์—์ŠคํŠธ๋กœ

๐Ÿ“ข ์žฅ๊ณ ๊ธฐ๋ณธ๊ตฌ์กฐ


<๋‚ด๊ฐ€๋งŒ๋“ฌ>

โœ”๏ธ ๋ทฐ

HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค. ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ ํ›„์— ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜.

โœ”๏ธ ๋ชจ๋ธ

ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ SQL์„ ์ž๋™ ์ƒ์„ฑ/์ˆ˜ํ–‰. ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋กœ PostgreSQL, MySQL, MariaDB, Oracle ๋“ฑ์„ ์ง€์›ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณต.

โœ”๏ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์˜ ๋ณ€๊ฒฝ์„ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•ด์คŒ. ๋ชจ๋ธ ์ฝ”๋“œ ๋ณ€๊ฒฝ ๋งŒ์œผ๋กœ ๋ณ€๊ฒฝ๋‚ด์—ญ์„ ํŒŒ์•…ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ.

โœ”๏ธ ํผ

์ƒ์„ฑ/์ˆ˜์ • HTML ์ž…๋ ฅํผ์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰. ๋˜ํ•œ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋งŒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ.

โœ”๏ธ ํ…œํ”Œ๋ฆฟ

๋ณต์žกํ•œ ๋ฌธ์ž์—ด ์กฐํ•ฉ ์ž‘์—…์„ ๊ฐ„์†Œํ™”. ์ฃผ๋กœ HTML์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๋‹ค๋ฅธ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ˜•์‹์—์„œ๋„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

โœ”๏ธ ์ธ์ฆ๊ณผ ๊ถŒํ•œ

django.contrib.auth ์žฅ๊ณ  ๊ธฐ๋ณธ ์•ฑ์„ ํ†ตํ•œ ๊ฐ•๋ ฅํ•œ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ์ง€์›

โœ”๏ธ ์œ ์ €/๊ทธ๋ฃน/๊ถŒํ•œ ๋ชจ๋ธ

๊ฐ•๋ ฅํ•œ ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณต. ์ธ์ฆ์„ ์œ„ํ•œ ๋ชจ๋ธ๊ณผ ํผ/๋ทฐ๋ฅผ ์ง€์›.
๊ถŒํ•œ ๊ด€๋ฆฌ๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ, ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน์—๊ฒŒ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ๋“ฑ์˜ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑ ๊ฐ€๋Šฅ.

โœ”๏ธ View์—์„œ์˜ ๊ถŒํ•œ ์ฒดํฌ

๊ฐ ๋ชจ๋ธ ๋ณ„๋กœ add/change/view/delete ๊ถŒํ•œ์ด ๊ธฐ๋ณธ ์„ค์ •๋˜์–ด์žˆ์Œ.

์ถœ์ฒ˜1
์ถœ์ฒ˜2

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