지난 시간에는 Django를 설치하고 프로젝트 생성하는 시간을 가져보았다. 오늘은 Django 프로젝트에서 app을 생성하는 방법에 대해 알아보는 시간을 가져보자.
장고 app 생성
Django에서 app은 애플리케이션의 모듈화 된 구성 요소로, 특정한 기능 또는 역할을 수행하는 독립된 코드와 리소스의 모음을 나타낸다. Django의 app 시스템은 Django 프로젝트를 작은, 재사용 가능한 구성 요소로 나누는 데 사용된다. 각 app은 프로젝트 내에서 독립적으로 작동하며 다른 app과 상호작용할 수 있다.
Django의 app은 다음과 같은 특징을 가진다.
특징
내용
모듈화
app은 코드와 템플릿, 모델, 뷰, URL 패턴 및 정적 파일을 하나의 디렉토리 구조로 모듈화한다. 이로써 각 앱은 특정한 기능을 담당하며 프로젝트 전체에서 재사용할 수 있다.
독립성
각 app은 독립적으로 개발, 테스트 및 유지보수된다. app은 다른 app에 영향을 주지 않고 개발될 수 있으며, app을 다른 프로젝트로 쉽게 이식할 수 있다.
재사용 가능성
app은 Django 프로젝트 간에 재사용할 수 있다. Django 커뮤니티 및 제 3자 개발자가 공개적으로 사용 가능한 다양한 Django 앱을 공유하고 있으며, 이러한 app을 사용하여 기능을 빠르게 추가할 수 있다.
Django 생태계
Django의 app 시스템은 Django의 핵심 아키텍처이다. Django는 자체적으로 다양한 내장 app을 제공하며, 사용자 정의 app을 통해 Django 애플리케이션을 확장할 수 있다.
app을 만들면 Django 프로젝트를 더 구조화되고 모듈화 되게 만들 수 있다. 각 app은 특정한 관심 영역을 다루며, 큰 프로젝트를 작은, 관리 가능한 부분으로 분해한다. 이로써 코드의 재사용성을 높이고 유지보수를 간소화할 수 있다. 또한, Django는 app 간의 연결을 관리하고, 프로젝트 내에서 라우팅 및 통합을 지원하여 app을 하나의 완전한 웹 애플리케이션으로 결합한다.
Django 프로젝트에서 app을 생성하기 전, 저번시간에 만들었던 가상환경으로 들어가야 한다. 이는 지난 시간에 만들었던 프로젝트를 가상환경에서 만들었기 때문이다.
먼저 다음과 같이 프로젝트가 있는 폴더로 이동하여 가상환경을 실행하자.
.\venv\Scripts\activate
가상환경을 실행하고 나면 위와 같이 (venv)가 출력되면 정상적으로 가상환경에 진입했다는 걸 확인할 수 있다.
다음으로, 아래 명령을 사용하여 장고 app을 생성한다. "post"는 새로 만들 app의 이름이며, 꼭 필자와 같이 app 이름을 "post"로 할 필요는 없으며 본인이 원하는 이름으로 하면 된다.
python manage.py startapp post
post app 생성 전 디렉토리 구조
post app 생성 후 디렉토리 구조
post app을 생성하고 나면 위에서 확인할 수 있듯이 장고 프로젝트 안에 post app이 생성된 것을 확인할 수 있다.
app을 생성하고 나면 다음과 같은 파일들을 확인할 수 있는데 각 파일들에 대한 설명은 아래와 같다.
파일이름
역할
__init__.py
파이썬에서 해당 디렉토리를 패키지로 인식하도록 알려주는 파일
admin.py
Django의 관리자 페이지를 설정하고 관리하는 데 사용된다. 모델을 관리자 페이지에 등록하고 사용자 정의 관리자 클래스를 만들 수 있다.
apps.py
앱의 설정을 정의하는 데 사용된다. 앱의 이름, 레이블 및 다른 설정을 포함할 수 있다.
models.py
데이터 모델을 정의하는 데 사용된다. Django ORM을 사용하여 데이터베이스 테이블 및 필드를 정의하고 데이터 모델을 관리한다.
test.py
테스트 케이스를 작성하는 데 사용된다. Django의 테스트 프레임워크를 사용하여 app의 기능을 테스트하는 코드를 작성할 수 있다.
views.py
웹 페이지의 뷰 함수를 정의하는 데 사용된다. 클라이언트 요청에 대한 응답을 생성하고 반환하는 코드를 작성한다.
migrations/
데이터베이스 스키마 변경에 관련된 파일을 저장한다. Django의 데이터베이스 마이그레이션 시스템은 이 디렉토리에 마이그레이션 파일을 생성한다.
app을 생성했다면 Django 프로젝트의 settings.py 파일을 열어, INSTALLED_APPS 리스트에 app 이름을 추가해야 한다.
INSTALLED_APPS에 생성한 app을 등록하는 이유는 다음과 같다.
이유
내용
모듈화와 기능 분리
Django app은 웹 애플리케이션을 모듈화하고 기능을 분리하는 좋은 방법이다. 각 app은 특정 기능 또는 관련된 작업을 수행하는 논리적인 컴포넌트로 볼 수 있으며, 이러한 모듈화는 app 간의 협엽 및 유지 보수를 용이하게 한다.
가독성 및 유지 관리성
INSTALLED_APPS를 사용하여 Django 프로젝트에서 사용하는 모든 app을 목록화하면 프로젝트의 구조가 더 명확해지며, 어떤 app이 어떤 기능을 담당하는지 이해하기 쉬워진다. 이는 코드의 가독성을 향상시키고 유지 관리성을 높인다.
장고의 기능 확장
INSTALLED_APPS에 등록된 app은 Django 프레임워크의 핵심 부분으로 간주된다. 이러한 app을 사용하면 Django의 다양한 기능을 확장하고 커스터마이징할 수 있다. 예를 들어, 'django.contrib.admin' app을 INSTALLED_APPS에 추가하면 관리자 패널을 사용할 수 있다.
기본 설정 및 미들웨어 활성화
Django는 INSTALLED_APPS를 사용하여 각 APP에 대한 기본 설정 및 미들웨어를 활성화한다. app을 INSTALLED_APPS에 등록하면 해당 app의 설정과 미들웨어가 자동으로 적용된다. 이를 통해 Django는 app에 필요한 환경을 설정하고 관련 기능을 활성화한다.
app 간 상호 작용
Django app은 다른 app과 상호 작용할 수 있다. 예를 들어, 다른 app에서 정의된 모델을 사용하거나 다른 app의 URL을 포함할 수 있다. INSTALLED_APPS에 등록된 app은 프로젝트 내에서 참조 가능하고 상호 작용할 수 있다.
만약 app을 INSTALLED_APPS에 등록하지 않는다면 해당 app은 Django 프로젝트에서 인식되지 않고 사용할 수 없다. 이로 인해 app이 프로젝트에서 사용되지 않으며, 해당 app의 모든 기능이 비활성화된다.
마지막으로 app 내에서 모델을 정의하고 변경할 때, makemigrations와 migrate 명령을 사용하여 데이터베이스 스키마를 관리 및 업데이트한다. 마이그레이션은 데이터베이스에 모델의 변경 사항을 적용하는 데 사용된다.
makemigrations로 마이그레이션 파일 생성
python manage.py makemigrations
migrate로 데이터베이스 스키마 업데이트
python manage.py migrate
app을 생성하면 Django 프로젝트의 기능을 모듈화 하고, 각 기능을 개별적으로 관리하고 유지보수할 수 있다. 이렇게 함으로써 Django 애플리케이션을 보다 구조화되고 확장 가능하게 만들 수 있다.