1ํŽธ โ€” Django๋Š” ๋Œ€์ฒด ๋ญ˜ ๋Œ€์‹  ํ•ด์ฃผ๋‚˜ - ํ…Œํฌ์ฐฝ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ

1ํŽธ โ€” Django๋Š” ๋Œ€์ฒด ๋ญ˜ ๋Œ€์‹  ํ•ด์ฃผ๋‚˜

AI ํ™œ์šฉ ํ…Œํฌ์ฐฝ ์—ฐ๊ตฌํŒ€์ด ์ธ๊ณต์ง€๋Šฅ์„ ํ™œ์šฉํ•ด ์ž‘์„ฑํ•˜๊ณ , ์‚ฌ์‹ค ํ™•์ธ๊ณผ ํŽธ์ง‘ ์‹ฌ์‚ฌ๋ฅผ ๊ฑฐ์ณ ๋ฐœํ–‰ํ•œ ์นผ๋Ÿผ์ž…๋‹ˆ๋‹ค. ์ œ์ž‘ ๊ณผ์ • ๋ณด๊ธฐ

์กฐํšŒ 76ํšŒ
๋Œ“๊ธ€ 0๊ฐœ
0
๐Ÿ“š ์—ฐ์žฌ ์‹œ๋ฆฌ์ฆˆ AI๊ฐ€ ์งœ์ค€ Django, ์ด์ œ ์•Œ๊ณ  ์”๋‹ˆ๋‹ค 2 / 8

๐Ÿ˜ต Cursor์— "Django๋กœ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค์–ด์ค˜"๋ผ๊ณ  ํ–ˆ๋”๋‹ˆ ํด๋”์™€ ํŒŒ์ผ์ด ์šฐ์ˆ˜์ˆ˜ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์—ด์–ด๋ณด๋ฉด ์ด๋Ÿฐ ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

"๋‚˜๋Š” settings.py๋ฅผ ๊ฑด๋“œ๋ฆฐ ์ ๋„ ์—†๋Š”๋ฐ ์„œ๋ฒ„๋Š” ์–ด๋–ป๊ฒŒ ๋œจ์ง€?"

์˜ค๋Š˜ ํ’€ ์งˆ๋ฌธ์€ ์ด๊ฒƒ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. settings.py๋ฅผ ํ•œ ์ค„๋„ ์•ˆ ๊ฑด๋“œ๋ ธ๋Š”๋ฐ ์„œ๋ฒ„๊ฐ€ ๋œจ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋์—์„œ ๋‹ต์„ ์ •๋ฆฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๐ŸŽฌ ์ง€๋‚œ ์ด์•ผ๊ธฐ: 0ํŽธ์—์„œ๋Š” AI๊ฐ€ ๋งŒ๋“  Django ์ฝ”๋“œ๋ฅผ ๋ˆˆ๋†’์ด์— ๋งž์ถฐ ํ†ต์—ญํ•ด ๋“œ๋ฆฌ๊ฒ ๋‹ค๊ณ  ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ทธ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ๋”๋ฏธ๋ฅผ ์—ด์–ด๋ด…๋‹ˆ๋‹ค.


๐Ÿค– AI๊ฐ€ ์งœ์ค€ ์ฝ”๋“œ

ํ”„๋กฌํ”„ํŠธ:

"Django ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋ž‘ ๊ฒฐ๊ณผ ํด๋” ๊ตฌ์กฐ ์•Œ๋ ค์ค˜"

django-admin startproject config .
python manage.py startapp community

์‹คํ–‰ํ•˜๋ฉด ์ด๋Ÿฐ ํŒŒ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค.

my_project/
โ”œโ”€โ”€ manage.py
โ”œโ”€โ”€ config/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ settings.py
โ”‚   โ”œโ”€โ”€ urls.py
โ”‚   โ”œโ”€โ”€ asgi.py
โ”‚   โ””โ”€โ”€ wsgi.py
โ””โ”€โ”€ community/
    โ”œโ”€โ”€ __init__.py
    โ”œโ”€โ”€ admin.py
    โ”œโ”€โ”€ apps.py
    โ”œโ”€โ”€ models.py
    โ”œโ”€โ”€ views.py
    โ”œโ”€โ”€ tests.py
    โ””โ”€โ”€ migrations/
        โ””โ”€โ”€ __init__.py

