DRF ์
๋ฌธ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ
ํต์ฌ ๊ธฐ๋ณธ์ฌํญ ๋ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ์ ์์๋ด์ ๐ฅฐ
DRF๋ ์ฅ๊ณ ๊ฐ๋ฐ์๋ผ๋ฉด
๋ฐ๋์ ๊ณต๋ถํ๊ฒ ๋๋ ํ๋ ์์ํฌ์
๋๋ค.
Django REST framework (DRF)๋ Client์ REST API ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ํ๋ ์์ํฌ๋ก, ๋ชจ๋ฐ์ผ ์ฑ์ด๋ ์ต๊ทผ ํ๋์ธ SPA client (React/Vue/Angular)์ ์ฐ๋ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋, ์ฅ๊ณ ๊ฐ๋ฐ์๋ก ์
๋ฌธํ ์ดํ ๋ค์ ๋จ๊ณ๋ก์จ ๋ฐ๋์ ๊ณต๋ถํ๊ฒ ๋๋ ํ๋ ์์ํฌ์
๋๋ค.
DRF ์
๋ฌธ์์๊ฒ ๊ผญ ํ์ํ ํต์ฌ์ ์ธ ์ฌํญ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์ณ๋๋ฆฝ๋๋ค.
Django REST framework
Django ์์์ Restful API ์๋ฒ๋ฅผ ์ฝ๊ฒ
๊ตฌ์ถํ ์ ์๋๋ก ๋์์ฃผ๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฐ์ ๊ธฐํ ๋ฐฐ๊ฒฝ
DRF๋ ์ฒ์์๋ ์ฌ์๋ณด์ด์ง๋ง ์์ฃผ ๋งํ๊ฒ ๋๋๋ฐ์, ๊ทธ ์ด์ ๋ ํด๋์ค์ ์์/์ค๋ฒ๋ผ์ด๋ฉ ๋ฐ ์๋ฆฌ์ผ๋ผ์ด์ ์ ํ์ฉ๋ฒ์ ์ต์์น ์๊ธฐ ๋๋ฌธ์
๋๋ค. Django์ CBV ๋ฐ DRF๋ ํด๋์ค๋ผ๋ ๊ณตํต ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค. ์ ๋ CBV์ ๋ํ 1ํธ ๊ฐ์ฌ๋ก์, DRF์ ํด๋์ค๋ค์ ์ ๋๋ก ํ์ฉํ๋ ๋ฒ์ ์ค๋ช
ํ๊ณ ์ ํฉ๋๋ค.
(Serializer)
Serializer๋ DRF๋ฅผ ์ด๋ ต๊ฒ ๋ง๋๋ ์์์ด๊ธฐ ๋๋ฌธ์, Serializer์ ์ ์ฒด๋ฅผ ๋ฐํ๊ณ ์๋ก์ด ๋ฐฉ๋ฒ๋ ์๋ ค๋๋ฆฝ๋๋ค. DRF ํต์ฌ์ฌํญ์ ๋ํ ์ ํํ ์ดํด์ ๋ค์ํ๊ฒ ์ค๋ฒ๋ผ์ด๋ฉํ๋ ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
์๊ฐ์์ ๊ณ ๋ฏผ
๐ต ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ DRF์ ์ด๋ป๊ฒ ์ ์ฉํ ์ง ๊ธ๋ฐฉ ๋ ์ค๋ฅด์ง ์์์.
โก DRF ๊ฐ ํด๋์ค๋ค์ ์ญํ ๊ณผ ์ ์ฌ์ฉํ๋์ง์ ๋ํด ์ ํํ๊ฒ ์๋ ค๋๋ฆฝ๋๋ค.
๐ค ์ ๊ฐ ์ํ๋๋๋ก ์์ ์์ฌ๋ก ์ค๋ฒ๋ผ์ด๋ฉ/์ปค์คํ
์ ํ๊ณ ์ถ์ต๋๋ค.
โก ํด๋์คํ๋ทฐ์ ๋ค์ํ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ์ ์๋ดํ๊ณ , ์์ค๋ฅผ ๋ฐ๋ผ๊ฐ๋ ๋ฒ์ ์ค๋ช
๋๋ฆฝ๋๋ค.
๐ข DRF๋ ์ฒ์์๋ ์ฌ์๋ณด์ด์ง๋ง ์์ฃผ ๋งํ์.
โก DRF ํํ ๋ฆฌ์ผ์ ์ํ ์ฝ๋๋ค์ ๊ทธ ์ด๋ฉด์ ๋์์ด ์ ๋๋ฌ๋์ง ์์ต๋๋ค. ๊ทธ ์ํ ์ฝ๋์ ์๋ฏธ์ ํ์ฉ๋ฒ์ ๋ํด ์์ธํ๊ฒ ์ค๋ช
๋๋ฆฝ๋๋ค.
๊ฐ์์ ํน์ง โจ
- ์ค์ blog ์ฑ์ ๋์์ผ๋ก ํ์ฌ ์ค์ ๊ฐ๊ฐ์ ์ตํ ์ ์์ต๋๋ค.
- ํด๋์คํ๋ทฐ์ 1ํธ ๊ฐ์ฌ๋ก์ DRF์ ์์/์ค๋ฒ๋ผ์ด๋ฉ์ ์ ํํ๊ฒ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
- ๋จ์ ์ฌ์ฉ๋ฒ๋ฟ๋ง ์๋๋ผ, ์๋ฆฌ์ผ๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ๋์์์ Idle time์ด ์๋๋ก ํธ์งํ์ฌ, ์ฌ๋ฌ๋ถ์ ๊ณต๋ถ ์๊ฐ์ ์ ์ฝ์ฝ์ ํ์ต๋๋ค.
ํ์ตํ ๋ด์ฉ ๐
1. ๊ณต์๋ฌธ์ Example ์์ ๋ฐ๋ผํ๊ธฐ
๊ณต์๋ฌธ์์์ ์ฒ์ ์ ํ๋ Example ์ฝ๋๋ฅผ ๋ฐ๋ผํ๋ฉด์, DRF์ ์ฐจ๋ณํ๋ ๊ธฐ๋ฅ์ ๋ฐฐ์๋๋ค. ๊ฐ๋ ฅํ์ง๋ง ์์ฉํ๊ธฐ๊ฐ ์ฝ์ง ์์ ๊ธฐ๋ฅ์ด์ง๋ง ์ด๋ฅผ ์์ ์ ๊ฒ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๊ฐ๋๋ค.
2. DRF๋ฅผ ํ์ฉํ์ฌ API ๋ง๋ค๊ธฐ
DRF์ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ณต๋ถํ๊ณ ์ด๋ฅผ ํ์ฉํ์ฌ ์์ ์๊ฒ ํ์ํ API endpoint๋ฅผ ์ฝ๋ฉํฉ๋๋ค. ์ค์ ๊ฐ๊ฐ์ ์ตํ๋๋ก Blog ์ค์ ์ฑ์ ๋์์ผ๋ก API๋ฅผ ๋ง๋ค๊ณ ์ด ๊ณผ์ ์์ ํ์ ํต์ฌ ํฌ์ธํธ๋ฅผ ๊ณต๋ถํฉ๋๋ค.
3. ํด๋ผ์ด์ธํธ ์๊ตฌ์ฌํญ ๋ง์ถ๊ธฐ
์ค์ ํ๋ก์ ํธ์์๋ Client์ ์ฐ๋ํฌ๋งท์ ๋ง์ถ๋ ์์
์ด ์ค์ํฉ๋๋ค. ์ฐ๋ํฌ๋งท์ด ๋ณ๊ฒฝ์ด ๋ ๋๋ง๋ค ์ด์ ๋์ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ถฐ์ผ ๋ฉ๋๋ค. ์ด๋ฅผ ์ํ ๋ค์ํ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
์์ ์ง๋ฌธ Q&A ๐ฌ
Q. Django๊ฐ ์ฒ์์ธ๋ฐ ๊ฐ์๋ฅผ ์๊ฐํ ์ ์๋์?
Django ๊ธฐ๋ณธ๊ณผ ํด๋์คํ๋ทฐ๋ฅผ ์ฌ์ฉํด๋ณธ ๋
์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๊ฒ ๋ฉ๋๋ค.
Q. DRF์ ๊ฐ์ ๋ฒ์๋ ์ด๋ป๊ฒ ๋๋์?
Serializer, generic view, viewset, router๋ฅผ ๋ค๋ฃจ๊ณ , auth/permission/throttle/versioning ๋ฑ์ ๋ค๋ฅธ ๊ฐ์์์ ๋ค๋ฃฐ ์์ ์
๋๋ค.
Q. ๊ฐ์ฌ๋์ ์ธํ๋ฐ ๋ค๋ฅธ ๊ฐ์์๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์?
๋ค๋ฅธ ๊ฐ์๋ API๋ฅผ ์ฅ๊ณ ํด๋์คํ๋ทฐ (CBV)๋ก ์ฝ๋ฉํ์๊ณ , ๋ณธ ๊ฐ์๋ API๋ฅผ DRF๋ก ์ฝ๋ฉํฉ๋๋ค. ์ ๋ DRF๊ฐ ์ฝ๋ค๋ฉด ๋ฐ๋ก DRF๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ ต๊ฒ ์๊ฐ๋๋ค๋ฉด CBV๋ฅผ ๋จผ์ ์ตํ ํ์ DRF๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ ํธ์
๋๋ค.
Q. ๊ฐ์ ๋ฒ์ ๋ฐ ํ๊ฒฝ์ ์ด๋ป๊ฒ ๋๋์?
2022๋
1์ ์ต์ ๋ฒ์ ์ธ Python v3.10, Django v4.0, DRF v3.13.1๋ก ๊ฐ์๋ฅผ ํ์ง๋ง, ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก๋ ํ์ต์ด ๊ฐ๋ฅํฉ๋๋ค. PyCharm ๋ฌด๋ฃ๋ฒ์ ์ผ๋ก ๊ฐ์ํ์ง๋ง, ๋ค๋ฅธ ์๋ํฐ๋ ๊ฐ๋ฅํฉ๋๋ค.