본문 바로가기

Tech Stack/Back-end

Django 구성요소와 개발 순서 ( 1 / 2 )

1. Django 란?

Web Server의 구성요소

Django는 파이썬 전용, MVT 패턴 구조를 따르는 웹 프레임워크 중 하나입니다.

 

Django의 MVT 구조

1. MVT 구조

- Model, Template ( View ), View ( Controller ) 패턴을 따르고 있는 특징을 가집니다. 개발자는 이 패턴을 유지하면서 필요한 부분을 손쉽게 작성할 수 있습니다.

 

2. ORM 지원

- Django 자체에서 객체 관계 매핑 기능을 제공합니다. dB 시스템과 모델 간 연동 장치를 뜻하며, 이를 이용해 DB Table을 손쉽게 조작할 수 있습니다. 이를 통해 어떤 DB system을 사용하던지에 상관없이 Model의 작성법은 변하지 않습니다. 

 

3. DB 관리 시스템

- DB에 대한 관리 기능을 위한 관리자 화면을 기본으로 제공합니다. 이를 통해 테이블과 데이터를 손쉽게 생성 및 변경 가능합니다.

 

4. URL 설계

- Django는 URL 디자인을 각 URL 형태를 Python 함수에 1:1로 연동하도록 패턴을 정하여, 개발이 쉽고 이해하기 편합니다.

 

5. 자체 Template 시스템

- JJinga와 같은 템플릿 시스템을 자체적으로 제공합니다. 이를 통해 Front-end와 Back-end를 분리하여 독립적으로 개발 할 수 있습니다.

 

6. 캐시 시스템

- 자주 이용하는 내용을 저장하였다 재사용할 수 있도록 하는, 캐시 기능을 제공하여 서버의 부하를 덜어주는 기능을 가집니다.

2. Django의 구성요소?

Django의 MVT 기반 구성요소

Model ( Models.py )

- DB에 사용될 데이터에 대한 정의, 즉 테이블에 대한 정의를 담당하는 클래스입니다. ORM 기법을 통해 애플리케이션에서 사용할 데이터베이스를 클래스로 매핑하여 코딩할 수 있습니다. 하나의 모델 클래스는 하나의 테이블에 매핑되고, 클래스의 속성은 테이블의 column에 매핑됩니다.

 

Template ( Template 폴더 안, html 파일들 )

- UI를 정의하는 클래스입니다. Django가 최종 반환하는 응답은 HTML 텍스트입니다. Template을 최종 클라이언트에 보내주게 되는 것 입니다. 장고는 자체적인 템플릿 엔진, Jjina와 같은 엔진을 가지고 있어서 파이썬 코드로 작성 가능합니다. 기본적으로 Templates라는 디렉토리를 생성하여 렌더링 할 html 파일을 포함시켜 사용합니다.

 

추가적으로 html을 작성하지 않고 React 등, View 전용 엔진 프레임워크를 연동할 수 있습니다.

 

View ( Views.py )

- 요청을 받아 DB 접속 등의 애플리케이션에 맞는 로직, 기능을 처리하고, 그 결과를  HTML으로 템플릿 처리를 한 후, 응답 데이터( HTML 데이터, 리다이렉션 명령, 404 error 등 )를 Context 변수에 담아 웹 클라이언트로 최종 반환하는 역할을 합니다.

 

함수 또는 클래스로 작성되며, 클래스로 작성하는 게 더 유지보수 측면에서 좋습니다.

 

URL conf ( urls.py )

 

- URL과, 해당 로직을 담당하는 View를 매핑하게 해주는 기능입니다.  urlpatterns을 통해, 사용할 html, 그것과 매칭할 views를 path로 묶어서 list에 할당합니다. 전통적인 자바나 PHP URL 시스템보다 더 직관적이며, 유지보수가 용이합니다.

 

위의 그림의 Path의 인자는 순서대로 URL, View의 각 로직을 담당하는 클래스 ( as_view()로 가져옵니다. ), 매핑될 html 이름을 의미합니다.

3. Django Project 구성 요소

app을 하나 가지고 있는 Django 프로젝트

