DJango 서버개발, 프로젝트와 앱의 개념 및 차이점

Django는 파이썬으로 작성된 강력한 웹 프레임워크로, 웹 개발의 복잡성을 줄이고 자신이 원하는 웹 애플리케이션을 빠르게 개발할 수 있도록 도와줍니다. Django를 활용한 서버 개발에 있어 가장 중요한 개념 중 하나는 ‘프로젝트’와 ‘앱’입니다. 이 글에서는 이러한 개념을 깊이 있게 살펴보고, 그 차이점을 명확하게 설명하겠습니다.

1. Django의 기본 아키텍처

Django는 MTV(Model-Template-View) 아키텍처를 기반으로 구축되어 있습니다. 이를 통해 웹 애플리케이션의 구조를 명확하게 유지할 수 있습니다. Django 프로젝트는 하나 이상의 앱으로 구성되며, 각각의 앱은 특정한 기능을 수행합니다.

1.1 모델(Model)

모델은 데이터베이스의 구조와 논리를 정의합니다. Django는 ORM(Object-Relational Mapping)을 사용하여 데이터베이스와 상호작용합니다.

1.2 템플릿(Template)

템플릿은 사용자에게 보여질 내용을 정의합니다. HTML 파일로 작성되며, 데이터와 함께 렌더링되어 최종 사용자에게 전달됩니다.

1.3 뷰(View)

뷰는 HTTP 요청을 처리하고, 적절한 응답을 반환하는 역할을 수행합니다. 요청을 처리하는 비즈니스 로직이 여기에 포함됩니다.

2. Django 프로젝트

Django 프로젝트는 Django 웹 애플리케이션의 최상위 컨테이너로, 여러 개의 앱을 포함할 수 있습니다. 프로젝트는 `manage.py` 파일과 `settings.py` 파일을 포함하며, 데이터베이스 설정, 앱 등록 및 기타 전역 설정을 관리합니다.

2.1 프로젝트 생성 및 구조

Django 프로젝트를 생성하기 위해서는 먼저 Django 패키지를 설치한 후 다음 명령어를 사용해야 합니다.

django-admin startproject myproject

위 명령어를 실행하면 `myproject`라는 디렉터리가 생성됩니다. 이 디렉터리 내에는 아래와 같은 기본 파일 구조가 생성됩니다.


myproject/
    manage.py
    myproject/
        __init__.py
        settings.py
        urls.py
        wsgi.py

manage.py: 프로젝트를 관리하는 데 사용하는 유틸리티 스크립트입니다. 다양한 커맨드를 실행할 수 있습니다.
settings.py: 프로젝트 설정을 정의하는 파일입니다. 데이터베이스 연결, 앱 등록, 미들웨어 설정 등이 포함되어 있습니다.
urls.py: 프로젝트의 URL 라우팅을 정의하는 파일입니다.
wsgi.py: 웹 서버 게이트웨이 인터페이스(WSGI)를 통해 애플리케이션을 실행할 수 있도록 설정하는 파일입니다.

2.2 프로젝트 설정

프로젝트의 settings.py 파일을 열어 다양한 설정을 적용할 수 있습니다. 예를 들어, 데이터베이스 설정, 인증 시스템, 스태틱 파일 처리 및 템플릿 설정이 있습니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / "db.sqlite3",
    }
}

위 예시는 SQLite 데이터베이스를 사용하는 설정입니다. 필요에 따라 PostgreSQL, MySQL, Oracle 등 다른 데이터베이스로 변경할 수 있습니다.

3. Django 앱

Django 앱은 특정 기능이나 서비스에 대한 독립적인 모듈입니다. 예를 들어, 블로그 앱, 사용자 인증 앱, 또는 쇼핑 카트 앱과 같이 구분할 수 있습니다. 각 앱은 다른 앱과 독립적으로 개발되고 재사용될 수 있습니다.

3.1 앱 생성 및 구조

Django 앱을 생성하기 위해서는 다음 명령어를 사용합니다.

python manage.py startapp myapp

위 명령어를 실행하면 `myapp`이라는 디렉터리가 생성되며, 기본 파일 구조는 다음과 같습니다.


