반응형

첫 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