Django

김기훈·2025년 10월 31일

Django

목록 보기
1/17
post-thumbnail

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에서 대응
ModelDB 구조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. 데이터베이스 기본

  • Django ORM 기본 문법

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 차이

구분DjangoFastAPI
철학“올인원 프레임워크”“경량, 자유도 높은 프레임워크”
인증기본 내장 (세션 기반)직접 구현 (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']
    1. 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)
    1. .env 파일 사용하기
    • 환경변수를 별도의 .env 파일에 정의하고, 이 파일을 로드하여 사용 가능
      • 주로 개발 환경에서 사용되며, 버전 관리에서 제외해야 함
    • python-dotenv 라이브러리(pip install python-dotenv 필요)
      • .env 파일을 쉽게 로드할 수 있도록 도와주는 라이브러리

### 1. secret.json  파일 생성하기 

{
    "DB_HOST": "localhost",
    "DB_USER": "user",
    "DB_PASSWORD": "password",
    "API_KEY": "your_api_key_here"
}

### 2. 파이썬에서 secret.json 파일 읽기

import json

# secret.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}")

### 3. os.environ에 설정하여 시스템 환경변수처럼 사용하기

import os
import json

# secret.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}")
    1. secret.json 사용하기
    • secret.json 파일은 JSON 형식으로 중요한 환경변수나 설정값을 저장하는 파일
      • 이 파일은 주로 API 키, 데이터베이스 설정, 인증 정보 등 민감한 데이터를 관리하기 위해 사용
    • 장점
      • 구조화된 데이터
        • JSON 형식을 사용하여 데이터를 구조화 가능
        • 여러 환경변수를 하나의 파일로 깔끔하게 관리 가능
      • 유연성
        • 파일 내용을 쉽게 수정 및 확장 가능
        • 새로운 환경변수나 설정값을 쉽게 추가 가능

환경변수 관리 도구

    1. direnv(brew install direnv 필요)
    • 디렉토리별로 환경변수를 자동으로 로드하고 언로드할 수 있게 도와주는 도구
      • 프로젝트 디렉토리에서 .envrc파일을 만들고 여기에 환경변수를 정의
        • export DB_HOST=localhost
      • .envrc 파일을 허용
        • direnv allow
    1. Docker 환경변수 관리
    • Docker 컨테이너에서 환경변수를 설정하는 방법
        1. -e 플래그
        1. .env 파일 사용
        1. Docker Compose에서 .env 파일을 사용하는 것도 가능
docker run -e DB_HOST=localhost my-container

주의

  • 민감한 정보는 .env secret.json 파일에 저장
  • 환경변수 파일(.env secret.json 등)
    • .gitignore 에 등록하여 원격 레포지토리에 업로드 되지 않도록 함
  • 환경변수의 이름은 일관성있게 정하기
  • 환경변수의 기본값을 설정하여 예상치 못한 오류 방지하기
  • 필요하지 않은 환경변수는 삭제하여 환경을 깨끗하게 유지하기

gitignore

gitignore.io

  • 사용방법
      1. 프로젝트 루트 위치에 .gitignore 파일을 생성
      1. 위의 사이트에 들어가서 본인이 사용하고 있는 프레임워크 또는 환경을 입력 후, 생성을 누름
      1. git에 올라가지 않을 항목들이 나옴
      1. 복사해서 .gitignore에 붙여넣기 함
profile
안녕하세요.

0개의 댓글