끄적이는 개발노트

260623_강의 정리 (Django 구조) 본문

Python

260623_강의 정리 (Django 구조)

크런키스틱 2026. 6. 24. 09:22
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와 다르지만 동작 원리는 본질적으로 같은 계열의 패턴
📦
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.pyURL 패턴과 View 매핑 (라우팅 테이블)
wsgi.py / asgi.py웹 서버와 Django를 연결하는 인터페이스
myapp/models.py앱별 데이터 모델 정의
myapp/views.py앱별 비즈니스 로직
주의
· settings.pyINSTALLED_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로 교체 설정 가능
🗄️
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 권장
⚖️
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의 일관성 있는 구조가 유리
📤
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 작성 방식의 차이일 뿐, 기능적으로 우열은 없음
728x90