๋ช…๋ น์–ด ๋‘ ์ค„์„ ์ณค์„ ๋ฟ์ธ๋ฐ ํŒŒ์ผ์ด ์—ด ๋ช‡ ๊ฐœ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด์–ด์„œ ์„œ๋ฒ„๋ฅผ ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

python manage.py runserver

ํ„ฐ๋ฏธ๋„์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ค„์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ์•ž๋ถ€๋ถ„์˜ ๊ฒฝ๊ณ  ์ค„์€ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค.

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

์ฒ˜์Œ ์‹คํ–‰ํ•˜๋ฉด unapplied migration(s) ๊ฒฝ๊ณ ๊ฐ€ ํ•จ๊ป˜ ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋ฌด์‹œํ•ด๋„ ๋˜๊ณ  6ํŽธ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด ์ฃผ์†Œ๋ฅผ ์—ด๋ฉด ๋กœ์ผ“ ๊ทธ๋ฆผ๊ณผ "The install worked successfully! Congratulations!" ๋ฌธ๊ตฌ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋ณธ ํ™˜์˜ ํ™”๋ฉด์ด ๋ณด์ž…๋‹ˆ๋‹ค(์ƒ‰๊ณผ ๋””์ž์ธ์€ ๋ฒ„์ „๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๊ฐ€ ํ™”๋ฉด์„ ๋งŒ๋“  ์ ์€ ์—†๋Š”๋ฐ๋„์š”.

๋น„๋ฐ€์€ startproject๊ฐ€ ๋งŒ๋“ค์–ด ์ค€ config/settings.py์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ด์–ด ๋ณด๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋Ÿฐ ๋‚ด์šฉ์ด ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜ Django ๊ธฐ๋ณธ๊ฐ’ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค).

# config/settings.py (startproject ๊ธฐ๋ณธ๊ฐ’ ์ค‘ ์ผ๋ถ€)
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

๐Ÿ” ํ•œ ์ค„์”ฉ ํ†ต์—ญ

์„œ๋ฒ„๊ฐ€ ๋œจ๋Š” ๊ณผ์ •: manage.py โ†’ settings โ†’ runserver

๋จผ์ € startproject๊ฐ€ manage.py์— ์‹ฌ์–ด ๋‘” ์ค„์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ด์–ด ๋ณด๋ฉด main() ํ•จ์ˆ˜ ์•ˆ์— ์ด๋Ÿฐ ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

# manage.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

์ด ์ค„์ด settings๋ฅผ ์ฐพ๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ํ’€์–ด์„œ ์ฝ์œผ๋ฉด ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

  • DJANGO_SETTINGS_MODULE์€ "Django ์„ค์ • ํŒŒ์ผ์ด ์–ด๋”” ์žˆ๋‚˜์š”?"์— ๋Œ€ํ•œ ๋‹ต์„ ์ ์–ด ๋‘๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • 'config.settings'๋Š” "config ํด๋” ์•ˆ์˜ settings.py"๋ผ๋Š” ํŒŒ์ด์ฌ์‹ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ํด๋” ์ด๋ฆ„์„ config๋กœ ์ง€์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ด๋ฆ„์ด ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.
  • setdefault๋Š” "์ด๋ฏธ ์ง€์ •๋œ ๊ฐ’์ด ์—†์„ ๋•Œ๋งŒ ์ด ๊ฐ’์„ ์“ด๋‹ค"๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

