Before 2022/ETC

Django 구성요소

Eljoe 2017. 2. 3. 18:05

admin.py는 관리자 영역에서 이 App을 다루는 코드를 담는 모듈입니다.


models.py은 모델을 정의하는 모듈인데 모델(model)은 데이터(data)를 구성하는 항목 자체(field)와 데이터를 다루는 행위(behaviour)를 포함한 것입니다. 사진은 찍은 날짜, 사진 그 자체, 인화지, 이름과 같은 사진 구성 정보, 그리고 사진을 크게 확대해서 보거나 특정 부분을 오려내거나 복사하거나 종이로 접어 날려보내는 것과 같이 관련 행위로 구성됩니다. 이런 사진 관련 정보나 행위를 사진이라는 객체로 표현하는 것이 모델입니다. 우리가 다루고자 하는 대상 그 자체인데, 사람이 인지(recognition)하는 표현물은 아닙니다. 비유를 들자면, 하드 디스크에 있는 사진이라는 이미지 파일인 겁니다. 이미지 데이터일 뿐, 그게 어떤 사진인지는 알지 못 합니다.


views.py는 특정 주소(URL)에 접근하면 화면에 내용을 표시하는 Python 함수를 호출하는 내용을 담습니다. 이름만 보면 인화되거나 출력된 표현물 같지만, 정확한 용도는 우리가 인지하는 표현물로 안내하는 역할을 합니다. 비유를 들자면, 이미지 파일 뷰어나 프린터입니다. 그럼 대체 표현물은 뭘까요? MVC 패턴에서는 View가 표현물이지만, Django계에서는 template이 표현물입니다. Django에서 View는 데이터(모델)를 표현(템플릿)하는 연결자이자 안내자입니다. MVC 패턴으로 보면 Controller와 유사합니다.


tests.py은 Unit test 내용을 담는 모듈이다.


Django에서 모델의 속성(attribute)은 데이터베이스 필드(field)로 나타냅니다. 

Python 클래스로 놓고 보면 속성이지만, Django 모델의 데이터 요소로 다루고자 할 경우,

Django 모델이 제공하는 별도 자료형(type)으로 값을 다루는데, 이 자료형인 값을 모델 필드라 부른다.

필드 종류를 Django에서는 필드 타입(field type)이라고 부릅니다.

모델 필드에는 몇 가지 선택 항목을 지정하곤 하는데, 이런 선택 항목을 필드 옵션(field option)이라고 합니다. 


migrate는 실제 DB에 반영하는 명령어이고, 이 명령어는 마이그레이션 스크립트를 실행하는데 

makemigrations 명령어로 마이그레이션 스크립트를 만듭니다.


Django는 실 서비스 환경에서 사용할 정적 파일을 제공하는 기능을 제공하지 않습니다. 

서버에 저장된 정적 파일을 읽어들여서 그대로 웹 클라이언트에 보내기만 하면 그만인 단순한 기능인데도 

Django는 그런 기능을 제공하지 않습니다. 왜냐하면 그럴 필요가 없기 때문인데, 

앞서 설명한 바와 같이 정적 파일을 제공하는 건 웹 서버 전문 영역이기 때문입니다.

게다가 웹 애플리케이션은 웹 서버와 연결하는 중간 인터페이스를 거치므로 효율이 더 떨어집니다.

하지만 개발 상황인 경우는 효율보다는 기능(역할)이 중요한 경우가 많습니다. 

정적 파일이 제대로 제공되는지 확인하려고 항상 웹 서버를 구동할 필요는 없습니다. 

Django는 개발 단계에서 쓸 정적 파일 제공 기능을 제공합니다. 

성능은 웹 서버가 직접 정적 파일을 제공하는 것 보다 떨어지지만 정적 파일 제공에 필요한 기능은 대부분 지원합니다.


정적 파일을 모아놓은 STATIC_ROOT는 Django가 직접 접근하진 않습니다. 

Django가 접근하여 다루는 설정은 STATICFILES_DIRS이며, 

STATIC_ROOT는 정적 파일을 직접 제공(serving)할 웹 서버가 접근합니다. 


STATIC_URL은 정적 파일이 실제 위치한 경로를 참조하며, 

이 실제 경로는 STATICFILES_DIRS 설정 항목에 지정된 경로가 아닌 STATIC_ROOT 설정 항목에 지정된 경로입니다.


collectstatic 명령어를 수행하면 STATICFILES_DIRS나 앱 디렉터리에 있는 static 디렉터리 내의 파일을 

STATIC_ROOT에 모으는데, STATICFILES_DIRS에 지정된 경로인 경우 따로 명시한 접두사로 디렉터리를 만들어서

그 안의 파일을 복사하고, 앱 디렉터리에 있는 static 디렉터리인 경우는 앱 이름으로 디렉터리를 만들어 

그 앱 내부의 static 디렉터리에 존재하는 파일을 복사합니다. 

즉, 개발 단계(DEBUG = True)에서는 정적 파일 URL 경로가 논리 개념이고, 

서비스 환경(DEBUG = False)에서는 실제 물리 개념인 정적 파일 URL 경로가 되는 것입니다.


STATICFILES_DIRS = Django(runserver)

STATIC_ROOT = 웹 서버(Apache, nginx....)

STATIC_URL = 웹 페이지에서 사용할 정적파일의 최상위 URL 경로


MEDIA_ROOT = 업로드가 끝난 파일을 배치할 최상위 경로를 지정하는 설정 항목(실제 파일이 위치하는 서버 상 경로)

MEDIA_URL = STATIC_URL와 비슷한 역할


출처 : http://blog.hannal.com/2014/9/start_with_django_webframework_03/