3.1. 장고의 특징
1. MVC 패턴 기반 MVT
장고는 MVC(Model-View-Controller) 패턴을 기반으로 한 프레임워크이다.
하지만 장고에서는 View를 Template, Controllere를 View라고 부른다.
그래서 장고를 MVT 프레임워크라고 부르며, 용어만 다를 뿐 그 개념은 MVC 패턴과 동일하다.
- Model : 데이터베이스에 엑세스하는 컴포넌트
- View : 데이터를 가져오고 변형하는 컴포넌트
- Template : 데이터를 사용자에게 보여주는 컴포넌트
2. 객체관계 매핑(ORM : Object-Relational Mapping)
장고의 객체 관계 매핑은 데이터베이스 시스템과 파이썬 클래스(모델)를 연결한다.
ORM 기능을 통해 다양한 데이터베이스 시스템을 지원하며, SQL문장을 사용하지 않고도 테이블 조작이 가능하다.
* ORM : 객체와 관계형 데이터베이스를 연결하는 역할.
객체를 대상으로 필요한 작업을 실행하면 ORM이 자동으로 SQL 구문이나 데이터베이스 API를 호출하여 처리한다.
3. 자동으로 구성되는 관리자 화면
장고는 웹 서버의 콘텐츠, 즉 데이터베이스 관리 기능을 위한 관리자 화면을 제공한다.
관리자 화면을 통해 애플리케이션에서 사용하는 테이블과 데이터를 생성하거나 변경할 수 있다.
4. 우아한 URL 설계
장고는 URL을 직관적이고 쉽게 표현할 수 있는 URL 설계 기능을 제공한다.
5. 자체 템플릿 시스템
장고는 내부적으로 확장이 가능하고 디자인 하기 쉬운 템플릿 시스템을 가지고 있다. (화면 디자인과 로직에 대한 코딩을 분리하여 프로그래밍 가능)
6. 캐시시스템
장고의 캐시시스템은 캐시용 페이지를 메모리, 데이터베이스 내부, 파일 시스템 중 아무곳에나 저장할 수 있다.
캐시 단위를 페이지에서부터 사이트 전체, 특정 뷰의 결과, 템플릿 일부 영역만을 지정하여 저장할 수도 있다.
7. 다국어 지원
장고는 텍스트 번역, 날짜/시간/숫자포맷, 타임존 지정 등 다국어 환경을 제공한다.
8. 풍부한 개발환경
장고는 테스트용 웹 서버를 포함하고 있어 개발과정에서 아파치 등의 웹 서버가 없어도 테스트 진행이 가능하다.
9. 소스 변경 사항 자동 반영
장고는 개발과정에서 .py 파일이 변경되면 실행파일에 변경 내역을 바로 반영하므로, 테스트용 웹서버를 실행중인 상태에서 소스파일을 수정하더라도 웹 서버를 다시 시작할 필요 없이 자동으로 수정된 파일이 반영된다.
3.2 장고프로그램 설치
관련 명령어
python -V : 파이썬 설치 여부 및 버전 확인
python -m django --version : 장고 설치 여부 및 버전 확인
pip install Django : 장고 설치
pip install pip setuptools wheel --upgrade : pip, setuptools, wheel 등의 프로그램을 업그레이드
3.3 장고에서의 애플리케이션 프로그래밍 방식
3.3.1 MVT 패턴
장고에서는 View를 Template, Controller는 View 라고 표현하며, MVC를 MVT 패턴이라고 한다.
모델은 데이터베이스에 저장되는 데이터를 의미하고, 템플릿은 사용자에게 보여지는 UI 부분을, 뷰는 실질적으로 프로그램 로직이 동작하여 데이터를 가져오고 처리한 결과를 템플릿에 전달하는 역할을 수행한다.
웹 클라이언트의 요청을 받고, 장고에서 MVT 패턴에 따라 처리하는 과정은 아래와 같다.
- 클라이언트로부터 요청을 받으면 URLconf를 이용하여 URL을 분석한다.
- URL 분석 결과를 통해 해당 URL에 대한 처리를 담당할 뷰를 결정한다.
- 뷰는 자신의 로직을 실행하면서 만일 데이터 베이스 처리가 필요하면 모델을 통해 처리하고 그 결과를 반환받는다.
- 뷰는 자신의 로직 처리가 끝나면 템플릿을 사용하여 클라이언트에 전송할 HTML 파일을 생성한다.
- 뷰는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답한다.
3.3.2 Model -데이터베이스 정의
모델은 사용될 데이터에 대한 정의를 담고 있는 장고의 클래스이다.
장고에서는 ORM 기법으로 애플리케이션에서 사용할 데이터베이스를 클래스로 매핑하여 코딩할 수 있다.(하나의 모델클래스 : 하나의 테이블, 모델 클래스의 속성 : 테이블의 컬럼에 매핑된다.)
장고에서 테이블, 컬럼 생성 시 주의사항
- 테이블명은 애플리케이션명과 모델 클래스명을 밑줄(_)로 연결한 문자열로 정하고 모두 소문자로 표시한다. 원한다면 다른 이름으로 직접 지정할 수 있다.
- Primary Key는 클래스에서 정의하지 않아도 자동으로 부여하며 개발자가 직접 지정할 수도 있다.
3.3.3 URLconf - URL 정의
장고는 클라이언트의 요청을 받으면, 요청에 들어있는 URL이 urls.py 파일에 정의된 URL 패턴과 매칭되는지 분석한다.
URL을 정의하기 위해서는 urls.py 파일에 URL과 처리함수(View)를 매핑하는 파이썬 코드를 작성하며 이러한 URL/뷰 매핑을 URLconf 라고 부른다.
웹클라이언트가 서버에 페이지를 요청할때 장고에서 URL을 분석하는 순서는 아래와 같다.
- settings.py 파일의 ROOT_URLCONF 항목을 읽어 최상위 URLconf(urls.py)의 위치를 알아낸다.
- URLconf를 로딩하여 urlpatterns 변수에 지정되어있는 URL 리스트를 검사한다.
- 위에서부터 URL 리스트의 내용을 검사하다가 URL 패턴이 매치되면 검사를 종료한다.
- 매치된 URL의 뷰를 호출한다. 여기서 뷰는 함수 또는 클래스의 메소드이며, 호출 시 HttpRequest 객체와 매칭할 때 추출된 단어들을 뷰에 인자로 넘겨준다.
- URL 리스트를 끝까지 검사하였는데도 매칭에 실패하면 에러처리 뷰를 호출한다.
URL 패턴을 정의할때 패턴의 일부 문자열을 추출하기 위해 <type:name> 형식으로 사용한다.
꺽쇠 부분<>을 장고에서는 Path Converter 라고 부르는데 사용되는 타입은 아래와 같으며 개발자가 타입을 추가할 수도 있다.
- str : 슬래시 ( / )를 제외한 모든 문자열과 매치된다. 타입이 지정되지 않았다면 디폴트로 str 타입을 사용한다.
- int : 0 또는 양의 정수와 매치된다. 매치된 정수는 파이썬의 int 타입으로 변환된다.
- slug : slug 형식의 문자열(ASCII, 숫자, 하이픈, 밑줄로만 구성됨)과 매치된다.
- uuid : UUID 형식의 문자열과 매치된다. 매치된 문자열은 파이썬의 UUID 타입으로 변환된다.
- path : 슬래시 ( / )를 포함한 모든 문자열과 매치된다. 이는 URL 패턴의 일부가 아닌 전체를 추출할때 주로 사용한다.
3.3.4 View - 로직 정의
장고는 웹 요청에 있는 URL을 분석하고 그 결과로 해당 URL에 매핑된 뷰를 호출한다.
일반적으로 뷰는 웹 요청을 받아 해당 애플리케이션 로직에 맞는 처리를 하고, 그 결과를 HTML로 변환하기 위해 템플릿 처리를 한 후 최종 HTML로 된 응답 데이터를 클라이언트로 반환한다.
장고에서 뷰는 함수 또는 클래스의 메소드로 작성되며 웹 요청을 받고 응답을 반환한다.
일반적으로 views.py 파일에 작성하며, 원한다면 다른 파일에 작성해도 되지만 파이썬 경로 내 있는 파일이어야 장고가 찾을 수 있다.
3.3.5 Template - 화면 UI 정의
개발자가 응답에 사용할 *.html 파일을 작성하면, 이를 해석해 최종 HTML 텍스트 응답을 생성하고 이를 클라이언트에게 보낸다.
이 과정에서 개발자가 작성하는 *.html 파일을 템플릿이라고 부르며, 클라이언트는 응답받은 HTML 텍스트를 해석해 우리가 보는 웹 브라우저 화면에 UI를 표시한다.
템플릿 파일은 *.html 확장자를 가지며, 화면에 표시될 UI를 템플릿 문법에 맞게 작성해야한다.
장고는 settings.py 파일에 정의된 TEMPLATES, INSTALLED_APPS에 지정된 애플리케이션의 디렉터리를 검색해 템플릿 파일을 찾는다.
'Spec UP - Backend > Django로 배우는 쉽고 빠른 웹개발 파이썬 프로그래밍' 카테고리의 다른 글
chap 4. Django의 핵심 기능 (0) | 2024.03.18 |
---|---|
CGI / WSGI / ASGI (0) | 2024.02.21 |
chap 02. CGI/WSGI 라이브러리 (0) | 2024.02.20 |
chap 02. 웹 서버 라이브러리 (0) | 2024.02.20 |
chap 02. 파이썬 웹 표준 라이브러리 (1) | 2024.02.07 |
댓글