1339765580_자동화된 개발 환경 파이썬 장고 p40120.pdf

파이썬 개발자들에게 장고란 이름은 낯설지 않을
것이다. 장고를 도입한 웨싱턴 포스트에서 이미 성능이 검증됐고
구글 앱 엔진에서 장고를 지원하며 화제가 됐다. 최근 장고는 파
이썬을 기반으로 한 웹 프레임워크인 터보기어나 Zope(Z
Objectpublishing Environment)를 제치고 파이썬의 대표적인
웹 프레임워크로 급부상하기 시작했다.
파이썬의 특징인 단순함과 명료성을 물려받았고 수많은 파이
썬 모듈을 바로 이용할 수 있는 것은 장고가 순수하게 파이썬만
으로 개발됐기 때문이다. 설치가 쉽고 간단한 코드만으로 웹 애
플리케이션을 개발하고 서비스할 수 있을 만큼 완성도가 높은 실
용적인 프레임워크가 장고다. 또한 RESTful 등의 웹 애플리케이
션 필수 기능을 간단한 코드만으로 처리할 수 있고 데이터베이스
모델의 생성, 연동 그리고 관리 페이지까지 자동으로 생성된다.
이런 단순함과 명료성은 장고에 담긴 두 가지 철학에 기인했
다. 첫 번째 철학인‘중복 방지 원칙’은 개발 프로젝트에서 생성
된 비슷한 기능의 수많은 클래스와 데이터를 지양한다는 의미로
차후 언급할 OMR(Object-Relational Mapper)이 이를 담당한
다. 두 번째 철학은‘자동화’다. 실제로도 장고는 많은 부분이 자
동화돼 개발자의 부담을 덜어준다.
Object-Relational Mapper
장고는 파이썬 코드로 필요한 데이터의 모델을 표현하는 것
만으로 데이터베이스를 이용할 수 있다. Data-model syntax로
데이터 모델을 정의하면 원하는 데이터에 접근할 수 있으며
SQL문을 통한 직접적인 접근도 가능하다.
사람의 이름을 저장하기 위한 Person이란 클래스는 데이터 모
델과 관련된 가장 기본적인 클래스인 models.Model 클래스를
상속받는다. 클래스를 선언하고 모델링할 때 해당 클래스에서 어
떤 데이터를 사용할지 프로퍼티를 선언하며 프로퍼티는 테이블
의 필드에 해당한다. 이렇게 생성한 모델로 데이터베이스를 직접
적으로 접근 및 파이썬 API를 통한 접근 모두 가능하다.
Automatic admin interface
장고는 데이터를 관리할 수 있는 관리자 인터페이스를 무료로
제공한다. 모델을 생성하면 관리 페이지에 데이터를 직접 추가,
수정, 삭제할 수 있다.
128 m a s o
최동진 milkelf.choi@gmail.com|소프트웨어 개발과 인연을 맺은 지 10년이 훌
쩍 넘었다. 그 동안 C/C++ 만으로 개발했지만 업무 효율성을 위해 접하게 된
파이썬의 매력에 푹 빠져 있다. 최근 웹에 관심을 가지고 여러 웹 기술들을 연구
하고 있다. 저서로는 <빠르게 활용하는 파이썬 3.2 프로그래밍>이 있다.
촉박한 일정과 무리한 요구사항으로 곤경에 빠져 본 일은 개발자에게 특별한 경험은 아닐 것이다. 이런 개발상의 어려움을 줄여주는
다양한 웹 프레임워크 중‘ 장고(Django)’는 개발 당시, 기타리스트인‘ 장고 라인하르트’에 빠진 나머지 이런 독특한 이름이 지어졌다.
이름만큼이나웹사이트의문구도독특하다.‘ 마감을완벽히지킬수있는프레임워크’란인상적인문구만으로마감시일로인해
극심한 스트레스에 시달렸을 장고 개발자의 시름이 느껴진다. 그렇다면 어떻게 웹 프레임워크인 장고만으로 마감일을 지킬 수 있을까?
이런 의문에 대한 답을 이 글에서 찾을 수 있을 것이다. 여기서는 순수하게 파이썬(Python)만으로 개발된 장고의 특징과 활용법
그리고 향후 전망까지 살펴본다.
자동화된 개발 환경
파이썬 장고
cove r s t o r y 3
from django.db import models
class Person(models.Model):
full_name = models.CharField(max_length=30)
email_address = models.CharField(max_length=30)
<리스트 1> Data-model syntax 사용
Elegant URL design
URL을 처리하는 URLConf는 이 모듈에 정의된 URL 패턴과
장고의 함수를 이어주는 역할을 한다. 장고에서 프로젝트 생성
시 기본 생성되는 urls.py 파일에 URLConf를 설정할 수 있으며
URL 패턴은 정규식만 알면 쉽게 정의할 수 있다.
from django.conf.urls.defaults import *
urlpatterns = patterns(‘’,
(r’ ^articles/(\d{4})/(\d{2})/(\d+)/$’ ,
‘news.views.article_detail’),
)
위 코드에서‘/articles/2005/05/39323/’는 URL 호출 시
news.views.article_detail(request,‘ 2005’,‘ 05’,‘ 39323’)처럼
함수를 호출하며, RESTful 형식의 요청을 처리할 때 유용하다.
Template system
장고는 강력하고 확장이 가능한 템플릿 언어를 제공한다. 여기
에는 콘텐츠, 파이썬 코드가 분리돼 있어 디자이너에게 친화적인
템플릿이라고 볼 수 있다. 타 웹 프레임워크에서는 템플릿을 위
한 언어를 새로 학습해야 하지만 장고는 파이썬 언어만 알면 쉽
게 템플릿을 활용할 수 있다.
PHP나 JSP에서는 템플릿에 코드 삽입이 가능하지만 장고는
조건문과 반복문 정도만 허용하며, 이는 콘텐츠와 디자인을 완전
히 분리하고자 한 의도가 반영된 결과다.
Cache System
서버의 도움 없이 장고는 메모리, 데이터베이스, 파일시스템
중 지정된 위치에 자동으로 페이지를 캐시할 수 있다.
Internationalization
국가별 언어 지원을 위해 여러 개의 웹 애플리케이션이나 템플
릿을 개발하는 것은 중복금지의 원칙을 위반하는 것이다. 장고는
하나의 웹 애플리케이션만으로 국제화와 현지화 모두 가능하다.
Model, View, Template
장고에서는 MCV를 MVT(Model, View, Template)라고 부
르며 이는 데이터를 의미하는 Model, 사용자에게 보여지는 시각
적 부분인 Template, 실질적으로 프로그램 로직이 동작하는 함
수의 실행과 결과를 전달하는 View를 의미한다.
장고 사용하기
웹 서버가 내장된 장고는 별도의 웹 서버를 설치하지 않아도
돼 설치도 비교적 간단하다. 아파치 웹 서버도 mod_wsgi로 장고
와 연동할 수 있고 장고의 코드를 구글 앱 엔진에 올릴 수 있다.
장고를 설치하기 위해서는 먼저 파이썬 2.6 또는 파이썬 2.7이
설치돼 있어야 한다. www.djangoproject.com/download에서
최신 버전을 다운로드하고 임의의 디렉터리에 압축을 푼 후 다음
의 명령어를 콘솔에서 실행하면 장고 설치가 완료된다.
C:\down\Django-1.4>python.exe setup.py install
이제 본격적으로 프로젝트와 앱을 개발해보자. 장고에서는 웹
애플리케이션을 앱이라 부르며, 프로젝트는 데이터베이스, 템플
릿, URL 등의 설정과 웹 사이트에 필요한 앱의 집합이다.
먼저 mysite란 이름의 프로젝트를 생성하자.
C:\>c:\Python27\python.exe django-admin.py startproject mysite
mysite란 디렉터리가 생성되고 그 안에는 <표 1>과 같은 파일
이 생성된다.
m a s o 129
<그림 1> 장고 관리 페이지
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
<리스트 2> 간단한 장고 템플릿
<표 1> 프로젝트 안에 자동으로 생성된 파일
__init__.py 초기화와 관련된 파일로 첫 생성의 경우 빈파일이다.
manage.py 프로젝트를 관리에 필요한 기능이 포함된 모듈
settings.py
프로젝트의 설정 값과 규칙을 지정한 파일, 데이터베이스 설정도
이곳에서 한다.
urls.py URL을 어떻게 다룰지에 대한 규칙이 정의돼 있다.
다음 명령어로 mysite 프로젝트에 contact란 앱을 추가하자.
C:\mysite>c:\Python27\python.exe manage.py startapp contact
mysite 디렉터리 안에 contact 디렉터리가 생성되고 contact
앱에 필요한 기본 파일이 자동으로 생성된다. 프로젝트 디렉터리
의 setting.py 파일의 INSTALLED_APPS 항목에 contact를 추
가하면 프로젝트에 앱이 추가된다(<리스트 3> 참조).
데이터베이스 설정하기
장고의 강력한 기능인 OMR을 이용하기 위해선 setting.py 파
일의 DATABASE 항목을 사용할 DBMS에 맞춰 수정해야 한
다. 파이썬에서는 sqlite3 DBMS를 기본 제공하므로 별도의
DBMS를 설치하지 않아도 된다.
<리스트 4>와 같이 setting.py 파일을 수정한 후 콘솔에 다음
명령어를 실행한다.
C:\mysite>c:\Python27\python.exe manage.py syncdb
만약 첫 실행인 경우 관리에 필요한 테이블이 생성되고 슈퍼유
저 등록 메시지가 나타난다.
데이터 모델 만들기
contact 앱에 필요한 이름과 이메일 주소를 저장하는 간단한
모델을 만들자. contact 디렉터리 안의 model.py에 Person 클래
스를 추가한다. syncdb 명령어를 다시 실행하면 테이블 1개가
생성됐다는 메시지가 나타나며, 다음 명령어로 생성된 테이블의
스키마를 확인할 수 있다.
C:\mysite>c:\Python27\python.exe manage.py sql contact
BEGIN;
CREATE TABLE“ contact_person”(
“id”integer NOT NULL PRIMARY KEY,
“full_name”varchar(30) NOT NULL,
“email_address”varchar(30) NOT NULL
);
COMMIT;
관리 페이지 설정
이제 장고가 무료로 제공하는 데이터베이스 관리 페이지를 이
용해보자. setting.py 파일의 INSTALLED_APPS 항목에서
‘django.contrib.admin’의 주석을 지워 관리 페이지를 활성화시
킬 수 있다. urls.py에서도 관리 페이지를 사용하기 위해 주석을
지우고 pattern에 다음과 같이 입력하면 관리 페이지에 접근할
수 있는 URL이‘서버주소 + /admin/’로 설정된다.
장고 내장 서버 사용
장고에 내장된 웹 서버를 실행하는 방법은 다음과 같다.
C:\mysite>c:\Python27\python.exe manage.py runserver
Validating models...
0 errors found
Django version 1.4, using settings‘ mysite.settings’
Development server is running at http://127.0.0.1:8000/
130 m a s o
c o v e r s t o r y 3 파이썬 장고
INSTALLED_APPS = (
...생략
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
#'django.contrib.admin',
'contact',
)
<리스트 3> app 추가
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
# sqlite3 엔진을 사용할 것을 선언한다.
'NAME': 'contactdb',
# DB 이름, 혹은 sqlite3인 경우 DB 파일 패스
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '',
# Set to empty string for localhost. Not used with sqlite3.
'PORT': '',
# Set to empty string for default. Not used with sqlite3.
}
}
<리스트 4> DATABASE 설정
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
<리스트 5> 관리 페이지 세팅
Quit the server with CTRL-BREAK.
브라우저에서 http://127.0.0.1:8000/admin을 입력하면 관리
자 페이지가 나타난다. 로그인 하면 Person이 없을 것이다. 관리
페이지에서 Person을 포함시키기 위해서는 contact 디렉터리 안
의 admin.py 파일을 생성하고 다음과 같이 입력한다.
서버를 재시작하면 관리 페이지에 Person이 포함된 것을 확인
할 수 있다.
Contact 앱 구현
Person 안에 있는 모든 이름 항목이 출력되는 앱 애플리케이
션을 개발해보자. contact 앱 생성 시 함께 생성된 views.py에 다
음과 같이 입력한다.
contact 앱이 실행될 수 있게 urls.py를 <리스트 8>과 같이 수
정하자.
<리스트 8>은‘서버 주소 + /contacts/’형식의 요청 시
contact 앱 안의 views.py에서 contacts 함수를 찾아 실행시킨다.
contact 앱 애플리케이션을 위한 모든 작업이 완료됐다. 브라
우저에 http://127.0.0.1:8000/contacts를 입력하면 데이터베이
스의 Person 항목의 모든 정보가 <그림 2>처럼 출력된다.
보다 쉽게 장고를 이해할 수 있도록 간단한 앱 애플리케이션을
개발해봤다. 소규모의 간단한 웹서비스 개발에 장고를 이용할 수
있지만 대용량 웹서비스, 앱 애플리케이션 개발에도 유용하다.
장고의 미래
최근 릴리즈된 장고 1.4는 1.3이 릴리즈된 지 1년 만에 업데이
트가 이뤄졌다. 빨라진 업데이트 주기는 장고의 사용자 층이 두
터워지고 이에 따라 사용자 요구도 증가된 데 따른 결과다.
장고 1.4에서는 전 세계로 장고가 확산되며 타임존을 지원하
기 시작했으며, 브라우저 내에서도 앱 애플리케이션을 테스팅할
수 있는 모듈이 새로 추가됐다. 그러나 새로운 제약 사항도 존재
해, 장고 1.4부터 파이썬 2.4 이하 버전의 동작을 보장하지 않는
다. 또한 파이썬 3가 릴리즈된 지 3년이 지났지만 아직 지원되지
않고 있다. 아직 파이썬 2.6이 파이썬 개발의 주축인 점이 주요
요인으로 최근 파이썬 3를 지원하기 위한 개발이 진행 중이다.
향후 파이썬 3.3 의 릴리즈에 맞춰 장고 1.5가 등장하면 파이썬 3
가 지원될 것으로 기대된다.
한편, 장고의 발전을 위한 노력도 지속되고 있다. 대표적으로
구글 앱 엔진의 최신 릴리즈에서 Cloud SQL을 장고에서 사용할
수 있게 돼 OMR을 통해 Cloud SQL과 연동하고 빅 테이블을
이용할 수 있다. 또한 장고에서 개발된 앱을 구글 앱 엔진에서 배
포할 수 있다. 스크립트 언어의 약점인 속도 문제 개선을 위해 기
존 파이썬보다 속도가 빠른 pypy로 장고를 실행시켜 속도를 향
상시키려는 시도가 계속되고 있다.
한 가지 분명한 것은 장고는 파이썬의 대표 웹 프레임워크로서
의 위상을 계속 유지할 것이라는 점이며, 지금 이 순간에도 그 발
전은 계속되고 있다.
m a s o 131
from contact.models import Person
from django.contrib import admin
admin.site.register(Person)
<리스트 6> 관리 페이지에 데이터 모델 등록
from contact.models import Person # 생성한 데이터 모델 임포트
from django.http import HttpResponse
# Create your views here.
def contacts(request):
contact_list = Person.objects.all() # Person의 모든 데이터를
가져온다.
output = '<br>'.join( [p.full_name for p in
contact_list] )
return HttpResponse(output) # HttpResponse를 이용해 출력
<리스트 7> 간단한 장고 웹서비스
…생략…
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^contacts/$', 'contact.views.contacts'),
)
<리스트 8> contact을 위한 Urls.py 설정
<그림 2>
contact 앱 실행 결과

+ Recent posts