반응형

Django 모델 생성과 데이터 출력 완전 정복

데이터를 눈으로 확인할 수 있어야 진짜 실력이죠!
Django 모델부터 화면 출력까지 직접 해보는 실습, 지금 시작해볼까요?

 

 

안녕하세요, 여러분!

오늘은 Django 프로젝트에서 데이터 모델을 정의하고, 그 데이터를 실제 웹 페이지에서 출력하는 전 과정을 함께 살펴보려 해요.

예전엔 막연하게 느껴졌던 모델 정의와 마이그레이션, 그리고 admin에서 데이터 입력하고 템플릿에서 출력하는 흐름이 이제는 훨씬 친숙하게 느껴질 거예요.

이 글에서는 TodoItem 또는 BlogPost 같은 간단한 모델을 정의해서, admin 사이트에서 데이터를 넣고, 뷰 함수와 템플릿을 통해 화면에 출력하는 과정까지 단계별로 진행해볼 거예요.

 

1. 모델 정의하기 🧱

자, 이제 Django에서 가장 핵심이라고 할 수 있는 모델(Model)을 만들어볼 차례예요.

모델은 데이터베이스 테이블과 1:1로 매칭되는 클래스로, 우리가 다룰 데이터를 어떤 형태로 저장하고 사용할지를 정의해줍니다.

📝 모델 클래스 생성

예를 들어, 간단한 할 일(Todo) 목록을 만들고 싶다고 해봅시다.

이럴 땐 다음처럼 TodoItem 모델을 정의할 수 있어요:

from django.db import models