์ฆ‰ manage.py๋Š” Django์—๊ฒŒ "์„ค์ •์€ config/settings.py์— ์žˆ๋‹ค"๊ณ  ์•Œ๋ ค ์ฃผ๋Š” ์ฃผ์†Œ ๋ฉ”๋ชจ๋ฅผ ๋“ค๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง์ ‘ ํŽธ์ง‘ํ•  ์ผ์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ python manage.py runserver๋ฅผ ์ณค์„ ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€ ๋ด…๋‹ˆ๋‹ค.

  1. manage.py๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ์œ„์˜ setdefault ์ค„์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ config.settings๋กœ ๋งž์ถฅ๋‹ˆ๋‹ค.
  2. manage.py๊ฐ€ Django์˜ ๋ช…๋ น ์‹คํ–‰ ๊ธฐ๋Šฅ์— runserver๋ผ๋Š” ๋ช…๋ น์„ ๋„˜๊น๋‹ˆ๋‹ค.
  3. Django๊ฐ€ config.settings๋ฅผ importํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆœ๊ฐ„ settings.py์˜ ๋‚ด์šฉ์ด ํŒŒ์ด์ฌ ๊ฐ’์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ต๋‹ˆ๋‹ค.
  4. Django๊ฐ€ INSTALLED_APPS๋ฅผ ์œ„์—์„œ๋ถ€ํ„ฐ ํ•œ ์ค„์”ฉ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค. admin, auth, contenttypes, sessions, messages, staticfiles ์ˆœ์„œ๋กœ ๊ฐ ์•ฑ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.
  5. MIDDLEWARE ๋ชฉ๋ก์œผ๋กœ ์š”์ฒญ ์ฒ˜๋ฆฌ ์ค„์„ ์„ธ์šฐ๊ณ , urls.py๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  6. 8000๋ฒˆ ํฌํŠธ์—์„œ ์š”์ฒญ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์•„์ง ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ฃผ์†Œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๊ณ  DEBUG๊ฐ€ ์ผœ์ ธ ์žˆ์œผ๋ฉด Django๊ฐ€ ๊ธฐ๋ณธ ํ™˜์˜ ํ™”๋ฉด์„ ๋ณด์—ฌ ์ค๋‹ˆ๋‹ค.

settings.py๋ฅผ ์ง์ ‘ ๊ณ ์น˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ด์œ ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ณด์ž…๋‹ˆ๋‹ค. startproject๊ฐ€ ๊ฐ’์ด ์ฑ„์›Œ์ง„ ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๊ณ , manage.py์˜ ํ•œ ์ค„์ด ๊ทธ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ , runserver๊ฐ€ ๊ทธ ํŒŒ์ผ์„ importํ•ด์„œ ์ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

INSTALLED_APPS: ๊ฑด๋ฌผ ์ž…์ฃผ ๋ช…๋‹จ

์œ„ ๊ธฐ๋ณธ 6์ค„์€ Django๊ฐ€ ๊ธฐ๋ณธ์œผ๋กœ ๋“ค๊ณ  ์˜จ ๋ถ€ํ’ˆ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์ด๋Ÿฐ ์ผ์„ ํ•ด ์ค๋‹ˆ๋‹ค.

  • admin: /admin/์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ๊ณ ์น˜๋Š” ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • auth: ํšŒ์›, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๊ถŒํ•œ ๋ชจ๋ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • contenttypes: ๋ชจ๋ธ์˜ ์ข…๋ฅ˜๋ฅผ ๊ธฐ๋กํ•ด ๋‘์–ด ๊ถŒํ•œ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด "์–ด๋–ค ๋ชจ๋ธ์— ๋Œ€ํ•œ ๊ฒƒ์ธ์ง€" ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • sessions: ๋กœ๊ทธ์ธ ์ƒํƒœ ๊ฐ™์€ ๋ฐฉ๋ฌธ์ž ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.
  • messages: "์ €์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" ๊ฐ™์€ ์ผํšŒ์„ฑ ์•Œ๋ฆผ์„ ํ™”๋ฉด์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • staticfiles: CSS, ์ด๋ฏธ์ง€ ๊ฐ™์€ ์ •์  ํŒŒ์ผ์„ ์ฐพ์•„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งŒ๋“  ์•ฑ(community)๋„ ์ด ๋ช…๋‹จ์— ์ด๋ฆ„์„ ์˜ฌ๋ ค์•ผ Django๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ "์ž์ฃผ ๊นจ์ง€๋Š” ์ง€์ "์—์„œ ์ด ์‹ค์ˆ˜๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

