의식여행

Django 활용 웹 프로그래밍 기초(개념편) 본문

IT(리눅스&보안&개발)/개발-Django

Django 활용 웹 프로그래밍 기초(개념편)

의식여행중 2018. 1. 9. 18:52

안녕하세요, Woogi93 입니다. 

이번 포스팅은 최근 핫한 Python 언어를 활용하여 쉽게 웹 페이지를 구축할 수 있는 방법에 대한 소개 글 입니다.

장고의 개발 방식이 MTV(Model, Template, View)에 따른 일정한 룰에 의해 진행되고, 웹 프로그래밍에서 공통적으로 필요한 기능들을 미리 만들어둔 후에 단축 함수, 제네릭 뷰 등으로 제공하기 때문입니다.

그 외에도 서드파티에 의한 외부 라이브러리가 풍부하고, 해외에서는 가장 많이 사용되는 파이썬 웹 프레임워크가라서 레퍼런스가 많다는 장점도 있습니다.


1.1 MTV 개발 방식

웹 프로그래밍 영역을 3가지 개념으로 나눠서 개발하는 방식입니다.

즉, 테이블을 정의하는 Model, 사용자가 보게 될 화면의 모습을 정의하는 Template, 애플리케이션의 제어 흐름 및 처리 로직을 정의하는 View로 구분해서 개발을 진행합니다.

이렇게 3가지로 나눠서 개발을 진행하면 Model, Template, View 간에 독립성을 유지할 수 있고, 소프트웨어 개발의 중요한 원칙인 느슨한 결합(Loose Coupling) 설계의 원칙에도 부합하며 디자이너, 응용 개발자, DB 설계자 간에 협업도 쉬워집니다.


장고에서 프로젝트를 생성하기 위해 startproject 및 starapp 명령을 실행하면 자동으로 프로젝트 뼈대에 해당하는 디렉터리와 파일들을 만들어줍니다. 모델은 models.py 파일에, 탬플릿은 template 디렉터리 하위의 *.html 파일에, 뷰는 views.py 파일에 잡석하도록 처음부터 뼈대를 만들어 줍니다. 즉, 모든 애플리케이션 개발에 필요한 파일들을 장고가 알아서 생성해주고, 개발자가 해당 내용을 채워넣기만 하면 됩니다.


1.2 MTV 코딩 순서

모델, 템플릿, 뷰 셋 중에 무엇을 먼저 코딩해야 하는지에 대해 정해진 순서는 없습니다.

MTV 방식에 따르면 화면 설계는 뷰와 템플릿 코딩으로 연결되고, 테이블 설계는 모델 코딩에 반영됩니다. 그렇기 때문에 독릭적으로 개발할 수 있는 모델을 먼저 코딩하고, 뷰와 템플릿은 서로 영향을 미치므로 이후에 같이 코딩하는 것이 일반적입니다.

여러분도 자신만의 코딩 순서를 정하는 것이 로직을 풀어나가는 데 일관성을 유지할 수 있고, 웹 개발 노하우도 빨리 습득할 수 있는 지름길이 될 것 입니다. 


1.3 settings.py 주요 사항

프로젝트 설정 파일입니다. 처음 프로젝트를 생성하면 장고가 기본 사항들을 자동으로 등록해주므로, 추가적으로 필요한 사항들만 개발 과정에서 등록하면 됩니다.

다만 기본 항목들을 프로젝트 개발 시 필수 사항이므로, 장고가 자동으로 등록한 사항을 확인해서 필요하다면 수정해줘야 합니다.

-데이터베이스 설정 : 디폴트로 SQLite3 데이터베이스 엔질을 사용하는 것으로 지정(mysql, orcle 등 변경 가능)
-템플릿 항목 설정 : templates 항목으로 지정
-정적 파일 항목 설정 : STATIC_URL 등 관련 항목을 지정
-애플리케이션 등록 : 개발하는 앱, 즉 프로젝트에 포함되는 애플리케이션들을 모두 설정 파일에 등록
-타임존 지정 : 최초에는 세계표준시(UTC)로 설정되어 있는데, 한국 시간으로 변경 필요

이외에도, 루트 디렉터리를 포함한 각종 디렉터리의 위치, 로그의 형식, 디버그 모드, 보안 관련 사항 등 프로젝트의 전반적인 사항들 설정

1.4 models.py 주요 사항

테이블을 정의하는 파일입니다. 장고의 특징 중 하나로, 데이터베이스 처리는 ORM(Object Relation Mapping) 기법을 사용합니다.
즉, 테이블을 클래스로 매핑해서 테이블에 대한 CRUD(Create, Read, Update, Delete) 기능을 클래스 객체에 대해 수행하면, 장고가 내부적으로 데이터베이스 반영해주는 방식입니다.

