Django 강좌 - 기본

Django의 기본 개념 및 사용법

장고에서의 애플리케이션 개발 방식

웹 사이트를 설계할 때 가장 먼저 해야 할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어서 모듈화하는 것이다. 이 경우 웹 사이트의 전체 프로그램 또는 모듈화된 단위 프로그램을 애플리케이션이라고 한다. 그러나 장고에서는 애플리케이션의 개념을 웹 서버 개발 측면에서 좀 더 구체화하고 있다. 웹 사이트에 대한 전체 프로그램을 프로젝트라 하고, 모듈화된 단위 프로그램을 애플리케이션이라고 부르며 장고는 기본적으로 MTV 모델에 따라 애플리케이션 개발을 유도해준다.

MTV 패턴

웹 프로그램 개발 시 일반적으로 언급되는 MVC 패턴이란 Model(데이터), View(사용자 인터페이스), Controller(데이터 처리 로직)을 구분해서 한 요소가 다른 요소들에 영향을 주지 않도록 설계하는 방식이다. 이런 방식으로 개발을 진행하면 디자이너와 개발자 사이에 영향없이 업무에 집중할 수 있게 된다. 이를 장고 프레임워크에서는 Model, Template(view), View(controller) 라고 표현하며 MTV 패턴이라고 한다.

Model - DB 설계

모델이란 사용될 데이터에 대한 정의를 담고 있는 장고의 클래스이다. 장고는 ORM(Object-Relational Mapping) 기법을 사용하여 애플리케이션에서 사용할 데이터베이스를 클래스로 맵필해서 코딩 할 수 있다. 즉, 하나의 모델 클래스는 하나의 테이블에 맵핑되고, 모델 클래스의 속성은 테이블의 칼럼에 맵핑된다. 그렇기 때문에 애플리케이션에서는 데이터베이스에 대한 액세스를 SQL 없이도 클래스를 다루는 것처럼 할 수 있어서 편리하다.

장고의 ORM 기법의 사용에 대한 이해를 위해 Person 이라는 테이블을 models.py 파일에 장고의 Person 모델 클래스로 정의해보겠다.

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=10)
    email = models.CharField(max_length=20)

위 Person 모델은 장고 내부적으로 SQL 명령어를 사용하여 다음과 같은 데이터베이스 테이블을 생성한다.

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(10) NOT NULL,
    "email" varchar(20) NOT NULL
);

장고는 테이블 및 컬럼을 자동으로 생성하기 위해 필요한 많은 규칙을 갖고 있으며 그 중 위에 적용된 규칙은 다음과 같다.

  • 테이블명은 애플리케이션명과 테이블 클래스명을 밑줄( _ )로 연결하고, 모두 소문자로 표시하며 직접 수정할 수 도 있다.
  • Primary Key는 Person 클래스에서 정의하지 않아도 장고에서 자동으로 부여하며 직접 지정할 수 도 있다.

Template - 화면 UI 설계

장고는 자체 템플릿 시스템을 갖고 있기 때문에 디자이너도 쉽게 이해할 수 있는 문법을 제공하고 있다. 장고에서 제공하는 템플릿은 파이썬 코드를 직접 사용할 수 있기 때문에 강력하고 확장하기 쉬운 구조이다. 템플릿 파일은 .html 확장자를 가지며, 장고의 템플릿 시스템 문법에 맞게 작성한다. 이 때 템플릿 파일은 정의된 디렉토리에 위치시켜야한다. 장고에서 템플릿 파일을 찾을 때는 TEMPLATE_DIRS 및 INSTALLED_APPS에서 지정된 디렉토리를 검색하는데 이 항목들은 settings.py 파일에 정의되어 있다.

URLconf - URL 설계

파이썬의 URL 지정 방식은 전통적인 자바나 PHP 계열의 URL보다 직관적이고 이해하기 쉽다. 그래서 Elegant URL 이라고 부른다. URL을 정의하기 위해서는 urls.py 파일에 URL과 처리 함수(View)를 맵하는 파이썬 코드를 작성해주면 된다. 이러한 URL/View 맵핑을 URLconf라고 한다. 웹 클라이언트가 웹 서버에 페이지 요청 시, 장고에서 URL을 분석하는 순서는 다음과 같다.

  1. settings.py 파일의 ROOT_URLCONF 항목을 읽어 URLconf(urls.py)의 위치를 알아낸다.
  2. URLconf 모듈을 로딩하여 urlpatterns 변수에 지정되어 있는 URL 리스트를 검사한다.
  3. 위에서부터 순서대로 URL 리스트의 내용을 검사하면서 매치가 되면 검사를 종료한다.
  4. 매치가 된 URL의 뷰를 호출한다. 여기서 뷰는 함수 또는 클래스의 메소드이다. 호출 시 HttpRequest 객체와 매칭할 때 추출된 단어들을 뷰에 인자로 넘겨준다.
  5. 리스트 끝까지 검사했는데도 매칭에 실패하면 에러를 처리하는 뷰를 호출한다.

View - 로직 설계

일반적으로 뷰는 웹 요청을 받아서 데이터베이스 접속 등 해당 애플리케이션의 로직에 맞는 처리를 하고, 그 결과 데이터를 HTML로 변환하기 위하여 템플릿 처리를 한 후에, 최종 HTML로 된 응답 데이터를 웹 클라이언트로 반환하는 역할을 한다. 장고에서의 뷰는 함수 또는 클래스의 메소드로 작성되며, 웹 요청을 받고 응답을 반환해준다. 이러한 뷰는 보통 views.py 파일에 작성하지만 다른 파일에 작성해도 무방하다.