헷갈릴 수 있어요! Django는 Python 프레임워크이므로, Django 코드와 일반 Python 코드가 함께 사용되는 경우가 많아요. 하지만 각각의 역할을 이해하면 쉽게 구분할 수 있어요.


1. Python 코드 vs Django 코드 차이 이해하기

구분 역할 예제

Python 코드 데이터를 처리, 로직 작성, 기본 기능 제공 print(), for, def
Django 코드 웹 애플리케이션을 만들기 위한 기능 제공 models.Model, views.View, urls

📌 이렇게 이해하면 쉬워요!

  • "기본적인 로직을 처리할 때"Python 코드 사용
    • 예: 리스트 다루기, 반복문, 문자열 처리, 파일 읽기 등.
    • for 문, if 문, def 함수, open() 등
  • "웹 관련 기능을 구현할 때"Django 코드 사용
    • 예: 모델(DB), 뷰(로직 처리), URL 라우팅 등.
    • models.Model, render(), request.GET

2. 언제 Python을 쓰고, 언제 Django를 쓰나요?

예제 1: 게시글 저장 기능 (Python vs Django 비교)

① Python 코드 (일반적인 로직)

title = "Django 공부"
content = "Django ORM을 배우는 중이에요!"

# 리스트를 사용하여 간단한 데이터 저장
posts = []
posts.append({'title': title, 'content': content})

print(posts)  # [{'title': 'Django 공부', 'content': 'Django ORM을 배우는 중이에요!'}]
  • 여기서는 Django를 사용하지 않고 Python의 리스트와 딕셔너리를 활용해 데이터를 관리함.
  • 간단한 로직이나 테스트용으로 사용.

② Django 코드 (실제 웹 애플리케이션)

from myapp.models import BlogPost

# Django ORM을 사용하여 데이터베이스에 저장
post = BlogPost(title="Django 공부", content="Django ORM을 배우는 중이에요!")
post.save()  # DB에 저장됨

# 저장된 데이터 출력
print(BlogPost.objects.all())  # <QuerySet [<BlogPost: Django 공부>]>
  • Django의 models.Model을 사용해 실제 데이터베이스에 저장.
  • 이 방법은 웹 애플리케이션에서 사용해야 함.

예제 2: 사용자 입력 처리 (Python vs Django 비교)

① Python 코드 (콘솔에서 입력받기)

name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")
  • Python의 input()을 사용하여 터미널에서 입력받고 출력.

② Django 코드 (웹 요청 처리)

from django.shortcuts import render

def greet_user(request):
    name = request.GET.get('name', 'Guest')
    return render(request, 'greet.html', {'name': name})
  • Django에서는 request.GET을 사용해 웹 페이지에서 입력을 받고 응답.

3. Django에서 Python을 활용하는 경우

Django를 사용할 때도 Python 코드가 많이 필요합니다. 예를 들어:

  1. 모델(데이터 저장)에서 Python 코드 사용

Django의 모델을 정의할 때, def를 이용한 Python 메서드를 추가하여 로직을 구현

from django.db import models

class BlogPost(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()

    def summary(self):  # Python의 메서드 작성
        return self.content[:100]  # 첫 100자만 반환

   2.뷰(로직 처리)에서 Python 코드 사용

 

Django의 뷰 함수 안에서 Python을 사용하여 데이터 처리.

def calculate_numbers(request):
    num1 = int(request.GET.get('num1', 0))
    num2 = int(request.GET.get('num2', 0))
    result = num1 + num2  # 여기서 Python 연산 활용
    return render(request, 'result.html', {'result': result})

 

3.템플릿(HTML 페이지)에서 Python 로직 활용

Django 템플릿에서도 반복문, 조건문을 사용해 Python의 일부 기능을 적용 가능.

<h1>게시글 목록</h1>
{% for post in posts %}
    <p>{{ post.title }}</p>  <!-- Django 템플릿 코드 (Python 활용) -->
{% endfor %}

4. 정리 (헷갈리지 않게 이해하는 방법)

상황 어떤 코드 사용? 예제

웹이 아닌 일반 작업(계산, 파일 처리) Python 코드 사용 open(), for, print()
데이터베이스 연동 Django 모델 코드 사용 models.Model
웹 페이지에서 데이터 가져오기 Django 뷰 코드 사용 request.GET, render()
웹에서 폼 입력 받기 Django 폼 코드 사용 forms.Form
API 개발 Django REST 프레임워크 사용 serializers.ModelSerializer

 


5.결론: Python과 Django의 차이를 쉽게 기억하기

  • Django는 Python의 웹 프레임워크 → 웹 기능을 담당.
  • Python은 기본적인 로직 처리 → 데이터 연산, 반복문, 조건문 등.
  • Django를 사용하지만, 결국 코어는 Python이므로 Python을 잘 이해하는 것이 중요.

결국, 어떤 로직을 처리하느냐에 따라 사용할 코드(파이썬 또는 장고)가 달라지므로, 먼저 무엇을 위해 어떤 것을 작성할 것인지를 고민하는 것이 중요하다는 것을 깨달았습니다.


Django에서 urls.py는 프로젝트 수준앱 수준에 존재할 수 있으며, 이들은 서로 다른 목적과 역할을 수행합니다. 어떤 작업을 하고 있는지(흐름에 따라) 적절한 위치의 urls.py를 사용하게 됩니다.


1. 프로젝트 수준의 urls.py vs 앱 수준의 urls.py

(1) 프로젝트 수준의 urls.py

1) 역할 및 목적

  • 웹 애플리케이션 전체의 URL 라우팅을 총괄하는 역할.
  • 개별 앱들의 urls.py를 포함하여 중앙에서 앱 단위로 URL을 관리.
  • 서버에 요청이 들어오면 가장 먼저 확인하는 URL 매핑 파일.