MIDDLEWARE: ๊ฑด๋ฌผ ์ž…๊ตฌ ๋ณด์•ˆ ๊ฒ€์ƒ‰๋Œ€

์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ™”๋ฉด์„ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ์— ๋‹ฟ๊ธฐ ์ „์— ์ด ๋ชฉ๋ก์„ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

  1. SecurityMiddleware: ๊ธฐ๋ณธ ๋ณด์•ˆ ์„ค์ • ์ ์šฉ
  2. SessionMiddleware: "์ด ๋ฐฉ๋ฌธ์ž๊ฐ€ ๋ˆ„๊ตฌ์˜€๋”๋ผ?"๋ฅผ ์ฟ ํ‚ค๋กœ ํ™•์ธํ•ด ์„ธ์…˜์„ ๊บผ๋‚ด ๋‘ 
  3. CommonMiddleware, CsrfViewMiddleware: ์ฃผ์†Œ ์ •๋ฆฌ์™€ ์œ„์กฐ ์š”์ฒญ ๋ฐฉ์–ด ๊ฐ™์€ ๊ณตํ†ต ๊ฒ€์‚ฌ
  4. AuthenticationMiddleware: ์„ธ์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์•„ ๋‘ 

๊ทธ๋ž˜์„œ ์„ธ์…˜๊ณผ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž๋ฅผ ๊บผ๋‚ด๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์“ฐ์ง€ ์•Š์•˜๋Š”๋ฐ๋„, ๋ทฐ์—์„œ request.session๊ณผ request.user๋ฅผ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • request.session: SessionMiddleware๊ฐ€ ์ฑ„์›๋‹ˆ๋‹ค.
  • request.user: AuthenticationMiddleware๊ฐ€ ์ฑ„์›๋‹ˆ๋‹ค(8ํŽธ).

๐Ÿ“Œ AI ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ›์œผ๋ฉด ์ด ์ˆœ์„œ๋กœ ์—ด์–ด ๋ณด์„ธ์š”: settings.py โ†’ urls.py(2ํŽธ) โ†’ models.py(5ํŽธ). wsgi.py, asgi.py, __init__.py, tests.py๋Š” ์ง€๊ธˆ์€ "์žˆ๊ตฌ๋‚˜" ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽ ๋ณด๋„ˆ์Šค: ์‹ค์ „์—์„œ๋Š” ๋ชฉ๋ก์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค

AI๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋‚˜ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ๊ธฐ๋ณธ 6์ค„ ์•„๋ž˜์— ์™ธ๋ถ€ ํŒจํ‚ค์ง€๊ฐ€ ๋” ๋ถ™์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ”ํžˆ ๋งŒ๋‚˜๋Š” ๊ฒƒ์ด allauth์ž…๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ ๊ฐ€์ž…, ์†Œ์…œ ๋กœ๊ทธ์ธ์ฒ˜๋Ÿผ Django ๊ธฐ๋ณธ auth์— ์—†๋Š” ํšŒ์› ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ํšŒ์ฐจ ์˜ˆ์ œ์—์„œ๋Š” config/settings.py์— community ์•ฑ๋งŒ ์ถ”๊ฐ€ํ•ด ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•ฝ์†ํ–ˆ๋˜ ์งˆ๋ฌธ์˜ ๋‹ต

settings.py๋ฅผ ๊ฑด๋“œ๋ฆฐ ์ ์ด ์—†์–ด๋„ ์„œ๋ฒ„๊ฐ€ ๋œจ๋Š” ์ด์œ ๋Š”, startproject๊ฐ€ ์ด๋ฏธ ๋™์ž‘ํ•˜๋Š” settings.py๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ณ , manage.py์˜ DJANGO_SETTINGS_MODULE ์ค„์ด ๊ทธ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, runserver๊ฐ€ ๊ทธ ํŒŒ์ผ์„ importํ•ด ์•ฑ๊ณผ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋กœ๋”ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์งœ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ์ด๋ ‡๊ฒŒ ์ข์•„์ง‘๋‹ˆ๋‹ค.