class TodoItem(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

 

이 모델을 한 줄씩 살펴보면 다음과 같습니다:

필드 설명
title 할 일의 제목 (문자열, 최대 200자)
content 자세한 설명을 담을 수 있는 텍스트 필드
created_at 데이터가 생성된 시간 (자동 저장)

📁 모델 파일 저장 위치

모델 클래스는 보통 각 앱의 models.py 파일에 작성합니다.

예를 들어, 앱 이름이 todo라면 todo/models.py에 위 코드를 추가해 주세요.

  • models.py는 각 앱 안에 존재하며 데이터 구조를 정의하는 핵심 파일이에요.
  • __str__() 메서드는 admin이나 쉘에서 객체를 문자열로 표시할 때 유용합니다.

이렇게 간단한 모델 하나만 정의해도, Django는 이걸 기반으로 데이터베이스 테이블을 만들고 다양한 기능을 자동으로 제공해줘요. 정말 멋지지 않나요?

 

 

2. 마이그레이션 수행하기 🔄

모델을 만들었다고 해서 곧바로 데이터베이스에 테이블이 생기는 건 아니에요.

Django에서는 마이그레이션(migration)이라는 과정을 거쳐야 모델의 정의가 실제 데이터베이스 테이블로 반영됩니다.

🛠️ 마이그레이션 순서

  1. python manage.py makemigrations - 모델 변경 사항을 기반으로 마이그레이션 파일을 생성해요.
  2. python manage.py migrate - 실제로 데이터베이스에 테이블을 만들거나 수정해요.

직접 터미널에서 한 번 입력해볼까요?

# 마이그레이션 파일 생성
$ python manage.py makemigrations

# DB에 실제 반영
$ python manage.py migrate

 

명령어 실행 후 아래와 같이 출력되면 성공입니다 🎉

Migrations for 'todo':
  todo/migrations/0001_initial.py
    - Create model TodoItem

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, todo
Running migrations:
  Applying todo.0001_initial... OK

🚧 잠깐! 이런 에러가 나올 수 있어요

  • App 'todo' could not be found → settings.py에 앱 등록 안 했을 가능성!
  • No changes detected → 모델을 수정한 적이 없을 수도 있어요.

마이그레이션은 한 번만 하고 끝나는 게 아니라, 모델에 변화가 생길 때마다 반복하게 될 작업입니다.

앞으로 자주 만나게 될 명령어니까 익숙해지는 게 좋아요!

 

 

3. Admin 사이트에 모델 등록하기 ⚙️

모델을 만들고 마이그레이션까지 완료했다면, 이제는 데이터를 직접 추가해볼 수 있어야겠죠?

Django는 기본적으로 Admin 사이트라는 강력한 기능을 제공합니다.

이걸 통해 직접 데이터를 추가하거나 수정할 수 있어요.

✅ 모델을 Admin에 등록하기

우선 admin.py 파일을 열어 아래처럼 코드를 추가해 주세요.

from django.contrib import admin
from .models import TodoItem

admin.site.register(TodoItem)

 

이렇게 하면 Admin 페이지에서 TodoItem 모델을 볼 수 있게 됩니다. 아주 간단하죠?

4. 슈퍼유저 생성 및 데이터 추가 👑

Admin에 로그인하려면 슈퍼유저(superuser) 계정을 먼저 만들어야 해요.

아래 명령어를 입력해 관리자 계정을 만들어 봅시다.

$ python manage.py createsuperuser

 

이제 서버를 실행하고 http://127.0.0.1:8000/admin에 접속해보세요.

  • 로그인하면 TodoItem이 목록에 보일 거예요.
  • 클릭해서 새 데이터도 직접 입력할 수 있답니다.

이제 모델을 만들고, Admin에 등록하고, 데이터를 입력하는 기본적인 백엔드 흐름을 완성했어요!

다음은 이 데이터를 뷰(View)템플릿(Template)을 통해 웹페이지에서 출력해보는 단계입니다.

 

 

5. 뷰 함수에서 QuerySet으로 데이터 조회 📦

Admin에서 입력한 데이터를 웹 페이지에 출력하려면 뷰(View) 함수에서 모델로부터 데이터를 조회해야 해요.

이때 사용하는 게 바로 Django의 ORM 기능 중 하나인 QuerySet입니다.

💡 QuerySet이란?

QuerySet은 데이터베이스에서 가져온 객체들의 집합이에요.

SQL을 직접 쓰지 않고 파이썬 문법으로 데이터를 조회할 수 있도록 도와줍니다.

예를 들어 TodoItem.objects.all()은 TodoItem 테이블의 모든 데이터를 불러오는 명령어랍니다.

🛠 뷰 함수에서 QuerySet 사용하기

자, 이제 views.py 파일에서 실제로 데이터를 가져오는 코드를 작성해볼게요.

from django.shortcuts import render
from .models import TodoItem

def todo_list(request):
    todos = TodoItem.objects.all()  # QuerySet: 전체 데이터 조회
    return render(request, 'todo/list.html', {'todos': todos})
  • TodoItem.objects.all()은 등록된 모든 할 일을 가져옵니다.
  • render() 함수는 데이터를 HTML 템플릿과 함께 반환해요.

🔗 URLconf에 뷰 연결하기

뷰 함수를 만들었으면 해당 함수에 접근할 수 있도록 urls.py에도 경로를 연결해줘야 합니다. 다음 코드를 todo/urls.py 또는 프로젝트의 urls.py에 추가해 주세요.

from django.urls import path
from . import views

urlpatterns = [
    path('todos/', views.todo_list, name='todo_list'),
]

이제 브라우저에서 http://127.0.0.1:8000/todos/ 주소로 접속하면, 뷰 함수가 동작하며 템플릿에 데이터를 전달하게 됩니다.

🧠 실전 활용 팁

  • .order_by('-created_at')으로 최신 항목부터 정렬할 수 있어요.
  • .filter()를 활용하면 특정 조건만 골라볼 수도 있어요.

지금까지 배운 내용은 Django의 데이터 흐름에서 가장 중요한 부분 중 하나입니다. 뷰 함수는 데이터와 템플릿 사이의 다리 역할을 하며, 이를 제대로 이해해야 Django를 진짜 잘 다룰 수 있게 돼요.

6. 템플릿에서 목록 출력 및 브라우저 확인 🖥️

이제 마지막 단계예요! 뷰에서 전달한 QuerySet 데이터를 템플릿 파일에 출력해보겠습니다. 이렇게 하면 우리가 만든 모델 데이터를 브라우저에서 직접 볼 수 있게 되죠.

📄 템플릿 파일 생성하기

우선 앱 폴더 안에 templates 폴더를 만들고, 그 안에 todo 폴더를 생성한 후 list.html이라는 파일을 만듭니다. 예시 경로는 다음과 같아요:

todo/
 ├── templates/
 │    └── todo/
 │         └── list.html

그리고 list.html에는 아래처럼 작성해 주세요.



  
  Todo 목록

할 일 목록
    {% for item in todos %}
        {{ item.title }}

        {{ item.content }}

        {{ item.created_at }}
      
    {% empty %}아직 등록된 항목이 없습니다.
    {% endfor %}
  


Django의 템플릿 언어인 {% for %}{{ }}를 활용해서 데이터를 반복 출력하고 있어요. 실제 데이터가 없을 경우엔 {% empty %} 블럭이 작동합니다.

📌 설정 점검 리스트

  • settings.pyTEMPLATES 설정에 'APP_DIRS': True가 되어 있는지 확인
  • 앱 이름이 INSTALLED_APPS에 포함되어 있어야 함

🌐 브라우저에서 확인해보기

이제 python manage.py runserver 명령으로 개발 서버를 실행하고, 브라우저에서 http://127.0.0.1:8000/todos/ 주소로 접속해보세요.

등록한 데이터가 목록으로 출력된다면... 성공입니다! 🎉

이 과정을 통해 데이터베이스 모델 생성 → Admin 등록 및 입력 → View에서 데이터 조회 → Template에서 출력까지 전체 웹 애플리케이션 흐름을 완성해본 셈이에요.

마무리하며 🧩

지금까지 우리는 Django에서 모델을 생성하고 데이터를 출력하는 전 과정을 순차적으로 경험해 봤습니다. 처음에는 복잡하게 느껴질 수 있지만, 한번 흐름을 타고 나면 의외로 논리적이고 직관적인 걸 느끼셨을 거예요.

전체 흐름을 요약하면 다음과 같습니다:

  1. 모델 정의 (models.py)
  2. 마이그레이션으로 DB에 반영
  3. Admin에 모델 등록 및 슈퍼유저 생성
  4. 뷰 함수에서 QuerySet으로 데이터 조회
  5. 템플릿에 데이터 넘기고 브라우저에 출력

이제 여러분은 Django 웹 개발에서 가장 기본이 되는 MVT(Model-View-Template) 패턴의 흐름을 완전히 이해한 셈입니다. 앞으로 더 복잡한 프로젝트를 다룰 때도 이 흐름은 그대로 유지되며, 이 토대를 기반으로 기능만 점점 확장되니까요.

다음 글에서는 모델 간 관계 설정(ForeignKey 등)과 리스트 정렬, 필터링 등의 고급 QuerySet 사용법까지 이어서 다뤄볼 예정이에요. 계속해서 함께 성장해봐요! 😊

반응형
반응형

Django 데이터베이스 연동과 ORM 이해

Django 프로젝트에서 데이터를 저장하고 꺼내 쓰는 게 어렵게 느껴지시나요?
ORM과 관리자 페이지의 마법을 경험해보세요!

 

 

안녕하세요, 여러분! 😊

웹 애플리케이션을 만들다 보면 사용자 데이터를 저장하거나, 게시글을 등록하고 수정하는 기능이 꼭 필요하죠.

이럴 때 가장 중요한 게 바로 데이터베이스 연동입니다.

이번 포스팅에서는 Django에서 가장 기본적으로 사용하는 SQLite 설정부터, 데이터를 자유자재로 다룰 수 있게 해주는 ORM(Object-Relational Mapping)의 개념과 사용법을 살펴볼 거예요.

또한 Django의 강력한 무기 중 하나인 Admin 페이지를 통해 데이터를 관리하는 방법까지 같이 다루겠습니다.

처음엔 조금 생소할 수 있지만, 하나씩 따라오다 보면 데이터베이스가 생각보다 친숙하게 느껴질 거예요. 😊

자, 그럼 본격적으로 시작해볼까요?

 

1. SQLite 설정과 마이그레이션 개념 🧱

Django는 기본적으로 SQLite라는 가볍고 사용하기 쉬운 데이터베이스를 기본으로 제공합니다.

설치할 것도 없고, 별도의 서버 없이 바로 사용 가능하다는 점에서 개발자들 특히 초보자에게 아주 좋은 선택이죠.

📂 settings.py에서 데이터베이스 확인하기

settings.py 파일을 열면 아래와 같이 DATABASES 설정이 이미 되어 있을 거예요.

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

 

이게 바로 SQLite를 사용하는 기본 설정입니다.

별다른 작업 없이 바로 데이터베이스 기능을 쓸 수 있게 도와주는 설정이죠.

🔧 마이그레이션이란 무엇인가요?

Django에서 모델을 만들었다고 해서 바로 DB에 반영되는 건 아니에요.

모델의 변경사항을 데이터베이스에 적용하려면 마이그레이션(Migration) 작업을 해야 합니다.

이 과정을 쉽게 설명하면 이래요:

  • 모델을 만들면 그걸 반영할 SQL 코드가 자동으로 생성됨 → makemigrations
  • 생성된 SQL 코드를 실제 DB에 반영 → migrate

터미널에서 아래 명령어를 실행해보세요.

python manage.py makemigrations
python manage.py migrate

이제 모델에 정의한 구조대로 테이블이 데이터베이스에 생성됩니다. 짠! 너무 어렵지 않죠?

📋 요약 테이블

개념 설명
SQLite Django 기본 데이터베이스로, 가볍고 별도 설치가 필요 없음
makemigrations 모델 변경 사항을 기반으로 마이그레이션 파일 생성
migrate 생성된 마이그레이션을 실제 데이터베이스에 적용

 

2. Django 모델 정의 방법과 필드 종류 📝

웹 서비스에서 정보를 저장하고 관리하려면 모델(Model)을 정의해야 합니다.

Django에서는 이 모델이 곧 데이터베이스 테이블과 1:1로 매칭돼요.

각 모델은 Python 클래스 형태로 정의되며, 클래스의 속성 하나하나가 데이터베이스의 컬럼이 됩니다.

📌 모델 클래스 예시

from django.db import models

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

위 예시는 Post라는 게시글 모델입니다.

title, content, created_at이라는 세 개의 필드를 가지고 있고, 각각 문자열, 긴 텍스트, 생성 시간 정보를 저장해요.

🔍 주요 필드(Field) 종류 알아보기

필드 이름 설명
CharField 짧은 문자열 저장. max_length 필수 지정
TextField 긴 텍스트 저장 (제한 없음)
IntegerField 정수 값 저장
DateTimeField 날짜/시간 저장. auto_now_add 또는 auto_now로 자동 설정 가능
BooleanField True/False 값 저장

💡 유용한 모델 설정 옵션들

  • verbose_name: 필드의 이름을 관리자 페이지에서 보기 쉽게 설정
  • default: 기본값 지정 가능
  • null, blank: 비워도 되는지 여부 설정

모델은 단순히 테이블을 정의하는 걸 넘어서, Django 전반의 데이터 흐름을 담당해요.

앞으로의 기능 구현에서도 계속 활용되니, 지금 확실하게 익혀두는 걸 추천드립니다!

 

 

3. ORM과 QuerySet으로 데이터 다루기 ⚙️

Django에서는 ORM(Object-Relational Mapping) 기능을 통해 Python 코드만으로도 데이터베이스를 자유롭게 다룰 수 있습니다.

즉, 복잡한 SQL을 몰라도 객체 지향적으로 데이터를 삽입하고 수정하며 삭제할 수 있어요.

이게 진짜... 너무 편해요.

🛠️ 기본적인 데이터 조작 예시

# 객체 생성
post = Post(title="첫 글", content="장고 너무 재밌다!")
post.save()

# 모든 데이터 조회
Post.objects.all()

# 조건에 맞는 데이터 조회
Post.objects.filter(title__contains="첫")

# 하나만 가져오기
Post.objects.get(id=1)

# 데이터 수정
post = Post.objects.get(id=1)
post.title = "수정된 제목"
post.save()

# 데이터 삭제
post.delete()

보시다시피 .save(), .filter(), .get(), .delete() 같은 메서드만 알면 데이터를 마음대로 다룰 수 있어요.

쿼리셋(QuerySet)을 이용하면 복잡한 조건도 체이닝해서 쉽게 만들 수 있고요.

🔍 자주 쓰는 QuerySet 메서드 정리

메서드 설명
all() 모든 객체를 조회
filter() 조건에 맞는 객체만 조회
get() 특정 조건에 맞는 하나의 객체 조회 (없거나 둘 이상이면 오류)
exclude() 특정 조건을 제외한 객체 조회
order_by() 정렬 기준 지정

이런 메서드들을 조합하면, 꽤 복잡한 데이터 필터링도 몇 줄 안 되는 코드로 깔끔하게 해결할 수 있어요.

그러니까요, 진짜 ORM은 신세계예요.

⚠️ 주의할 점!

  • get()은 여러 개의 결과가 있거나 없을 때 예외 발생! 항상 try/except로 감싸는 게 좋아요.
  • save()를 안 하면 DB에 반영되지 않아요. 반드시 저장해 주세요!

Django ORM은 입문자에게도 매우 직관적으로 다가오는 도구입니다.

복잡한 SQL 없이도 실무 수준의 데이터 처리가 가능하다는 건 정말 큰 장점이에요.

 

 

4. Django Admin 사이트 활용법 🛠️

Django를 처음 접하면 누구나 놀라는 기능이 있어요.

바로 Admin 사이트입니다!

개발자가 만든 모델을 관리자 페이지에서 바로 추가, 수정, 삭제할 수 있는 인터페이스가 기본 제공된다는 건... 솔직히 말해 사기급이에요.

🔐 관리자 계정 만들기

먼저 관리자 페이지를 사용하려면 슈퍼유저(superuser)를 생성해야 합니다.

터미널에서 아래 명령어를 입력해보세요.

python manage.py createsuperuser

이후 사용자명, 이메일, 비밀번호를 입력하면 관리자 계정이 생성됩니다.

서버를 실행하고 http://localhost:8000/admin 으로 접속해보세요!

🧩 모델 등록하기

관리자 페이지에서 직접 데이터를 관리하려면 모델을 admin에 등록해야 합니다.

해당 앱의 admin.py 파일을 열고 아래처럼 작성해보세요.

from django.contrib import admin
from .models import Post

admin.site.register(Post)

이제 관리자 페이지에 "Post" 메뉴가 생겨요.

여기서 데이터를 추가하거나 삭제할 수 있는 폼 UI가 자동으로 생성됩니다.

🎨 관리자 화면 커스터마이징

관리자 페이지의 기본 UI도 커스터마이징이 가능합니다.

예를 들어 제목, 생성일만 리스트에 보이게 하려면 아래처럼 코드를 수정하면 돼요.

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'created_at')

