일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- IAC
- intervals
- POD
- EC2
- Deployment
- ansible
- leetcode
- FastAPI
- EKS
- Kubernetes
- 자바스크립트
- Django
- event loop
- K8S
- Service
- docker
- AWS
- asgi
- 쿠버네티스
- YAML
- Python
- terraform
- asyncio
- github
- dockerfile
- WSGI
- IAM
- elasticsearch
- kernel
- ebs
- Today
- Total
궁금한게 많은 개발자 노트
django 개발의 기본 사항 본문
장고의 MTV방식은 자바 웹 프로그맹의 MVC 방식과 거의 동일한 개념
웹 프로그래밍 영역을 3가지 개념으로 나눠서 개발하는 방식으로 테이블을 정의하는 Model, 사용자가 보게 될 화면의 모습을 정의하는 Template, 애플리케이션의 제어 흐름 및 처리 로직을 정의하는 View로 구분하여 개발 진행
이렇게 3가지로 나눠서 개발 진행 시 모델, 템플릿, 뷰 모듈간에 독립성을 유지하고, loose cooupling설계에도 부합
모델은 model.py에 템플릿은 template디렉토리 하위의 *.html파일로, 뷰는 view.py에 작성하도록 django에서 지원
화면 설계는 뷰와 템플릿 코딩으로 연결되고, 테이블 설계는 모델 코딩에 반영되므로 독립적으로 개발할 수 있는 모델을 먼저 작성하고, 뷰와 템플릿은 서로 영향을 미치므로 모델 이후에 같이 코딩하는 것이 일반적
간단한 경우 다음과 같은 순서로 개발 : 프로젝트 뼈대 만들기 -> 모델 코딩 -> URLconf작성 -> 뷰 코딩 -> 템플릿 코딩
[ setting.py 주요 사항 ]
프로젝트 설정 파일로 개발자가 원하는 내용 등록 및 django에서 기본사항들은 자동 등록
데이터베이스, 템플릿 항목, 정적 파일 항목, 애플리케이션 등록, 타임존 지정 등의 설정이 포함
[ model.py 주요 사항 ]
테이블을 정의하는 파일. django의 특징 중 하나로 ORM(object relation mapping)기법을 사용
즉, 테이블을 클래스로 mapping해서 테이블에 대한 CRUD기능을 클래스 객체에 수행하면, django가 내부적으로 DB에 반영해주는 방식입니다. 테이블을 하나의 클래스로 정의하고, column은 클래스의 변수로 매핑합니다.
테이블 클래스는 django.db.models.Model 클래스를 상속받아 정의하고, 각 클래스 변수의 타입도 장고에서 미리 정의해 놓은 필드 클래스를 사용
테이블의 신규 생성, 테이블의 정의 변경 등 model.py파일에서 데이터베이스 변경 사항이 발생하면 이를 데이터베이스에 실제로 반영해주는 작업 필요 -> makemigrations -> migrate
[ URLconf 주요 사항 ]
URL과 뷰를 매핑해주는 urls.py파일 : 하나의 파일에 정의하는 것도 가능하고 두개 이상의 파일에 정의하는 것도 가능
통상적으로 프로젝트 전체의 url과 각 앱url 두 계층으로 관리 : 변경도 쉽고 확장에 용이 및 수정이 적을 수 있음
URL패턴 별로 이름을 지정할 수 있고, 패턴 그룹에 대한 namespace도 지정이 가능
reverse()함수나 {%url %} template tag를 사용하여 소스에 URL을 하드 코딩하지 않아도 필요한 URL을 추출 가능
reverse : urls.py 에 선언해둔 name에 따라 URL을 받아와서 사용할 수 있게 해주는 기능
class-level 속성을 가지는 객체들은 import될 때 배치되는데, url solving규칙은 import될 때 셋팅되지 X
그러므로 reverse_lazy를 사용하여 import후에 진행해야 함
그러나 def 속성 객체는 import 이후에 배치되므로 URLconf의 규칙을 적용할 수 있다.
그러므로 class 형 뷰를 사용할때는 from django.urls import reverse_lazy 로 reverse_lazy() 함수를 import 해서 사용
참고 : https://chagokx2.tistory.com/50
[ views.py 주요 사항 ]
뷰 로직을 코딩하는 가장 중요한 파일 : 가독성과 유지보수 편리, 재활동 등을 고려
함수형 뷰와 클래스형 뷰로 구분, 클래스형 뷰를 사용할 경우 장고가 제공하는 generic view를 사용할 수 있고 재활용 및 확장성 측면에서 유리하다고 판단 됨 : 쉽고 빠르게 웹 프로그래밍을 할 수 있도록 도와줌
[ template 주요 사항 ]
웹 화면 별로 템플릿 파일(*.html)이 하나씩 필요하므로, 웹 프로그램 개발 시 여러개의 템플릿 파일 작성, 이런 템플리 파일들을 한곳에 모아두기 위한 템플릿 디렉토리
프로젝트 템플릿 디렉토리와 앱 템플릿 디렉토리로 구분해서 사용
프로젝트 템플릿 디렉토리 : settings.py에 TEMPLATES -> DIRS에 지정된 디렉토리로 base.html등 전체 프로젝트의 look and feel에 관련된 파일들을 모아둠
앱 디렉토리는 각 애플리케이션 디렉토리마다 존재하는 templates 디렉토리로 각 앱에서 사용하는 템플릿 파일 존재
django에서 템플릿 파일 찾는 순서는 별도로 변경하지 않는다면 프로젝트 템플릿 디렉토리 -> 앱 템플릿 디렉토리
앱 템플릿 디렉토리는 INSTALLED_APPS 설정 항목에 등록된 순서대로 검색
[ admin 사이트 ]
테이블의 내용을 열람하고 수정하는 기능을 제공. 테이블의 들어있는 contents를 편집할 수 있는 사이트이다.
앞으로 우리가 만드는 테이블에 대한 데이터의 입력, 수정, 삭제 등의 작업이 가능함
admin화면에서 기본적으로 user와 group이 보이는 것은 이미 setting.py에서 django.contrib.auth 앱이 등록되었기 때문
sql없이도 테이블의 모습 및 내용을 확인하고 수정 가능. admin사이트에 테이블 등록을 위해서는 admin.py수정
[ runserver ]
개발 과정에서 작성된 코드를 실행하고 테스트하는 과정에서 현재의 웹 프로그램을 실행해볼 수 있는 테스트용 웹 서버
실제 고객에게 오픈하는 상용화를 고려한다면 nginx또는 apache 상용 웹 서버 사용
'Back End' 카테고리의 다른 글
django model 간 관계 (0) | 2022.05.19 |
---|---|
django 핵심 기능 - Model (0) | 2022.05.19 |
토큰 기반 인증 시스템과 JWT (0) | 2022.04.19 |
인증, 인가와 OAuth란 (0) | 2022.04.18 |
AWS의 ALB, NLB (0) | 2022.04.12 |