Search
🏗️

Django 프로젝트 생성법

python을 사용하는 웹 프레임워크이기 때문에, 당연히 Python은 설치(3.x)되어야 한다.
본인은 개인적으로 Anaconda를 활용한 파이썬 가상환경을 사용하여 관리하는 것이 편하기 때문에, Anaconda를 사용할 것이다.
Anaconda의 기본적인 사용법이 궁금하다면 이 링크에 Anacoda 관련 글을 작성해두었으니 참고하자
1.
새로운 가상환경 설치
conda create -n django python=3.8
Bash
복사
2.
생성한 가상환경 실행
정상적으로 실행되면 아래 이미지처럼 가상환경 이름(django) 가 붙는다.
conda activate django
Bash
복사
3.
가상환경이 활성화 된 상태에서 pip 를 사용하여 django 를 설치한다.
pip install django
Bash
복사
4.
정상적으로 설치가 완료되었다면 아래 이미지처럼 python shell에서 django import 후, django.get_version() 명령어로 버전 확인이 가능하다.

프로젝트 생성

django에서는 django-admin 커맨드startproject 라는 서브 커맨드를 사용하여 프로젝트를 만든다.
당연한 말이지만, 프로젝트 이름은 본인 맘대로 하면된다. 더 자세한 명령어 옵션을 알고싶다면, django-admin startproject -h 를 입력하여 확인하자.
또한, 해당 명령어 실행 위치에 프로젝트 폴더가 생성되니 미리 원하는 위치로 이동 후 사용해야한다.
# django-admin startproject [ project name ] django-admin startproject toyproject
Bash
복사
정상적으로 설치되었다면, 아래와 같은 구조를 가지는 프로젝트 파일이 생성된다.

프로젝트 폴더의 구조

위 과정을 통해 django 사이트를 만들기 위한 프로젝트 폴더를 생성해봤다.
그런데 폴더 속 내용을 확인하니, 기본적으로 생성된 폴더 & 파일이 존재하는데 어떤 기능을 하는 걸까? 하나씩 알아보자.
생성 직후 프로젝트 폴더 구조
./toyproject ├── manage.py └── toyproject ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py
Bash
복사
manage.py : django-admin 을 사용하여 프로젝트 생성 시, 자동으로 추가되는 파일이다.
django-admin과 동일한 작업을 수행하지만 manage.pyDJANGO_SETTINGS_MODULE 가 존재하기 때문에, 현재 장고 프로젝트의 setting.py 값을 알려주는 역할을 한다.
toyproject(toyproject DIR) : django-admin 을 사용하여 생성한 프로젝트와 동일한 이름을 가지며, 프로젝트를 위한 실제 Python 패키지들이 저장한다.
toyproject/__init__.py : 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 단순한 빈 파일
파이썬에서 특정 디렉터리를 패키지의 일부임을 알려주기 위해서는 __init__.py 라는 파일이 존재해야 한다. (python3.3 부턴 안써도 된다곤 하지만...) → python wikidocs.net 관련 내용
toyproject/asgi.py : ASGI(Asynchronous Server Gateway Interface)와 연결하여 웹 서버를 실질적으로 구동 가능하도록 도와주는 파일이다. (예제 프로젝트 할때는 굳이 깊게 안봐도 될듯 하다)
ASGI이와 비슷한 인터페이스인 WSGI에 대한 설명을 상세히 작성해주신 글의 링크를 걸어두겠다. 궁금한 사람은 확인하면 좋은 내용이라 생각한다. → ASGI와 WSGI 에 대한 블로그 내용
toyproject/settings.py : 현재 Django 프로젝트의 환경 및 구성을 저장하는 파일이다.
공식 문서에 Django settings에 관한 내용이 있다. 역시나 궁금한 사람은 확인해보면 좋다. → Django settings in Django Docs
toyproject/urls.py : Django project 의 URL 선언(매핑)을 저장한다.
간단히 말해서 url로 접속 시, 입력한 url에 따라 어떤 view에 매핑할지 작성해둔 코드이다.
toyproject/wsgi.py : 여기(asgi.py)에도 설명했지만, 이 파일은 WSGI에 관한 파일이다.

프로젝트 생성 후 실행법

아직 아무 기능도 없지만, 서버를 먼저 실행해 볼 것이다. 좀 전에 봤던 manage.py 파일과 runserver 를 사용한다.
당연히 프로젝트 폴더 위치로 이동해야한다. 해당 위치에 manage.py 파일이 존재하기 때문이다.
# runserver뒤에 원하는 포트번호를 설정할 수 있다. # 기본은 8000번 ./manage.py runserver [port 번호] # ./manage.py test를 사용하여 실행하지 않고 테스트만 가능하다. ./manage.py test
Bash
복사
만약 정상적으로 실행됬다면, 아래와 같이 동작하며 127.0.0.0:port 에 접속하면 오른쪽과 같이 Django 페이지를 확인할 수 있다.
혹시 아래와 같이 Error: That port is already in use. 에러가 발생하며 정상적으로 동작하지 않는다면, 이미 다른 프로그램에서 해당 포트(기본 8000번) 포트를 사용하는 것이기 때문에 포트를 확인해야 한다.

