끄적이는 개발노트
260623_강의 정리 (Django 구조) 본문
728x90
Web Framework · Django
Django 구조 정리 — MVT, ORM, CBV/FBV
- Django는 MVT(Model-View-Template) 패턴으로 요청과 응답을 처리하는 Python 웹 프레임워크
- ORM으로 SQL 없이 DB를 다루고, View는 CBV/FBV 두 가지 방식으로 작성 가능
- 설치부터 프로젝트 구조, 실습 코드까지 한 번에 정리
1. Django란 무엇인가
"웹 개발에 필요한 거의 모든 것을 미리 갖춘 프레임워크" — Django의 핵심 정체성
- Python 기반의 풀스택 웹 프레임워크(Web Application Framework)
- Cross-platform — Windows, macOS, Linux 어디서든 동일하게 동작
- "배터리 포함(Batteries-included)" 철학 → 인증, 관리자 페이지, ORM, 보안 기능이 기본 내장
- 관리자 페이지(Admin) 자동 생성 → 모델만 등록하면 데이터 관리 화면이 자동으로 만들어짐
- Instagram, Pinterest, NASA 웹사이트 등 대규모 서비스에서 검증된 프레임워크
💡 새 개념
MVT Model-View-Template
- Django의 핵심 설계 패턴, 흔히 알려진 MVC와 유사하지만 역할 명칭이 다름
- MVC의 Controller 역할을 Django에서는 View가 담당
- MVC의 View(화면) 역할을 Django에서는 Template이 담당
식당으로 비유하면 Model = 주방 재고, View = 주방장(조리 로직), Template = 플레이팅(손님에게 보이는 형태)
핵심 요약
· Django = "이미 다 갖춰진 웹 프레임워크" + MVT 패턴 + ORM
· 이름은 MVC와 다르지만 동작 원리는 본질적으로 같은 계열의 패턴
· Django = "이미 다 갖춰진 웹 프레임워크" + MVT 패턴 + ORM
· 이름은 MVC와 다르지만 동작 원리는 본질적으로 같은 계열의 패턴
2. 설치 및 프로젝트 생성
설치부터 서버 실행까지 — 가장 먼저 손에 익혀야 할 명령어들
- 가상환경 생성 후 Django 설치 → pip install django
- 프로젝트 생성 → django-admin startproject mysite
- 앱(기능 단위 모듈) 생성 → python manage.py startapp myapp
- 개발 서버 실행 → python manage.py runserver
💡 새 개념
프로젝트 vs 앱 Project vs App
- 프로젝트 = 사이트 전체를 감싸는 큰 컨테이너 (설정, 배포 단위)
- 앱 = 기능별로 나눈 작은 모듈 (게시판, 회원관리 등)
하나의 블로그 프로젝트 안에 accounts 앱, posts 앱, comments 앱이 함께 존재하는 구조
| 파일/폴더 | 역할 |
|---|---|
| manage.py | 명령줄 유틸리티 진입점 (서버 실행, 마이그레이션 등) |
| settings.py | 프로젝트 전역 설정 (DB, 앱 목록, 보안키 등) |
| urls.py | URL 패턴과 View 매핑 (라우팅 테이블) |
| wsgi.py / asgi.py | 웹 서버와 Django를 연결하는 인터페이스 |
| myapp/models.py | 앱별 데이터 모델 정의 |
| myapp/views.py | 앱별 비즈니스 로직 |
주의
· settings.py의 INSTALLED_APPS에 앱을 등록해야 Django가 해당 앱을 인식함
· DATABASES 설정으로 MySQL, PostgreSQL, SQLite 등 연결 가능
· settings.py의 INSTALLED_APPS에 앱을 등록해야 Django가 해당 앱을 인식함
· DATABASES 설정으로 MySQL, PostgreSQL, SQLite 등 연결 가능
3. MVT 구조 — 요청부터 응답까지
"사용자의 요청(request)이 어떻게 화면(response)으로 돌아오는가" — Django 동작의 핵심 흐름
1
URL Resolver
사용자가 요청한 URL을 urls.py의 패턴과 매칭
2
View
매칭된 URL에 연결된 View 함수/클래스가 실행되며 비즈니스 로직 처리
3
Model (ORM)
필요 시 View가 Model을 통해 DB에서 데이터 조회·저장
4
Template
View가 데이터를 Template에 전달, HTML로 렌더링
5
Response
완성된 HTML(또는 JSON)이 사용자 브라우저로 반환
request
→
URL Resolver
→
View
→
Model / Template
→
response
💡 새 개념
Model Model
- DB 테이블과 1:1로 매핑되는 Python 클래스, ORM을 통해 SQL 없이 데이터를 다룸
class Student(models.Model): name = models.CharField(max_length=20)
View View
- 실제 비즈니스 로직이 실행되는 곳, MVC의 Controller 역할과 동일
사용자 요청을 받아 Model에서 데이터를 가져오고 Template에 넘겨주는 중간 다리
Template Template
- 실제 화면(HTML)을 그리는 부분, 전달받은 데이터를 동적으로 렌더링
장바구니 페이지에서 상품 목록을 반복 출력하는 {% for %} 문법
정확한 명칭 — Jinja가 아니라 DTL
· Django의 기본 템플릿 엔진은 DTL(Django Template Language)
· Jinja2와 문법이 비슷하지만 별도의 엔진이며, 필요하면 Jinja2로 교체 설정 가능
· Django의 기본 템플릿 엔진은 DTL(Django Template Language)
· Jinja2와 문법이 비슷하지만 별도의 엔진이며, 필요하면 Jinja2로 교체 설정 가능
4. ORM — Object-Relational Mapping
"SQL을 직접 쓰지 않고 어떻게 DB를 다루는가" — Python 클래스와 DB 테이블을 잇는 다리
- ORM은 Python 클래스 ↔ DB 테이블을 자동으로 매핑해주는 기술
- SQL 쿼리문 대신 Python 문법만으로 데이터 CRUD가 가능
ORM vs SQL
# ORM 방식 Student.objects.filter(kor__gte=80) # 동일한 SQL # SELECT * FROM student WHERE kor >= 80;
- 모델 정의 후 DB에 반영하는 2단계 과정
- python manage.py makemigrations → 모델 변경사항을 마이그레이션 파일로 생성
- python manage.py migrate → 실제 DB 테이블에 반영
💡 새 개념
Migration Migration
- 모델(Python 코드)의 변경 내역을 DB 스키마 변경으로 기록하고 적용하는 절차
모델에 새 필드를 추가하면, makemigrations로 변경사항을 기록한 뒤 migrate로 실제 테이블에 컬럼 추가
DB 선택
· 기본 DB는 SQLite지만, settings.py에서 MySQL, PostgreSQL 등으로 교체 가능
· 운영 환경에서는 동시 접속·트랜잭션 처리 한계 때문에 SQLite보다 MySQL/PostgreSQL 권장
· 기본 DB는 SQLite지만, settings.py에서 MySQL, PostgreSQL 등으로 교체 가능
· 운영 환경에서는 동시 접속·트랜잭션 처리 한계 때문에 SQLite보다 MySQL/PostgreSQL 권장
5. CBV vs FBV — View를 작성하는 두 가지 방식
"View 로직을 함수로 쓸지, 클래스로 쓸지" — 같은 결과, 다른 작성 방식
| 구분 | FBV (Function-Based) | CBV (Class-Based) |
|---|---|---|
| 정의 방식 | 함수로 작성 | 클래스로 작성, Django 제공 View 클래스 상속 |
| 코드 길이 | 단순 로직엔 짧고 직관적 | 반복되는 CRUD 로직은 오히려 더 짧아짐 |
| 재사용성 | 낮음 (복붙 많아짐) | 높음 (상속·Mixin으로 기능 확장) |
| 가독성 | 로직 흐름이 한눈에 보임 | 익숙해지기 전엔 추상화가 헷갈릴 수 있음 |
| 대표 예시 | def my_view(request): | ListView, DetailView, CreateView |
FBV vs CBV
# FBV 방식 def student_list(request): students = Student.objects.all() return render(request, 'list.html', {'students': students}) # CBV 방식 class StudentListView(ListView): model = Student template_name = 'list.html'
선택 기준
· 단순하고 일회성인 로직 → FBV가 직관적
· 목록 조회·생성·수정·삭제 같은 반복되는 CRUD 패턴 → CBV로 코드량 절감
· 팀/프로젝트 규모가 커질수록 CBV의 일관성 있는 구조가 유리
· 단순하고 일회성인 로직 → FBV가 직관적
· 목록 조회·생성·수정·삭제 같은 반복되는 CRUD 패턴 → CBV로 코드량 절감
· 팀/프로젝트 규모가 커질수록 CBV의 일관성 있는 구조가 유리
6. Response의 종류
View가 처리를 마친 후 반환하는 응답 객체들
💡 새 개념
HttpResponse HttpResponse
- 가장 기본적인 응답 객체, 텍스트/HTML을 직접 반환
return HttpResponse("Hello Django")
JsonResponse JsonResponse
- JSON 형태로 데이터를 반환, API 서버 구축 시 주로 사용
return JsonResponse({'name': 'kim', 'score': 90})
Redirect Redirect
- 다른 URL로 사용자를 이동시키는 응답
로그인 성공 후 메인 페이지로 return redirect('home')
HttpResponse
JsonResponse
Redirect
전체 요약
· Django는 MVT 패턴으로 요청-응답을 처리하며, ORM으로 SQL 없이 DB를 다룸
· CBV/FBV는 상황에 따라 선택하는 View 작성 방식의 차이일 뿐, 기능적으로 우열은 없음
· Django는 MVT 패턴으로 요청-응답을 처리하며, ORM으로 SQL 없이 DB를 다룸
· CBV/FBV는 상황에 따라 선택하는 View 작성 방식의 차이일 뿐, 기능적으로 우열은 없음
728x90
'Python' 카테고리의 다른 글
| 260624_강의 정리 (Django 정리 - Form, View, Model) (0) | 2026.06.24 |
|---|---|
| 260527_강의 정리 (Scipy, 모델) (1) | 2026.05.27 |
| 260526_강의 정리(Scipy, 수치해석) (0) | 2026.05.27 |
| 260522_강의 정리 (시계열분석, Statsmodel) (0) | 2026.05.27 |
| 260521_강의 정리 (시계열 분석) (0) | 2026.05.21 |