장고 초급)가상환경 준비하기(python venv)

하얀설표 | 작성시간 2024.06.28.

(2024.07.01. 수정됨.)

사용 환경

OS : Windows 10
python : python 3.10.11
django : Django 5.0.6

주요 파일 경로

C:\
|- seolpyo
   |- python3.10
      |- include
      |- Lib
      |- Scripts
      |  |- activate
      |- Django
         |- blog
            |- manage.py
            |- config
               |- settings.py
               |- secret.txt

터미널 실행하기

윈도우에서 터미널의 역할은 cmd.exe 명령 프롬프트가 합니다. 실행방법은,

  • "Windows + R"을 입력하여 "실행" 프로그램 호출
  • "cmd" 입력 후 열기

위 과정을 진행하면 cmd.exe 프로그램이 시작됩니다.

키보드만을 이용하는 터미널 작업이 불편하지만 나중에 서버에 호스팅을 할 때 리눅스 서버를 이용하게 되니 익숙해질 필요가 있습니다.

장고 프로젝트를 위한 환경 만들기

가상환경 만들기

장고를 위한 환경을 별도로 만듭니다.
제 경우에는 "seolpyo"라는 임의의 폴더에 "python3.10"이라는 가상환경 폴더를 만들고, 그 안에 장고 프로젝트를 보관할 "Django" 폴더를 생성했습니다.

# 가상환경 생성하기
c:\seolpyo>python -m venv python3.10
# 하위 폴더로 이동
c:\seolpyo>cd python3.10
# Django 폴더 생성
c:\seolpyo\python3.10>mkdir Django

가상환경 실행하기

윈도우 환경에서는 가상환경 폴더 안에 "Scripts" 폴더 안에 가상환경 실행을 위한 파일이 존재합니다.
다음과 같이 가상환경을 실행하면 텅 빈 파이썬 환경이 조성됩니다.

패키지 설치를 위한 pip 업그레이드가 필요하다면 pip 업그레이드도 수행해줍니다.

# 가상환경 실행
c:\seolpyo\python3.10>C:\seolpyo\python3.10\Scripts\activate
# 파이썬 버전 확인
(python3.10) c:\seolpyo\python3.10>python -V
Python 3.10.11
# 설치된 패키지 확인
(python3.10) c:\seolpyo\python3.10>pip list
Package    Version
---------- -------
pip        23.0.1
setuptools 65.5.0
[notice] A new release of pip is available: 23.0.1 -> 24.1.1
[notice] To update, run: python.exe -m pip install --upgrade pip
# pip 업그레이드
(python3.10) c:\seolpyo\python3.10>python.exe -m pip install --upgrade pip

가상환경 바로 실행하는 방법

가상환경이 필요할 때마다 터미널을 열고, 가상환경 경로로 이동한 다음, activate 파일을 실행하는 것은 매우 번거로운 작업입니다.
사이트 멤버인 경우 가상환경을 바로 실행하는 방법을 확인해보세요.

장고 설치하기

"pip install django" 명령을 통해 간단히 장고 패키지를 설치할 수 있습니다.

(python3.10) c:\seolpyo\python3.10>pip install django
(python3.10) c:\seolpyo\python3.10>pip list
Package           Version
----------------- -------
asgiref           3.8.1
Django            5.0.6
pip               24.1.1
setuptools        65.5.0
sqlparse          0.5.0
typing_extensions 4.12.2
tzdata            2024.1

장고 프로젝트 생성하기

"django-admin startproject {setting 파일이 존재할 폴더명} {프로젝트가 존재할 폴더명}" 명령으로 장고프로젝트를 생성할 수 있습니다.
만약 {프로젝트가 존재할 폴더명}이 존재하지 않으면 에러가 발생하기 때문에, 폴더를 생성해주어야 합니다.

setting 파일이 존재할 폴더이름은 "config"로 명명하겠습니다.

# 폴더 이동
(python3.10) c:\seolpyo\python3.10>cd Django
# 장고 프로젝트 생성 명령
(python3.10) c:\seolpyo\python3.10\Django>django-admin startproject config blog
# 프로젝트를 생성할 폴더가 존재하지 않아 발생하는 에러 메세지
CommandError: Destination directory 'c:\seolpyo\python3.10\Django\blog' does not exist, please create it first.
# 폴더 생성
(python3.10) c:\seolpyo\python3.10\Django>mkdir blog
(python3.10) c:\seolpyo\python3.10\Django>django-admin startproject config blog
# 프로젝트 폴더로 이동
(python3.10) c:\seolpyo\python3.10\Django>cd blog
(python3.10) c:\seolpyo\python3.10\Django\blog>

