Django 개요와 시작하기
4주 독립 환경·lions 앱·URL·view·JSON 응답과 요청 테스트로 Django 시작하기
이번 문서에서 만드는 것
4주에는 Django 프로젝트를 만들고 GET /api/members/가 JSON을 반환하도록 연결합니다. Python 함수·클래스·모듈을 먼저 익혀야 합니다. 이번 응답은 명시적으로 코드에 넣은 가상 데이터이며 DB 저장은 다음 문서에서 시작합니다.
요청은 브라우저 → 프로젝트 URL → 앱 URL → view → 응답으로 흐릅니다. MTV의 Model은 데이터, Template은 표현, View는 요청 처리를 담당합니다. JSON 응답에서는 HTML Template을 사용하지 않을 수 있습니다.
독립된 실습 환경 만들기
새 폴더 lion-django에서 실행합니다. 이 문서의 기준은 Django 5.2 계열과 Python 3.12입니다. 다른 지원 버전을 쓰더라도 팀의 정확한 버전을 README에 기록합니다.
python -m venv .venvmacOS/Linux에서는 source .venv/bin/activate, Windows PowerShell에서는 .\.venv\Scripts\Activate.ps1로 활성화합니다. PowerShell 정책 때문에 막히면 전역 정책을 바꾸지 말고 아래 명령의 python을 .\.venv\Scripts\python.exe로 바꾸어 실행할 수 있습니다.
python -m pip install "Django>=5.2,<5.3"python -m django startproject config .python manage.py startapp lionsconfig는 전체 설정, lions는 명단과 과제 기능의 앱입니다. 앱 이름으로 sessions를 사용하면 기존 Python 모듈과 충돌할 수 있습니다. 이 과정은 처음부터 끝까지 lions를 사용합니다.
config/settings.py의 기존 INSTALLED_APPS 목록 끝에 "lions.apps.LionsConfig"를 추가합니다. 기존 Django 앱을 지우지 않습니다. 기본 SQLite와 기본 사용자 모델은 그대로 사용합니다. 사용자 모델 교체는 진행 중 DB를 지우는 방식으로 해결하지 않습니다.
세 파일을 연결하기
lions/views.py를 작성합니다.
from django.http import JsonResponsefrom django.views.decorators.http import require_GET
@require_GETdef member_api(request): return JsonResponse({"members": [{"id": 1, "name": "가람"}]})새 파일 lions/urls.py를 만듭니다.
from django.urls import pathfrom . import views
app_name = "lions"urlpatterns = [ path("api/members/", views.member_api, name="member-api"),]config/urls.py를 다음과 같이 연결합니다.
from django.contrib import adminfrom django.urls import include, path
urlpatterns = [ path("admin/", admin.site.urls), path("", include("lions.urls")),]python manage.py migratepython manage.py checkpython manage.py runserverhttp://127.0.0.1:8000/api/members/에서 JSON과 상태 코드 200을 확인합니다. /api/member/는 다른 주소이므로 404여야 합니다. migrate는 현재 설치된 앱의 DB 변경 이력을 적용합니다. view 코드 수정마다 실행하는 명령은 아닙니다.
요청 계약을 검사하기
lions/tests.py에 다음 테스트를 작성합니다. 서버와 별도 터미널에서 python manage.py test를 실행합니다.
from django.test import TestCasefrom django.urls import reverse
class MemberApiTests(TestCase): def test_returns_members(self): response = self.client.get(reverse("lions:member-api")) self.assertEqual(response.status_code, 200) self.assertEqual(response.json()["members"][0]["name"], "가람")
def test_rejects_post(self): response = self.client.post(reverse("lions:member-api")) self.assertEqual(response.status_code, 405)테스트 클라이언트는 Django 내부로 요청하므로 실행 중인 runserver가 없어도 검사할 수 있습니다. reverse는 URL 이름으로 경로를 찾아 하드코딩을 줄입니다.
세션 실습과 완료 기준
권장 90분: 환경 20분, 요청 흐름 25분, 수정 실습 25분, 테스트와 짝 설명 20분입니다.
- 가상 회원을 한 명 더 추가하고 JSON의 변화와 테스트 결과를 확인합니다.
GET /health/에{"status": "ok"}를 반환하는 view와 URL을 직접 추가합니다.- 처음 보는 팀원이 URL 등록 위치와 view 위치를 2분 안에 찾을 수 있도록 README에 구조를 적습니다.
완료 기준: 200·404·405를 구분하고 테스트를 실행하며 URL에서 응답까지 실제 함수 이름으로 설명합니다. 다음 주에는 고정 배열을 DB 조회로 교체합니다.
자주 막히는 지점
| 증상 | 확인 순서 |
|---|---|
| Django를 찾지 못함 | python -m pip show Django와 가상환경 Python 경로 확인 |
| 앱 이름 충돌 | sessions, django, test 대신 이 문서의 lions 사용 |
| 404 | 프로젝트 include → 앱 path → 마지막 / 확인 |
| 테이블이 없다는 오류 | INSTALLED_APPS 등록과 showmigrations, migrate 확인 |
| 포트 사용 중 | 실행 중 서버 확인 또는 runserver 8001 사용 후 주소도 변경 |
runserver와 개발 설정은 로컬 연습용입니다. 공개 배포 전에는 인증·권한 문서의 배포 점검을 완료합니다. 실제 키·비밀번호와 .venv, db.sqlite3는 저장소에서 제외합니다.
더 읽어보기
연결된 PBL 미션과 VOD
| 주차·미션 | 참고 VOD 범위 |
|---|---|
| 4주 · Django와 MTV | Python 첫걸음 12·13장 |
강좌 안내: 참고 강좌 1. 이 문서는 영상 전체를 옮긴 전사 자료가 아닙니다. 세부 내용은 위 공식 문서에서 확인합니다.