ํ•˜๋Š” ์ผ ๋‚ด๊ฐ€ ์งœ์•ผ ํ•˜๋Š” ๊ฒƒ Django๊ฐ€ ํ•˜๋Š” ๊ฒƒ
์„œ๋ฒ„ ์„ค์ •ยท๊ตฌ๋™ ํ•„์š”ํ•  ๋•Œ settings.py ๊ฐ’ ์ˆ˜์ • ๊ธฐ๋ณธ ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ, runserver๊ฐ€ ์ฝ์–ด์„œ ๋กœ๋”ฉ
์ฃผ์†Œ ์—ฐ๊ฒฐ urls.py์— ๊ฒฝ๋กœ ์ถ”๊ฐ€(2ํŽธ) ๋“ค์–ด์˜จ ์ฃผ์†Œ๋ฅผ urls.py์™€ ๋Œ€์กฐ
ํ™”๋ฉด ์‘๋‹ต views.py์˜ ํ•จ์ˆ˜(3ํŽธ) ์š”์ฒญ์„ ๋ฐ›์•„ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ณ  ์‘๋‹ต์„ ๋Œ๋ ค๋ณด๋ƒ„
๋ฐ์ดํ„ฐ models.py ์„ค๊ณ„(5ํŽธ) ํ…Œ์ด๋ธ” ์ƒ์„ฑ๊ณผ ์กฐํšŒ(๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ 6ํŽธ)
๋กœ๊ทธ์ธยท์„ธ์…˜ ๋กœ๊ทธ์ธ ํ™”๋ฉด ํ๋ฆ„ ์„ธ์…˜ ๊ด€๋ฆฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ(๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ ์ €์žฅ, ์•”ํ˜ธํ™” ์•„๋‹˜), request.user ์ฑ„์šฐ๊ธฐ(8ํŽธ)
๊ด€๋ฆฌ์ž ํ™”๋ฉด admin.py์— ๋ชจ๋ธ ๋“ฑ๋ก ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์ „์ฒด

โš ๏ธ ์ž์ฃผ ๊นจ์ง€๋Š” ์ง€์ 

1. ์•ฑ์„ ๋งŒ๋“ค๊ณ  ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜์„ ๋•Œ

startapp๋งŒ ํ•˜๊ณ  INSTALLED_APPS์— ๋„ฃ์ง€ ์•Š์œผ๋ฉด Django๋Š” ๊ทธ ์•ฑ์ด ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์ธ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋ธ์„ ์ž‘์„ฑํ•˜๊ณ  makemigrations๋ฅผ ํ•ด๋„ ์•ฑ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

No changes detected

๋˜ ๊ทธ ๋ชจ๋ธ์„ ์ž„ํฌํŠธํ•˜๋Š” ์ˆœ๊ฐ„ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

RuntimeError: Model class community.models.Post doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

(์ฐธ๊ณ ๋กœ no such table: community_post ๊ฐ™์€ OperationalError๋Š” ์•ฑ์€ ๋“ฑ๋กํ–ˆ๋Š”๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์ ์šฉํ•˜์ง€ ์•Š์€ ์ฑ„ ์ฟผ๋ฆฌํ•  ๋•Œ ๋‚˜์˜ค๋Š” ๋ณ„๊ฐœ์˜ ์ฆ์ƒ์ž…๋‹ˆ๋‹ค.)

ํ•ด๊ฒฐ ์ˆœ์„œ:
1. INSTALLED_APPS์— 'community.apps.CommunityConfig'(๋˜๋Š” 'community')๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
2. python manage.py makemigrations community
3. python manage.py migrate

(๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ 6ํŽธ์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.)

2. ๋์˜ ์ (.)์„ ๋นผ๋จน์—ˆ์„ ๋•Œ

