Django & DRF

[Django] Django의 패키지(Package) & 앱(App)

chillcoder 2023. 4. 28. 16:40

패키지, 앱, 모듈? 그게 뭔데?

 

패키지, 앱, 모듈은 모두 프로그래밍에서 코드를 구조화하는 방식이다.

 

  • 패키지(Package) : 여러 모듈을 모아 놓은 디렉토리. 관련된 모듈들을 그룹핑해서 보다 체계적으로 관리할 수 있으며, 패키지는 하위 패키지를 포함할 수도 있다.
  • 앱(Application) : 일반적으로 기능별로 분리되어 있는 작은 단위의 독립적인 모듈이다. 앱은 패키지와 유사한 구조를 가지고 있다.
  • 모듈(Module) : 코드가 들어 있는 파일. 모듈은 변수, 함수, 클래스 등을 정의할 수 있으며, 다른 모듈에서 import해서 사용할 수 있다.

 

패키지, 앱, 모듈로 코드를 구조화하면 관리와 유지보수가 편리하고 코드의 재사용성도 높아진다.

 

 

Django의 패키지(Package) & 앱(App)

 

  • 패키지(Package)
    • django
    • django.apps
    • django.conf
    • django.contrib
    • django.core
    • django.db
    • django.forms
    • django.http
    • django.shortcuts
    • django.template
    • django.utils

 

  • 각 패키지에 포함된 앱(App) / 모듈
    • django :
      • django-admin : Django 프로젝트를 관리하기 위한 커맨드라인 도구
      • django.conf : Django 설정을 담은 패키지
      • django.urls : URLconf를 작성하기 위한 모듈
    • django.apps :
      • django.apps.AppConfig : Django 어플리케이션의 구성을 포함하는 클래스
      • django.apps.registry : Django 어플리케이션 레지스트
    • django.contrib :
      • django.contrib.admin : Django 관리자 사이트
      • django.contrib.auth : 인증 및 권한 관리를 위한 앱
      • django.contrib.contenttypes : 데이터베이스에 저장된 모델의 타입을 추적하고 관리하기 위한 앱
      • django.contrib.sessions : 세션을 관리하기 위한 앱
      • django.contrib.messages : 사용자에게 메시지를 전달하기 위한 앱
      • django.contrib.staticfiles : 정적 파일 관리를 위한 앱
    • django.core:
      • django.core.exceptions : Django의 예외 처리 관련 모듈
      • django.core.files : 파일 처리 관련 모듈
      • django.core.mail : 이메일 발송을 위한 모듈
      • django.core.management : 프로젝트 관리 명령어 모음
      • django.core.cache : 캐시 프레임워크 관련 모듈
      • django.core.checks : Django 구성을 확인하고 수정하기 위한 모듈
      • django.core.serializers : 객체 직렬화 및 역직렬화 모듈
      • django.core.servers : 개발용 웹 서버 모듈
      • django.core.signals : Django에서 사용되는 신호 모듈
      • django.core.validators : 입력 값의 유효성 검사를 위한 모듈
    • django.db:
      • django.db.backends : 데이터베이스 백엔드 모듈
      • django.db.models : Django의 ORM을 사용하여 데이터 모델을 정의하기 위한 모듈
      • django.db.migrations : 데이터베이스 스키마 변경 사항을 관리하기 위한 앱
      • django.db.transaction : 데이터베이스 트랜잭션 관리를 위한 모듈
      • django.db.utils : 데이터베이스 유틸리티 모듈
    • django.forms:
      • django.forms.fields : 입력 양식 필드 모듈
      • django.forms.forms : 양식 생성 및 처리 모듈
      • django.forms.models : 모델 폼 관련 모듈
      • django.forms.widgets : 입력 양식 위젯 모듈
    • django.http:
      • django.http.request : HTTP 요청 관련 클래스 모듈
      • django.http.response : HTTP 응답 관련 클래스 모듈
      • django.http.multipartparser : 파일 업로드를 처리하기 위한 파서 모듈
      • django.http.cookie : 쿠키 처리 모듈
    • django.shortcuts:
      • django.shortcuts.render : 템플릿을 사용하여 HTTP 응답 생성을 간단히 처리하는 함수
      • django.shortcuts.get_object_or_404 : 객체가 존재하지 않을 경우 Http404 예외를 발생시키는 함수

 

 

그래서 그거 어떻게 쓰는건데

 

‘django-admin startproject’를 했을 때 생성되는 settings.py 파일을 살펴보면, 아래와 같이 contrib 패키지의 몇몇 앱들이 기본으로 제공된다. 따라서 contrib 패키지를 알고 있다면 대부분의 기본 앱들을 알고 있다고 할 수 있다.

 

 

‘INSTALLED_APPS’에 적혀있지 않은 장고 패키지/앱은 어떻게 저기에 추가로 일일이 따로 안적고 바로 import가 가능한거지?

 

이 외에도 다양한 패키지/앱들이 존재하지만, 이는 사용자가 필요에 따라 따로 설치하거나 개발해야 하는 경우가 많기 때문에 Django 공식 문서에서도 자세하게 다루지 않는다. 필요한 앱은 필요한 기능을 가진 서드파티 라이브러리를 설치하거나 직접 개발해야 한다.

 

 

Django 프레임워크의 소스 코드

 

Django 공식문서(https://docs.djangoproject.com/)에는 주요 패키지/앱의 사용법이나 동작 방식 위주로 나와있기 때문에 Django가 어떤 패키지, 앱들로 이뤄져 있는지와 같은 총체적인 정보를 얻기 힘들다. 

Django 공식 GitHub 레포지토리(https://github.com/django/django)에 들어가면 Django 프레임워크의 소스 코드를 확인할 수 있다. 해당 레포지토리에서 Django의 버전에 따라 브랜치를 선택하여 django 패키지를 비롯하여 다른 패키지/앱들의 소스 코드를 살펴볼 수 있다.