프로젝트에 App 생성

Django 프로젝트 내부에 여러 App을 생성하여 기능별로 관리가 가능하다.
한 Django 프로젝트 속 여러 App들이 모여 하나의 프로젝트를 이루는 것이다.
마찬가지로 manage.py 파일을 사용하며, 이번엔 startapp 명령어를 사용한다.
# manage.py startapp [app 이름] ./manage.py startapp bbs
Bash
복사
정상적으로 생성되었다면, 프로젝트 폴더 속에 아래와 같은 구조를 가지는 app 이름을 가진 폴더가 생성된다.

APP 폴더의 구조

위 과정을 통해 django 프로젝트의 App 폴더를 생성해봤다.
이번에도 기본으로 생성된 여러 폴더 & 파일이 있는데, 하나씩 확인해보자.
생성 직후 APP 폴더 구조
./bbs ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py └── views.py
Bash
복사
__init__.py : 프로젝트 폴더에도 존재하는 파일이며, 프로젝트 폴더 부분 설명과 같다.
admin.py : 어드민 설정파일이다.
apps.py : App의 설정파일이다.
migrations(migrations DIR) : 마이그레이션 시, 변경사항에 대한 정보를 저장하는 곳
마이그레이션은 모델에 대한 변경 사항을 데이터베이스 스키마에 전달하는 Django의 방법이다.(필드 추가, 모델 삭제 등)
__init__.py : 프로젝트 폴더에도 존재하는 파일이며, 프로젝트 폴더 부분 설명과 같다.
models.py : App의 모델 파일이다. 해당 앱의 데이터를 SQL문을 사용하여 직접 테이블을 설계하지 않고저장할 데이터베이스를 장고 ORM을 통해 모델화하는데 이때 사용되는 파일이다.
ORM(Object-Relational Mapping) 이란? 객체(Object)와 관계형 DB의 데이터를 매핑해주는 것이다. 즉 객체 간의 관계를 사용하여 SQL구문을 자동으로 생성하며, 직접 SQL 쿼리문을 작성할 필요 없이 데이터를 다룰 수 있는 방법이다. → ORM 개념에 대한 설명과 예시를 잘 설명해주신 블로그
tests.py : App 내부의 기능을 테스트하는 기능을 구현하는 파일이다.
views.py : 앱의 직접적인 화면(template)데이터(model) 사이에서 사용자의 요청을 처리하여 모델에 저장 후, 이 데이터를 화면(template)에 전달하는 다리 역할을 하는 view에 관한 기능을 구현한 파일이다.

간단한 접속 페이지 만들기

지금은 model을 사용하여 데이터를 다루는 부분은 아니므로 아래와 같은 순서로 진행한다.
1.
toyproject/urls.py 파일에서 매핑되는 주소 설정
2.
/bbs/views.py : VIEW 기능을 설정(template과 연결)
지금은 보여줄 내용(화면)을 직접 반환할 것이다. 아직은 model을 사용하여 데이터를 다루지 않기 때문에, 여기서는 template을 사용하지 않는다.

1. VIEW 기능을 설정

먼저 /home 경로에 접속 시 사용될 home 핸들러를 /bbs/views.py 파일에 만들어 줘야 한다.
처음에는 아무 핸들러가 없기 때문에 아래와 같은 내용 뿐이다.
수정 전
from django.shortcuts import render # Create your views here.
Python
복사
함수 home 을 만들어 request 를 인자로 받은 후, HttpResponse 를 사용하여 접속 시 메세지를 반환하도록 만든다.
수정 후
핸들러의 첫 번째 인자는 반드시 request 이다. 이 인자를 활용하여 접속 시 요청 정보를 얻기 때문이다. 또한 핸들러는 반드시 반환이 필요하다.
from django.shortcuts import render from django.http import HttpResponse # home 핸들러를 선언합니다. def home(request): # HttpResponse 함수를 사용하여 메세지를 반환합니다. return HttpResponse('THIS IS HOMEPAGE!')
Python
복사

2. 매핑되는 주소 설정

처음 toyproject/urls.py 에 접속하면 아래와 같은 내용이다.
아직은 admin 페이지 접속 경로만 설정되어 있다.
수정 전
from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), ]
Python
복사
먼저, /bbs/views.pyhome 핸들러를 참조할 수 있도록 가져와준다.
이후 path 함수를 사용하여 /home 경로와 매핑될 핸들러를 설정해준다.
수정 후
from django.contrib import admin from django.urls import path # /bbs/views.py 의 home 핸들러 참조 from bbs.views import home urlpatterns = [ # /home에 접속하면 views.py에 정의된 home 핸들러가 실행되도록 한다. path('home/', home), path('admin/', admin.site.urls), ]
Python
복사

3. 서버 실행 후 확인

서버를 실행 후 정상적으로 실행된다면 아래와 같이 /home 에 접속 시 메세지를 확인할 수 있다.