# Django 입문 가이드: 첫 번째 웹 애플리케이션 빠르게 구축하기
Django는 고급 Python 웹 프레임워크로, 빠른 개발과 간결한 설계를 목표로 합니다. 모델-템플릿-뷰 (MTV) 아키텍처를 따르며, 코드 재사용과 컴포넌트화를 장려합니다. 이 가이드는 간단한 Django 애플리케이션을 단계별로 만들어 빠르게 시작할 수 있도록 안내합니다.
## 1. 환경 구축
먼저 시스템에 Python이 설치되어 있는지 확인해야 합니다. Django는 Python 3.6 이상 버전을 사용하는 것을 권장합니다.
### 1.1 Python 설치
시스템에 Python이 설치되어 있지 않은 경우 [Python 공식 웹사이트](https://www.python.org/downloads/)에서 다운로드하여 설치할 수 있습니다.
### 1.2 가상 환경 (Virtual Environment) 생성
서로 다른 프로젝트 간의 종속성 충돌을 방지하기 위해 가상 환경을 사용하는 것이 좋습니다.
1. 터미널 또는 명령 프롬프트를 엽니다.
2. 프로젝트 디렉토리를 만듭니다. 예: `myproject`:
```bash
mkdir myproject
cd myproject
```
3. 가상 환경을 생성하고 활성화합니다:
```bash
python3 -m venv venv # 또는 python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
```
가상 환경을 활성화하면 터미널 프롬프트에 `(venv)`가 표시되어 가상 환경을 사용하고 있음을 나타냅니다.
### 1.3 Django 설치
활성화된 가상 환경에서 pip를 사용하여 Django를 설치합니다.
```bash
pip install Django
```
설치가 성공했는지 확인합니다:
```bash
python -m django --version
```
Django 버전 번호가 표시되어야 합니다.
## 2. Django 프로젝트 생성
Django를 설치한 후 새 Django 프로젝트를 만들 수 있습니다.
1. 여전히 프로젝트 디렉토리 (`myproject`)에서 다음 명령을 실행합니다:
```bash
django-admin startproject mysite
```
이렇게 하면 `myproject` 디렉토리에 `mysite`라는 디렉토리가 생성되고 Django 프로젝트의 기본 파일이 포함됩니다.
2. `mysite` 디렉토리로 이동합니다:
```bash
cd mysite
```
3. Django 프로젝트 디렉토리 구조는 다음과 같습니다.
```
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
```
* `manage.py`: Django 프로젝트를 관리하는 데 사용되는 명령줄 도구입니다.
* `mysite/`: 프로젝트 구성이 포함된 Python 패키지입니다.
* `__init__.py`: Python에게 이 디렉토리가 Python 패키지로 취급되어야 함을 알리는 빈 파일입니다.
* `settings.py`: 데이터베이스 설정, 디버그 모드 등과 같은 프로젝트 구성 파일입니다.
* `urls.py`: URL을 뷰 함수에 매핑하는 URL 라우팅 구성입니다.
* `asgi.py`: 비동기 애플리케이션 배포를 위한 ASGI (Asynchronous Server Gateway Interface) 구성 파일입니다.
* `wsgi.py`: 기존 동기 애플리케이션 배포를 위한 WSGI (Web Server Gateway Interface) 구성 파일입니다.## 3. 개발 서버 시작
Django는 로컬에서 개발 및 테스트를 용이하게 해주는 경량 개발 서버를 내장하고 있습니다.
1. `mysite` 디렉토리에서 다음 명령을 실행합니다:
```bash
python manage.py runserver
```
2. 브라우저를 열고 `http://127.0.0.1:8000/`에 접속합니다. "It worked! Congratulations on your first Django-powered page." 페이지가 표시될 것입니다.
## 4. Django 앱 생성
하나의 Django 프로젝트는 여러 개의 앱을 포함할 수 있습니다. `myapp`이라는 앱을 만들어 보겠습니다.
1. 새 터미널 창을 엽니다 (개발 서버는 계속 실행 중이어야 합니다).
2. `mysite` 디렉토리에서 다음 명령을 실행합니다:
```bash
python manage.py startapp myapp
```
이렇게 하면 `mysite` 디렉토리 아래에 `myapp`이라는 디렉토리가 생성되고, Django 앱의 기본 파일들이 포함됩니다.
3. Django 앱 디렉토리 구조는 다음과 같습니다:
```
myapp/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
```
* `__init__.py`: Python에게 해당 디렉토리가 Python 패키지로 취급되어야 함을 알리는 빈 파일입니다.
* `admin.py`: Django 관리자 백엔드를 구성하는 데 사용됩니다.
* `apps.py`: 앱 구성입니다.
* `migrations/`: 데이터베이스 마이그레이션을 관리하는 데 사용됩니다.
* `models.py`: 데이터 모델 (데이터베이스 테이블)을 정의합니다.
* `tests.py`: 테스트 케이스를 작성합니다.
* `views.py`: 요청을 처리하고 응답을 반환하는 뷰 함수를 정의합니다.
4. `mysite/settings.py`에서 `myapp`을 `INSTALLED_APPS` 목록에 추가합니다:
```python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp', # myapp 추가
]
```
## 5. 간단한 뷰 생성
이제 브라우저에 "Hello, Django!"를 표시하는 간단한 뷰를 만들어 보겠습니다.
1. `myapp/views.py` 파일을 편집하고 다음 코드를 추가합니다:
```python
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, Django!")
```
2. `myapp/urls.py` 파일을 만들고 URL을 뷰 함수에 매핑합니다:```python
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
```
3. `myapp/urls.py`를 `mysite/urls.py`에 포함시키세요:
```python
from django.urls import include, path
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')), # myapp의 URL 설정을 추가합니다.
]
```
4. `http://127.0.0.1:8000/myapp/`에 접속하세요. "Hello, Django!" 페이지를 볼 수 있을 것입니다.
## 6. 모델 생성하기
간단한 모델을 만들어 데이터를 저장해 봅시다.
1. `myapp/models.py` 파일을 편집하고 다음 코드를 추가하세요:
```python
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
```
이것은 `Question`이라는 모델을 정의하며, 두 개의 필드 `question_text` (CharField)와 `pub_date` (DateTimeField)를 포함합니다.
2. 데이터베이스 마이그레이션을 생성하고 적용하세요:
```bash
python manage.py makemigrations myapp
python manage.py migrate
```
`makemigrations` 명령어는 모델을 기반으로 마이그레이션 파일을 생성하고, `migrate` 명령어는 마이그레이션을 데이터베이스에 적용합니다.
## 7. Django 관리자 페이지 사용하기
Django는 데이터를 편리하게 관리할 수 있는 강력한 관리자 페이지를 제공합니다.
1. 슈퍼유저를 생성하세요:
```bash
python manage.py createsuperuser
```
프롬프트에 따라 사용자 이름, 이메일, 비밀번호를 입력하세요.
2. `myapp/admin.py` 파일을 편집하고 `Question` 모델을 등록하세요:
```python
from django.contrib import admin
from .models import Question
admin.site.register(Question)
```
3. `http://127.0.0.1:8000/admin/`에 접속하여 생성한 슈퍼유저로 로그인하세요. "Questions" 모듈을 볼 수 있으며, 질문을 추가, 편집 및 삭제할 수 있습니다.
## 8. 템플릿 사용하기
템플릿을 사용하면 HTML 페이지를 더욱 유연하게 생성할 수 있습니다.1. `myapp` 디렉토리 안에 `templates`라는 이름의 디렉토리를 만들고, `templates` 디렉토리 안에 `myapp`라는 이름의 디렉토리를 만듭니다 ( `myapp/templates/myapp` ).
2. `myapp/templates/myapp` 디렉토리 안에 `index.html`이라는 파일을 만들고, 다음 코드를 추가합니다:
```html
Hello, Django!
현재 시간: {{ current_time }}
```
3. `myapp/views.py` 파일을 편집하여 템플릿을 사용합니다:
```python
from django.shortcuts import render
import datetime
def index(request):
now = datetime.datetime.now()
return render(request, 'myapp/index.html', {'current_time': now})
```
`render` 함수는 템플릿을 로드하고 데이터를 템플릿에 전달하여 렌더링합니다.
4. `http://127.0.0.1:8000/myapp/`에 다시 접속합니다. 현재 시간이 포함된 페이지를 볼 수 있습니다.
## 9. 결론
이 가이드를 통해 Django의 기본 개념과 사용 방법 (환경 구축, 프로젝트 및 애플리케이션 생성, 모델 정의, 뷰 생성 및 템플릿 사용)을 이해했습니다. 이것은 시작에 불과하며, Django는 풍부한 기능을 제공하므로 계속 학습하고 탐색하여 더 복잡한 웹 애플리케이션을 구축할 수 있습니다.