
What is django?
django document 에 의하면 django 는 'django 는 빠른 개발과 깔끔하고 실용적인 디자인을 장려하는 고수준의 오픈소스 python 웹 프레임워크' 이다. ORM 이 내장되어 있어 SQL 의존도를 낮추고 유지보수를 편하게 한다는 장점이 있다. instagram 또한 django 를 이용하여 만들어졌으며, AWS, Google Cloud, Azure 등에서 전폭적으로 초기 단계에서 부터 지원한 프레임워크라 deploy 및 운용에 대한 개발 비용을 크게 아낄 수 있다고 한다.
django 의 구조
django 는 아래의 구조로 데이터를 주고 받는다.

조금 더 깊게 들여다보면 아래와 같다.
짙은 녹색 부분의 파일들이 django 를 이용하는 개발자가 실질적으로 다루어야 할 파일들이다. 각 파일들에 대해 조금 부연해보자면 이렇다.
wsgi.py
Web Server Gateway Interface 의 약자로, python 으로 다양한 웹 서버를 사용할 수 있도록 하는 프로토콜이다. web server 와 django 를 결합시켜주는 gate way 의 역할을 한다.
urls.py
view method 를 연결하고 요청 url 을 정의하는 파일로, 특정 url 로 http 요청이 들어오게 되면 정규표현식에 맞게끔 특정한 views.py 로 보내준다.
views.py
django 에서의 view 는 흔히 MVC 패턴에서 말하는 controller 와 비슷한 역할을 한다. view 는 필요한 데이터를 model 에서 가져와, 사용자 요청에 맞게끔 데이터베이스의 입출력을 결정한다.
models.py
model 들이 정의되는 파일이다. makemigrations 명령을 통해 class 로 데이터 모델을 작성한다. 작성된 모델들은 migrate 명령을 통해 데이터베이스에 sql 테이블로 저장된다. (django 의 경우 django manager 에서 sql query 를 관리하기 때문에 개발자가 따로 작성할 필요는 없다)
example.html (Template)
view 에서 보내준 데이터를 유저 인터페이스로 구성한다. control 과 관련된 다양한 logic 들이 들어간다.
forms.py
form 에서는 class 상속의 특성을 활용하여 모델의 확장을 가능하게 해준다.
view 에서 받은 데이터들은 form 을 통해 보여지는데, 이 때 이 form을 어떻게 보여줄지에 대한 파일이다. 모델과 템플릿에서 사용되는 사용자들의 ui 가 이 곳에서 관리된다.
project & app
프로젝트
전체 프로그램. 하나의 웹 사이트라고 보면 된다.
app
application. 프로젝트 내의 비슷한 기능적 의미를 가진 프로젝트들을 묶어둔 것을 의미한다.
settings.py
프로젝트 개발 환경 설정 파일
주요 기능
- debug 모드 설정 : 개발 완료 후 배포할때에는 debug 를 false 로 해두어야 프로젝트의 정보가 노출되지 않으나, 개발하는 단계에서는 True 로 설정해두어야 css 등의 변경 사항이 적용된다.
- installed_apps : pip 로 설치한 어플리케이션이나 본인이 만든 어플리케이션을 추가한다.
- middelwale_classes : request 와 response 사이의 다양한 요청들에 관한 주요 기능을 하는 레이어로 크게 조작되지는 않는다.
- templates : django template 관련 설정, 실제 뷰 등의 기능을 다루는 설정 파일이다
- databases : 데이터베이스 엔진의 연결 설정
- static_url : 정적파일의 url
manage.py
django 프로젝트와 다양한 방식으로 상호작용하는 명령을 주는 유틸리티이다.
프로젝트 관리 관련 주요 명령어
- start app : 앱 생성
- runserver
- createsuperuser
- makemigrations app : app 의 모델 변경 사항 체크
- migrate : 변경 사항을 db 에 반영
- shell : shell 을 통해 데이터 확인
- collectstatic : 정적 파일을 static 디렉토리에 모아줌
'django' 카테고리의 다른 글
select_related & prefetch_related (0) | 2021.04.27 |
---|---|
QuerySet API (0) | 2021.04.27 |