- ๊ณ ๋ฑํ์๋ค์ ์ ์์ ๋ณด ๋ฐ ์ํ์ ๋ณด ๊ณต์ ์๋น์ค
- ๋์ ์ ๋ํ ์ ์์ ๋ณด๋ฅผ ์ฐพ๊ณ , ์ผ์์ํ์ ๊ณต์ ํ๋ฉฐ ๊ณต๊ฐ๋๋ฅผ ํ์ฑํ๋ ์๋น์ค
- ๊ณต๋ถํ๋ค ์ง์น ํ์๋ค์ด ํธํ ์ฐพ์ ์ ์๋ ์ปค๋ฎค๋ํฐ
-
๊ธฐ๋ณธ ๊ธฐ๋ฅ
- ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ํ๋กํ ๊ธฐ๋ฅ
- ์ปค๋ฎค๋ํฐ ๊ฒ์ํ ๊ธฐ๋ฅ(์ ์๊ฒ์ํ, ์์ ๊ฒ์ํ 2๊ฐ)
- AI ํฐ์นญ ๊ธฐ๋ฅ
-
์ ํ ๊ธฐ๋ฅ
- ์ค์๊ฐ ์ต๋ช ์ฑํ ๊ธฐ๋ฅ
- ๋ฌธ์ ๊ธฐ๋ฅ
-
๊ธฐ๋ณธ ์๊ตฌ์ฌํญ
- ํ์ ๊ด๋ จ ๊ธฐ๋ฅ
- ๊ธฐ๋ฅ ์ต์ 3๊ฐ์ง ์ด์ ๊ตฌํ (ํ์ ๊ธฐ๋ฅ ํฌํจ)
-
์ ํ ์ฌํญ
- UI ์ถ๊ฐ
-
ํ์ ๊ฒฐ๊ณผ๋ฌผ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ(ERD)
- API ๋ช ์ธ์(๋งํฌ์ , ๋ ธ์ , swaggerโฆ ๋ฑ)
- ๋ฐํ ์๋ฃ
-
ํ๊ฐ ์งํ
- ๊ธฐ์ ์ฑ: ๋ง์ดํฌ๋ก์๊ณผ CBV์ ์ ์ ํ ์ฌ์ฉ, Django ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ ์ ํ ์ฌ์ฉ
- DB์ค๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ, DB ๋ณต์ก๋, ์ ์ ์ฑ์ ๋ฐ๋ผ ๊ตฌํ
- ๋ฐฐํฌ: nginx, gunicorn, django ๋ฑ ์ฐ๊ณํ์ฌ ๋ฐฐํฌ
- ์ค๊ณ์ ๊ตฌํ: ์ค๊ณ์ ๊ตฌํ ๋ณต์ก๋(์๊ตฌ์ฌํญ ์์ฑ, ์์ด์ดํ๋ ์ ๋ฑ ๊ธฐ๊ฐ ๋ด ์ค๊ณํ ์์๋ค์ด ๋ชจ๋ ๊ตฌํ์ด ๋์ด ์๋์ง ๋ฑ)
- BE : https://schooltalks.maxworld7070.net/
- FE : https://schooltalks77.netlify.app/ (๋๋ฉ์ธ์ฃผ์ : https://englishmax.xyz)
- aws๊ณผ๊ธ์ผ๋ก ํ์ฌ ์๋ฒ ์ค๋จ ์ํ
- ์ค์จ๊ฑฐ ๋ฌธ์(API ๋ช ์ธ) : API ๊ธฐ๋ฅ๊ณผ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ช ํํ ์ ๋ฌ ํ๊ธฐ ์ํ Swegger drf-yasg ์ฌ์ฉํ์ฌ ๋ฌธ์ํ
๐ https://schooltalks.maxworld7070.net/schema/swagger-ui/
| ์๋ํฌ์ธํธ | HTTP ๋ฉ์๋ | ๊ธฐ๋ฅ | ์ฑ | ๋น๊ณ |
|---|---|---|---|---|
| /accounts/signup/ | POST | ์๋ก์ด User๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ญํ (ํ์๊ฐ์ ) | Accounts | |
| /accounts/token/ | POST | ์ธ์ฆ ํ ํฐ ์์ฑ (๋ก๊ทธ์ธ) | Authentication | ๐ |
| /accounts/token/refresh/ | POST | ํ ํฐ ๊ฐฑ์ | Authentication | ๐ |
| /accounts/token/verify/ | POST | ํ ํฐ ์ ํจ์ฑ ๊ฒ์ฌ | Authentication | ๐ |
| /accounts/user/ | GET | ํน์ ์ฌ์ฉ์์ ํ๋กํ ์กฐํ (ํ๋กํ ๋ณด๊ธฐ) | User Profile | ๐ ๐ง |
| /aichat/ | GET, POST, DELETE | AI์ ์ฑํ (์ฑํ ๋ณด๊ธฐ, ์ฑํ ๋ณด๋ด๊ธฐ, ์ ์ฒด ์ฑํ ์ญ์ ) | AI Chat | ๐ ๐ง |
| /chat/api/chat-messages/ | GET, POST | ์ฑํ ๋ฉ์์ง ์กฐํ ๋ฐ ์์ฑ | Chat | |
| /post/ | GET, POST | ๊ธ ๋ชฉ๋ก ์กฐํ ๋ฐ ๊ธ ์์ฑ | Posts | |
| /post/{id}/ | GET, PUT, PATCH, DELETE | ํน์ ๊ธ ์กฐํ, ์์ , ์ญ์ | Posts | ๐ ๐ง |
| /post/{post_id}/comment/{id}/ | DELETE, PUT, PATCH | ํน์ ๋๊ธ ์ญ์ , ์์ | Comments | ๐ ๐ง |
| /qna/inquiry/ | GET, POST | ๋ฌธ์ ์ฌํญ ์กฐํ ๋ฐ ์์ฑ | QnA | |
| /qna/inquiry/{id}/ | GET, PUT, PATCH, DELETE | ํน์ ๋ฌธ์ ์ฌํญ ์กฐํ, ์์ , ์ญ์ | QnA | |
| /study/{id}/ | GET, DELETE, PUT | ํน์ ๊ฒ์๋ฌผ ์กฐํ, ์ญ์ , ์์ | Study | ๐ ๐ง |
- ๐ : ๋ก๊ทธ์ธ ๊ถํ
- ๐ง : ์์ฑ์ ๊ถํ
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ๋ฒ์ | ์ค๋ช |
|---|---|---|
djangorestframework |
3.14.0 | RESTful API ๊ตฌ์ถ์ ์ํ ๊ฐ๋ ฅํ ํดํท์ Django์ ์ ๊ณต |
djangorestframework-simplejwt |
5.3.1 | JWT ์ธ์ฆ์ Django Rest Framework์ ์ฝ๊ฒ ํตํฉํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ฅ |
drf-spectacular |
0.26.5 | DRF ์คํค๋ง ์์ฑ ๋ฐ ๋ฌธ์ํ๋ฅผ ์ํ ํ์ฅ์ผ๋ก, API ๋ฌธ์ํ ์์ ์ ๊ฐ์ํ |
channels[daphne] |
~4.0.0 | ๋น๋๊ธฐ ์น์์ผ ์ฒ๋ฆฌ ๋ฐ ์ค์๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ ์ง์์ ์ํ Django ํ์ฅ์ผ๋ก, Daphne ์๋ฒ๋ฅผ ํฌํจ |
redis |
!=4.4.0 | Redis ์๋ฒ์์ ํต์ ์ ์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Channels์ ๋ฐฑ์๋๋ก๋ ์ฌ์ฉ |
faker |
21.0.0 | ๋ชฉ์ ๋ฐ์ดํฐ ์์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ ํ ์คํธ ๋ฑ ๋ค์ํ ์ํฉ์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ ๋จ |
python-dotenv |
1.0.0 | .env ํ์ผ์์ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ก๋ํ์ฌ Django ์ค์ ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ |
openai |
1.5.0 | OpenAI API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ณต์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, GPT-3 ๋ฑ์ AI ๋ชจ๋ธ์ ํ์ฉํ ๋ ์ฌ์ฉ |
# SCHOOLTALKS-BACKEND
โโโ ๐ .github
โโโ ๐ accounts
โโโ ๐ aichat
โโโ ๐ chat
โโโ ๐ media
โโโ ๐ post
โโโ ๐ project
โโโ ๐ qna
โโโ ๐ study
โโโ ๐ venv
โโโ ๐ .env
โโโ ๐ .gitignore
โโโ ๐ db.sqlite3
โโโ ๐ manage.py
โโโ ๐ README.md
โโโ ๐ requirements.txt
# SCHOOLTALKS-FRONTEND
โโโ ๐ .vscode
โโโ ๐ assets
โ โโโ ๐ css
โ โโโ ๐ fonts
โ โโโ ๐ images
โ โโโ ๐ js
โ โโโ ๐ mail
โโโ ๐ chat
โโโ ๐ gpt
โโโ ๐ post
โโโ ๐ study
โโโ ๐ header.html
โโโ ๐ index.html
โโโ ๐ license.txt
โโโ ๐ login.html
โโโ ๐ profile.html
โโโ ๐ qna.html
โโโ ๐ README.md
โโโ ๐ register.html
- 7๊ฐ์ ์ฑ๊ณผ 1๊ฐ์ ํ๋ก์ ํธ๋ก ๊ตฌ์ฑ
- assets์ html ํด๋๋ก ๊ตฌ์ฑ
- ๊ฐ๋ฐ์ผ์ ์ GitHub Projects Tool๋ก ์์ฑ
- ๋ฐฐํฌ์ผ์ ์ ์๋น๊ฒจ ์ฌ์ ์๊ฒ ๋ฌธ์์์ ์ ์งํ
- ๋ฐํ์ ๋ ์ ์ฌ์ ์๊ฒ ํ๋ก์ ํธ ๋ณต๊ธฐ์ ์ฝ๋ ํ์คํฐ๋๋ฅผ ์งํ
-
ํ์ต ๊ฒ์๋ฌผ ํ ์ด๋ธ:
- ๋ค๋์ผ ๊ด๊ณ: ํ๋์ ๊ฒ์๋ฌผ์ ์ฌ๋ฌ ๋๊ธ(Study Comment)๊ณผ ์ข์์(Study Like)๋ฅผ ๋ฐ์ ์ ์์.
-
์ผ๋ฐ ๊ฒ์๋ฌผ ํ ์ด๋ธ
- ๋ค๋์ผ ๊ด๊ณ: ํ๋์ ๊ฒ์๋ฌผ์ ์ฌ๋ฌ ๋๊ธ(Comment)๊ณผ ์ข์์(Like)๋ฅผ ๋ฐ์ ์ ์์.
-
AI ๋ํ ํ ์ด๋ธ(Conversation): AI ์์ ๋ํ ๋ด์ฉ. ์ฌ์ฉ์์ ์ ๋ ฅ(Prompt)์ AI์ ๋ต๋ณ(Response)๋ฅผ ์ ์ฅ.
-
์ฑํ ํ ์ด๋ธ(Chat): ์ฑํ ๋ฐฉ ์ ๋ณด ์ ์ฅ. ๊ฐ ์ฑํ ๋ฐฉ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฐธ์ฌํ ์ ์์.
- ํ๋ก ํธ์๋: HTML, CSS, JavaScript, Bootstrap์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, Netlify๋ฅผ ํตํด ๋ฐฐํฌ
- ๋ฐฑ์๋: Python๊ณผ Django๋ฅผ ์ฌ์ฉํ๊ณ , SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค, Gunicorn WSGI, Nginx ์น ์๋ฒ์ ํจ๊ป Ubuntu ์์คํ ์ AWS Lightsail๋ก ๋ฐฐํฌ
-
์ฉ์ด ์ ๋ฆฌ
-
๋ง์ดํฌ๋ก์ :
- ์ํํธ์จ์ด ์์คํ ์ ์์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋ถํดํ๋ ์ ๊ทผ ๋ฐฉ์
- ๋ถ์ฐ ์ํคํ ์ณ๋ก ๊ตฌ์ฑ
- API ๋๋ ๋ฉ์์ง ์์คํ ์ ํตํด ์ํธํต์
-
๋ชจ๋๋ก๊ทธ์ :
- ๋จ์ผ ๋ชจ๋ ๋ฐ ๋จ์ผ ์ฝ๋ ๋ฒ ์ด์ค๋ก ๊ตฌ์ถํ๋ ์ ๊ทผ๋ฐฉ์
- ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ๋๋ก ํตํฉ๋์ด ๊ฐ๋ฐ
- ์นด์นด์ค ์ค๋ธ์ ํตํ ์์ด์ดํ๋ ์ ์ ์
- ๊ฒ์ํ, ์ฑ, ๋ก๊ทธ์ธ ๋ฑ ๋ฉ์ธ ๊ธฐ๋ฅ์ ๋ํ ๊ฐ๋ต์ ํ๋ ์ ์์ฑ
- ๋ถํธ์คํธ๋ฉ ํ์ฉ (์ถ์ฒ : GrayGrids)
- Accounts ์ฑ
| ๋ฉ์ธ | ๋ก๊ทธ์ธ |
|
|
|
| ํ์๊ฐ์ | ํ๋กํ |
|
|
|
- Post ์ฑ
| ์์ ๊ฒ์ํ | ๊ฒ์๊ธ ์์ฑ |
|
|
| ๊ฒ์๊ธ ์์ธํ์ด์ง | ๊ฒ์๊ธ ์์ |
|
|
- AI Chat ์ฑ
| ์์ | ์ง๋ฌธ |
|
|
- Study ์ฑ
| ์ ์ ์ ๋ณด ๊ฒ์ํ | ๊ฒ์๊ธ ์์ฑ |
|
|
|
| ๊ฒ์๊ธ ์์ธํ์ด์ง | ๊ฒ์๊ธ ์์ |
|
|
|
- Chat ์ฑ
| ์ต๋ช ์ค์๊ฐ์ฑ |
|
- QNA ์ฑ
| ๋ฌธ์ |
|
- ์๋น์ค๋ก ์ด๋ํ๋ ์์ด์ฝ์ด ๋ฐ์ํ ์ ์๋๋ก ํจ
- ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์ด๋ํ ์ ์๋๋ก ๋ค๋น๊ฒ์ด์ ๋ฐ์ ๋ฐฐ๋๋ฅผ ์์ฑ
- ํ์๊ฐ์ ์ฑ๊ณต์ ์ฑ๊ณต ๋ฉ์์ง ์์ฑ
- ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ํ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ด๋ ๊ฐ๋ฅ
- ๋ก๊ทธ์ธ ์ฑ๊ณต์ ์ด์ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋จ
- ์๋จ์ ๋ก๊ทธ์ธ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ณ ๋ก๊ทธ์์ ๋ฒํผ์ด ์์ฑ๋จ
- ๋ก๊ทธ์์ ์ฑ๊ณต์ ๋ก๊ทธ์์ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ณ ๋ก๊ทธ์ธ ๋ฒํผ์ด ์์ฑ๋จ
- ๋ค์ ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ก๊ทธ์ธ ํ๊ฑฐ๋ ํ์๊ฐ์ ์ ํ ์ ์์
- ํ์ ๊ฐ์ ์ ์ ๋ ฅ ์ ๋ณด๋ฅผ ํ๋กํ๋ก ๋ถ๋ฌ์ด
- ํ์ ๊ฐ์ ์ ์ด๋ฏธ์ง ์ ๋ณด๋ ๋ถ๋ฌ ์ค๊ธฐ ๊ฐ๋ฅ
- ์์ ๊ฒ์ํ์ ์๋ก์ด ๊ธ์ ์์ฑ
- ์ ๋ชฉ๊ณผ ๋ด์ฉ์ผ๋ก ๊ตฌ์ฑ๋์ด์์ผ๋ฉฐ, ๋ฐ๋ก ์ ํ์์ด ์์ ๋กญ๊ฒ ๊ธ์ ์ธ ์ ์์
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์์ฑ ๊ฐ๋ฅ
- ๊ธ ๋ชฉ๋ก์ด ์์
- ๊ธ ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด ์์ธ๋ณด๊ธฐ๋ก ๋ค์ด๊ฐ์ง
- ์์ ๊ฒ์ํ ๊ธ์ ์์ ํจ
- ๊ธฐ์กด์ ์์ฑํ๋ ๋ด์ฉ์ด ๋ฏธ๋ฆฌ ๋ค์ด๊ฐ์์
- ์์ฑ์๋ง ์์ ๊ฐ๋ฅ
- ์์ ๊ฒ์ํ ๊ธ์ ์ญ์ ํจ
- ์์ฑ์๋ง ์ญ์ ๊ฐ๋ฅ
- ์ ๋ชฉ, ๋ด์ฉ, ์ ๋ชฉ+๋ด์ฉ, ๊ธ์ด์ด ์ ๋ณด๋ก ๊ฒ์์ด ๊ฐ๋ฅํจ
- ํ์์ผ๋ ์ข์์์ ํด๋ฆญํ๋ฉด ๋นจ๊ฐ๊ฒ ํ์ฑํ๋๊ณ ์นด์ดํธ๊ฐ 1 ์ค๋ฆ
- ๋นจ๊ฐ์์ผ๋ ์ข์์๋ฅผ ํด๋ฆญํ๋ฉด ํ์์ผ๋ก ๋นํ์ฑํ๋๊ณ ์นด์ดํธ๊ฐ 1 ๋ด๋ ค๊ฐ
- ์ฌ์ฉ์๋ง๋ค ๊ฐ๊ธฐ ๋ค๋ฅธ ์ข์์ ์ ๋ณด๊ฐ ์์
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ๊ธ ์์ธ๋ณด๊ธฐ์์ ์ตํ๋จ์ ๋๊ธ ์์ฑ์ด ์์
- ๋๊ธ๋ด์ฉ์ ์ ๊ณ ์์ฑํ๋ฉด ๋ฑ๋ก๋จ
- ๋๊ธ ๋ด์ฉ์ ์์ ํจ
- ๊ธฐ์กด ๋๊ธ ๋ด์ฉ์ด ๋ฏธ๋ฆฌ ๋ค์ด๊ฐ์์
- ์์ฑ์๋ง ์์ ๊ฐ๋ฅํจ.
- ์์ ์ ํ๋ฒ ํ์ธ ์๋์ด ์์.
- ๋๊ธ์ ์ญ์ ํจ
- ๋๊ธ ์์ฑ์๋ง ์ญ์ ๊ฐ๋ฅํจ.
- AI ์ฑํ ์ ์์ํ ๋, ์ด์ ์ฑํ ๋ด์ญ์ด ์๋ค๋ฉด ์ฑํ ์์๋ฅผ ๋ณด์ฌ์ค
- ์ง๋ฌธ์ ์ ๋ ฅํ๊ณ ๋ณด๋ด๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด, AI์ ๋งํ์ ์ด ์๊ธฐ๊ณ ์ ์ํ ๋ต๋ณ์ ๋ณด์ฌ์ค
- ์ ์ ์ ์ง๋ฌธ๊ณผ AI์ ๋ต๋ณ์ DB์ ์ ์ฅ๋จ
- ๋ค๋ฅธ ํ๋ฉด์์ AI ์ฑํ ๋ฐฉ์ผ๋ก ๋ค์ ์์๋ ์ด์ ์ฑํ ๋ด์ญ์ ๋ณด์ฌ์ค
- ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ด์ ์ฑํ ๋ด์ญ์ด ๋ชจ๋ ์ญ์ ๋๊ณ ์๋ก์ด ์ฑํ ์ ์์ํจ
๐ ๊ฒ์ํ ๋ฆฌ์คํธ ๊ฒ์ ๋ฐ ํ์ด์ง๋ค์ด์
- ๋ฉ๋ชจ์งํ์์ ๊ฒ์ํ ๊ตฌํ
- ํ์ด์ง๋ค์ด์ ์ด์ ๋ค์ ๋ฒํผ์ผ๋ก ๊ตฌํ
- ๋ฆฌ์คํธ ๊ฒ์ ๊ธฐ๋ฅ ์ ๋ชฉ, ์์ฑ์, ๋ด์ฉ์ ๋ฐ๋ผ ๊ฒ์ ๊ฐ๋ฅ
- ํต์ฌ ์ฃผ์ ์ ๋ณด ๊ฒ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ์ธ์ ํด์ผ CRUD ๊ฐ๋ฅ
- ๊ธฐ์กด์ ์์ฑํ ๋ด์ฉ์ ๋ฏธ๋ฆฌ ๋ณผ ์ ์์
- ๋๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ๋ฉด ์์ธ ๊ธ๋ก ๋ค์ด๊ฐ
๐ ๊ฒ์๊ธ CRUD
- ๊ฒ์๊ธ์๋ ์์ฑ์, ์์ฑ์ผ, ์กฐํ์, ์ข์์, ๋ด์ฉ, ์ด๋ฏธ์ง, ์ฒจ๋ถํ์ผ์ด ํฌํจ๋จ
- ๊ฒ์๊ธ์ ์์ฑ์๋ง ์์ , ์ญ์ ๊ฐ๋ฅ
- ํด๋น ํ์ด์ง์ ์ ์ ์ +1๋ก View๊ฐ ์ฌ๋ผ๊ฐ
๐ ์ข์์ ๋ฐ ๋๊ธ CRUD