admin.site.register(Post, PostAdmin)

이런 식으로 list_filter, search_fields, readonly_fields 등 다양한 옵션을 지정해 관리 페이지를 내가 원하는 대로 꾸밀 수 있어요.

🧾 관리자 페이지 요약

기능 설명
createsuperuser 관리자 계정 생성
register() 모델을 admin 사이트에 등록
list_display 목록에서 보여줄 필드 지정

이처럼 Django의 Admin 사이트는 개발자가 데이터 관리 페이지를 손쉽게 만들 수 있도록 도와줍니다.

특히 초기에 빠르게 MVP를 만들거나 내부 관리 도구가 필요할 때 아주 유용해요.

 

 

5. 예고: 모델 간 관계 설정 개념 🔗

지금까지는 하나의 모델만을 기준으로 데이터를 다뤘어요.

하지만 현실 세계의 데이터는 대부분 서로 관계를 맺고 있죠.

예를 들어, 사용자(User)가 여러 개의 게시글(Post)을 작성하거나, 하나의 카테고리(Category)가 여러 개의 상품(Product)을 포함하는 구조 말이에요.

🔄 다양한 관계(Relation)의 형태

  • 1:1 관계 (OneToOneField) – 예: 사용자와 프로필
  • 1:N 관계 (ForeignKey) – 예: 사용자와 게시글
  • N:N 관계 (ManyToManyField) – 예: 사용자와 그룹

