Django 공식문서
장고 걸스 튜토리얼
나만의 장고 학습 방식
- 1단계
- 기능 위주로 빠르게 만들기
- 회원가입, 로그인
- 글 작성/조회/수정/삭제
- 이미지 업로드
- 좋아요, 팔로우
- 검색, 필터링
- 댓글
- 페이지네이
- Django 대부분의 핵심을 자연스럽게 경험하기 위해
- 2단계
- “왜 이렇게 되는지” 궁금한 부분만 깊게 파기
- ORM 최적화(select_related, prefetch_related)
- CBV 구조 (dispatch, get/post 흐름)
- Form 내부 구조
- authenticate(), login(), logout() 동작
- Media 파일 처리 구조
- Middleware 흐름
- 3단계
- 고급 개념은 프로젝트 경험 쌓인 후에 보는 게 훨씬 이해가능
- Mixin 패턴
- Custom User Model 확장
- Signals
- Transaction
- QuerySet 구조
- Caching
- Celery 비동기 작업
- 이러한 내용은 기초가 잡힌 후에 공부해야 이해가 잘됨
시작 전 준비
1. Python 기초 다지기
2. 웹 기본 구조 이해
| 개념 | 역할 | Django에서 대응 |
|---|
| Model | DB 구조 | models.py |
| View | 로직 처리 | views.py |
| Template | 화면 표시 | templates/ |
| URL | 라우팅 담당 | urls.py |
- 장고는 MVT(Model–View–Template) 구조를 따름
- 즉, “요청이 들어오면 → URL이 뷰로 연결 → 뷰가 모델을 조작 → 템플릿으로 응답” 의 흐름
3. HTTP와 REST 구조 이해
- 장고도 HTTP 요청을 처리하는 서버
- GET: 데이터 조회
- POST: 데이터 생성
- PUT/PATCH: 데이터 수정
- DELETE: 데이터 삭제
- request, response, status code 개념
- RESTful URL 설계 규칙 (/users/1/, /articles/3/comments/ 등)
4. 데이터베이스 기본
5. 프로젝트 구조 감 잡기
myproject/
├── manage.py
├── myproject/
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
# 앱을 만들면 (python manage.py startapp blog)
blog/
├── models.py
├── views.py
├── urls.py
├── templates/blog/
└── static/blog/
- 이걸 여러 앱으로 쪼개서 기능을 모듈화하는 게 Django의 핵심
6. Django 설정 이해 (settings.py)
INSTALLED_APPS : 앱 등록
DATABASES : DB 연결 설정
TEMPLATES : HTML 폴더 경로 설정
STATIC_URL, MEDIA_URL : 정적 파일 / 업로드 파일 경로
SECRET_KEY : 보안 키 (FastAPI의 JWT secret처럼 중요)
7. 인증/권한 시스템 개념
- 장고에는 내장 인증 시스템이 있어서 로그인/회원가입을 금방 구현 가능
- User 모델 (기본 제공)
- django.contrib.auth
- 세션 기반 인증 (JWT는 DRF에서)
- 로그인 상태 유지 (세션, 쿠키)
- 장고 관리자 페이지 (/admin)
8. Django vs FastAPI 차이
| 구분 | Django | FastAPI |
|---|
| 철학 | “올인원 프레임워크” | “경량, 자유도 높은 프레임워크” |
| 인증 | 기본 내장 (세션 기반) | 직접 구현 (JWT 등) |
| ORM | 내장 (Django ORM) | 외부 패키지 (Tortoise, SQLAlchemy 등) |
| 템플릿 | HTML 렌더링 지원 | 별도 프론트엔드 필요 |
| 적합한 용도 | 완성형 웹서비스 | API 중심 서비스 |
9. 시작 전 환경 준비
pip install django
- Python 3.10 이상
- Poetry 또는 venv 가상환경
- IDE: PyCharm 추천 (장고 템플릿 자동 완성 지원)
- DB: SQLite(기본), PostgreSQL로 확장 가능
10. 환경변수(Environment Variables)
- 운영체제에서 전역적으로 설정할 수 있는 변수
- 시스템 설정, 사용자 정보, 실행 경로 등의 중요한 정보를 저장하고,
- 이를 필요로 하는 프로그램이 쉽게 접근할 수 있도록 도와줌
- 예시
- 데이터베이스 접속 정보 (예: DB_HOST, DB_USER, DB_PASSWORD)
- API 키 및 시크릿 (예: API_KEY, SECRET_KEY)
- 프로젝트의 실행 환경 (예: DEVELOPMENT, PRODUCTION)
- 파일 경로 및 시스템 설정
장점
- 보안성:
- 중요한 정보(예: 비밀번호, API 키)를 코드에 직접 저장하지 않음으로써 보안 위험 감소
- 유연성:
- 코드 변경 없이 다양한 환경(로컬, 스테이징, 프로덕션)에서 다른 설정을 적용 가능
- 협업 용이성:
- 여러 개발자가 같은 코드를 사용하더라도, 각자의 환경에 맞게 설정할 수 있어 협업이 수월
파이썬에서 환경변수를 다루는 방법
import os
os.environ['DB_HOST'] = 'localhost'
db_host = os.getenv('DB_HOST')
print(db_host)
del os.environ['DB_HOST']
- os 모듈 사용하기
- 환경변수 설정:
os.environ 을 사용하여 시스템 환경변수를 설정 가능
- 환경변수 읽기:
os.getenv() 또는 os.environ.get() 을 사용하여 환경변수를 읽기 가능
- 환경변수 삭제:
del os.environ['VARIABLE_NAME'] 을 사용하여 환경변수를 삭제 가능
from dotenv import load_dotenv
import os
load_dotenv()
db_host = os.getenv('DB_HOST')
print(db_host)
- .env 파일 사용하기
- 환경변수를 별도의 .env 파일에 정의하고, 이 파일을 로드하여 사용 가능
- 주로 개발 환경에서 사용되며, 버전 관리에서 제외해야 함
- python-dotenv 라이브러리(
pip install python-dotenv 필요)
- .env 파일을 쉽게 로드할 수 있도록 도와주는 라이브러리
{
"DB_HOST": "localhost",
"DB_USER": "user",
"DB_PASSWORD": "password",
"API_KEY": "your_api_key_here"
}
import json
with open('path/to/secret.json') as f:
secrets = json.load(f)
db_host = secrets.get('DB_HOST')
api_key = secrets.get('API_KEY')
print(f"DB Host: {db_host}")
print(f"API Key: {api_key}")
import os
import json
with open('path/to/secret.json') as f:
secrets = json.load(f)
os.environ['DB_HOST'] = secrets.get('DB_HOST')
os.environ['API_KEY'] = secrets.get('API_KEY')
db_host = os.getenv('DB_HOST')
api_key = os.getenv('API_KEY')
print(f"DB Host: {db_host}")
print(f"API Key: {api_key}")
- secret.json 사용하기
- secret.json 파일은 JSON 형식으로 중요한 환경변수나 설정값을 저장하는 파일
- 이 파일은 주로 API 키, 데이터베이스 설정, 인증 정보 등 민감한 데이터를 관리하기 위해 사용
- 장점
- 구조화된 데이터
- JSON 형식을 사용하여 데이터를 구조화 가능
- 여러 환경변수를 하나의 파일로 깔끔하게 관리 가능
- 유연성
- 파일 내용을 쉽게 수정 및 확장 가능
- 새로운 환경변수나 설정값을 쉽게 추가 가능
환경변수 관리 도구
- direnv(
brew install direnv 필요)
- 디렉토리별로 환경변수를 자동으로 로드하고 언로드할 수 있게 도와주는 도구
- 프로젝트 디렉토리에서 .envrc파일을 만들고 여기에 환경변수를 정의
- .envrc 파일을 허용
- Docker 환경변수 관리
- Docker 컨테이너에서 환경변수를 설정하는 방법
- -e 플래그
- .env 파일 사용
- Docker Compose에서 .env 파일을 사용하는 것도 가능
docker run -e DB_HOST=localhost my-container
주의
- 민감한 정보는
.env secret.json 파일에 저장
- 환경변수 파일(.env secret.json 등)
.gitignore 에 등록하여 원격 레포지토리에 업로드 되지 않도록 함
- 환경변수의 이름은 일관성있게 정하기
- 환경변수의 기본값을 설정하여 예상치 못한 오류 방지하기
- 필요하지 않은 환경변수는 삭제하여 환경을 깨끗하게 유지하기
gitignore
gitignore.io
- 사용방법
- 프로젝트 루트 위치에
.gitignore 파일을 생성
- 위의 사이트에 들어가서 본인이 사용하고 있는 프레임워크 또는 환경을 입력 후, 생성을 누름
- git에 올라가지 않을 항목들이 나옴
- 복사해서
.gitignore에 붙여넣기 함