TIL_20230310_Django 프레임워크 보강 04

창고·2023년 3월 10일
0

4. 장고 개발의 기본 사항 및 가상 환경 사용

(1) MVT 개발 방식

  • 자바 웹 프로그래밍의 MVC 방식과 거의 동일한 개념
  • Model : 테이블을 정의하는 모델
  • View : 어플리케이션의 제어 흐름 및 처리 로직을 정의
  • Template : 사용자가 보게 될 화면의 모습을 정의
  • 모델은 models.py에, 뷰는 views.py에, 템플릿은 templates 디렉터리 하위에 작성됨

(2) MVT 코딩 순서

  • 독립적으로 개발할 수 있는 모델을 먼저 코딩하고 뷰와 템플릿은 서로 영향을 미치므로 모델 이후에 같이 코딩하는 것이 일반적
  • 뷰와 템플릿의 코딩 순서도 굳이 정할 필요는 없음
    • 그러나 보통 UI 화면을 생각하며 로직을 풀어나가는 것이 쉽다면 템플릿을 먼저 코딩함
    • 클래스형 뷰 처럼 뷰의 코딩이 매우 간단한 경우에는 뷰를 먼저 코딩하고 템플릿을 코딩
  • 참고하고 있는 서적의 흐름은 다음과 같음
    • 모델 코딩 : 테이블 관련 사항을 개발 (models.py, admin.py)
    • URLconf 코딩 : URL 및 뷰 매핑 관계를 정의(urls.py)
    • 뷰 코딩하기 : 어플리케이션 로직 개발(views.py)
    • 템플릿 코딩하기 : 화면 UI 개발

(3) settings.py 주요 사항

  • 프로젝트 설정 파일 (build.gradle + application.yml 느낌)
  • 프로젝트 생성 시 자동으로 등록되며 추가 설정은 직접 진행
  • 프로젝트 개발 시 필수 사항
    • 데이터베이스 설정 : 디폴트는 SQLite3
    • 어플리케이션 등록 : 프로젝트에 포함되는 어플리케이션은 전부 등록해야 함
    • 템플릿 항목 설정 : TEMPLATES 항목으로 지정
    • 정적 파일 항목 설정 : STATIC_URL 등 관련 항목 지정
    • 타임존 지정 : 최초에는 UTC 기준이지만 한국 시간으로 변경 필요
  • 상기 항목 외에 각종 디렉터리의 위치, 로그 형식, 디버그 모드, 보안 관련 사항 등의 전반적인 사항들을 설정할 수 있음

(4) models.py 주요 사항

  • 테이블을 정의하는 파일 (@Entity 클래스들을 모아둔 느낌)
  • ORM 형식으로 테이블을 하나의 클래스로 정의, 테이블의 컬럼은 클래스의 변수로 매핑
  • 테이블 클래스는 django.db.models.Model 클래스를 상속받아 정의
  • 테이블의 신규 생성, 테이블의 정의 변경 등 models.py에서의 변경 사항이 발생하면 DB에 실제 반영해주는 작업이 필요 -> 마이그레이션(migration)
  • migration : 테이블 및 필드의 생성, 삭제, 변경 등과 같이 데이터베이스에 대한 변경 사항을 알려줌

(5) URLconf 주요 사항

  • URL과 뷰(함수 또는 클래스의 메서드)를 매핑해주는 urls.py 파일
  • 하나의 파일에 정의하거나 2개의 파일에 정의할 수 있음
  • 프로젝트 전체 URL을 정의하는 프로젝트 URL과, 앱마다 정의하는 앱 URL 2계층으로 나눠서 코딩하는 것이 효율적
  • URL 패턴별로 이름을 지정할 수 있고, 패턴 그룹에 대해 이름공간을 지정할 수도 있음
    • reverse() 함수나 {% url %} 템플릿 태그를 활용해 소스에 URL을 하드코딩 하지 않아도 됨

(6) views.py 주요 사항

  • 뷰 로직을 코딩하는 중요한 파일
  • 프로젝트 개발 범위가 커짐에 따라 로직도 점점 복잡해지고 파일의 코딩량이 많아지므로 가독성 및 유지보수 편리성, 재활용 등을 고려해야 함
  • 함수형 뷰와 클래스형 뷰로 구분됨

(7) templates 주요 사항

  • 프로젝트 템플릿 디렉터리와 앱 템플릿 디렉터리로 구분해서 사용
    • 프로젝트 템플릿 디렉터리 : TEMPLATES 설정의 DIRS 항목에 지정된 디렉터리
    • 앱 템플릿 디렉터리 : 앱 디렉터리마다 존재하는 templates/ 디렉터리
  • 프로젝트 템플릿에는 전체 프로젝트에 활용할 템플릿을 모아두는 것이 편리

(8) Admin 사이트

  • 사이트의 테이블의 내용을 열람하고 수정하는 기능을 제공
  • 기본적으로 유저와 그룹 테이블을 제공하고 있으며 settings.py에 django.contrib.auth 어플리케이션이 등록되어 있기 때문

(9) 개발용 웹 서버 - runserver

  • runserver가 기동된 상태에서 소스 수정 시 자동으로 반영되어 재기동됨
  • 상용화를 고려한다면 Apache 또는 Nginx 등의 상용 웹 서버를 사용해야 함

(10) 가상 환경 사용하기

  • pytz : 타임존을 관리하는 패키지
profile
공부했던 내용들을 모아둔 창고입니다.

0개의 댓글