이런 관계를 정의하려면 Django 모델에서 ForeignKey, OneToOneField, ManyToManyField 같은 필드를 사용합니다.

 

다음 블로그 글에서는 이렇게 모델 간 관계를 정의하고 이를 활용하는 방법을 심도 있게 다룰 예정이에요.

예를 들어 게시글(Post)에 작성자(User)를 연결하거나, 하나의 글에 여러 개의 댓글(Comment)을 연결하는 구조를 만드는 실전 예제를 보여드릴게요.

 

복잡한 데이터 구조도 Django에서는 간단하고 우아하게 정의할 수 있다는 사실, 꼭 다음 편에서 확인해보세요!

 

 

6. 마무리 정리 및 다음 글 안내 📌

이번 포스팅에서는 Django에서 데이터를 다루기 위해 꼭 알아야 할 데이터베이스 설정, 모델 정의, ORM 사용법, 그리고 Admin 사이트 활용까지 폭넓게 살펴봤습니다.

처음에는 생소할 수 있는 개념들이지만, 직접 따라 해보면서 실습해보면 어느 순간 "아, 이제 좀 알겠다!" 하는 순간이 분명 찾아올 거예요.

데이터를 설계하고 관리하는 과정은 앞으로 더 다양한 기능들을 구현할 때 아주 중요한 기반이 됩니다.