장고 실행해보기

"python manage.py runserver" 명령을 통해 장고 프로젝트를 실행할 수 있습니다.
지금은 아무것도 설정되어있지 않기 때문에 기본으로 설정된 페이지가 노출됩니다.

프로젝트 실행되는 메세지 중 "Starting development server at {접속 가능한 주소}"를 통해 현재 어느 경로로 프로젝트에 접근할 수 있는지 확인할 수 있습니다.
아무것도 설정하지 않고 runserver 명령만 한 경우에는 접속 가능한 경로는 "http://127.0.0.1:8000/"입니다.

# 장고 프로젝트 실행 명령
(python3.10) c:\seolpyo\python3.10\Django\blog>python manage.py runserver
# 장고 프로젝트 실행시 노출되는 메세지
Watching for file changes with StatReloader

Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 28, 2024 - 10:37:14
Django version 5.0.6, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

[28/Jun/2024 10:37:21] "GET / HTTP/1.1" 200 10629
Not Found: /favicon.ico
[28/Jun/2024 10:37:21] "GET /favicon.ico HTTP/1.1" 404 2110

아무것도 설정하지 않은 프로젝트에 접근하면 다음과 같은 화면을 확인할 수 있습니다.

장고 기본 화면

장고 프로젝트 빠르게 실행하는 방법

장고 프로젝트를 실행할 때마다 터미널을 열고, 장고 프로젝트 경로로 이동한 다음, manage.py 명령어를 입력하는 것은 매우 번거로운 작업입니다.
사이트 멤버인 경우 장고 프로젝트를 바로 실행하는 방법을 확인해보세요.

설정 변경하기

settings.py의 다음 항목들을 변경해둡시다.

secret key 분리하기

settings.py의 SECRET_KEY 값을 외부로 빼줍니다.
많은 사람들이 githup과 같이 웹서버에 작성한 코드를 업로드하여 관리하곤 하는데.. 그때 SECRET KEY와 같이 외부에 공개되면 안되는 데이터를 함께 업로드하는 실수를 하곤 합니다.
그런 불상사를 방지하기 위해 외부에 다른 파일로 분리합니다.

먼저 secret key를 다음과 같이 다른 파일에 보관합니다.
보관하는 값은 settings.py의 SECRET_KEY에 할당된 string입니다. 키값은 보통 "django-insecure..."으로 시작합니다.

# config/secret.txt
"***"

secret key를 외부에 저장했다면 settings.py에서 SECRET_KEY 값을 제거하고, 다음과 같이 다른 파일에서 불러오게 만듭니다.

# config/settings.py
from json import load
...
# SECRET_KEY = '***' # 제거
with open(BASE_DIR / 'config/secret.txt') as txt: SECRET_KEY = load(txt) # 추가

기본 언어 변경하기

기본 언어를 영어에서 한글로 변경합니다.
언어 설정은 LANGUAGE_CODE라는 명칭을 사용합니다.

# config/settings.py
...
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'ko-KR' # 변경
...

타임존 변경하기

기본으로 UTC+0 시간대를 사용하지만, 대한민국 시간대인 UTC+9를 적용하도록 합니다.
타임존은 TIME_ZONE라는 명칭을 사용합니다.

# config/settings.py
...
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Seoul' # 변경
...

db 이름 변경하기

그냥 제 입맛에 맞추기 위한 것으로, 굳이 이 작업을 할 필요는 없습니다.
DATABASES의 default dict의 NAME value를 다음과 같이 "db.sqlite3"에서 "db.sqlite"로 변경합니다.
만약 db 이름을 변경했는데, "db.sqlite3"라는 파일이 남아있다면 현 시점에서는 빈 파일이기 때문에 삭제해도 무관합니다.
# config/settings.py
...
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': BASE_DIR / 'db.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite',
    }
}
...



이 글의 댓글 기능은 일부러 막아놓았습니다. 궁금한 내용이 있다면 게시판을 이용해주세요!