mysample

- Django 웹 프레임워크 프로젝트를 의미합니다. 전체 어플리케이션을 총괄하는 최상위 root 계층입니다. 프로젝트 하나를 통해 자원 관리, DB와 Back-end 모두를 관리할 수 있습니다. mysample이라는 프로젝트 전체 디렉토리에서 기타 설정 등을 관리합니다.

 

1. manage.py

- Django 프로젝트를 실행하고, 프로젝트 안 어플리케이션을 생성하는 등의 구동 & 실행을 담당하는 파일입니다. 

=> python manage.py ( startapp "appname", runserver 등등 )

 

2. settings.py

- 전체 프로젝트에 대한 설정을 관리합니다. 경로 설정, 개인 키 설정, 디버그 유무, 템플릿 & WSGI 규격 & App 설정, 로그 기능 등 다양한 옵션을 정할 수 있습니다.

 

3. urls.py

- Django 프로젝트가 실행할 web에 대한 url 경로를 매핑합니다. 각 app에 대한 url 경로가 매핑되어야 합니다. 각 app는 각자가 렌더링하는 urls.py를 가지고 있습니다. 프로젝트 디렉토리에 있는 urls.py는 이를 포함하는 계층적 구조를 지닙니다.

 

4. asgi.py & wsgi.py

- python web application 과 web server 간 연동 규격, 맨 위 사진에 표시된 웹 어플리케이션 서버인 wsgi를 설정할수 있는 파일입니다. asgi는 해당 wsgi를 확장한 최신 규격을 의미합니다. 기호에 맞는 규격을 선택하여 사용하면 됩니다.

 

5. __init__.py

- python 파일이 또 다른 python 파일을 패키지로 인식하여 실행하기 위해서 추가되어야 하는 파일입니다. python 파일들을 패키지로 관리하는 계층적인 python 프로젝트 구조에 필수적입니다.

 

myapp1

- Django 프로젝트가 가지고 있는 어플리케이션입니다. 이를 통해 실제 원하는 Back-end 기능을 구현합니다. 기능을 확장하고 싶을 시, 새로운 어플리케이션을 만들어서 시스템 관점을 분리하여 개발할 수 있습니다.

 

1. models.py

- 사용할 DB Table을 클래스로 정의하는 python 파일입니다. Table에 포함되는 여러 기능들을 정할 수 있습니다. 여기에 클래스 형식으로 구현하면, 나중에 Django가 ORM을 통하여 실제 DB와 매핑하게 해줍니다.

 

2. views.py

- 비즈니스 로직에 맞게 알맞은 기능을 구현하는 Controller 부분의 python 파일입니다. 클래스 또는 함수형으로 로직을 구현할 수 있으며, 

 

3. ( Templates )

- 렌더링할 html을 담아놓는 Templates 디렉토리입니다. 필요한 html이 있을 경우, 해당 디렉토리를 생성하여 html을 생성하면 됩니다. 

 

4. tests.py

- TDD를 위한, 테스트 코드를 작성하는 python 파일입니다. 마찬가지로 manage.py를 사용하여 테스트를 할 수 있습니다.

 

5. admin.py

- Django가 제공해주는 Web 기반 DB 관리 시스템인 admin 사이트에 models.py가 만든 Table을 반영해주는 파일입니다. 추가적으로 해당 admin 사이트의 설정과 디자인을 반영합니다.

 

6. urls.py

- 마찬가지로, 렌더링할 url와, 거기에 맞는 views를 매핑하는 파일입니다. 기능은 위 설명과 같습니다.

 

7. apps.py

- 각 app마다 필요한 항목을 설정할 수 있는 파일입니다. app 이름에 대한 별칭, 시그널 수신자를 등록하는 등의 세부적인 설정을 가능케 합니다.

 

8. Migrations

- DB 변경 사항을 실제로 반영시켜주는 기능을 가진 디렉토리입니다. 

=> python manage.py makemigrations

=> python manage.py migrate

두 명령어를 통해 최종 DB 반영을 해줍니다.

 

※ 다음번엔 Django의 개발 Flow를 설명하겠습니다.