그리고 다음 글에서는 드디어 모델 간 관계 설정에 대해 본격적으로 들어갑니다.

ForeignKey를 이용해 사용자와 게시글을 연결하고, 댓글을 추가해보는 등 조금 더 현실적인 예제를 다룰 예정이에요.

 

🔥 이제 여러분은 Django 데이터 모델링의 첫 단계를 마스터했습니다.

      다음 단계에서는 훨씬 더 유기적이고 확장성 있는 데이터 구조를 함께 만들어봅시다!

반응형
반응형

첫 Django 앱 생성과 간단한 페이지 구현

"Hello, Django!" 한 줄로 시작되는 웹 개발의 첫 걸음,
지금부터 함께 만들어 볼까요?

 

 

안녕하세요, 개발자 여러분!

오늘은 Django 프로젝트를 시작하고, 여러분만의 첫 웹 페이지를 만들어보는 시간을 가져보려 해요.

Django 프레임워크를 설치하고 프로젝트를 구성해본 분이라면, 이제 본격적으로 실습에 들어가볼 때죠.

페이지를 하나 만들고 웹 브라우저에서 “Hello, Django!”라는 메시지를 확인할 수 있는 과정을 따라가면서, 뷰(View), 템플릿(Template), URLconf의 연계 방식도 자연스럽게 익혀볼 수 있어요.

