Django - 1

8313 단어 장고장고

1. Django


Django는 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크(Web Application Framework)다.

여기서 Web Framework란 동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으로 만들어지는 애플리케이션 프레임워크의 일종이다.

웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것이 주 목적으로 통상 테이터베이스 연동, 템플릿 형태의 표준, 세션 관리, 코드 재사용 등의 기능을 포함하고 있다. 아래 위키백과를 보면 보다 자세히 알 수 있다.

웹 프레임워크

Django의 기본적인 흐름은 아래와 같다.

처음 웹 서버에 요청이 오면 장고로 전달된다. Django urlresorver는 웹 페이지의 주소를 가져와 무엇을 할지 확인한다(urlsolver는 웹 사이트 주소인 URL을 통해 이해한다).

urlresorver는 단순히 패턴 목록을 가져와서 URL과 일치하는지 처음부터 하나씩 대조해 식별한다. 만약 일치하는 패턴이 있다면, 장고는 해당 요청을 관련된 함수(view)에 넘겨준다.

View는 받은 요청을 확인하고 Model에 해당 지시를 내린다. Model은 데이터 베이스에서 요청된 데이터를 찾아 View에게 전달하고 View는 다시 데이터를 Template에 전달하여 Template에 정의된 html 파일과 조합하여 사용자에게 데이터를 보여준다.

프레임워크를 장고로 설정하고 데이터베이스를 MySQL로 설정하면 아래와 같은 흐름으로 표시할 수 있다.

2. django tutorial 1


이제 장고 공식문서에서 튜토리얼을 진행하면서 django라는 프레임워크를 배워보자. 현재 나는 가상환경인 miniconda에서 별도의 환경을 구축하여 장고를 진행할 것이다. miniconda에 대한 보다 자세한 설명은 해당 챕터를 확인하자!

Part 1 - 장고 앱 작성하기


우선 가상환경을 만들어주자. 그런 후에 해당 환경에서 장고를 설치하자.

Part 1 - 1. 프로젝트 만들기


정상적으로 설치가 되었다. 이제 해당 프로젝트의 디렉토리를 바탕화면에 만들어주자. 터미널에 익숙해져야 하니깐 모든 작업은 터미널로 진행하는 것으로 다짐하자.

아래 캡쳐화면의 순서이다.

mysite directory 생성 → directory name(mysite → dirmysite) 변경 → dirmysite 이동 → 장고 startproject 인 mysite 생성

이러면 해당 디렉토리인 dirmysite 에서 어떻게 구성이 되어있느지 확인하자.

  • dirmysite / mysite /
    • 프로젝트를 담는 공간이다. 장고와는 상관이 없으니, 원하는 이름으로 변경해도 괜찮다.

  • dirmysite / mysite / mysite /
    • 디렉토리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장된다.
    • 디렉토리 내의 이름을 이용하여 (mysite.urls와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 임포트할 수 있다.

  • dirmysite / mysite / manage.py
    • django 프로젝트와 다양한 방법으로 상호작용 하는 커맨드라인의 Utility 다.
    • 파이썬 스크립트 파일이며 사이트 관리를 도와주는 역할을 한다. 이 스크립트로 다른 설치 작업 없이 컴퓨터에서 웹 서버를 시작할 수 있다.

  • dirmysite / mysite / mysite / __init__.py
    • 파이썬한테 이 디렉토리를 패키지처럼 다루라고 알려주는 용도의 빈 파일이다.

  • dirmysite / mysite / mysite / settings.py
    • 현재 django 프로젝트의 환경 및 구성을 저장한다.
    • 웹 사이트 설정 파일

  • dirmysite / mysite / mysite / urls.py
    • 현재 django project의 URL 선언을 저장한다. django 로 작성된 사이트의
      <목차>라고 할 수 있다.
    • 위에서 설명한 urlresolver가 사용하는 패턴 목록을 포함하고 있는 파일이다.

  • dirmysite / mysite / mysite / asgi.py
    • 현재 프로젝트를 서비스하기 위한 ASGI 호환 웹 서버의 진입점이다.

  • dirmysite / mysite / mysite / wsgi.py
    • 현재 프로젝트를 서비스하기 위한 WSGI 호환 웹 서버의 진입점이다.

이제 장고 프로젝트가 제대로 동작하는지 확인해보자. manage.py가 포함되어 있는 mysite로 디렉토리를 변경해서 아래 명령어를 입력해보자.
$ python manage.py runserver

그럼 아래 캡쳐처럼 뻘건색으로 겁을 주면서 서버가 실행하게 된다.

뻘건색 경고사항들은 무시하자. 왜냐하면 장고는 웹프레임워크를 만드는 녀석이고, 서버와의 연동을 통해서 완전해진다. 즉, 지금까지는 장고를 이용한 개발 서버를 만드는 과정이었다. 개발 서버는 온전히 파이썬으로만 작성된 아주 가벼운 웹 서버이다. Apache와 같은 운영서버를 구성할 필요 없이 빠르게 개발할 수 있도록 Django에 포함했다.

이걸로 운영서버처럼 활용하려한다면 아주 굉장히 힘들 수 있다.

이제 브라우저를 열어서 터미널에서 보이는 http://127.0.0.1:8000/ 를 입력해주자. 그럼 로켓이 날아가는 모양이 떡 하니 뜰 것이다.

각자가 가진 고유한 ip주소는 127.0.0.1 인데, 이것까지 여기서 학습내용을 정리하려 한다면 너무 오래 걸린다. 나중에 Server 챕터를 따로 작성하자.

참고) 위에서 실행한 runserver 명렁어는 자동 변경 기능을 제공한다.
개발 서버는 요청이 들어올 때마다 자동으로 Python 코드를 다시 불러온다. 코드의 변경사항을 반영하기 위해서 굳이 서버를 재가동 하지 않아도 된다는 뜻이다. 그러나, 파일을 추가하는 등의 몇몇의 동작은 개발서버가 자동으로 인식하지 못하기 때문에 이런 상황에서는 서버를 재가동 해야 적용된다.