django-admin startproject config์ฒ˜๋Ÿผ ์ ์ด ์—†์œผ๋ฉด ๋ฐ”๊นฅ์— config/ ํ”„๋กœ์ ํŠธ ํด๋”๊ฐ€ ํ•˜๋‚˜ ๋” ์ƒ๊ธฐ๊ณ , ๊ทธ ์•ˆ์— manage.py์™€ ์•ˆ์ชฝ config/ ํŒจํ‚ค์ง€๊ฐ€ ๋“ค์–ด๊ฐ€ config/config/ ์ค‘์ฒฉ ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ manage.py๊ฐ€ ์—†๋Š” ๋ฐ”๊นฅ ์œ„์น˜์—์„œ python manage.py runserver๋ฅผ ์น˜๋ฉด ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

python: can't open file '.../manage.py': [Errno 2] No such file or directory

manage.py๋Š” ๋ฐ”๊นฅ config/ ํด๋” ์•ˆ์— ์žˆ์œผ๋‹ˆ, cd config๋กœ ๋“ค์–ด๊ฐ„ ๋’ค ์‹คํ–‰ํ•˜์„ธ์š”. ๋˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ ์„ ๋ถ™์—ฌ ๋‹ค์‹œ ๋งŒ๋“ค์–ด๋„ ๋ฉ๋‹ˆ๋‹ค.


๐ŸŽฎ ์ง์ ‘ ํ•ด๋ณด๊ธฐ

๋‚ด ํ”„๋กœ์ ํŠธ ๊ธฐ์ค€์œผ๋กœ ๋”ฐ๋ผ ํ•˜์„ธ์š”. ์„ค์ • ํŒŒ์ผ์€ config/settings.py์ž…๋‹ˆ๋‹ค(ํ…Œํฌ์ฐฝ ์‚ฌ์ดํŠธ๋Š” config/settings/base.py๋ผ์„œ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค).

  1. python manage.py runserver๋กœ ๊ธฐ๋ณธ ํ™˜์˜ ํ™”๋ฉด(๋กœ์ผ“ ๊ทธ๋ฆผ)์„ ๋จผ์ € ๋„์›Œ ๋ด…๋‹ˆ๋‹ค.
  2. manage.py๋ฅผ ์—ด์–ด DJANGO_SETTINGS_MODULE ์ค„์„ ์ฐพ๊ณ , config/settings.py์˜ INSTALLED_APPS ๊ธฐ๋ณธ 6์ค„๊ณผ MIDDLEWARE์˜ SessionMiddleware, AuthenticationMiddleware๋„ ์ฐพ์•„ ๋ด…๋‹ˆ๋‹ค.
  3. ์„œ๋ฒ„๋ฅผ ์ผ  ์ฑ„๋กœ INSTALLED_APPS์—์„œ 'django.contrib.staticfiles', ์ค„ ์•ž์— #์„ ๋ถ™์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ๋ฐ”๋€Œ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋‹ˆ ํ„ฐ๋ฏธ๋„์„ ์ง€์ผœ๋ณด์„ธ์š”.
  4. ๊ธฐ๋Œ€ ๊ฒฐ๊ณผ: ์„œ๋ฒ„๋Š” ์—๋Ÿฌ ์—†์ด ๋‹ค์‹œ ๋œจ๊ณ , ํ™˜์˜ ํ™”๋ฉด๋„ ๊ทธ๋Œ€๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋ธŒ๋ผ์šฐ์ €์—์„œ /admin/์— ๋“ค์–ด๊ฐ€๋ฉด CSS๊ฐ€ ๋น ์ง„ ๋ฐ‹๋ฐ‹ํ•œ ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋ณด์ด๊ณ , ํ„ฐ๋ฏธ๋„์—๋Š” /static/admin/... ๊ฐ™์€ ์ฃผ์†Œ์˜ 404 ์ค„์ด ์ฐํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ์ •์  ํŒŒ์ผ ์ œ๊ณต์€ staticfiles ์•ฑ์ด ๋งก๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์‹ค์ œ๋กœ ๋ณด์ด๋Š” ๋ชจ์Šต์„ ๊ทธ๋Œ€๋กœ ๋ฉ”๋ชจํ•˜์„ธ์š”.
  5. #์„ ์ง€์›Œ ์›๋ž˜๋Œ€๋กœ ๋Œ๋ ค๋†“๊ณ  /admin/ ํ™”๋ฉด์˜ ๋””์ž์ธ์ด ๋Œ์•„์˜ค๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ง‰ํžˆ๋ฉด ํ…Œํฌ์ฐฝ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์Šคํฌ๋ฆฐ์ƒท๊ณผ ํ•จ๊ป˜ ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”.