처음엔 복잡하게 느껴질 수 있지만, 한 걸음씩 차근차근 따라가면 어렵지 않답니다.

특히 이번 글에서는 실습 위주로 접근할 예정이라 초보자분들도 큰 부담 없이 이해하실 수 있을 거예요.

 

1. 새로운 앱 생성과 프로젝트에 등록하기 🧱

이제 본격적으로 Django 프로젝트 안에 첫 번째 앱을 만들어볼 시간입니다.

Django에서는 웹 애플리케이션의 기능 단위를 "앱(app)"이라는 구조로 나누어 구성합니다.

예를 들어, 게시판 기능, 회원 관리 기능, 블로그 기능 등이 각각 독립된 앱으로 만들어질 수 있어요.

📌 앱 생성 명령어

python manage.py startapp pages

 

이렇게 입력하면 pages라는 이름의 디렉토리가 생성되고, 그 안에 Django 앱의 기본 구조가 자동으로 세팅됩니다.

🛠 프로젝트에 앱 등록하기

앱을 생성했으면 Django 프로젝트에 해당 앱을 등록해줘야 해요.

settings.py 파일을 열고, INSTALLED_APPS 리스트에 아래와 같이 추가해줍니다.

INSTALLED_APPS = [
    ...
    'pages',
]

 

이렇게 하면 pages 앱이 프로젝트에 포함되어 Django가 이 앱을 인식하게 됩니다.

앞으로 이 앱 안에서 뷰, URL, 템플릿 등을 구성해나갈 거예요.

🧾 요약 정리

  • python manage.py startapp pages 명령어로 앱 생성
  • settings.pyINSTALLED_APPS에 'pages' 추가

 

이제 다음 단계로 넘어가서, 우리가 만든 pages 앱 안에 첫 번째 뷰 함수를 작성해보겠습니다.

 

 

2. 간단한 뷰 함수 작성하기 🧠

이제 우리가 만든 pages 앱 안에서 실제로 페이지를 보여주는 뷰 함수(view function)를 작성해보겠습니다. 이 뷰 함수는 사용자의 요청을 받아 HTML 페이지를 반환하는 역할을 하죠.

🔧 views.py 파일 수정

우선 pages/views.py 파일을 열고 아래와 같이 간단한 함수를 만들어주세요.

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

 

이 함수는 request 객체를 받아 home.html이라는 템플릿 파일을 렌더링(render)해서 클라이언트에게 반환합니다.

아직 템플릿 파일은 없지만, 이건 다음 단계에서 만들어볼 거예요!

💡 render 함수란?

Django에서 render() 함수는 템플릿 시스템과 뷰를 연결하는 역할을 합니다.