-
์ข์์ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์์ผ๋ ์ข์์์ ํด๋ฆญํ๋ฉด ๋นจ๊ฐ๊ฒ ํ์ฑํ๋๊ณ ์นด์ดํธ๊ฐ 1 ์ค๋ฆ
- ๋นจ๊ฐ์์ผ๋ ์ข์์๋ฅผ ํด๋ฆญํ๋ฉด ํ์์ผ๋ก ๋นํ์ฑํ๋๊ณ ์นด์ดํธ๊ฐ 1 ๋ด๋ ค๊ฐ
- ์ฌ์ฉ์๋ง๋ค ๊ฐ๊ธฐ ๋ค๋ฅธ ์ข์์ ์ ๋ณด๊ฐ ์์
-
๋๊ธ CRUD ๊ฐ๋ฅ
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ ๊ธ ์์ธ๋ณด๊ธฐ์์ ์ตํ๋จ์ ๋๊ธ ์์ฑ์ด ์์
- ๋๊ธ ๋ด์ฉ์ ์์ฑ ์์ , ์ญ์ ๊ฐ๋ฅ
- ์์ฑ์๋ง ์์ ์ญ์ ๊ฐ๋ฅํจ.
-
๋ก๊ทธ์ธ ๋ฐ ์ฌ์ฉ์ ๊ถํ์ด ์์ด์ผ CRUD ๊ฐ๋ฅ
- ์์ฃผ ์ฐพ๋ ์ง๋ฌธ์ ๋ฐฐ๋๋ฅผ ํ์ฉํ์ฌ ๊ฒ์ํจ
- ๋ฉ์ผ, ์นดํ ๊ณ ๋ฆฌ, ๋ฌธ์๋ด์ฉ์ ํตํด ๋ฌธ์ํ ์ ์์
- ์ต๋ช ์ผ๋ก ์ฑํ ์ ์ฐธ์ฌํ ์ ์์
- ๋ก๊ทธ์ธํ์ง ์์๋ ์ฑํ ์ ์ฐธ์ฌํ ์ ์์
- ํ๋จ์๋ ์ฟ ํกํํธ๋์ค ๊ด๊ณ ๋ฅผ ๋ฃ์ด ์ค์ ์ปค๋ฎค๋ํฐ์ ๋น์ทํ๊ฒ ์์ต์ฑ๋ ๊ณ ๋ ค ํด ๋ณด์์.
โ ์๋ฌ๋ช : 403 Forbidden
-
๋ฌธ์ ์ : ์น ์๋ฒ(Nginx)๋ฅผ ์ฌ์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ 403 Forbidden ์ค๋ฅ ๋ฐ์.
-
๋ฌธ์ ์์ธ : Nginx ์๋ฒ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก www-data ์ฌ์ฉ์๋ก ์คํ๋์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ผ์ ์ ๊ทผํ ๋ ๊ถํ ๋ถ์กฑ์ผ๋ก ์ธํ ์ค๋ฅ.
-
ํด๊ฒฐ ๋ฐฉ๋ฒ :
Nginx์ ์คํ ์ฌ์ฉ์ ๋ณ๊ฒฝ
/etc/nginx/nginx.conf ํ์ผ์ ์ด์ด์ Nginx์ ์คํ ์ฌ์ฉ์๋ฅผ ubuntu๋ก ๋ณ๊ฒฝ.
user ubuntu;
๊ถํ ๋ณ๊ฒฝ
/media ๋๋ ํ ๋ฆฌ์ ์์ ์์ ๊ทธ๋ฃน์ ubuntu๋ก ๋ณ๊ฒฝ.
sudo chown -R ubuntu:ubuntu /media
cat /etc/nginx/nginx.conf | grep user
Nginx ๊ตฌ์ฑ ํ์ผ ํ
์คํธ
๋ณ๊ฒฝ๋ ๊ตฌ์ฑ ํ์ผ์ ์ ํจ์ฑ์ ๊ฒ์ฌ.
sudo nginx -t
Nginx ์ฌ์์
๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฉ๋๋๋ก Nginx ์๋ฒ๋ฅผ ์ฌ์์.
sudo systemctl restart nginx
๊ธฐํ ์ ๋ณด
sudo systemctl status nginx ๋ช
๋ น์ผ๋ก Nginx ์๋ฒ ์ํ ํ์ธ.
โ ์๋ฌ๋ช : 404 ์๋ฌ Not Found
-
๋ฌธ์ ์์ธ : ๊ต์์ ๋ฐ๋ผ location / ์์น ์ค์ ์ ํ์์ง๋ง, ์๋ก์ด ํ๋ก์ ํธ์ url ์ฃผ์๊ฐ ๋ง์ง ์์์ ๊ทธ๋ฅ location ๋ถ๋ถ์ '/'๋ก ๋น์๋ proxy๊ฐ url ์์น๋ฅผ ์ฐพ์ง ๋ชปํด์ ์๊ธฐ๋ ๋ฌธ์
-
ํด๊ฒฐ ๋ฐฉ๋ฒ : nginx์ default ๊ฐ์ด ์๋ชป ์ค์ ๋์ด ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์ฌ ํด๊ฒฐ
location / {
include proxy_params;
proxy_pass http://unix:/tmp/gunicorn.sock;
}
โ ์๋ฌ๋ช : 400์๋ฌ Bad Request
-
๋ฌธ์ : ๋ฐฐํฌ ์ดํ ํ์ด์ง๋ ์ฐพ์ง๋ง, ๋ณด์ ๊ด๋ จ์ค์ ์ด ์ฌ๋ฐ๋ฅด์ง ์์์ ๋จ๋ ์ค๋ฅ
-
ํด๊ฒฐ ๋ฐฉ๋ฒ:
-
ALLOWED_HOST๋ฅผ ์์๋ก ๋น์๋ฌ์ ๋ฐ์ํ๋ ์ค๋ฅ
-
DEBUG = False๋ก ๋ณด์์ ๋๊ธฐ
โ ์๋ฌ๋ช : 500์๋ฌ Internal Server Error
- ๋ฌธ์ : ๋ฐฐํฌ ์ดํ ์ฑ ๋ช ๊ฐ์์ 500์๋ฌ๊ฐ ๋ฐ์
-
๋ฌธ์ ์์ธ
-
ls -a๋ก ํด๋ ๊ถํ์ ํ์ธํ๋ ์ค ์ ์ ์๋๋๋ ์ฑ์ migration์ด ์๋๋ฐ ์ค๋ฅ๊ฐ ๋จ๋ ์ฑ์ migration์ด ์์์
-
migrations์ด ์๋์๋ ์ํฉ gitignore์ migration์ ์ถ๊ฐํด์ ์ดํ์ ์ถ๊ฐ ๋ ์ฑ๋ค์ด migration์ด ์๋ ์ฒด๋ก ๋ฐฐํฌ๊ฐ๋จ
-
ํด๊ฒฐ ๋ฐฉ๋ฒ
- mgirations ํด๋๋ฅผ ๋ค์ ์ฌ๋ฆฌ๊ณ makemigrations ๋ฐ migrate
- 500 ์๋ฌ๋ migrate๊ฐ ์๋ ๊ฐ๋ฅ์ฑ์ด ์์
- ๋ฐฐํฌ๋ฅผ ์ํด์ git์ miration ํด๋ ๋ฐ init ๋ ์ถ๊ฐํด์ผ ํจ
โ ์๋ฌ๋ช : NameError
- ๋ฌธ์ :
NameError: name 'Post' is not defined SystemCheckError: System check identified some issues: ERRORS: post.Comment.author: (fields.E304) Reverse accessor 'User.comments' for 'post.Comment.author' clashes with reverse accessor for 'study.StudyComment.author'. HINT: Add or change a related_name argument to the definition for 'post.Comment.author' or 'study.StudyComment.author'. post.Comment.author: (fields.E305) Reverse query name for 'post.Comment.author' clashes with reverse query name for 'study.StudyComment.author'. HINT: Add or change a related_name argument to the definition for 'post.Comment.author' or 'study.StudyComment.author'. study.StudyComment.author: (fields.E304) Reverse accessor 'User.comments' for 'study.StudyComment.author' clashes with reverse accessor for 'post.Comment.author'. HINT: Add or change a related_name argument to the definition for 'study.StudyComment.author' or 'post.Comment.author'. study.StudyComment.author: (fields.E305) Reverse query name for 'study.StudyComment.author' clashes with reverse query name for 'post.Comment.author'. HINT: Add or change a related_name argument to the definition for 'study.StudyComment.author' or 'post.Comment.author'.
-
๋ฌธ์ ์์ธ:
- Django ๋ชจ๋ธ์์ ์ญ ๊ด๊ณ(accessor)์ ์ญ ์ง์(reverse query) ์ด๋ฆ์ด ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ๋ฐ์
- study ๊ฒ์ํ๊ณผ post ๊ฒ์ํ์ด ํฉ์ณ์ง๋ฉด์ ๋น์ทํ ์ด๋ฆ๋ผ๋ฆฌ ์ถฉ๋ํ์ฌ ์๊ธด๋ฌธ์
-
ํด๊ฒฐ ๋ฐฉ๋ฒ:
๊ฐ ๋ชจ๋ธ์ ์ญ ๊ด๊ณ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ฌ ์ถฉ๋์ ํด๊ฒฐ๊ฐ๋ฅ. related_name ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ชจ๋ธ์ ๊ด๊ณ ์ด๋ฆ์ ๊ณ ์ ํ๊ฒ ์ง์
- ์์ :
python Copy code class Comment(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='post_comments') # ๋ค๋ฅธ ํ๋๋ค...
class StudyComment(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='study_comments') # ๋ค๋ฅธ ํ๋๋ค... ๋ณ๊ฒฝ ํ:
์์ ๊ฐ์ด related_name์ ์ค์ ํ ํ, makemigrations ๋ฐ migrate ๋ช ๋ น์ ์คํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธ -> ์ญ ๊ด๊ณ ์ด๋ฆ ์ถฉ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ
โ ์๋ฌ๋ช : NOT NULL constraint failed
- ๋ฌธ์ :
django.db.utils.IntegrityError: NOT NULL constraint failed: accounts_user.grade
-
๋ฌธ์ ์์ธ:
- accounts์ ์ปค์คํ ์ฌ์ฉ์ ์ฑ์์ ํ๋ ์ ์์ ์์๋ง ์ ์ฅ์ํค๊ธฐ ์ํด PositiveSmallIntegerField๋ก ์์ฑํ๊ฒ์ด ๋ฌธ์
- ํด๋น ํ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก null๊ฐ์ ํ์ฉํ์ง ์๋๊ฒ์ผ๋ก ๋ณด์
-
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ฒ์์ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๋ ค๊ณ ํ๋ค๊ฐ, REQUIRED_FIELDS๋ฅผ ์ฌ์ฉํด ์ ๋ ฅ๋ฐ๋๋ก ํจ
- ๊ธฐ๋ณธ๊ฐ์ ์ฃผ๊ธฐ or null์ ํ์ฉ or REQUIRED_FIELDS๋ฅผ ์ฌ์ฉํด ์ง์ ํด์ผํจ
-
์์ :
grade = models.PositiveSmallIntegerField(verbose_name="ํ๋
", null=True)
or
grade = models.PositiveSmallIntegerField(verbose_name="ํ๋
", default=1)
or
REQUIRED_FIELDS = [grade]
์์ ๊ฐ์ด null = True๋ฅผ ํด๋ ์๋ฌ๊ฐ ๋์ง ์๋๋ค๊ณ ํ๋จํ๊ธฐ์ ์ถ๊ฐํ์ฌ ์๋ฌ๋ฅผ ํด๊ฒฐ
โ ์๋ฌ๋ช : OPEN AI Version Issue
- ๋ฌธ์ :
You can run 'openai migrate' to automatically upgrade your codebase to use the 1.0.0 interface.
Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`
-
๋ฌธ์ ์์ธ:
- Openai Api๋ฅผ ์ฌ์ฉํด์ ์ธ๊ณต์ง๋ฅ ๋ต๋ณ์ ๋ฐ์์ค๊ธฐ์ํ views.py์ ์ฝ๋๊ฐ openai ๋ฒ์ ์ ๋ง์ง ์์
- Openai ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ด 1.~ ๋ฒ์ ์ผ๋ก ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ์ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ์์ฑํ๋ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋จ
-
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Openai ๋ฒ์ ์ ๊ฐ์ ๋ก ๋ฎ์ถฐ์ ์ฐ๊ฑฐ๋ ์ฝ๋๋ฅผ ์์ ํด์ผ ํด์ผ ํจ
-
๋ฌธ์ ์์ธ:
- Openai ๋ฒ์ ์ 0.27๋ก ๋ฎ์ถ์ด์ ์ฌ์ฉํ์ผ๋ pip ๋ฒ์ ์ ๋ฐ๋ผ์ 0.27์ด ์ค์น๋์ง ์๋ ๋ฌธ์ ๊ฐ ์ถ๊ฐ๋ก ๋ฐ์
-
ํด๊ฒฐ ๋ฐฉ๋ฒ:
- openai migrate๋ฅผ ํตํด์ ๋ชจ๋ธ์ ์์ฑ ํ, OPEN-AI-KEY ๊ฐ์ ธ์ค๋ ์ฝ๋๋ฅผ ์ต๋ํ ์ต์ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํด๋ ๋ฌธ์ ๊ฐ ์๋๋ก ์์
- ๊ฐ์ฅ ์ค๋ฌด์ ๊ฐ๊น์ด ํ์ ํ๋ก์ ํธ๋ฅผ ํ๋ ๊ฑด ์ฒ์์ด๊ณ , ํนํ ์ปจ๋ฒค์ ๋ง์ถ๋ ๋ถ๋ถ์ด ์ด์ํ๊ณ ์ด๋ ค์ ์ง๋ง, ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ด ์ฌ๋ฏธ๊ฐ ์์์.
- ๋ํ ํ์ ์ ํ ๋ ๊น ํ๊ฒฝ์ ์ด๋ป๊ฒ ํ์ฉํ๋์ง ๋ฐฐ์ฐ๋ฉด์ ํ ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋์์ด ๋์๋ ํ๋ก์ ํธ์.
- ์์ง ๋ถ์กฑํ ์ ์ ๋ง์ง๋ง ์ง๋ DRF ๊ฐ์ธ ํ๋ก์ ํธ์ ๋นํด ํ๋ก ํธ์๋ฒ๋ ํต์ ์์ ์ค๋ฅ์ก๋ ์๊ฐ์ด ๋จ์ถ๋์๊ณ , ๋ํ CI/CD ๊ตฌ์ถ๊ณผ ์๋ฒ ๋ฐฐํฌ ํ ์ค๋ฅ๋ฅผ ์ก๋ ๊ณผ์ ์์ ๋์ฑ ์ฑ์ฅํ ์ ์์์.
- ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋์๋ ๋ค๋ฅด๊ฒ ํ ํ๋ก์ ํธ๋ ์๋ก๊ฐ์ ์ปค๋ฎค๋์ผ์ด์ ์ด ๋ง์ด ์ค์ํ๋ค๋ ๊ฑธ ๋๋ ์ ์์์.
- ๋ถ์กฑํ์ฌ ์ดํดํ์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ ๊ณ์ ์์ ์ ํ๋ฉด์ ์กฐ๊ธ ๋ ์ดํดํ ์ ์์๊ณ , ํ์ ํ๋๋ฐ Git์ด ๋ง์ ๋์์ด ๋๋ค๋๊ฑธ ๋๊ปด ์์ผ๋ก ๋ ๋ค์ํ๊ฒ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ ์์ .
- ๊ฐ์ธ ํ๋ก์ ํธ์๋ ๋ค๋ฅด๊ฒ ํ ํ๋ก์ ํธ์ฌ์ ํ์๋ค์๊ฒ ๋ง์ ๋์์ ๋ฐ์ ํผ์ ๊ตฌํํ์ง ๋ชปํ๋ ๋ถ๋ถ๋ค์ ํด๋ผ ์ ์์๊ณ ๋ง์ ๊ณต๋ถ๊ฐ ๋์์.
- ์ฒซ chatGPT DRF ํ๋ก์ ํธ์์ ํ ํฐ์ ๊ณผํ๊ฒ ์๊ฐ์ ํฌ์ํด์ ์์ฌ์ ๋ ์ ์ด ๋ง์๋๋ฐ, ์ด๋ฒ์๋ ์ฌ๋ฟ์ด์ ๊ฐ๋ฐํ๊ฒ ๋์ด ์๊ฐ์ด ๋๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆ ๋ง์กฑํ ์ ์์๋ ํ๋ก์ ํธ๊ฐ ๋์์.
- ์ฅ๊ณ ์์ ๊ฝค ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ดค๋ค๊ณ ์๊ฐํ๋๋ฐ ๊ทธ๊ฒ๋ณด๋ค ๋ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธ์ ๊ธฐ๋ฅ์ด ์๋ค๋ ๊ฒ์ ๋งค์ฐ ๋๋์.
- ํ์ ์ ๋ํด ํ์์ ๋ํ ์ฐธ์ฌ์จ์ด๋ ์ปจ๋ฒค์ ๋ฑ ๊ฑฑ์ ์ด ๊ฝค ๋ง์๋๋ฐ, ์๊ฐ๋ณด๋ค ๋ถ๋๋ฝ๊ฒ ํ๋ฌ๊ฐ ์ข์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ธ ๊ฒ ๊ฐ์
- ์ฝ๋๋ฅผ ์ง๋ค๋ณด๋ ์์ฌ์ด ์ ์ ์๊ฒจ์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ด๊ฒ์ ๊ฒ ํ ์คํธํด ๋ณด๋ฉด์ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ธฐ๋ฅ ๋ฑ์ ์ดํ์ ๋ ๊ฐ๋ฐํด๋ณผ ์๊ฐ.
- 1:1 ์ฑํ ๊ฐ๋ฐ ๊ฒฝํ์ด ์์ด ํ๋ก์ ํธ ์์๊ณผ ๋์์ ์ฑํ ์ ๋งก์ ํ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค. ๊ทธ๋ฌ๋ ์ฒซ DRF ํ๋ก์ ํธ์๊ณ ์ค๋ฅ๊ฐ ๋ง์ ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋ด ์์ํ ์ ์๋ค๊ณ ํ๋จ๋์ด ํฌ๊ธฐํ ๊ฒ์ด ๋๋ฌด ์์ฌ์ ์. ๋ถ์กฑํ ์ ์ด ๋ง์ผ๋ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํจ.
- ๋งก์ ์๋ฌด๋ฅผ ์๋ฒฝํ ์ํํ์ง ๋ชปํด ๋๋ถ๋ถ ์๋ธ๋ก ํ๋ก์ ํธ๋ฅผ ์งํ. ๊ทธ๋ฌ๋ ์์์ ํ์๋ค์ด ๊ฐ๋ฐํ๋ ๊ณผ์ ์ด๋ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๋ณด๋ฉฐ ๊ณต๋ถํ ์ ์์๊ณ ์ค์ ์๋น์ค๊ฐ ์ด์ฉ์ด ๋๋ ์ ๊ธฐ ํจ.
- ํ์ ์ ์งํํ์ฌ Git์ ๋ ์๋ฌํ ์ ์๋ ์๊ฐ์ด์์.
- Git์ ์ค๋ฌด์ ๋น์ทํ๊ฒ ์ฌ์ฉํ๋ ๋ฒ์ ์ตํ๊ณ ์ด๋ฅผ ํตํด์ ๋ฐฐ์์ด ๋์ด๊ฐ๋ ๊ฒ์ด ๋์ ๋๋ ทํ๊ฒ ๋ณด์ฌ์ ๋ฟ๋ฏํ๊ณ , ์ฒ์ ํ๋ ํ ํ๋ก์ ํธ์ด๋ค ๋ณด๋๊น ๋ง์ด ๋ฏธ์ํ๊ณ ๋ถ์กฑํ ๋ถ๋ถ๋ ์์์ง๋ง ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด๋ ๋ง์กฑ์ค๋ฌ์
- Django์ ์กฐ๊ธ ๋ ์ต์ํด์ง๊ณ ํนํ ๋ด๋นํ Open ai API๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด๋ ์ฑํ ๊ด๋ จ ๋ถ๋ถ์์ ๋ง์ ๊ณต๋ถ๊ฐ ๋์ด์ ๋จ์ํ ๊ฒฐ๊ณผ๋ฌผ์ ์ํ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ฑ์ฅํ๋ ๊ฒฝํ์ด ๋๊ฑฐ๊ฐ์ ์์ฃผ ์๋ฏธ ์๋ ์๊ฐ์ด์์.
School.Talks.FINAL.mp4
- ๊นํด๋๋ฅผ ๋ค์ด๋ก๋ ํ ์๋์ ๊ฐ์ด ์คํ
python -m venv venv
Window: venv/Scripts/activate
Mac, Linux: source venv/bin/activate
.env ํ์ผ ์์ฑ
SECRET_KEY=YOUR_KEY
DEBUG=True
OPENAI_API_KEY=YOUR_KEY
REDIS_HOST=YOUR_HOST
REDIS_PORT=YOUR_PORT
REDIS_PASSWORD=YOUR_PWD
- ํ ์คํธ์ฉ ๋๋ฏธ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๋ช ๋ น์ด๋ฅผ ์ถ๊ฐ
- faker ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์, ๋๋คํ ๊ฐ์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ์ ๋ณด๋ค ๋ค์ํ ๊ฒฝ์ฐ์์์ ๋ํ ํ ์คํธ๊ฐ ์ฉ์ด
- ํ์ฌ ๊ฐ์ ์ฌ์ฉ์(๋น๋ฐ๋ฒํธ๋ ํด์ฑ๋์ง ์์ ๋ฐ์ดํฐ์ด๋ฏ๋ก ๋ณ๊ฒฝ ํ์)์ ๊ฐ์ ์์ ๊ฒ์ํ ๊ธ์ด ๊ธฐ๋ฅ์ค์ ์์
- ๊ฐ์ ์ ์ ์์ฑ๋ฐฉ๋ฒ
- ๊ธฐ๋ณธ๊ฐ์ 2๋ช ์์ฑ์ด๊ณ , ๋ค์ --total (์์ฑํ ๊ฐฏ์)๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๊ทธ๋งํผ ์์ฑ
python manage.py seed-users
- ๊ฐ์ ์์ ๊ฒ์ํ ๋ฐ์ดํฐ ์์ฑ๋ฐฉ๋ฒ
- ์ด๊ฒ ์ญ์ ๊ธฐ๋ณธ๊ฐ์ 2๋ช ์์ฑ์ด๊ณ , ๋ค์ --total (์์ฑํ ๊ฐฏ์)๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๊ทธ๋งํผ ์์ฑ
- ์ฌ์ฉ์๋ ํ์ฌ ๊ฐ์ ๋ ์ฌ์ฉ์์ค ํ๋ช ์ด ๋๋คํ๊ฒ ์ ํ๋์ด ๋ค์ด ๊ฐ
python manage.py fake-post๐ School Talks ๊น์ด๋ชจ์ง ์ปจ๋ฒค์
๐ School Talks ๊น๋ธ๋์น ์ปจ๋ฒค์










