2) 위치 및 파일 구조

보통 프로젝트 폴더 안의 urls.py가 해당됩니다.

예시 디렉토리 구조:

myproject/
│-- myproject/
│   │-- __init__.py
│   │-- settings.py
│   │-- urls.py  <-- 프로젝트 수준의 urls.py
│   │-- wsgi.py
│-- myapp/
│   │-- urls.py  <-- 앱 수준의 urls.py
│-- manage.py

3) 작동 방식

프로젝트의 urls.py는 앱을 포함하는 역할을 합니다.

예제 (myproject/urls.py):

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # Django 기본 관리자 페이지
    path('myapp/', include('myapp.urls')),  # 앱 내부의 urls.py 포함
]

설명:

  • include('myapp.urls'): 앱의 URL 구성을 프로젝트에서 가져와서 사용.
  • 모든 요청이 먼저 프로젝트의 urls.py로 전달된 후, 등록된 앱의 URL로 이동함.

(2) 앱 수준의 urls.py

1) 역할 및 목적

  • 특정 앱(예: 블로그, 사용자 관리 등)에 대한 세부적인 URL 처리.
  • 개별적인 기능에 대한 URL을 정의하여 관리의 편의성을 높임.
  • 모듈화를 통해 코드 유지보수 및 확장성을 확보.

2) 위치 및 파일 구조

앱 폴더 내부에 위치.

예시 디렉토리 구조:

myproject/
│-- myapp/
│   │-- __init__.py
│   │-- models.py
│   │-- views.py
│   │-- urls.py  <-- 앱 수준의 urls.py
│   │-- admin.py
│   │-- tests.py

3) 작동 방식

앱 수준의 urls.py는 해당 앱의 특정 기능별 URL을 정의합니다.

예제 (myapp/urls.py):

from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),  # 기본 페이지
    path('detail/<int:id>/', views.detail, name='detail'),  # 상세 페이지
]

설명:

  • path(''): 기본 루트 요청(myapp/에 접속 시) → views.home 실행.
  • path('detail/<int:id>/'): myapp/detail/5/ 같은 URL 처리.

2. 프로젝트 수준과 앱 수준의 urls.py의 관계와 흐름

Django의 URL 처리는 다음과 같은 흐름을 따릅니다:

  1. 사용자가 브라우저에서 http://127.0.0.1:8000/myapp/detail/5/ 요청.
  2. **프로젝트의 urls.py**에서 'myapp/' 패턴을 찾아 myapp.urls로 연결.
  3. **앱의 urls.py**에서 detail/<int:id>/ 패턴을 찾아 해당 뷰(views.detail) 실행.
  4. 해당 뷰가 데이터를 가공 후 템플릿을 렌더링하여 응답.

3. 언제 프로젝트 vs 앱 수준의 urls.py를 사용해야 하나요?

상황별 사용 예시:

상황 urls.py 위치 설명

프로젝트 전체 URL을 설정할 때 프로젝트 urls.py 관리자 페이지, 앱을 포함할 때.
특정 기능(예: 블로그, 유저 관리)별로 URL 관리 앱 urls.py 블로그의 글, 사용자 등록, 주문 처리 등을 관리할 때.
여러 앱을 하나의 프로젝트에서 사용할 때 프로젝트 + 앱 urls.py 프로젝트에서 여러 앱을 포함하고 각각 기능을 나눌 때.