장고에서는 ORM 기법에 따라 테이블을 하나의 클래스로 정의하고, 테이블의 컬럼은 클래스의 변수(속성)로 매핑합니다.
테이블 클래스는 django.db.model.MOdel 클래스를 상속받아 정의하고, 각 클래스 변수의 타입도 장고에서 미리 정의해 놓은 필드 클래슬르 사용합니다.

테이블의 신규 생성, 테이블의 정의 변경 등 models.py 파일에서 데이터베이스 변경 사항이 발생하면, 이를 데이터베이스에 실제로 반영해주는 작업을 해야 합니다. 이를 위해 장고는 1.7 버전부터 마이그레이션 개념을 도입했습니다.

즉 테이블 및 필드 생성, 삭제, 변경 등과 같이 데이터베이스에 대한 변경 사항을 실제 데이터에비으세 반영하는 "makemigrations" 및
"migrate" 명령을 제공합니다.


1.5 URLconf 주요 사항

URL과 뷰(함수 또는 메소드)를 매핑해주는 역할을 합니다.
URLconf를 정의할 때는 하나의 파일에 정의할 수도 있고, 2개의 파일에 정의하는 것도 가능합니다.

효휼적인 방식은 프로젝트 전체 URL을 정의하는 프로젝트 URL과 앱마다 정의하는 앱 URL, 2계층으로 나눠서 코딩하는 방식입니다.
이 방식은 URLconf 모듈을 계층적으로 구성하므로 변경도 쉽고 확장도 용이해지기 때문입니다.

이미 개발해 놓은 앱을 다른 프로젝트에서 사용한느 경우에도 urls.py 파일을 수정 없이 재활용할 수 있는 장점이 있습니다.

URL은 패턴별로 이름을 지정할 수 있고, 패턴 그룹에 대해 이름공간(namespace)을 지정할 수도 있습니다.
이는 reverse() 함수나 {% url%} 탬플릿 태그를 사용해, 소스에 URL을 하드 코딩하지 않아도 필요한 URL 정보를 추출 할 수 있습니다.


1.6 views.py 주요 사항

뷰를 코딩하는 가장 중요한 파일입니다.
간단한 로직인 경우 몇 줄만 코딩하면 되지만, 프로젝트 개발 범위에 따라 굉장히 커지기도 합니다.

즉, 가독성과 유지보수 편리, 재활용 등을 고려해야 합니다.

장고에서는 뷰 로직을 함수로 코딩할 것인지 클래스로 코딩할 것인지에 따라, 함수형 뷰(Function-based view)와
클래스형 뷰(Class-based view)로 구분합니다. 개발자자의 입장에서 편한 방식으로 코딩하면 되고 보통은 하나의 프로젝트에 둘 다 사용하는 경우가 많습니다. 개인적으로는 클래스형 뷰를 사용하는 것이 장고가 제공하는 제네릭 뷰를 사용할 수 있고 재활용 및 확장성 측면에서 유리하다고 판단되어, 클래스형뷰를 좀 더 자세히 공부하기를 권장합니다.

장고는 다른 프레임워크에 비해 뷰 작성에 편리한 기능을 많이 제공하고 있습니다. 대표적인 것이 단축 함수 및 클래스형 제네릭 뷰인데,
쉽고 빠르게 웹 프로그래밍을 할 수 있도록 도와주는 대표적인 기능들입니다.


1.7 templates 주요 사항

웹 화면(페이지)별로 템플릿 파일(*.html)이 하나씩 필요하므로, 웹 프로그램 개발 시 여러개의 템플릿 파일을 작성하게 되고, 이런 템플릿 파일들을 한 곳에 모아두기 위한 템플릿 디렉터리 입니다.

템플릿 디렉터리는 프로젝트 템플릿 디렉터리와 앱 템플릿 디렉터리로 구분해서 사용합니다.

프로젝트 템플릿 디렉터리는 TEMPLATES 설정의 DIRS 항목에 지정된 곳입니다.

앱 템플릿 디렉터리는 각 애플리케이션 디렉터리마다 존재하는 templates/ 디렉터리를 말합니다.

1.8 개발용 웹 서버 - runserver

개발 과정에서는 작성된 코드를 실행하고 테스트하는 과정이 필요합니다.
장고에서는 개발 과정에 현재의 웹 프로그램을 실행해볼 수 있도록 runserver라는 테스트용 웹 서버를 제공합니다.

테스트용이라고는 하지만 장고의 모든 기능을 실행할 수 있어서 간단한 테스트는 충분합니다.
하지만 실제 고객에게 오픈하는 사용화를 고려한다면, runserver 대신 apache 또는 nginx 등의 상용 웹 서버를 사용해야합니다.

사용 웹 서버에 비해 처리 능력도 낮고, 보안에도 취약하기 때문입니다.


감사합니다.

Comments