내부적으로 Template 객체를 로드하고, 전달받은 데이터를 해당 템플릿에 렌더링한 뒤 HTML을 반환하죠.

아주 자주 쓰이기 때문에 꼭 익혀두세요!

🧾 요약 정리

  • views.py에서 home() 뷰 함수 생성
  • render(request, 'home.html')로 템플릿 반환

다음 단계에서는 home.html 템플릿 파일을 실제로 만들어볼 거예요.

우리의 "Hello, Django!" 메시지를 웹에 띄워볼 준비 되셨죠?

 

 

3. 템플릿 디렉터리 및 HTML 파일 생성 ✨

이제 우리의 뷰 함수가 불러올 home.html 파일을 만들어야 할 차례입니다.

Django에서는 HTML 파일을 templates 폴더에 보관하는 게 일반적이에요.

📁 템플릿 디렉터리 구조 만들기

앱 디렉터리(pages/) 안에 templates/pages 폴더를 생성하세요.

이 구조는 Django가 템플릿을 앱과 연결된 이름으로 찾을 수 있도록 도와줍니다.

pages/
├── templates/
│   └── pages/
│       └── home.html

 

이제 home.html 파일을 만들어 아래와 같은 내용을 넣어보세요.

<!-- pages/templates/pages/home.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>My First Django Page</title>
</head>
<body>
  <h1>Hello, Django!</h1>
</body>
</html>

 

이 HTML 파일은 우리가 웹 브라우저에서 확인하게 될 페이지입니다.

정말 간단하죠? 하지만 여기서 중요한 건 템플릿 파일이 뷰 함수에서 지정한 경로와 정확히 일치해야 한다는 점이에요.

💡 템플릿 폴더 명명 규칙 팁

  • 앱 이름과 동일한 하위 폴더를 templates 내부에 생성해야 충돌 없이 사용할 수 있어요.
  • ex) pages 앱이면 templates/pages/home.html 경로로 생성

이제 이 템플릿을 웹 페이지로 띄울 수 있도록 URLconf 설정을 해보러 갈까요?

 

 

4. URLconf 설정으로 뷰 연결하기 🔗

뷰와 템플릿을 만들었지만, 아직 웹 브라우저에서 페이지를 열 수 없어요.

왜냐하면 URLconf를 설정하지 않았기 때문이죠.

Django에서는 urls.py를 통해 요청 URL과 뷰를 연결해줍니다.

📌 앱 수준 URLconf 만들기

pages 앱 디렉터리 안에 urls.py 파일을 새로 만들어 아래와 같이 작성해 주세요.

# pages/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.home, name='home'),
]

 

이제 앱 수준의 URLconf는 준비가 끝났고, 이를 프로젝트 루트 urls.py에 연결만 하면 됩니다.

🔧 프로젝트 루트 urls.py 연결

프로젝트 디렉터리에 있는 config/urls.py 파일을 열어 아래와 같이 include를 이용해 pages 앱을 연결합니다.

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('pages.urls')),
]

 

이제 http://localhost:8000/ 경로로 접속하면 pages.views.home 뷰가 실행되고, home.html이 브라우저에 출력됩니다.

🧾 요약 정리

  • pages/urls.py에 뷰 함수 연결
  • config/urls.py에서 include('pages.urls')로 연결 완료

URL 설정까지 끝났다면, 다음 단계는 드디어! 웹 브라우저에서 페이지를 확인해보는 일입니다.

화면에 'Hello, Django!'가 뜨는 그 짜릿한 순간을 함께 느껴볼까요?

 

 

5. 웹 브라우저에서 결과 확인하기 🌐

자, 모든 준비는 끝났습니다!

이제 로컬 개발 서버를 실행해서 우리가 만든 페이지가 잘 나오는지 확인해보는 일만 남았어요.

이 순간이 바로 Django 개발의 가장 첫 성취감이 느껴지는 타이밍이죠 😊

▶ 서버 실행

python manage.py runserver

 

명령어를 실행하면 다음과 같이 서버가 8000번 포트에서 실행되었다는 메시지를 볼 수 있습니다:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
April 17, 2025 - 22:05:00
Django version 4.x.x, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 

이제 브라우저를 열고 주소창에 http://127.0.0.1:8000 또는 http://localhost:8000 를 입력해 보세요!

