첫 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.py
의INSTALLED_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>© 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.html
은 base.html
의 구조를 그대로 따라가면서 본문 내용만 바꿀 수 있어요.
앞으로 다른 페이지도 이 구조를 재사용하면 유지보수가 훨씬 편해지겠죠?
💡 템플릿 상속의 장점
- 여러 페이지에서 반복되는 코드(HTML 구조)를 한 곳에서 관리 가능
- 유지보수 시 공통 구조 수정이 한 파일로 해결
- 템플릿 블록으로 내용만 손쉽게 커스터마이징
이제 하나의 틀만 만들어두면 여러 페이지를 손쉽게 만들 수 있어요.
뭔가 웹사이트 같아지지 않았나요? 😄
마무리 ✨
오늘은 Django에서 첫 번째 앱 생성부터 웹 페이지 출력까지의 흐름을 따라가봤습니다.
하나하나 따라가면서 뷰, 템플릿, URL 설정의 연결 구조를 눈으로 확인하고, 직접 HTML로 결과를 출력해보셨을 거예요.
단순한 "Hello, Django!"지만, 처음으로 화면에 결과를 띄웠다는 경험은 아주 중요한 첫걸음입니다.
더 나아가 base.html
을 통해 템플릿 상속도 경험해보면서, 앞으로 프로젝트가 커졌을 때 어떻게 효율적으로 유지보수를 할 수 있을지에 대한 감도 잡으셨을 거라 믿어요.
다음 시간에는 이 구조를 기반으로 동적인 데이터를 다루는 방법, 폼 처리, 모델 연동 등 더 본격적인 웹 애플리케이션 기능 구현으로 넘어가볼게요.
지금처럼 한 걸음씩 차근차근 따라오신다면 Django가 훨씬 더 친숙하게 느껴질 거예요 😊
📌 오늘 배운 핵심 요약
-
startapp
명령어로 앱 생성 및 프로젝트에 등록 - 뷰 함수
render()
로 템플릿 반환 - 템플릿 폴더 및 HTML 작성
- URLconf를 통한 뷰 연결
- 템플릿 상속으로 공통 레이아웃 구성
처음 웹 서비스를 만들어보는 분들께 정말 꼭 필요한 흐름이었죠?
다음 포스트에서는 이 앱에 사용자 입력을 처리할 수 있는 폼(form) 기능을 추가해볼 예정입니다.
기대해 주세요!
'Python > Python 웹프로그래밍' 카테고리의 다른 글
[Django-06] Django 모델 생성과 데이터 출력 완전 정복 (0) | 2025.04.22 |
---|---|
[Django-05] Django데이터베이스 연동과 ORM 이해 (0) | 2025.04.21 |
[Django-03] Django 앱 구조와 URL·뷰·템플릿 완전 정복 (0) | 2025.04.20 |
[Django-02] 개발환경 구축과 Django 프로젝트 시작 (0) | 2025.04.19 |
[Django-01] 웹 개발 기초와 Django 프레임워크 개요 (1) | 2025.04.18 |