Part 1 - 2. 앱 만들기


위에서 완성한 것은 작업을 시작하기 위해 나의 환경(프로젝트)가 설치된 것이다. 이제 앱을 만들어야 한다.

앱(app)이란 블로그 시스템, 공공 기록 데이터베이스 또는 소규모 투표 앱과 같은 작업을 수행하는 웹 어플리케이션이다.

프로젝트(project)는 특정 웹사이트에 대한 구성이며 앱의 모인 곳이다. 프로젝트에는 여러 앱이 포함될 수 있고 앱은 여러 프로젝트에 있을 수 있다.

이러한 앱들은 내가 설정한 파이썬 경로(Python pate)에 어디든지 있을 수 있다. 튜토리얼 동안 mysite 의 하위 모듈이 아닌 자체 최상위 모듈로 가져올 수 있도록 managy.py 파일과 동일한 디렉토리(dirmysite / mysite /)에 투표 앱(app)을 만들 예정이다.

이제 dirmysite / mysite /로 이동해서 아래 명렁어를 입력하자.
$ python manage.py startapp polls

그럼 이렇게 나온다.

polls 앱의 파일구조는 아래 표를 참고하자.

Part 1 - 3. View 만들기


첫 번째 뷰를 작성해보자. polls/view.py 를 열어서 아래 파이썬 코드를 입력하자. request 된 내용을 데이터베이스에서 꺼내와서 보여줘야하기 때문이다.

from django.http import HttpResponse

def index(request):
	return HttpResponse("Hello, world. You're at the polls index.")

django.http 로부터 Httpresponse라는 함수를 사용해서 "Hello, world. You're at the polls index." 라는 문구를 보여줄 예정이다.

View를 호출하려면, View와 연결된 URL이 있어야 하는데, 이 때 URLconf가 사용된다. URLconf는 Client로부터(front-end) 요청을 받으면 View로 전달을 해주는 역할을 한다. 기본적으로 앱애는 이것이 포함되어 있지 않지만, polls 디렉토리 안에 urls.py 생성을 하면 URLconf가 생성된다.

즉, urls.py = URLconf 로 이해해도 괜찮다.
생성된 urls.py에 아래 코드를 입력해주자.

from django.urls import path

from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

터미널 환경에서 차례대로 진행해보자.

다음 단계로, 최상위 URLconf(mysite/urls.py)에서 polls(앱).urls 모듈을 보게 설정해주자. mysite/urls.py 를 열고, django.urls.include를 import 하고 urlpatterns 리스트에 include() 함수를 아래처럼 추가해주자.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
    path('admin/', admin.site.urls),
]

include 함수는 다른 URLconf들을 참조(바라보게)할 수 있도록 도와준다.
이는 다른 URLconf 파일의 처리를 맡기는 것이다.

django가 include()함수를 만나게 되면, URL의 그 시점까지 일치하는 부분을 잘라내고, 남은 문자열 부분을 후속 처리를 위해 include된 URLconf로 전달한다.

예를 들어, django.com/index/index.html 이라는 URL이 있을 때, mysite의 URLconf는 index/ 까지 잘라내고 남은 문자열인 index.html을 include된 URLconf(여기서는 polls의 URLconf)로 전달해서 정상적으로 판단하게 도와준다는 것이다.

더 자세히 알고 싶으면 함수를 학습해야하는데, 지금은 그냥 쓰자 ㅎㅎ.

위 코드까지 진행을 했으면 index의 View가 URLconf에 연결되었을 것이다.
서버를 다시 실행하고 아래 주소로 들어가면 《Hello, world. You’re at the polls index.》 가 보일 것이다.

http://localhost:8000/polls/

추가)
path()함수에는 2개의 필수 인수와 2개의 선택가능 인수로 전달된다.
path(route, view, kwargs=None, name=None)

  • route 는 필수 인자로, URL 패턴을 포함한 문자열이다. 요청이 처리될 때, django는 urlpatterns의 첫 번째 패턴부터 시작해서, 일치하는 패턴을 찾을 때 까지 요청된 URL을 각 패턴과 리스트의 순서대로 비교한다.

    예를 들어, https://www.example.com/myapp/ 이 요청된 경우, URLconf는 Only myapp/ 부분만 바라본다. https://www.example.com/myapp/?page=3, 같은 요청에도, URLconf 는 역시 myapp/ 부분만 신경쓴다.

  • view는 필수 인자로, django에서 route 의 검색 결과로 일치하는 패턴을 찾으면, HttpRequest 객체를 첫 번째 인수로 하고, 경로로부터 캡처된 값을 키워드 인수로하여 view함수를 호출한다.

  • kwargs 는 임의의 키워드 인수들을 목표한 view에 사전형으로 전달된다.

  • name은 URL에 이름을 지어 템플릿을 포함한 Django 어디에서나 명확하게 참조하도록 도와준다. name을 이용하면, 단 하나의 파일만 수정해도 프로젝트 내의 모든 url패턴을 바꿀 수 있도록 도와준다.

여기서 잠깐, dirmysite / mysite / 의 이름을 바꿔주자. 헷갈린다.
project로 바꿔줬다 :)

아래는 튜토리얼을 진행하면서 참고한 선구자의 기술블로그이다. :)

참고 블로그

좋은 웹페이지 즐겨찾기