Python 에는 여러가지 프레임워크가 존재합니다. 저는 평소에 fastapi 프레임워크를 많이 사용하였는데 이번에 회사 업무로 인해 django를 사용해야 하는 상황이 되어 공부를 좀 해볼까합니다!
공부하는 김에 그 과정들을 기록할 겸 올려볼까 합니다.
제가 하는 과정들은 아래 링크를 통해 따라가는 튜토리얼 과정들입니다.
https://docs.djangoproject.com/ko/5.0/
Django
The web framework for perfectionists with deadlines.
docs.djangoproject.com
그럼 시작하겠습니다!
파이썬과 장고를 설치하는 과정은 생략하겠습니다!! 패스패스!!
1. 장고 설치 확인하겠습니다.
~/workspace/django-practice > python -m django --version
5.0.3
장고를 처음 사용한다면 초기 설정에 주의를 기울여야 한다고 합니다. Django는 프로젝트를 구성하는 코드를 자동으로 생성하는데 이 과정에서 데이터베이스 설정, Django를 위한 옵션, 어플리케이션을 위한 설정들과 같은 Django의 인스턴스를 구성하는 수많은 설정들이 생성된다고 합니다.
2. 명령어로 Django 프로젝트를 생성하여 봅시다!
주의사항: 프로젝트를 생성할때 Python 또는 Django에서 사용 중인 이름은 피해야 한다고 합니다.
특히 Django(장고 그 자체와 충돌), test(파이선 패키지 명과 충돌) 같은 이름은 피하는게 좋다고 합니다.
django-admin startproject mysite
아무런 반응없이 ㅋㅋ 명령어 잘 수행 되었습니다.
폴더 들어가보겠습니다!
저는 의존성을 poetry로 관리하기때문에 poetry 사용하여 가상환경 만들고 프로젝트 진행했습니다! 이 부분이 궁금하시면 제 블로그에서
해당 글을 보시거나! 댓글을 달아주시면 도와드리겠습니다!
파일 4개가 생성되었습니다!
파일 하나하나 살펴보도록 하겠습니다.
3. Django Project 자세히 보기
1) manage.py
최상위 경로에 존재하는 파일인 manage.py는 장고 프로젝트와 관련된 다양한 명령을 실행할 수 있는 커맨드라인 유틸리티 입니다.
예를 들어 서버를 시작하거나 데이터베이스 마이그레이션을 실행하는 등의 작업을 수행할 수 있습니다!
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
- 서버 시작
python manage.py runserver
- 데이터베이스 마이크레이션 실행
python manage.py migrate
2) mysite/
프로젝트 폴더내에 생성되는 디렉토리입니다. 프로젝트의 메인 디렉토리로 프로젝트의 설정 파일과 함께 Python 패키지를 정의합니다. 디렉토리 이름은 프로젝트 이름으로 생성되며 이를 변경하면 해당 이름을 사용하는 모든 참조를 업데이트 해야하기에 주의가 필요합니다.
3) mysite/settings.py
django 프로젝트의 설정 파일로서 데이터베이스의 구성, 정적 파일 설정, 타임존, 설치된 앱 목록등 다양한 설정들을 이파일에서 정의합니다.
# Django 프로젝트 설정 파일입니다. 이 파일은 'django-admin startproject' 명령을 통해 자동 생성되며, Django 5.0.3 버전을 사용하여 생성되었습니다.
# 이 파일에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/topics/settings/ 에서 확인할 수 있습니다.
# 설정 가능한 모든 설정 값들과 그에 대한 설명은 https://docs.djangoproject.com/en/5.0/ref/settings/ 에서 확인할 수 있습니다.
from pathlib import Path # 파일 시스템 경로와 관련된 작업을 위한 모듈을 임포트합니다.
# 프로젝트 내의 경로를 생성하기 위해 이렇게 사용합니다: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent # 현재 파일이 위치한 디렉토리의 부모 디렉토리를 기준 경로(BASE_DIR)로 설정합니다.
# 개발 초기 단계의 설정입니다. 실제 운영 환경에서는 사용하기에 적합하지 않습니다.
# 실제 운영 환경을 위한 체크리스트는 https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ 에서 확인할 수 있습니다.
# 보안 경고: 운영 환경에서 사용하는 비밀 키는 비공개로 유지하세요!
SECRET_KEY = 'django-insecure--cvob0s++-(e^(z7x@n#767_8s*9iy=%nvu)-s0q8(^ee=2+^v' # 개발용 비밀 키입니다. 운영 환경에서는 절대 이 값을 그대로 사용하지 마세요.
# 보안 경고: 운영 환경에서는 디버그 모드를 활성화하지 마세요!
DEBUG = True # 디버그 모드를 활성화합니다. 개발 중에만 True로 설정하고, 운영 환경에서는 False로 설정해야 합니다.
ALLOWED_HOSTS = [] # 이 사이트에 접근할 수 있는 호스트명을 지정합니다. 운영 환경에서는 여기에 서버의 주소를 추가해야 합니다.
# 애플리케이션 정의
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', # CSRF 보호
'django.contrib.auth.middleware.AuthenticationMiddleware', # 사용자 인증
'django.contrib.messages.middleware.MessageMiddleware', # 메시징
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 클릭재킹 보호
]
ROOT_URLCONF = 'mysite.urls' # 프로젝트의 URL 설정을 담당하는 모듈의 이름입니다.
TEMPLATES = [ # 템플릿 관련 설정입니다.
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', # Django의 템플릿 엔진을 사용합니다.
'DIRS': [], # 템플릿을 검색할 디렉토리의 목록입니다.
'APP_DIRS': True, # 앱 디렉토리 내의 'templates'를 템플릿 검색 경로로 추가합니다.
'OPTIONS': { # 템플릿 엔진에 전달할 추가 옵션입니다.
'context_processors': [ # 컨텍스트 프로세서의 목록입니다. 템플릿에 기본으로 전달되는 변수들을 정의합니다.
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'mysite.wsgi.application' # WSGI 애플리케이션의 경로입니다. Django 앱을 서비스하기 위한 WSGI 호환 웹 서버의 진입점입니다.
# 데이터베이스 설정
# 데이터베이스 설정에 관한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#databases 에서 확인할 수 있습니다.
DATABASES = {
'default': { # 기본 데이터베이스 설정입니다.
'ENGINE': 'django.db.backends.sqlite3', # 사용할 데이터베이스 엔진입니다. 여기서는 SQLite를 사용합니다.
'NAME': BASE_DIR / 'db.sqlite3', # 데이터베이스 파일의 경로입니다.
}
}
# 비밀번호 검증
# 비밀번호 검증 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators 에서 확인할 수 있습니다.
AUTH_PASSWORD_VALIDATORS = [ # 비밀번호 유효성 검사기의 목록입니다.
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', # 사용자 속성과의 유사성 검사
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', # 최소 길이 검사
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', # 흔히 사용되는 비밀번호 검사
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', # 숫자만으로 구성된 비밀번호 검사
},
]
# 국제화 설정
# 국제화 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/topics/i18n/ 에서 확인할 수 있습니다.
LANGUAGE_CODE = 'en-us' # 기본 언어 코드입니다.
TIME_ZONE = 'UTC' # 기본 시간대입니다.
USE_I18N = True # 국제화를 위한 Django의 기능을 활성화합니다.
USE_TZ = True # 시간대를 활성화합니다.
# 정적 파일 설정 (CSS, JavaScript, 이미지)
# 정적 파일 설정에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/howto/static-files/ 에서 확인할 수 있습니다.
STATIC_URL = 'static/' # 정적 파일을 서비스하기 위한 URL의 접두사입니다.
# 기본 기본 키 필드 유형
# 기본 기본 키 필드 유형에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field 에서 확인할 수 있습니다.
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # 모델의 기본 키 필드에 사용할 필드 유형입니다.
4) mysite/urls.py
프로젝트의 URL 선언을 담당하는 파일입니다. django에서 URLconf라고도 하는데, 이는 프로젝트의 URL패턴 Python 코드로 맵핑하여 특정 URL이 요청 되었을 때 어떤 뷰를 호출할지 결정하는 규칙을 정의합니다.
# Django 프로젝트인 mysite의 URL 구성 파일입니다. `urlpatterns` 리스트는 URL을 뷰로 라우팅합니다. 자세한 정보는 다음을 참조하세요:
# https://docs.djangoproject.com/en/5.0/topics/http/urls/
# 예시:
# 함수 기반 뷰:
# 1. 임포트 추가: from my_app import views
# 2. urlpatterns에 URL 추가: path('', views.home, name='home')
# 클래스 기반 뷰:
# 1. 임포트 추가: from other_app.views import Home
# 2. urlpatterns에 URL 추가: path('', Home.as_view(), name='home')
# 다른 URLconf 포함하기:
# 1. include() 함수 임포트: from django.urls import include, path
# 2. urlpatterns에 URL 추가: path('blog/', include('blog.urls'))
from django.contrib import admin # Django의 관리자 모듈을 임포트합니다.
from django.urls import path # URL 패턴을 정의하기 위한 함수를 임포트합니다.
urlpatterns = [
path('admin/', admin.site.urls), # 관리자 사이트의 URL을 urlpatterns 리스트에 추가합니다. 이 패턴은 '/admin/' URL을 Django의 관리자 사이트와 연결합니다.
]
5) mysite/asgi.py
asgi.py는 비동기 서버 게이트웨이 인터페이스(ASGI)의 설정 파일로, django 애플리케이션을 비동기 웹 서버와 연결하는데 사용됩니다. 이를 통해 장고 애플리케이션에서 비동기 프로그래밍 기능을 활용할 수 있게 됩니다. 대규모 트래픽 처리나 비동기 처리가 필요한 웹소켓 같은 기능을 구현할 때 유용합니다.
# Django 프로젝트인 mysite의 ASGI(Asynchronous Server Gateway Interface) 구성 파일입니다. 이 파일은 모듈 수준 변수인 `application`을 ASGI 호출 가능 객체로 노출합니다.
# 이 파일에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ 에서 확인할 수 있습니다.
import os # 운영체제와 상호 작용하기 위한 모듈을 임포트합니다.
from django.core.asgi import get_asgi_application # Django의 ASGI 애플리케이션을 가져오기 위한 함수를 임포트합니다.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') # 환경 변수 'DJANGO_SETTINGS_MODULE'을 'mysite.settings'로 설정합니다. 이는 Django가 프로젝트 설정을 어디에서 찾아야 하는지 알려줍니다.
application = get_asgi_application() # Django의 ASGI 애플리케이션을 가져와 `application` 변수에 할당합니다. 이 변수는 ASGI 서버에 의해 참조되어 연결된 요청을 처리합니다.
6) mysite/wsgi.py
wsgi.py는 웹 서버 게이트웨이 인터페이스(WSGI)의 설정 파일로, django 애플리케이션을 웹 서버와 연결하는데 사용됩니다. 이 파일을 통해 django 애플리케이션을 배포할 때 사용하는 표준 인터페이스 설정 관리를 할 수 있습니다. WSGI는 python 애플리케이션을 서빙하기 위한 표준이며 대부분 Python 웹 프레임워크와 웹 서버가 이를 지원합니다.
# Django 프로젝트인 mysite의 WSGI(Web Server Gateway Interface) 구성 파일입니다. 이 파일은 모듈 수준 변수인 `application`을 WSGI 호출 가능 객체로 노출합니다.
# 이 파일에 대한 자세한 정보는 https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ 에서 확인할 수 있습니다.
import os # 운영체제와 상호 작용하기 위한 모듈을 임포트합니다.
from django.core.wsgi import get_wsgi_application # Django의 WSGI 애플리케이션을 가져오기 위한 함수를 임포트합니다.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') # 환경 변수 'DJANGO_SETTINGS_MODULE'을 'mysite.settings'로 설정합니다. 이는 Django가 프로젝트 설정을 어디에서 찾아야 하는지 알려줍니다.
application = get_wsgi_application() # Django의 WSGI 애플리케이션을 가져와 `application` 변수에 할당합니다. 이 변수는 WSGI 서버에 의해 참조되어 들어오는 요청을 처리합니다.
※ WSGI or ASGI
django 에 있는 wsgi.py 와 asgi.py 파일은 웹 서버와 django 애플리케이션 간의 인터페이스를 설정하는 역할을 합니다. 이 두 파일은 웹 서버 게이트웨이 인터페이서의 두가지 다른 표준을 지원하기 위한 설정을 제공합니다. WSGI 와 ASGI 에 대하여 알아볼까요?
-> 알아보기!
4. 서버 실행하기
python manage.py runserver
실행하면 아래와 같은 로그가 보이며 사이트에 접속하면 서버 실행 상태를 보실 수 있습니다.
localhost:8000 !
오 잘 실행되어 있네요 이제 하나하나 다음 단계로 진행해 보도록 하겠습니다!
5. 마무리
이렇게 튜토리얼 시작 부분을 따라해봤습니다. 앞으로 해당 튜토리얼 프로젝트를 진행하는 코드는 깃에 업로드 해놓도록 하겠습니다.
참고하여 주시면 될 것 같습니다. 감사합니다!
https://github.com/Ragna-X/django-practice/
GitHub - Ragna-X/django-practice
Contribute to Ragna-X/django-practice development by creating an account on GitHub.
github.com
'django 튜토리얼 따라하기' 카테고리의 다른 글
첫 번째 장고 앱 작성하기, part 2 (0) | 2024.03.29 |
---|