🎉 확인 결과

화면에 커다란 "Hello, Django!" 문구가 보였다면... 성공입니다! 🎉

지금 여러분은 Django 기반 웹페이지를 세상에 (아직은 로컬이지만) 처음 띄운 셈이에요.

💡 오류가 발생했을 때는?

  • 템플릿 경로가 잘못되었을 가능성 확인
  • URLconf 연결 상태 점검

이제 HTML이 정상 출력되는 걸 확인했으니,

다음 단계에서는 템플릿을 조금 더 효율적으로 관리하는 방법—바로 템플릿 상속 기법을 소개해드릴게요.

 

 

6. 베이스 템플릿 작성과 템플릿 상속 🏗️

Django 템플릿 시스템은 반복되는 HTML 코드 구조를 효율적으로 관리할 수 있도록 템플릿 상속 기능을 제공합니다. 이번 단계에서는 베이스 템플릿을 만들어서 여러 페이지에서 공통으로 사용할 수 있게 구성해볼 거예요.

📁 베이스 템플릿 만들기

pages/templates/ 디렉토리 하위에 base.html이라는 파일을 만들고 다음과 같이 작성합니다.

<!-- pages/templates/base.html -->
<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>{% block title %}Django App{% endblock %}</title>
</head>
<body>
  <header>
    <h1>🎈 Django App</h1>
  </header>
  
  <main>
    {% block content %}{% endblock %}
  </main>
  
  <footer>
    <p>&copy; 2025 My Django</p>
  </footer>
</body>
</html>

 

이제 home.html 파일을 다음과 같이 수정해서 base.html을 상속받도록 할게요.

<!-- pages/templates/pages/home.html -->
{% extends 'base.html' %}

{% block title %}홈{% endblock %}

{% block content %}
  <h2>Hello, Django!</h2>
  <p>이 페이지는 템플릿 상속을 사용하여 만들어졌습니다.</p>
{% endblock %}

 

이제 home.htmlbase.html의 구조를 그대로 따라가면서 본문 내용만 바꿀 수 있어요.

앞으로 다른 페이지도 이 구조를 재사용하면 유지보수가 훨씬 편해지겠죠?

💡 템플릿 상속의 장점

  • 여러 페이지에서 반복되는 코드(HTML 구조)를 한 곳에서 관리 가능
  • 유지보수 시 공통 구조 수정이 한 파일로 해결
  • 템플릿 블록으로 내용만 손쉽게 커스터마이징

이제 하나의 틀만 만들어두면 여러 페이지를 손쉽게 만들 수 있어요.

뭔가 웹사이트 같아지지 않았나요? 😄

마무리 ✨

오늘은 Django에서 첫 번째 앱 생성부터 웹 페이지 출력까지의 흐름을 따라가봤습니다.

하나하나 따라가면서 뷰, 템플릿, URL 설정의 연결 구조를 눈으로 확인하고, 직접 HTML로 결과를 출력해보셨을 거예요.

단순한 "Hello, Django!"지만, 처음으로 화면에 결과를 띄웠다는 경험은 아주 중요한 첫걸음입니다.

더 나아가 base.html을 통해 템플릿 상속도 경험해보면서, 앞으로 프로젝트가 커졌을 때 어떻게 효율적으로 유지보수를 할 수 있을지에 대한 감도 잡으셨을 거라 믿어요.

 

다음 시간에는 이 구조를 기반으로 동적인 데이터를 다루는 방법, 폼 처리, 모델 연동 등 더 본격적인 웹 애플리케이션 기능 구현으로 넘어가볼게요.

지금처럼 한 걸음씩 차근차근 따라오신다면 Django가 훨씬 더 친숙하게 느껴질 거예요 😊

📌 오늘 배운 핵심 요약

  • startapp 명령어로 앱 생성 및 프로젝트에 등록
  • 뷰 함수 render()로 템플릿 반환
  • 템플릿 폴더 및 HTML 작성
  • URLconf를 통한 뷰 연결
  • 템플릿 상속으로 공통 레이아웃 구성

 

처음 웹 서비스를 만들어보는 분들께 정말 꼭 필요한 흐름이었죠?

다음 포스트에서는 이 앱에 사용자 입력을 처리할 수 있는 폼(form) 기능을 추가해볼 예정입니다.

기대해 주세요!

반응형

+ Recent posts