โญ1. Django๋ ๋ฌด์์ธ๊ฐ์?
- ํ์ด์ฌ์ผ๋ก ๋ง๋ค์ด์ง ๋ฌด๋ฃ ์คํ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ(web application framework)์
๋๋ค. ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์น์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ ์ ์๋๋ก ๋๋ ๊ตฌ์ฑ์์๋ก ์ด๋ฃจ์ด์ง ์น ํ๋ ์์ํฌ์
๋๋ค.
์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ ๋, ๋น์ทํ ์ ํ์ ์์๋ค์ด ํญ์ ํ์ํฉ๋๋ค. ํ์๊ฐ์
, ๋ก๊ทธ์ธ, ๋ก๊ทธ์์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์ธ์ฆ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ด๋ ์น์ฌ์ดํธ์ ๊ด๋ฆฌ์ ํจ๋, ํผ, ํ์ผ ์
๋ก๋์ ๊ฐ์ ๊ฒ๋ค ๋ง์
๋๋ค.
โญ2. Django๋ฅผ ๋ฐฑ์๋ ์คํ์ผ๋ก ์ ์ ํ ์ด์ ๋ ๋ฌด์์
๋๊น?
- ํ์ด์ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ๋ ์์ํฌ์ค์์ ๊ฐ์ฅ ๋ํ์ ์ผ๋ก ์ฐ์ด๋ฉฐ,
DB์ Adminํ์ด์ง, ORM๋ฑ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ํธ๋ฆฌํ์ฌ ๊ฐ๋ฐ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์
๋๋ค.
โญ3. Django์๋ ์ด๋ค ์ฅ์ ์ด ์์ต๋๊น?
- ORM, Admin, permission๋ฑ ๋ด๋ถ ๊ธฐ๋ฅ์ด ๋ง์์ ์์งํ๋ฉด ๋น ๋ฅธ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๊ณ ,
Django ํ
ํ๋ฆฟ์ ํ์ฉํ์ฌ ํ๋ก ํธ์๋ ๊ฐ๋ฐ๋ ๋ค๋ฅธ ๊ธฐ์ ์์ด ๊ฐ๋ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
โญ4. Django๊ฐ ๋ค๋ฅธ Python ํ๋ ์์ํฌ์ ๋น๊ต๋๋ ํน์ง์ด ์๋ค๋ฉด?
- Django์ ํน์ง์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด ๋ง๋ค๋ ์ ์ด๊ณ , ํ์ด์ฌ์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์คํ ์์คํ๋ ์์ํฌ์ด๊ธฐ ๋๋ฌธ์ ๊ด๋ จ ์๋ฃ๊ฐ ๋ง์๊ฒ์ด ์ฅ์ ์
๋๋ค. ํ์ง๋ง ๊ธฐ๋ฅ์ด ๋ง์ ๋งํผ ๋ฌด๊ฒ๊ณ ๋ณต์กํ๋ฉฐ, Flask์ ๋น๊ต ํ์๋ ์์ ๋๊ฐ ๋จ์ด์ง๋๋ค.
โญ5. Django ํ๋ก์ธ์ค๋ ์ด๋ค ์์๋ก ๋์ํฉ๋๊น?
- request๊ฐ ๋ค์ด์ค๋ฉด URL์ ๋ฐ๋ผ ์ง์ ๋ view๋ฅผ ํธ์ถํ๊ณ ์ ํด์ง response๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
โญ6. Django์ MTVํจํด ์์คํ
์ ๋ฌด์์
๋๊น?
- Model-Template-View๋ก ์ด๋ฃจ์ด์ง ํจํด์ผ๋ก Model์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๊ณ ,
template์ ์ฌ์ฉ์๊ฐ ์๊ฐ ์ ์ผ๋ก ํ์ธํ ์ ์๋ ํ๋ฉด ์ฆ, UI๋ฅผ ๋ด๋นํ๋ ๋ถ๋ถ์ด๊ณ ,
View๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ณ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค.
โญ7. ORM์ ๋ํด์ ์ค๋ช
ํ์์ค.
- Object-Relational Mapping์ ์ฝ์๋ก SQL์ด๋ผ๋ ์ธ์ด ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๊ฒ ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
โญ8. Django์ ์ฅ๋จ์ ์ ๋ฌด์์
๋๊น?
- ์ฅ์ : ํ์ด์ฌ ์นํ๋ ์์ํฌ ์ค์์ ๊ฐ์ฅ ์ฌ์ฉ์๊ฐ ๋ง์์ ์๋ฃ ์ฐพ๊ธฐ๊ฐ ํธ๋ฆฌํ๋ฉฐ,
RDBMS์์ ์ํธ ์์ฉ์ ์์ ํ ์ง์ํ๋ ๊ธฐ๋ณธ ๋ด์ฅ ORM์ด ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
๋จ์ : ๋ฌด๊ฒ๊ณ ๋ณต์กํ๋ฉฐ, Flask์ ๊ฐ์ ๋ง์ดํฌ๋ก ํ๋ ์์ํฌ์ ๋นํด ์์ ๋๊ฐ ๋จ์ด์ง๋๋ค.
โญ9. Django Admin์ ๋ฌด์์ด๊ณ ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๊น?
- Django admin์ django์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ๊ด๋ฆฌ์ ๊ธฐ๋ฅ์ ์๋ฏธํฉ๋๋ค.
DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ถ๊ฐ,์์ ,์ญ์ ๋ฅผ ํ ์ ์๊ณ ์ปค์คํฐ๋ง์ด์ง์ ํตํด ํ์ด์ง๋ฅผ
์ฌ์ฉ์ฑ์๊ฒ ๊พธ๋ฐ ์ ์์ต๋๋ค.
โญ10. Django Template Engine์ ๋ฌด์์ด๊ณ ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๊น?
- Django Template Engine์ Jinja2์ ๋น์ทํ Django์์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํ๋ ํ
ํ๋ฆฟ ์์ง์
๋๋ค.
์ด๋ฅผ ํตํด django ํ
ํ๋ฆฟ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ ๊ฐํธํ๊ฒ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ
HTML์ ๋์ ์ผ๋ก ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค.
โญ11. Django๋ฅผ ํตํด CRUD๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ HTTP Method์ ํจ๊ป ์ค๋ช
ํ์์ค
- get: ์ ๋ณด ์กฐํ (read)
post: ์ ๋ณด ์
๋ก๋(create)
put: ์ ๋ณด์์ (update)
delete: ์ ๋ณด ์ญ์ (delete)
โญ12. Django์์ ํ
์ด๋ธ์ ์ค๊ณํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํ์์ค
- models.py์ models.Model์ ์์ํด ํด๋์ค๋ฅผ ์์ฑํ๊ณ
charfield, integerfield ๋ฑ ํ๋๋ฅผ ์ฌ์ฉํด ํ
์ด๋ธ์ ์ค๊ณํฉ๋๋ค.
๋ง๋ค์ด์ง ํ
์ด๋ธ์ python manage.py makemigration ๋ช
๋ น์ด๋ก
migration ํ์ผ์ ์์ฑํ๋ค python manage.py migrate๋ก ๋ฐ์ํฉ๋๋ค.
โญ13. ํ์๊ฐ์
์ ํ ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ์ฌ ์ ์ฅํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
- ํดํน์ ์ทจ์ฝํด์ง๊ธฐ ๋๋ฌธ์ ์ ์ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ์ ์๋ ๋น๋ฐ๋ฒํธ๋ ํด์ฑ, ์ํธํํด์ ์ ์ฅํฉ๋๋ค.
SHA-256ํ์ค ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค.
โญ14. JWT์ ๋ํด์ ์ค๋ช
ํ์์ค.
- ํ ํฐ ๊ธฐ๋ฐ์ ์ ์ ์๋ณ ์ธ์ฆ ๋ฐฉ๋ฒ์ผ๋ก, ์ฌ์ฉ์ ์ธ์ฆ์ ํ์ํ ์ ๋ณด๋ฅผ ํ ํฐ์ ํฌํจํฉ๋๋ค.
๋ฐ๋ผ์ ๋ณ๋์ ์ธ์ฆ ์ ์ฅ์๊ฐ ํ์ํ์ง ์์ต๋๋ค.
โญ15. JWT์ Access Token๊ณผ Refresh Token์ ์ ํ์ํ๊ฐ์?
- JWTํ ํฐ์ token์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์ ์ธํ๋ฉด ํด๋ผ์ด์ธํธ ๋ณธ์ธ์ด ๋ง๋์ง ํ์ธํ ์๋จ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ค ์๋ฏธ์์๋ ๋ณด์์ด ์ทจ์ฝํ๋ฐ ์ด๋ฅผ ๋ณด์ํด์ฃผ๋ ๊ฒ์ด refresh token์ ์กด์ฌ์
๋๋ค.
์ค์ ํ ํ ํฐ ์ ํจ๊ธฐ๊ฐ์ด ์ง๋๋ฉด access token์ ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๊ณ refresh token์ ๊ฐ์ง๊ณ access token์ ์๋ก
๋ฐ๊ธ๋ฐ์์ token์ ์ ์งํ ์ ์๊ฒํฉ๋๋ค.
โญ16. Django์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ JWT๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์๋ ์ด๋ค ์ฐจ์ด์ ์ด ์์ต๋๊น?
- JWT๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ๋ชจ๋ base64 ์ธ์ฝ๋ฉ์ ํ๊ณ ์ ์ง ์๊ฐ๋ ์งง์ ๋ณด์์ ์ ๋ฆฌํ๋ฉฐ,
๋ค๋ฅธ ํ๋ ์์ํฌ์ ํธํ์ฑ๋ ๋์ต๋๋ค.
Django ๊ธฐ๋ณธ ์ธ์ฆ์ Django ๋ด์ฅ์ธ ๋งํผ ํจ์ฌ๋ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ด์ ์ด ์์ต๋๋ค.
โญ17. ๋ฐ์ดํฐ ํ
์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ FK, OneToOne, ManyToMany ํ๋์ ๋ํด์ ์ค๋ช
ํ์์ค.
- FK: ๋ค๋ฅธ ํ
์ด๋ธ๊ณผ ๊ด๊ณ๊ฐ ์์ ๋ ๋ค๋ฅธ ํ
์ด๋ธ์ ๋ด์ฉ์ ๋ถ๋ฌ์ค๊ณ ์ด์ฉํ ์ ์์ต๋๋ค.
OnetoOne: 1:1์ ๋์ ๊ด๊ณ ํ
์ด๋ธ์
๋๋ค. ์๋ฅผ๋ค์ด ์ ์ ์ ์ ์ ํ๋กํ ๋ชจ๋ธ
ManytoMany: A ๋ชจ๋ธ์ ์ฐ๊ด๋ B ๋ชจ๋ธ ํ๋๊ฐ ์ฌ๋ฌ๊ฐ ์ผ ์ ์๊ณ ,
B๋ชจ๋ธ์ ์ฐ๊ด๋ A ๋ชจ๋ธ ํ๋๊ฐ ์ฌ๋ฌ๊ฐ์ผ ์ ์๋ ๊ด๊ณ๊ฐ MtoM ์
๋๋ค.
โญ18. Django์์ ManyToManyํ๋๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํ์์ค.
-
๋ชจ๋ธ๊ณผ ๋ค๋๋ค ๊ด๊ณ์ ๋๊ณ ์ถ์ ๋ชจ๋ธ์ manytomany ํ๋๋ก ์ฐ๊ฒฐํ๋ฉด
์๋์ ์ผ๋ก ๋ ๋ชจ๋ธ์ ์ฐ๊ฒฐํด์ฃผ๋ ์๋ก์ด ๋ชจ๋ธ์ด ์์ฑ๋ฉ๋๋ค.
class Company(models.Model):
company_name = models.CharField(max_length=128)
business_area = models.ManyToManyField('BusinessArea', through='CompanyBusinessArea')
class Meta:
db_table = 'companies'
โญ19. FBV์ CBV๋ ๊ฐ๊ฐ ๋ฌด์์ด๋ฉฐ, ์ด๋ค ์ฐจ์ด๊ฐ ์์ต๋๊น?
- views.py๋ฅผ ํจ์์ค์ฌ์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ๊ณผ ํด๋์ค ์ค์ฌ์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
ํด๋์ค๋ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๊ณ ,
์์ํ ์ ์์ด์ ์ฝ๋ ์๋ฅผ ์ค์ด๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
โญ20. ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด์ ๋ ๋ฌด์์ด๋ฉฐ ์ด๋ค ์ฅ์ ์ด ์์ต๋๊น?
- ์ฝ๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ์ฌ๋ถ๋ฅผ ์๋์ ์ผ๋ก ์ ์ ์์ต๋๋ค.
๋ ๊ผผ๊ผผํ๊ณ ์ ํํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ์ฒ์์ ์๊ฐ์ ๋ ์ฐ๋๊ฒ ๊ฐ์๋
๊ฒฐ๊ตญ์๋ ์๋ฌ๋ฅผ ์ค์ฌ ์๊ฐ์ ์ ์ฝํ๋ ๊ธธ์ด ๋ฉ๋๋ค.
โญ21. ํ
์คํธ์ฝ๋์์ setup ํจ์์ setupclass์ ์ฐจ์ด๋ ๋ฌด์์
๋๊น?
- setup()โ ๊ฐ ํ
์คํธ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ด์ ์ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค. ํ
์คํธ ์ผ์ด์ค๊ฐ ์คํ๋ ๋ ๋ง๋ค ์ฌ์ฉ๋ฉ๋๋ค.
setUpClass() โ ํด๋น ํ
์คํธ ํด๋์ค๊ฐ ์์๋๊ธฐ ์ด์ ๋จ ํ๋ฒ ํธ์ถ๋๋ ๋ฉ์๋์
๋๋ค.
setup ๋ฉ์๋๋ ๊ฐ ํ
์คํธ ๋ฉ์๋ ์ด์ ์ ํญ์ ํธ์ถ ๋ฉ๋๋ค.
๋ฉ์๋์ @classmethod๋ผ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ๋ฌ์์ค์ผํ๊ณ ๋ฉ์๋ ์ธ์๋ก cls๋ฅผ ๋๊ฒจ์ค์ผํฉ๋๋ค.
โญ22. Template Engine์ ์ฌ์ฉํ ๋, ๋ฐ์ํ๋ CSRF Error๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น?
- csrf ์ฌ์ดํธ๊ฐ ์์ฒญ ์์กฐ์ด๋ฉฐ, ์ฌ์ดํธ๊ฐ ์์ฒญ ์์กฐ๋ ์น์ฌ์ดํธ ์ทจ์ฝ์ ๊ณต๊ฒฉ์ ํ๋์
๋๋ค.
์ฌ์ฉ์๊ฐ ์์ ์ ์์ง์๋ ๋ฌด๊ดํ๊ฒ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ํ์๋ฅผ ํน์ ์น์ฌ์ดํธ์ ์์ฒญํ๊ฒ ํ๋ ๊ณต๊ฒฉ์ ๋งํฉ๋๋ค.
Template Engine ์ ์ฌ์ฉํ ๋๋ {% csrf_token %} ์ ๋ถ์ฌ์ค์ ํด๊ฒฐ ํ ์ ์์ต๋๋ค.
โญ23. Django ORM์์ queryset๊ณผ object์ ์ฐจ์ด์ ์ ๋ํด์ ์ค๋ช
ํ์์ค.
- queryset์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ฌ๋ฐ์ ๊ฐ์ฒด๋ค์ list์
๋๋ค.
object๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๋ฌ๋ฐ์ ๊ฐ์ฒด์
๋๋ค.
โญ24. Django ORM์์ ์ ์ฐธ์กฐ์ ์ญ์ฐธ์กฐ์ ๋ํด์ ์ค๋ช
ํ์์ค
- ์ ์ฐธ์กฐ: ํด๋น ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ForeignKey๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋ 1:1 ๊ด๊ณ์ธ ์ํฉ์์ ์ฐธ์กฐ ํ๋ ๊ฒฝ์ฐ์
๋๋ค.
(๋ด๊ฐ ์ฐธ์กฐํ๋ table์ ๊ทผ)
์ญ์ฐธ์กฐ: ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ForeignKey๋ฅผ ๊ฐ์ง๊ณ ์๊ฑฐ๋ N:N ๊ด๊ณ์ธ ์ํฉ,
ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ค๋ ๊ฒฝ์ฐ์
๋๋ค.
(๋๋ฅผ ์ฐธ์กฐํ๋ table์ ๊ทผ)
โญ25. Response ๊ฒฐ๊ณผ์ ํจ๊ป status code๋ฅผ ๋ฐํํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
- ์ํ์ฝ๋๋ ์๋ฒ๊ฐ ์๊ตฌ ๋ฉ์์ง๋ฅผ ์์ ํ์ฌ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๋ ์ธ์๋ฆฌ์ ์ ์๋ก ๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฒํธ์
๋๋ค.
ํด๋น ์ฝ๋ ๋ฒํธ๋ API ๊ฐ์ด๋ ๋ผ์ธ์ ๋ฐ๋ฆ
๋๋ค. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์๋ต์ ์๋ฒ๋ฅผ ํด์ค์ผ ํฉ๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฒ์์ ๋ฌด์จ ์๋ฌ๊ฐ ๋ฌ๋์ง, ํด๋ผ์ด์ธํธ์์ ์ด๋ ํ ์๋ฌ๊ฐ ๋ฌ๋์ง,
ํ์
ํ ์ ์๊ณ ๋ฌด์กฐ๊ฑด์ ์ธ 200 ok ๋ ์๋น์ค์ ํฐ ํ๊ฒฉ์ ์
ํ ์ ์์ต๋๋ค.
โญ26. ํ์ํํด, ๊ฒ์๊ธ ์ญ์ ์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ค์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํฉ๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ทธ ์ด์ ๋ ๋ฌด์์
๋๊น?
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ๋ ์์ง๋ง ์ญ์ ์ํค๊ธฐ ๋ณด๋ค๋ ์ ์ ์ ๊ถํ์ ์ ์ง ์ํค๋๊ฒ ์ข์ต๋๋ค.
ํนํ RDBMS์์๋ ํ
์ด๋ธ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ค๋ฅ๋ฅผ ์ ๋ฐ ํ ์๋ ์์ต๋๋ค.
๋ํ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ ๋ณด๋ค๋ ์ ์งํ๋ ๊ฒ ์ด ๋ง์ผํ
๋ฑ์ ํ์ฉ ํ ์ ์์ด ์ข์ต๋๋ค.
โญ27. RESTful API๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
- HTTP URI ๋ฅผ ํตํด ์์์ ๋ช
์ํ๊ณ , HTTP method (GET,POST,PUT,DELETE)๋ฅผ ํตํด
ํด๋น ์์์ ๋ํ CRUD OPERATION์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
RESTful ์ด๋ผ๋ ๋ง์ REST ๋ผ๋ ์ํคํ
์ฒ ๊ฐ๋
์ ๊ทธ๋๋ก์ ์ฉํด์ ์น์๋ฒ ๊ตฌ์ฑํ๊ณ ์น์๋น์ ํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
โญ28. DRF๋ฅผ ์ฌ์ฉํด API๋ฅผ ๊ฐ๋ฐํ ๊ฒฝ์ฐ ์ด๋ค ์ฅ์ ์ด ์์ต๋๊น?
- Serailizer๋ฅผ ํตํด ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ JSOn,XML๋ฑ์ ์ปจํ
ํธ ํ์
์ผ๋ก ์ฝ๊ฒ
๋ณํ ๊ฐ๋ฅํ python ๋ฐ์ดํฐ ํ์
์ผ๋ก ๋ณํ์์ผ์ค๋๋ค.
ORM ๊ณผ non-ORM์ ๋ชจ๋ ์ง์ํฉ๋๋ค.
๋ง์ ๊ธฐ์
์์ ์ฌ์ฉํด์ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ฝ์ต๋๋ค.
์ธ์ฆ ๊ด๋ฆฌ๋ฅผ ์ํด OAuth1์ OAuth2๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค.
โญ29. Django ์ DRF๋ฅผ ํตํ ๊ฐ๋ฐ์ ์ฐจ์ด์ ์ ์ด๋ค ๊ฒ์ด ์์ต๋๊น?
- Django ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Queryset์ ํ
ํ๋ฆฟ ์ธ์ด๋ก ๋ ๋๋งํฉ๋๋ค.
DRF๋ฅผ ์ฌ์ฉํ๋ฉด json์ ํ
ํ๋ฆฟ ์ธ์ด๋ก ๋ ๋๋งํฉ๋๋ค.
DRF๋ฅผ ์ฌ์ฉํ๋ฉด python์ผ๋ก ๋ง๋ ๋ฐฑ์๋๋ฅผ ๋ค๋ฅธ ํ๋ก ํธ์๋์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
โญ30. Django User ๋ชจ๋ธ๊ณผ DRF Custom User ๋ชจ๋ธ์ ์ฐจ์ด๋ ๋ฌด์์
๋๊น?
- Django User๋ชจ๋ธ์๋ ์ ์ ๋ค์,์ด๋ฆ,์ด๋ฉ์ผ,ํจ์ค์๋ ์ ๊ธฐ๋ณธ์ ์ธ ํ๋๊ฐ ์กด์ฌํฉ๋๋ค.
ํ์ง๋ง ์ค์ ์๋น์ค์์๋ ๋ ๋ง์ User์ ์ ๋ณด๋ฅผ ํ์๋ก ํฉ๋๋ค.
์์ผ์ด๋ผ๋์ง, ์ฌ๋ฌ๊ฐ์ง ์ง๋ฌธ์ ํฌํจํ ์ ๋์์ต๋๋ค.
๊ทธ๋ ๊ธฐ ์ํด Custom User์ ํตํด ์ปค์คํ
ํฉ๋๋ค.
๋ํ Django User๋ชจ๋ธ์ username์ผ๋ก ๋ก๊ทธ์ธ์ ํด์ผ ํฉ๋๋ค.
โญ46. Django ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ๋, ์ํฌ๋ฆฟํค๋ฅผ ๋
ธ์ถํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํ์์ค.
- .env์ ์ํฌ๋ฆฟํค์ database์ ๋ณด๋ค์ ์์ฑํ๊ณ settings.py์์๋ .envํ์ผ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ .env๋ฅผ .gitignore์ ํฌํจ์์ผ github์ push๋์ง ์๋๋ก ํ๊ณ EC2์๋ฒ์ ๋ฐ๋ก .envํ์ผ์ ์
๋ก๋ํฉ๋๋ค.
๊ฐ์ ๋ฐฉ์์ผ๋ก local_settings.py๋ผ๋ ํ์ผ์ ์์ฑํด์ ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
โญ47. Django ํ๋ก์ ํธ ์งํ ์ ๋ฐ์ํ๋ CORS ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช
ํ์์ค.
- CORS๋ Cross Origin Resource Sharing์ ์ฝ์๋ก
๋๋ฉ์ธ ๋๋ ํฌํธ๊ฐ ๋ค๋ฅธ ์๋ฒ์ ์์์ ์์ฒญํ๋ ๋งค์ปค๋์ฆ์
๋๋ค.
CORS ๋ฌธ์ ๋ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ฒ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์์ ๋, ํค๋์ ์ ๊ทผ์ ํ๋ฝํ๋ ๋ด์ฉ์ด ์์ผ๋ฉด ๋ฐ์ํฉ๋๋ค.
์ด๋ด ๊ฒฝ์ฐ ์ธ๋ถ ์๋ฒ์์ ๋ณด๋ด๋ ์์ฒญ์ ํค๋(Access-Control-Allow-Origin response ํค๋)์
cross origin HTTP ์์ฒญ์ ํ๊ฐํด ์ ๊ทผ์ ํ๋ฝํ๋ ๋ด์ฉ์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋๋ค.
pip๋ฅผ ํตํด(ํน์ Poetry)django-cors-headers๋ฅผ ๋ค์ด๋ฐ๊ณ installed app์ ๋ช
์๋ฅผ ํด์ค๋ค์
cors allow (header, method, allowed_origin) ์ค์ ๋ค์ ์ฉ๋์ ๋ง๊ฒ ์ค์ ํด์ฃผ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค.
โญ48. Django ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ๋ Allow Host์ * ๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋๋ ์ด์ ๋?
- allow host *์ ์ด๋ค ํธ์คํธ์์ ์ ๊ทผ์ ํด๋ ํ๋ฝํ๊ฒ ๋ค๋ ์๋ฏธ๋ก ๋ค์ํ ๊ณต๊ฒฉ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
โญ49. Django ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ๋ ์ฌ์ฉ๋๋ Gunicorn์ด ๋ฌด์์ด๋ฉฐ, WSGI๋ฅผ ์ ์ฌ์ฉํด์ผ ํ๋์ง ์ค๋ช
ํ์์ค.
- Gunicorn์ ์น์๋ฒ์ ํ์ํ ๋์ ํ์ด์ง ์์ฒญ์ python์ ๋ง๊ฒ ํด์ํ์ฌ ์์ฉํ๋ก๊ทธ๋จ์ ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฅ๊ณ ์ดํ๋ฆฌ์ผ์ด์
์ ์น์๋ฒ๋ก ๊ตฌ๋๋ ์ ์์ต๋๋ค.
์ฅ๊ณ ์ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด django์ runserver๋ ํ
์คํธ, ๋๋ฒ๊น
์ฉ์ด๋ฉฐ
๋ณด์๊ณผ ์ฑ๋ฅํ
์คํธ๋ฅผ ๊ฑฐ์น์ง ์์๊ธฐ ๋๋ฌธ์ wsgi์ ์น์๋ฒ๋ก ์๋น์คํ๋๋ก ๊ถ์ฅ๋์ด์์ต๋๋ค.
โญ50. Django ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ๋ ์ฌ์ฉ๋๋ NGINX๊ฐ ๋ฌด์์ด๋ฉฐ, ์น์๋ฒ๋ฅผ ์ ์ฌ์ฉํด์ผ ํ๋์ง ์ค๋ช
ํ์์ค
- nginx๋ ์ ์ ํ์ด์ง ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์น์๋ฒ์ ๊ตฌ์ถ์ ๋์์ฃผ๋ ์ํํธ์จ์ด์
๋๋ค.
๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฒ๋ฆฌ๋ฐฉ์์ผ๋ก ์๋ต์ด ๋น ๋ฅด๊ณ ํธ๋ํฝ ์ฒ๋ฆฌ์ ์ ๋ฆฌํฉ๋๋ค.
nginx๋ฅผ ํ๋ก์ ์๋ฒ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ฒ์ ๋ถ์ฐํ๊ธฐ ์ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ,
DDos ๊ณต๊ฒฉ ์ํ, ์น์๋ฒ์ ssl์ธ์ฆ๋ ์ ์ฉ๋ ๊ฐ๋ฅํฉ๋๋ค.
Gunicorn๋ง์ผ๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ฉด ์ ์ ์ธ ํ์ด์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํด
REST API์๋ฒ๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๋ค๊ณ ํด๋ Nginx๋ฅผ ํตํด ์ฅ์ ์ผ๋ก ์ธ๊ธํ ํ๋ก์ ์๋ฒ๋ฅผ ๊ตฌ์ถํด ๋ค์ํ
๋ณด์์ด์ ๋ ์ป์ ์ ์์ต๋๋ค.
โญ51. Django์์ PostgreSQL์ ์ ํธํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
- PostgreSQL์ ํ์ฅ ๊ฐ๋ฅ์ฑ ๋ฐ ํ์ค ์ค์๋ฅผ ๊ฐ์กฐํ๋
๊ฐ์ฒด-๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
(ORDBMS)์ ํ๋ ์
๋๋ค.
Django๋ PostgreSQL์์๋ง ์๋ํ๋ ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ํ์ ์ ๊ณตํฉ๋๋ค.
PostgreSQL์๋ Django๊ฐ ์ง์ํ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ณต์ ๋์ง ์๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
PostgreSQL์ Django์์ ์ง์ํ๋ ๊ธฐ๋ฅ
์ง๊ณ ํจ์ ๊ธฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฝ ๊ธฐ๋ฅ
์์ ํ๋ ๋ฐ ์์ ฏ ๊ธฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํจ์ ๊ธฐ๋ฅ
๋ชจ๋ธ ์ธ๋ฑ์ค ๊ธฐ๋ฅ
์กฐํ ๊ธฐ๋ฅ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
์์
์ ์ฒด ํ
์คํธ ๊ฒ์
๊ฒ์ฆ
โญ52. HTTP๊ฐ HTTPS๋ก ๋ฐฐํฌํ์ ๋์ ์ฅ์ ์ ๋ํด ์ค๋ช
ํ์์ค.
-
HTTP HTTPS ์ฐจ์ด์
HTTPS(https://)๋ SSL(Secure Socket Layer) ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ๋ HTTP(http://)์
๋๋ค. SSL(๋๋ TLS) ์ธ์ฆ์๋ ์ผ๋ฐ HTTP ์์ฒญ ๋ฐ ์๋ต์ ์ํธํํฉ๋๋ค. ๋ฐ๋ผ์ HTTPS๋ HTTP๋ณด๋ค ๋ ์์ ํ ๋ณด์์ฉ ํ๋กํ ์ฝ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
-
HTTP์ HTTPS์ ์ ์ผํ ์ฐจ์ด์ ์ HTTPS๋ฅผ ์ฌ์ฉํ ์น ํ์ด์ง๋ฅผ ํตํด ์ ์ก๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ณ์ธต์ด ์์ต๋๋ค. ์ด๋ฅผ TLS(์ ์ก ๊ณ์ธต ๋ณด์) ํ๋กํ ์ฝ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์์๋ ์ ์๋ HTTPS ์ฌ์ดํธ๋ฅผ ํตํด ์ ๋ฌ๋๋ฉฐ ์ 3์๋ก๋ถํฐ ๋ณดํธ๋ฉ๋๋ค.
-
HTTP๋?
HTTP(HyperText Transfer Protocol)๋ ํ์ดํผ ํ
์คํธ ์ ์ก ํ๋กํ ์ฝ์ผ๋ก ๊ฐ๋จํ ๋งํด์ ์ธํฐ๋ท์ ์๋์ํค๋ ์ญํ ์ ํ๋ฉฐ, ์น ์๋ฒ ๋ฐ ์น ๋ธ๋ผ์ฐ์ ์ํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ์์ฉ๊ณ์ธต ํ๋กํ ์ฝ์
๋๋ค.
์น ์ฌ์ดํธ์ ์ก์ธ์คํ๊ธฐ ์ํด์๋ ํ๋กํ ์ฝ ๋ณํ์ด ํ์ํ๋ฐ, ์ด๋ ์น ์ฌ์ดํธ URL์ด ์ผ๋ฐ์ ์ผ๋ก โhttp://www..โ๋ก ์์ํ๋ฉฐ URL์ ํด๋นํ๋ ์น ํ์ด์ง๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์น ์ฌ์ดํธ ์๋ฒ์ ๋ช
๋ น์ ๋ณด๋ด ์๋ํ๊ฒ ๋ฉ๋๋ค.
-
HTTPS๋?
HTTPS(Hypertext Transfer Protocol Secure)๋ ํ์ดํผ ํ
์คํธ ์ ์ก ํ๋กํ ์ฝ ๋ณด์์ผ๋ก ํ์ค HTTP์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ์๋ฒ์ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋๊ธฐ ๋๋ฌธ์ ์น์ฌ์ดํธ์ ์ถ๊ฐ์ ์ธ ๋ณดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฆ, ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ํ์น๊ฑฐ๋, ํดํนํ๊ฑฐ๋ ๋ณผ ์ ์๋๋ก ์๋ํฉ๋๋ค.
-
HTTPS ํ์ธ ๋ฐฉ๋ฒ
๋ธ๋ผ์ฐ์ ์์ URL์ ํ์ธํ์ฌ ์น์ฌ์ดํธ์ HTTPS ๋ณดํธ ๊ธฐ๋ฅ์ด ์๋์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋๋ฉ์ธ ์ด๋ฆ ์์ ์๋ฌผ์ ์์ด์ฝ์ด ์์ผ๋ฉด ๋น์ ์ ์ฌ์ดํธ๋ HTTPS๋ก ์ธํด ์์ ํ ๊ฒ์
๋๋ค.