백엔드/Django

[Django] Document 따라 읽기(1) - Tutorial(설치, 데이터베이스 연결)

안용감한호랑이 2023. 11. 4. 22:53

본 글은 Django의 공식 Document에 있는 Tutorial을 따라 하는 과정입니다.

Django 공식 Document

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

 

가상환경 생성

공식 Document에는 Python 3.8 이상을 지원하는 Django 4.2 버전을 사용한다고 되어 있습니다.

따라서 저희도 파이썬 버전을 동일하게 맞춰 주겠습니다.

 

제 환경은 Anaconda를 사용하고 있기 때문에 Conda 환경 내에서 간단하게 환경을 생성하겠습니다.

conda update conda
conda create --name django-document python=3.8
conda activate django-document
conda env list

 

python 3.8 버전의 환경을 만들었습니다.

현재 conda activate 명령어를 통해 django-document 환경에서 작업을 하도록 하였기 때문에 Django를 설치해 주도록 하겠습니다.

 

pip install django psycopg2

저는 Database를 postgreSQL로 사용할 예정이기 때문에 psycopg2 패키지 또한 설치하였습니다.

 

 

 

프로젝트 생성

프로젝트를 만들 디렉토리에서 수행해 주시면 됩니다.

django-admin startproject mysite


tree ./ /f
└─mysite
    │  manage.py
    │  
    └─ mysite
            asgi.py
            settings.py
            urls.py
            wsgi.py
            __init__.py

 

mysite라는 프로젝트 컨테이너가 생성된 것을 볼 수 있습니다.

 

  • manage.py : 프로젝트와 다양한 방식으로 상호 작용할 수 있게 해주는 명령 유틸리티
  • settings.py : Django 프로젝트에 대한 설정 파일
  • urls.py : 프로젝트에 대한 URL 선언 파일 Djagno 기반 사이트의 목차
  • asgi.py : 프로젝트를 제공하기 위한 ASGI 호환 웹 서버의 진입점
  • wsgi.py : 프로젝트를 제공하기 위한 WSGI 호환 웹 서버의 진입점

 

 

 

프로젝트 실행

python manage.py runserver 8000

Python으로만 작성된 웹서버를 8000번 포트로 수행시켰습니다.

runserver는 필요에 따라 각 요청에 대해 python 코드를 자동으로 다시 로드합니다. 따라서 코드 변경 사항을 적용하기 위해 서버를 다시 시작할 필요가 없습니다. 하지만 파일 추가와 같은 일부 작업은 다시 시작을 트리거하지 않기 때문에 서버를 다시 재시작하여야 합니다.

 

localhost:8000으로 접속하신다면 아래와 같은 화면을 보실 수 있습니다.

 

 

 

 

 

데이터베이스 연결

저는 데이터베이스를 PostgreSQL로 사용하기 위해 해당 데이터베이스를 django와 연결해 주도록 하겠습니다.

도커 컨테이너를 이용해 간단하게 데이터베이스를 설정해 주었습니다. 해당 과정은 도커만 설치되어 있다면 따라올 수 있는 간단한 과정입니다.

# 개인 터미널 환경입니다.
docker search postgres:13
docker pull postgres:13
docker run -p 5432:5432 --name postgre-django -e POSTGRES_PASSWORD=admin -e TZ=Asia/Seoul -v ./data:/var/lib/postgresql/data -d postgres:13
docker exec -it postgre-django /bin/bash


# 컨테이너 내부입니다.
psql -U postgres
-- PostgreSQL 내부입니다.
CREATE DATABASE django;
CREATE USER django_user WITH PASSWORD 'django_user';
GRANT ALL PRIVILEGES ON DATABASE django TO django_user;
# settings.py
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "django",
        "USER": "django_user",
        "PASSWORD": "django_user",
        "HOST": "localhost",
        "PORT": "5432",
    }
}

먼저 도커를 이용해 PostgreSQL 컨테이너를 띄우고 DB에 django 데이터베이스와 django_user라는 user를 생성하고 모든 권한을 부여하였습니다.

 

이후 위에서 설명한 settings.py의 DATABASES를 위와 같이 수정하였습니다.

PostgreSQL은 Default port는 5432이며 컨테이너를 생성할 때 5432 port를 컨테이너 내부의 5432 port로 바인딩했기 때문에 localhost의 5432 port는 컨테이너의 PostgreSQL로 바인딩됩니다.

 

python manage.py migrate

장고는 마이그레이션을 통해 model에 대한 변경 사항(필드 추가, 모델 삭제 등)을 데이터베이스 스키마에 적용하는 방법(ORM)을 사용합니다. 대부분 자동으로 수행되도록 설계되었습니다.

다만 처음 프로젝트를 수행 하고 DB에 대한 세팅을 해주었기 때문에 migrate를 통해 자동으로 데이터베이스 스키마를 관리하기 위해 migrate를 진행해 줍니다.