myapp/
    migrations/
    __init__.py
    admin.py
    apps.py
    models.py
    tests.py
    views.py

migrations/: 데이터베이스 스키마 변경이 기록되는 파일입니다.
admin.py: Django 관리자 패널에서 사용할 모델 등록의 설정을 포함합니다.
apps.py: 앱의 메타데이터를 정의하는 클래스입니다.
models.py: 데이터베이스 모델을 정의하는 파일입니다.
tests.py: 앱의 테스트 코드를 작성하는 파일입니다.
views.py: 사용자의 요청을 처리하고 응답할 비즈니스 로직을 포함합니다.

3.2 앱의 역할

각 앱은 특정 비즈니스 기능을 하나의 단위로 묶어서 유지 관리할 수 있도록 도와줍니다. 한 프로젝트 내에서 여러 개의 앱을 생성하고 연결할 수 있으며, 이를 통해 프로젝트의 구조를 깔끔하게 유지하고 중복성을 줄일 수 있습니다. 예를 들어, 블로그 프로젝트 내에서 사용자 인증 앱, 포스트 관리 앱, 댓글 시스템 앱을 별개의 앱으로 생성할 수 있습니다.

4. 프로젝트와 앱의 비교

프로젝트와 앱은 Django 개발에서 중요한 개념이지만, 그 목적과 범위는 다릅니다. 다음 표를 통해 두 개념의 차이점을 정리할 수 있습니다.

구분 프로젝트
정의 Django 애플리케이션의 최상위 컨테이너 특정 기능이나 서비스를 구현하는 모듈
설정 파일 settings.py 파일에서 전역 설정을 관리 각 앱 내에서 개별적으로 설정, models.py, views.py로 구조화
재사용성 프로젝트 내에서 여러 앱을 포함 다른 프로젝트에서도 재사용 가능
생성 방법 django-admin startproject 명령어 사용 python manage.py startapp 명령어 사용

5. 실제 예제: Django 프로젝트와 앱 생성

이제 Django 프로젝트와 앱을 생성하고, 간단한 기능을 구현해보겠습니다.

5.1 프로젝트 생성

django-admin startproject myblog

위 명령어로 생성된 프로젝트 폴더에 들어가서 앱을 생성합니다.

5.2 앱 생성

cd myblog
python manage.py startapp blog

이제 blog라는 이름의 앱이 생성되었습니다. models.py 파일을 수정하여 블로그 포스트 모델을 추가해봅니다.


from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

5.3 데이터베이스 마이그레이션

모델을 생성한 후, 데이터베이스에 반영하기 위해 마이그레이션을 수행합니다.

python manage.py makemigrations
python manage.py migrate

5.4 관리자 페이지 설정

생성한 모델을 관리자 페이지에서 관리할 수 있도록 등록합니다. admin.py를 수정합니다.


from django.contrib import admin
from .models import Post

admin.site.register(Post)

Django 관리자 패널에 로그인하여 블로그 포스트를 추가하고 관리할 수 있게 됩니다.

5.5 뷰와 URL 설정

이제 블로그 포스트를 보여주는 뷰를 정의해볼게요. views.py를 수정합니다.


from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts})

URL 설정을 위해 urls.py 파일을 다음과 같이 수정합니다.


from django.urls import path
from .views import post_list

urlpatterns = [
    path('', post_list, name='post_list'),
]

6. 결론

Django의 프로젝트와 앱의 개념은 개발에 있어 중요한 기본 요소입니다. 프로젝트는 전체 애플리케이션의 구조를 정의하고, 앱은 특정 기능을 수행하는 단위로서 독립적으로 개발 및 관리될 수 있습니다. 이러한 구조를 통해 Django 개발자들은 복잡한 웹 애플리케이션을 보다 수월하게 만들 수 있습니다.

앞서 설명한 개념을 바탕으로 더욱 복잡한 애플리케이션을 개발해 나가실 수 있습니다. Django는 사용자 친화적인 문서와 커뮤니티 지원을 제공하므로, 많은 자료를 활용하여 학습하고 실습하시길 권장합니다.