실전 예시:

  • http://127.0.0.1:8000/admin/ → 프로젝트 수준에서 처리
  • http://127.0.0.1:8000/blog/ → 프로젝트 수준 → 앱의 블로그 URL 매핑
  • http://127.0.0.1:8000/blog/post/1/ → 앱의 URL 처리

4. 전체적인 URL 처리 과정 흐름 요약

  1. 프로젝트 수준의 urls.py
    • 웹 애플리케이션의 전체 URL을 통제하고 앱의 URL을 포함.
    • 주 역할: admin/, app/ 등 주요 경로 설정.
  2. 앱 수준의 urls.py
    • 개별 앱의 특정 기능에 대한 URL 설정.
    • 주 역할: home/, detail/5/ 등 세부 기능 처리.
  3. 뷰(View)에서 요청 처리
    • urls.py에서 지정된 뷰 함수가 호출되어 데이터를 처리.

5. Django URL 설정의 목적 및 장점

  1. 모듈화
    • 프로젝트와 앱을 분리하여 관리가 용이함.
  2. 확장성
    • 새로운 앱을 쉽게 추가 가능.
  3. 유지보수 용이
    • 특정 앱의 URL 변경이 전체 프로젝트에 영향을 주지 않음.

6. 예제 프로젝트 설정 흐름

프로젝트 urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),  # blog 앱 URL 포함
]

앱 urls.py (blog 앱)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),  # 기본 블로그 페이지
    path('post/<int:id>/', views.post_detail, name='post_detail'),
]

뷰 함수 (views.py)

from django.http import HttpResponse

def index(request):
    return HttpResponse("블로그 홈입니다.")

def post_detail(request, id):
    return HttpResponse(f"블로그 글 번호: {id}")

이제 http://127.0.0.1:8000/blog/로 접속하면 블로그 홈이 보이고,
http://127.0.0.1:8000/blog/post/1/로 접속하면 특정 게시글이 출력됩니다.


 

Django 웹 애플리케이션 개발 과정을 세부적으로 나누어 설명드릴게요. 전체 흐름에서 데이터 추가와 같은 실질적인 작업까지 단계별로 세분화하여 다뤄보겠습니다.


1. 전체적인 흐름 정리 (Django 개발 과정 개요)

Django 개발의 주요 단계는 다음과 같습니다.

  1. 프로젝트 및 앱 생성
  2. 모델 설계 및 데이터베이스 적용 (마이그레이션)
  3. 데이터 추가, 조회, 수정, 삭제 (CRUD)
  4. URL 라우팅 설정
  5. 뷰 작성 (비즈니스 로직)
  6. 템플릿 작성 (HTML 렌더링)
  7. 사용자 입력 처리 (폼 사용)
  8. 관리자 페이지 등록 및 관리
  9. 테스트 작성
  10. 배포 (실제 서비스 제공)

2. 단계별로 나열 및 설명 (각 과정의 역할 및 목적)

각 단계를 하나씩 세분화하여 설명드리겠습니다.


1) 프로젝트 및 앱 생성

무엇을 하는가?

  • Django 프로젝트와 앱을 생성하여 기본 구조를 설정.

작동 방식

  • Django의 명령어를 통해 프로젝트 및 앱을 생성.

역할 및 목적

  • 전체 프로젝트의 틀을 잡고, 앱 단위로 기능을 분리.

실행 명령어:

django-admin startproject myproject  # 프로젝트 생성
cd myproject
python manage.py startapp myapp      # 앱 생성

생성된 구조 예시:

myproject/
│-- myproject/       # 프로젝트 설정 파일
│-- myapp/           # 앱 폴더
│-- manage.py        # Django 관리 명령어 실행 파일

2) 모델 설계 및 데이터베이스 적용 (마이그레이션)

무엇을 하는가?

  • 앱에서 사용할 데이터 모델을 정의하고, 이를 데이터베이스 테이블로 생성.

작동 방식

  • models.py에 클래스 작성 → 마이그레이션 파일 생성 → 데이터베이스 적용.

역할 및 목적

  • 데이터를 저장할 구조를 정의하고 데이터베이스와 연결.

모델 예제 (myapp/models.py):

from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField(unique=True)
    age = models.IntegerField()

마이그레이션 명령어 실행:

python manage.py makemigrations  # 모델 변경사항 감지 후 마이그레이션 파일 생성
python manage.py migrate         # 데이터베이스에 반영 (테이블 생성)

3) 데이터 추가, 조회, 수정, 삭제 (CRUD 작업)

무엇을 하는가?

  • 데이터베이스에 데이터를 추가하고 조작.

작동 방식

  • Django ORM을 사용하여 데이터를 다룸.

역할 및 목적

  • 데이터를 조작하기 위한 메커니즘 제공.

1. 데이터 추가 (Create)

from myapp.models import Customer

# 새 고객 추가
customer = Customer(name="홍길동", email="hong@example.com", age=30)
customer.save()

2. 데이터 조회 (Read)

customers = Customer.objects.all()  # 모든 고객 조회
print(customers)

specific_customer = Customer.objects.get(id=1)  # 특정 ID 고객 조회

3. 데이터 수정 (Update)

customer = Customer.objects.get(id=1)
customer.age = 35  # 나이 수정
customer.save()

4. 데이터 삭제 (Delete)

customer = Customer.objects.get(id=1)
customer.delete()

4) URL 라우팅 설정

무엇을 하는가?

  • 클라이언트의 요청을 적절한 뷰와 연결.

작동 방식

  • urls.py에서 URL 경로를 뷰와 매핑.

역할 및 목적

  • 사용자가 특정 URL로 접근 시 어떤 뷰가 실행될지 정의.

예제 (myapp/urls.py):

from django.urls import path
from . import views

urlpatterns = [
    path('customers/', views.customer_list),
]

5) 뷰 작성 (비즈니스 로직 구현)

무엇을 하는가?

  • 사용자의 요청을 처리하고 데이터를 가공.

작동 방식

  • 데이터베이스에서 데이터를 가져와 템플릿에 전달.

역할 및 목적

  • 데이터를 받아서 사용자에게 알맞은 응답을 생성.

예제 (myapp/views.py):

from django.shortcuts import render
from .models import Customer

def customer_list(request):
    customers = Customer.objects.all()
    return render(request, 'customer_list.html', {'customers': customers})

6) 템플릿 작성 (HTML 렌더링)

무엇을 하는가?

  • 데이터를 HTML로 표시하여 사용자에게 제공.

작동 방식

  • Django의 템플릿 엔진을 사용해 동적 HTML 생성.

역할 및 목적

  • 데이터를 시각적으로 표현하고 프론트엔드 렌더링 수행.

예제 (templates/customer_list.html):

<!DOCTYPE html>
<html>
<body>
    <h1>고객 리스트</h1>
    <ul>
        {% for customer in customers %}
            <li>{{ customer.name }} - {{ customer.email }}</li>
        {% endfor %}
    </ul>
</body>
</html>

7) 사용자 입력 처리 (폼 사용)

무엇을 하는가?

  • 사용자 입력을 받아 유효성 검증 후 데이터 저장.

작동 방식

  • Django의 폼 클래스를 활용.

역할 및 목적

  • 사용자 입력 데이터 처리를 효율적으로 수행.

예제 (forms.py):

from django import forms
from .models import Customer

class CustomerForm(forms.ModelForm):
    class Meta:
        model = Customer
        fields = ['name', 'email', 'age']

8) 관리자 페이지 등록 및 관리

무엇을 하는가?

  • 관리자 페이지에서 데이터를 관리.

작동 방식

  • Django의 admin.py에서 모델 등록.

역할 및 목적

  • 손쉽게 데이터를 조회하고 수정.

예제 (myapp/admin.py):

from django.contrib import admin
from .models import Customer

admin.site.register(Customer)

9) 테스트 작성

무엇을 하는가?

  • 코드의 동작을 검증.

작동 방식

  • Django의 테스트 프레임워크 활용.

역할 및 목적

  • 앱이 의도대로 동작하는지 확인.

예제 (myapp/tests.py):

from django.test import TestCase
from .models import Customer

class CustomerTestCase(TestCase):
    def test_customer_creation(self):
        customer = Customer.objects.create(name="테스트", email="test@example.com", age=25)
        self.assertEqual(customer.age, 25)

10) 배포 (실제 서비스 제공)

무엇을 하는가?

  • 로컬 환경에서 개발한 웹 애플리케이션을 배포 서버로 옮김.

작동 방식

  • AWS, Heroku 등 클라우드 플랫폼에 배포.

역할 및 목적

  • 실제 사용자에게 서비스 제공.

 

+ Recent posts