-
1. ์ปค๋ฎค๋ํฐ ํ์ฑํ ๋ฐ ์ํต
- ๋ฐ๋ ค๋๋ฌผ ์ ํธ๊ฐ๋ค์ด ํ๋ฐํ๊ฒ ์ํตํ ์ ์๋ ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ตฌ์ถํ์ฌ, ์ฌ์ฉ์๋ค์ด ์์ ์ ๊ฒฝํ์ ๋๋๊ณ ์๋ก์ ์ง๋ฌธ์ ๋ตํ๋ฉฐ ์ ๋๊ฐ์ ํ์ฑํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
-
2. ๋ฐ๋ ค๋๋ฌผ ๊ด๋ จ ์ ๋ณด ๊ต๋ฅ ๋ฐ ๊ต์ก
- ๋ฐ๋ ค๋๋ฌผ์ ๊ฑด๊ฐ, ํ๋ จ, ์์ ๋ฑ ๋ค์ํ ์ฃผ์ ์ ๋ํ ์ ์ฉํ๊ณ ์ ๋ขฐํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ฌ, ์ฌ์ฉ์๊ฐ ์ง์์ ์๊ณ ์ฌ๋ฐ๋ฅธ ๋๋ด ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ๋ ค๋๋ฌผ์ ๋ณต์ง๋ฅผ ํฅ์์ํค๋ ๋ฐ ๊ธฐ์ฌํฉ๋๋ค.
-
3. ์ด๋ฒคํธ ๋ฐ ํ๋ ์ง์
- ๋ฐ๋ ค๋๋ฌผ ๊ด๋ จ ๋ค์ํ ์จ๋ผ์ธ ๋ฐ ์คํ๋ผ์ธ ์ด๋ฒคํธ๋ฅผ ๊ธฐํํ๊ณ ์ง์ํ์ฌ, ์ปค๋ฎค๋ํฐ์ ์ฐธ์ฌ๋ฅผ ์ ๋ํ๊ณ , ์ฌ์ฉ์๋ค์ด ๋์ฑ ํ๋ฐํ ํ๋ํ ์ ์๋ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปค๋ฎค๋ํฐ์ ํ์ฑํ๋ฅผ ๋๋ชจํฉ๋๋ค.
-
4. ์ ๋ฌธ๊ฐ, ๊ธฐ์ ๊ณผ์ ์ฐ๊ณ
- ์์์ฌ, ํ๋ จ์ฌ, ๊ด๋ จ ๊ธฐ์ ๋ฑ๊ณผ ํ๋ ฅํ์ฌ ์ ๋ขฐํ ์ ์๋ ์ ๋ฌธ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ , ์ฌ์ฉ์๋ค์ด ์ ๋ฌธ๊ฐ์ ์ง์ ์ํตํ ์ ์๋ ๊ธฐํ๋ฅผ ๋ง๋ จํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปค๋ฎค๋ํฐ์ ์ ๋ขฐ์ฑ์ ๋์ด๊ณ , ์ฌ์ฉ์๋ค์๊ฒ ์ ์ตํ ์์์ ์ ๊ณตํฉ๋๋ค.
-
1. ๋ฉ์ธํ์ด์ง
- ํ์ด์ง ์ ๋ชฉ๊ณผ ๋ธ๋ก๊ทธ ์ ์ฅํ๊ธฐ ๋ฒํผ์ด ์์ต๋๋ค.
- ํ์๊ฐ์ /๋ก๊ทธ์ธ ๋ฒํผ์ด ์์ต๋๋ค.
- ํ์๊ฐ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์๊ฐ์ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
2. ํ์๊ฐ์
- ํ์๊ฐ์ ์ ํ ์ ์๋ ํ์ด์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ๋ฐ๋ ๊ฐ์ id(email), password์ ๋๋ค.
-
3. ๋ก๊ทธ์ธ
- ๋ก๊ทธ์ธ์ ํ ์ ์๋ ํ์ด์ง๊ฐ ์์ต๋๋ค.
- ์ ๋ ฅ๋ฐ๋ ๊ฐ์ id(email), password์ ๋๋ค.
-
4. ํ์ ํ๋กํ
- ํ๋กํ ๋ฐ ํ๋กํ ์ด๋ฏธ์ง ์์ , ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋๋ค์์ด ์์ผ๋ฉฐ, ๋ธ๋ก๊ทธ ํ๋์ ๋๋ค์์ผ๋ก ํ๊ฒ ๋ฉ๋๋ค.
-
5. ๊ฒ์๊ธ ์์ฑ
- ๋ก๊ทธ์ธ์ ํ ์ ์ ๋ง ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- ๊ฒ์๊ธ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์์ฑ ํ ์ ์๋ ํ์ด์ง๊ฐ ์์ต๋๋ค.
- ์์ฑํ ๊ฒ์๊ธ์ด ์ ์ฅ๋์ด ๊ฒ์๊ธ ๋ชฉ๋ก์ ๋ณด์ ๋๋ค.
- ์ฌ์ง ์ ๋ก๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฒ์๊ธ ์กฐํ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
-
6. ๊ฒ์๊ธ ๋ชฉ๋ก
- ๋ชจ๋ ์ฌ์ฉ์๋ค์ด(๋ก๊ทธ์ธ์ ํ์ง ์์ ์ฌ์ฉ์ ํฌํจ) ๊ฒ์ํ ๋ธ๋ก๊ทธ ๊ฒ์๊ธ๋ค์ ์ ๋ชฉ์ ํ์ธ ํ ์ ์์ต๋๋ค.
- ์ ์, ์นดํ ๊ณ ๋ฆฌ, ํ๊ทธ, ์กฐํ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
- ์์ฑ ์๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋๋ฉฐ, ์ต์ ๊ธ์ด ๊ฐ์ฅ ๋จผ์ ๋ณด์ด๊ฒ ๋์ด ์์ต๋๋ค.
-
7. ๊ฒ์๊ธ ์์ธ๋ณด๊ธฐ
- ๊ฒ์๊ธ์ ์ ๋ชฉ/๋ด์ฉ์ ๋ณด๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ๊ฒ์๊ธ์ ์นดํ ๊ณ ๋ฆฌ, ํ๊ทธ, ์กฐํ์, ์ ์(๋๋ค์)์ ๋ณผ ์ ์์ต๋๋ค.
-
8. ๊ฒ์๊ธ ์์
- ๋ก๊ทธ์ธ์ ํ ์ ์ ๋ง ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- ๋ณธ์ธ์ ๊ฒ์๊ธ์ด ์๋๋ผ๋ฉด ์์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฒ์๊ธ์ ์ ๋ชฉ ๋๋ ๋ด์ฉ์ ์์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ๊ฒ์๊ธ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์์ ํ ์ ์๋ ํ์ด์ง๊ฐ ์์ต๋๋ค.
- ์์ ๋ ๋ด์ฉ์ ๊ฒ์๊ธ ๋ชฉ๋ก๋ณด๊ธฐ/์์ธ๋ณด๊ธฐ์ ๋ฐ์๋ฉ๋๋ค.
-
9. ๊ฒ์๊ธ ์ญ์
- ๋ก๊ทธ์ธ์ ํ ์ ์ ๋ง ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
- ๋ณธ์ธ์ ๊ฒ์๊ธ์ด ์๋๋ผ๋ฉด ์์ ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฒ์๊ธ์ ์ญ์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ์ญ์ ๋ฅผ ์๋ฃํ ์ดํ์ ๊ฒ์๊ธ ๋ชฉ๋ก ํ๋ฉด์ผ๋ก ๋์๊ฐ๋๋ค.
- ์ญ์ ๋ ๊ฒ์๊ธ์ ๊ฒ์๊ธ ๋ชฉ๋ก๋ณด๊ธฐ/์์ธ๋ณด๊ธฐ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
-
10. ๊ฒ์๊ธ ๊ฒ์
- ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์ฌ์ฉ์ ์ฟผ๋ฆฌ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค.
- ํน์ ํ ์นดํ ๊ณ ๋ฆฌ, ํ๊ทธ๋ฅผ ์ ํํ์ฌ ๊ฒ์๊ธ์ ์ฐพ์ ๋ณผ ์ ์์ต๋๋ค.
- ๊ฒ์ํ ๊ฒ์๋ฌผ์ ์๊ฐ์์ ๋ฐ๋ผ ์ ๋ ฌ๋์ด ์์ต๋๋ค.
์ด์ ์ฒด์ : Windows
Python ๋ฒ์ : Python 3.12.5
Django ๋ฒ์ : Django 5.1
IDE/์ฝ๋ ํธ์ง๊ธฐ: VS Code
๊ฐ์ ํ๊ฒฝ: venv (Python์ ๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ ๋๊ตฌ)
๋ฒ์ ๊ด๋ฆฌ: GitHub
์์ฑํ AI: ChatGPT, Claude
- Main ์ฑ URLs
URL ํจํด | View ์ด๋ฆ | ์ค๋ช |
---|---|---|
admin/ |
admin.site.urls | ๊ด๋ฆฌ์ ํ์ด์ง |
'' |
include('posts.urls') | posts URL ํฌํจ |
accounts/ |
include('accounts.urls') | accounts URL ํฌํจ |
- Accounts ์ฑ URLs
URL ํจํด | View ์ด๋ฆ | ์ค๋ช |
---|---|---|
signup/ |
SignupView | ์ ์ ํ์๊ฐ์ |
login/ |
CustomLoginView | ์ ์ ๋ก๊ทธ์ธ |
logout/ |
CustomLogoutView | ์ ์ ๋ก๊ทธ์์ |
profile/ |
ProfileView | ์ ์ ํ๋กํ ์ด๋ |
profile/edit/ |
EditProfileView | ์ ์ ํ๋กํ ์์ |
password/change/ |
ChangePasswordView | ์ ์ ๋น๋ฐ๋ฒํธ ์์ |
- Posts App URLs
URL ํจํด | View ์ด๋ฆ | ์ค๋ช |
---|---|---|
'' |
home | Home page |
post/new/ |
PostCreateView | ์ ๊ฒ์๊ธ ์์ฑ(๋ก๊ทธ์ธ ํ์) |
post/<int:pk>/ |
PostDetailView | ํน์ ๊ฒ์๊ธ ์ด๋ |
post/<int:pk>/edit/ |
PostUpdateView | ๊ฒ์๊ธ ์์ (๋ก๊ทธ์ธ ํ์, ๋ณธ์ธ ๊ธ๋ง ๊ฐ๋ฅ) |
post/<int:pk>/delete/ |
PostDeleteView | ๊ฒ์๊ธ ์ญ์ (๋ก๊ทธ์ธ ํ์, ๋ณธ์ธ ๊ธ๋ง ๊ฐ๋ฅ) |
posts/ |
PostListView | ๋ชจ๋ ๊ฒ์๊ธ์ ๋ฆฌ์คํธ |
category/<slug:category_slug>/ |
CategoryPostsView | ์นดํ ๊ณ ๋ฆฌ๋ณ ๊ฒ์๊ธ ๋ฆฌ์คํธ |
tag/<slug:tag_slug>/ |
TagPostsView | ํ๊ทธ๋ณ ๊ฒ์๊ธ ๋ฆฌ์คํธ |
search/ |
SearchPostsView | ๊ฒ์๊ธ ๊ฒ์ |
๐ฆproject_root/
โโโ ๐accounts/
โ โโโ ๐__pycache__/
โ โโโ ๐migrations/
โ โโโ ๐__init__.py
โ โโโ ๐admin.py
โ โโโ ๐apps.py
โ โโโ ๐forms.py
โ โโโ ๐models.py
โ โโโ ๐tests.py
โ โโโ ๐urls.py
โ โโโ ๐views.py
โโโ ๐media/
โโโ ๐posts/
โ โโโ ๐__pycache__/
โ โโโ ๐migrations/
โ โโโ ๐__init__.py
โ โโโ ๐admin.py
โ โโโ ๐apps.py
โ โโโ ๐forms.py
โ โโโ ๐models.py
โ โโโ ๐tests.py
โ โโโ ๐urls.py
โ โโโ ๐views.py
โโโ ๐project/
โ โโโ ๐__pycache__/
โ โโโ ๐__init__.py
โ โโโ ๐asgi.py
โ โโโ ๐settings.py
โ โโโ ๐urls.py
โ โโโ ๐wsgi.py
โโโ ๐static/
โ โโโ ๐images/
โ โโโ ๐default_profile_picture.png
โโโ ๐templates/
โ โโโ ๐accounts/
โ โ โโโ ๐change_password.html
โ โ โโโ ๐edit_profile.html
โ โ โโโ ๐logged_out.html
โ โ โโโ ๐login.html
โ โ โโโ ๐profile.html
โ โ โโโ ๐signup.html
โ โโโ ๐posts/
โ โ โโโ ๐post_confirm_delete.html
โ โ โโโ ๐post_detail.html
โ โ โโโ ๐post_form.html
โ โ โโโ ๐post_list.html
โ โโโ ๐base.html
โโโ ๐venv/
โโโ ๐.gitignore
โโโ ๐db.sqlite3
โโโ ๐manage.py
โโโ ๐README.md
โโโ ๐requirements.txt
gantt
title Django ๋ธ๋ก๊ทธ ํ๋ก์ ํธ WBS
dateFormat YYYY-MM-DD
axisFormat %m-%d
section ํ๋ก์ ํธ ์ค๋น
ํ๋ก์ ํธ ๊ธฐํ :2023-08-26, 1d
WBS ์์ฑ :2023-08-26, 1d
๊ธฐํ์ ์ด์ ์์ฑ :2023-08-27, 1d
section ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ
ERD ์์ฑ :2023-08-27, 1d
๋ชจ๋ธ ์ค๊ณ :2023-08-28, 1d
section ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ค๊ณ
URL ์ค๊ณ :2023-08-28, 1d
ํ๋ก์ ํธ ์
์
:2023-08-28, 4h
๊ธฐ๋ณธ ํ
ํ๋ฆฟ ๊ตฌ์ฑ :2023-08-28, 4h
section ํต์ฌ ๊ธฐ๋ฅ ๊ตฌํ
๋ฉ์ธํ์ด์ง :2023-08-29, 4h
ํ์๊ฐ์
๊ธฐ๋ฅ :2023-08-29, 4h
๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ธฐ๋ฅ:2023-08-29, 4h
๊ฒ์๊ธ CRUD ๊ธฐ๋ฅ :2023-08-29, 1d
section ๋ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ
๋๊ธ ๊ธฐ๋ฅ :2023-08-30, 6h
ํ๊ทธ ๋ฐ ์นดํ
๊ณ ๋ฆฌ ๊ธฐ๋ฅ:2023-08-30, 6h
์ข์์ ๋ฐ ๋ถ๋งํฌ ๊ธฐ๋ฅ:2023-08-30, 6h
์๋ฆผ ์์คํ
:2023-08-30, 6h
section ๋ง๋ฌด๋ฆฌ
์์ด์ดํ๋ ์ ์์ฑ :2023-08-31, 4h
์ํคํ
์ณ ์์ฑ :2023-08-31, 4h
ํ
์คํธ ๋ฐ ๋๋ฒ๊น
:2023-08-31, 4h
๊ธฐํ์ ๋ง๋ฌด๋ฆฌ :2023-08-31, 2h
์ปฌ๋ผ๋ช | ๋ฐ์ดํฐ ํ์ | ์ ์ฝ ์กฐ๊ฑด | ์ค๋ช |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | ์ฌ์ฉ์ ๊ณ ์ ID (๊ธฐ๋ณธ ์ ๊ณต ํ๋) |
nickname | VARCHAR(50) | UNIQUE, NOT NULL | ์ฌ์ฉ์ ๋๋ค์ |
UNIQUE, NOT NULL, INDEX | ์ฌ์ฉ์ ์ด๋ฉ์ผ | ||
profile_picture | VARCHAR(100) | NULL | ํ๋กํ ์ฌ์ง (ํ์ผ ๊ฒฝ๋ก) |
is_staff | BOOLEAN | DEFAULT FALSE | ๊ด๋ฆฌ์์ธ์ง ์ฌ๋ถ |
is_active | BOOLEAN | DEFAULT TRUE | ํ์ฑํ ์ฌ๋ถ |
is_superuser | BOOLEAN | DEFAULT FALSE | ์ํผ์ ์ ์ฌ๋ถ |
date_joined | DATETIME | DEFAULT CURRENT_TIMESTAMP | ๊ฐ์ ์ผ |
์ปฌ๋ผ๋ช | ๋ฐ์ดํฐ ํ์ | ์ ์ฝ ์กฐ๊ฑด | ์ค๋ช |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | ๊ฒ์๋ฌผ ๊ณ ์ ID |
title | VARCHAR(200) | NOT NULL | ๊ฒ์๋ฌผ ์ ๋ชฉ |
content | TEXT | NOT NULL | ๊ฒ์๋ฌผ ๋ด์ฉ |
created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | ์์ฑ์ผ |
updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | ๋ง์ง๋ง ์์ ์ผ |
author | INTEGER | FOREIGN KEY (AUTH_USER_MODEL) | ์์ฑ์ ID |
category | INTEGER | FOREIGN KEY (Category), NULL | ์นดํ ๊ณ ๋ฆฌ ID |
tags | ARRAY/JSON | NULL | ํ๊ทธ (Django-tagging ์ฌ์ฉ) |
image | VARCHAR(100) | NULL | ์ด๋ฏธ์ง ํ์ผ ๊ฒฝ๋ก |
views | INTEGER | DEFAULT 0 | ์กฐํ์ |
์ปฌ๋ผ๋ช | ๋ฐ์ดํฐ ํ์ | ์ ์ฝ ์กฐ๊ฑด | ์ค๋ช |
---|---|---|---|
id | INTEGER | PRIMARY KEY, AUTOINCREMENT | ์นดํ ๊ณ ๋ฆฌ ๊ณ ์ ID |
name | VARCHAR(100) | UNIQUE, NOT NULL | ์นดํ ๊ณ ๋ฆฌ ์ด๋ฆ |
slug | VARCHAR(100) | UNIQUE, NOT NULL | URL ์ฌ๋ฌ๊ทธ |
erDiagram
User ||--o{ Post : writes
User ||--o{ Comment : makes
User ||--o{ Like : gives
User ||--o{ Bookmark : saves
User ||--o{ Notification : receives
Post ||--o{ Comment : has
Post ||--o{ Like : receives
Post ||--o{ Bookmark : has
Post }o--|| Category : belongs_to
Post }o--o{ Tag : has
User {
int id PK
string email
string nickname
boolean is_staff
boolean is_active
boolean is_superuser
datetime date_joined
image profile_picture
}
Post {
int id PK
string title
text content
datetime created_at
datetime updated_at
int author FK
int category FK
int views
}
Category {
int id PK
string name
string slug
}
Comment {
int id PK
text content
datetime created_at
datetime updated_at
int author FK
int post FK
int parent FK
}
Like {
int id PK
int user FK
int post FK
datetime created_at
}
Bookmark {
int id PK
int user FK
int post FK
datetime created_at
}
Notification {
int id PK
string notification_type
int recipient FK
int actor FK
string verb
int target FK
datetime created_at
boolean is_read
}
Tag {
int id PK
string name
string slug
}
- ๋ก๊ทธ์์ ํ์ด์ง 405 ์๋ฌ
- base.html์์ ๋ฐ๋ก ์ค์ ์ ํ์ง ์์ GET ๋ฐฉ์ -> ์๋ฌ
- POST ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ
์์ง Django๋ฅผ ๋ค๋ฃจ๋ ๋ฐ์ ์ต์ํ์ง ์๊ณ , ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ๋ง์ ํ๋ก์ ํธ๋ฅผ ์์ํ์ง ๋ชปํ์ต๋๋ค. ํ๋ก์ ํธ๋ ์ฃผ์ด์ง ๊ธฐ๊ฐ ๋ด์ ๋๋ด์ง ๋ชปํ๊ณ , ๊ธฐํ๋จ๊ณ์์ ์ค๊ณํ ๊ธฐ๋ฅ๋ค์ ์ ๋ถ ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค. ํ์ง๋ง ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด Django์์ ๊ธฐ๋ฅ์ด ๊ตฌํ๋๋ ๊ณผ์ ๊ณผ ์๋ฆฌ๋ฅผ ์ธ์ธํ๊ฒ ์ดํดํ ์ ์๊ฒ ๋์๊ณ , ๋ Django๊ฐ ์ผ๋ง๋ ํจ์จ์ ์ด๋ฉฐ ๊ตฌ์กฐ๊ฐ ๋งค๋ ฅ์ ์ธ ํ๋ก๊ทธ๋จ์ธ์ง ๋ค์ ํ๋ฒ ๊นจ๋ซ๊ฒ ๋๋ ์ข์ ๊ธฐํ์์ต๋๋ค. ์ฅ๊ณ ์ '๋ง๊ฐ๊ธฐ๊ฐ์ ์ซ๊ธฐ๋ ์๋ค์ ์ํ ํ๋ ์์ํฌ' ๋ฌธ๊ตฌ๋ฅผ ์์ผ ์ง์ ์ฒดํํด๋ณด๋ ์๊ฐ์ด์์ต๋๋ค.