โญ๏ธ ๋‹ค์Œ ํŽธ ์˜ˆ๊ณ 

๋ธŒ๋ผ์šฐ์ €์— /posts/๋ฅผ ์ณค์„ ๋•Œ Django๋Š” ์ˆ˜๋งŽ์€ ํŒŒ์ผ ์ค‘ ์–ด๋””๋กœ ์•ˆ๋‚ดํ• ๊นŒ์š”? 2ํŽธ์—์„œ urls.py์˜ ํ•œ ์ค„์„ ํ•ด๋ถ€ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š ์‹œ๋ฆฌ์ฆˆ: AI๊ฐ€ ์งœ์ค€ Django, ์ด์ œ ์•Œ๊ณ  ์”๋‹ˆ๋‹ค ยท 1ํŽธ (0~9ํŽธ, ์ด 10ํšŒ)
ํ…Œํฌ์ฐฝ ์—ฐ๊ตฌํŒ€
๋ณธ ์นผ๋Ÿผ์€ AI ๋ณด์กฐ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์ฝ”๋“œยท์˜ˆ์‹œ๋Š” ํ•™์Šต์šฉ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๊ธ€์—์„œ ํ•˜๋‚˜ ๊ฐ€์ ธ๊ฐ„๋‹ค๋ฉด?

๋‹ค ์ฝ๊ณ  ๋‚จ์€ ํ•œ ๊ฐ€์ง€๋ฅผ ํ•œ ์ค„๋กœ ์ ์–ด ์ฃผ์„ธ์š”. ๋‹ค๋ฅธ ๋…์ž์—๊ฒŒ๋„, ๋‹ค์Œ ๊ธ€์„ ์“ฐ๋Š” ์—ฐ๊ตฌํŒ€์—๊ฒŒ๋„ ๊ฐ€์žฅ ์ข‹์€ ์‹ ํ˜ธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Making of ยท ์ด ์นผ๋Ÿผ์ด ๋งŒ๋“ค์–ด์ง„ ๊ณผ์ •

AI ์—ฐ๊ตฌ์› 5๋ช…์ด 4๋ฒˆ ์‹ฌ์‚ฌํ•˜๊ณ  5๋ฒˆ ๊ณ ์ณ ์“ด ๊ธ€์ž…๋‹ˆ๋‹ค

  • 4ํŽธ์ง‘ ์‹ฌ์‚ฌ
  • 5์žฌ์ง‘ํ•„
  • 2ํ‰๋ก 
  • 8์‹œ๊ฐ„ 55๋ถ„์ œ์ž‘ ๊ธฐ๊ฐ„
์‹ฌ์‚ฌ ์ ์ˆ˜ 65 โ†’ 74 โ†’ 71 โ†’ 80์ ์ ์„ ์€ ํ”„๋ฆฌ๋ฏธ์—„ ๊ธฐ์ค€ 90์ 
์ œ์ž‘ ๊ณผ์ • ์ „์ฒด ๋ณด๊ธฐ
T
techchang์—ฐ๊ตฌํŒ€
์‹œ๋ฆฌ์ฆˆ ๋ชฉ์ฐจ ์ „์ฒด ๋ณด๊ธฐ

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์ฃผ์„ธ์š”

๋กœ๊ทธ์ธ
๋ชจ๋ฐ”์ผ ๋ฒ„์ „