Django 데이터베이스 연동과 ORM 이해
Django 프로젝트에서 데이터를 저장하고 꺼내 쓰는 게 어렵게 느껴지시나요?
ORM과 관리자 페이지의 마법을 경험해보세요!
안녕하세요, 여러분! 😊
웹 애플리케이션을 만들다 보면 사용자 데이터를 저장하거나, 게시글을 등록하고 수정하는 기능이 꼭 필요하죠.
이럴 때 가장 중요한 게 바로 데이터베이스 연동입니다.
이번 포스팅에서는 Django에서 가장 기본적으로 사용하는 SQLite 설정부터, 데이터를 자유자재로 다룰 수 있게 해주는 ORM(Object-Relational Mapping)의 개념과 사용법을 살펴볼 거예요.
또한 Django의 강력한 무기 중 하나인 Admin 페이지를 통해 데이터를 관리하는 방법까지 같이 다루겠습니다.
처음엔 조금 생소할 수 있지만, 하나씩 따라오다 보면 데이터베이스가 생각보다 친숙하게 느껴질 거예요. 😊
자, 그럼 본격적으로 시작해볼까요?
목차
1. SQLite 설정과 마이그레이션 개념 🧱
Django는 기본적으로 SQLite라는 가볍고 사용하기 쉬운 데이터베이스를 기본으로 제공합니다.
설치할 것도 없고, 별도의 서버 없이 바로 사용 가능하다는 점에서 개발자들 특히 초보자에게 아주 좋은 선택이죠.
📂 settings.py에서 데이터베이스 확인하기
settings.py
파일을 열면 아래와 같이 DATABASES 설정이 이미 되어 있을 거예요.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
이게 바로 SQLite를 사용하는 기본 설정입니다.
별다른 작업 없이 바로 데이터베이스 기능을 쓸 수 있게 도와주는 설정이죠.
🔧 마이그레이션이란 무엇인가요?
Django에서 모델을 만들었다고 해서 바로 DB에 반영되는 건 아니에요.
모델의 변경사항을 데이터베이스에 적용하려면 마이그레이션(Migration) 작업을 해야 합니다.
이 과정을 쉽게 설명하면 이래요:
- 모델을 만들면 그걸 반영할 SQL 코드가 자동으로 생성됨 →
makemigrations
- 생성된 SQL 코드를 실제 DB에 반영 →
migrate
터미널에서 아래 명령어를 실행해보세요.
python manage.py makemigrations
python manage.py migrate
이제 모델에 정의한 구조대로 테이블이 데이터베이스에 생성됩니다. 짠! 너무 어렵지 않죠?
📋 요약 테이블
개념 | 설명 |
---|---|
SQLite | Django 기본 데이터베이스로, 가볍고 별도 설치가 필요 없음 |
makemigrations | 모델 변경 사항을 기반으로 마이그레이션 파일 생성 |
migrate | 생성된 마이그레이션을 실제 데이터베이스에 적용 |
2. Django 모델 정의 방법과 필드 종류 📝
웹 서비스에서 정보를 저장하고 관리하려면 모델(Model)을 정의해야 합니다.
Django에서는 이 모델이 곧 데이터베이스 테이블과 1:1로 매칭돼요.
각 모델은 Python 클래스 형태로 정의되며, 클래스의 속성 하나하나가 데이터베이스의 컬럼이 됩니다.
📌 모델 클래스 예시
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
위 예시는 Post
라는 게시글 모델입니다.
title
, content
, created_at
이라는 세 개의 필드를 가지고 있고, 각각 문자열, 긴 텍스트, 생성 시간 정보를 저장해요.
🔍 주요 필드(Field) 종류 알아보기
필드 이름 | 설명 |
---|---|
CharField | 짧은 문자열 저장. max_length 필수 지정 |
TextField | 긴 텍스트 저장 (제한 없음) |
IntegerField | 정수 값 저장 |
DateTimeField | 날짜/시간 저장. auto_now_add 또는 auto_now 로 자동 설정 가능 |
BooleanField | True/False 값 저장 |
💡 유용한 모델 설정 옵션들
-
verbose_name
: 필드의 이름을 관리자 페이지에서 보기 쉽게 설정 -
default
: 기본값 지정 가능 -
null
,blank
: 비워도 되는지 여부 설정
모델은 단순히 테이블을 정의하는 걸 넘어서, Django 전반의 데이터 흐름을 담당해요.
앞으로의 기능 구현에서도 계속 활용되니, 지금 확실하게 익혀두는 걸 추천드립니다!
3. ORM과 QuerySet으로 데이터 다루기 ⚙️
Django에서는 ORM(Object-Relational Mapping) 기능을 통해 Python 코드만으로도 데이터베이스를 자유롭게 다룰 수 있습니다.
즉, 복잡한 SQL을 몰라도 객체 지향적으로 데이터를 삽입하고 수정하며 삭제할 수 있어요.
이게 진짜... 너무 편해요.
🛠️ 기본적인 데이터 조작 예시
# 객체 생성
post = Post(title="첫 글", content="장고 너무 재밌다!")
post.save()
# 모든 데이터 조회
Post.objects.all()
# 조건에 맞는 데이터 조회
Post.objects.filter(title__contains="첫")
# 하나만 가져오기
Post.objects.get(id=1)
# 데이터 수정
post = Post.objects.get(id=1)
post.title = "수정된 제목"
post.save()
# 데이터 삭제
post.delete()
보시다시피 .save()
, .filter()
, .get()
, .delete()
같은 메서드만 알면 데이터를 마음대로 다룰 수 있어요.
쿼리셋(QuerySet)을 이용하면 복잡한 조건도 체이닝해서 쉽게 만들 수 있고요.
🔍 자주 쓰는 QuerySet 메서드 정리
메서드 | 설명 |
---|---|
all() | 모든 객체를 조회 |
filter() | 조건에 맞는 객체만 조회 |
get() | 특정 조건에 맞는 하나의 객체 조회 (없거나 둘 이상이면 오류) |
exclude() | 특정 조건을 제외한 객체 조회 |
order_by() | 정렬 기준 지정 |
이런 메서드들을 조합하면, 꽤 복잡한 데이터 필터링도 몇 줄 안 되는 코드로 깔끔하게 해결할 수 있어요.
그러니까요, 진짜 ORM은 신세계예요.
⚠️ 주의할 점!
-
get()
은 여러 개의 결과가 있거나 없을 때 예외 발생! 항상 try/except로 감싸는 게 좋아요. -
save()
를 안 하면 DB에 반영되지 않아요. 반드시 저장해 주세요!
Django ORM은 입문자에게도 매우 직관적으로 다가오는 도구입니다.
복잡한 SQL 없이도 실무 수준의 데이터 처리가 가능하다는 건 정말 큰 장점이에요.
4. Django Admin 사이트 활용법 🛠️
Django를 처음 접하면 누구나 놀라는 기능이 있어요.
바로 Admin 사이트입니다!
개발자가 만든 모델을 관리자 페이지에서 바로 추가, 수정, 삭제할 수 있는 인터페이스가 기본 제공된다는 건... 솔직히 말해 사기급이에요.
🔐 관리자 계정 만들기
먼저 관리자 페이지를 사용하려면 슈퍼유저(superuser)를 생성해야 합니다.
터미널에서 아래 명령어를 입력해보세요.
python manage.py createsuperuser
이후 사용자명, 이메일, 비밀번호를 입력하면 관리자 계정이 생성됩니다.
서버를 실행하고 http://localhost:8000/admin
으로 접속해보세요!
🧩 모델 등록하기
관리자 페이지에서 직접 데이터를 관리하려면 모델을 admin에 등록해야 합니다.
해당 앱의 admin.py
파일을 열고 아래처럼 작성해보세요.
from django.contrib import admin
from .models import Post
admin.site.register(Post)
이제 관리자 페이지에 "Post" 메뉴가 생겨요.
여기서 데이터를 추가하거나 삭제할 수 있는 폼 UI가 자동으로 생성됩니다.
🎨 관리자 화면 커스터마이징
관리자 페이지의 기본 UI도 커스터마이징이 가능합니다.
예를 들어 제목, 생성일만 리스트에 보이게 하려면 아래처럼 코드를 수정하면 돼요.
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'created_at')
admin.site.register(Post, PostAdmin)
이런 식으로 list_filter
, search_fields
, readonly_fields
등 다양한 옵션을 지정해 관리 페이지를 내가 원하는 대로 꾸밀 수 있어요.
🧾 관리자 페이지 요약
기능 | 설명 |
---|---|
createsuperuser | 관리자 계정 생성 |
register() | 모델을 admin 사이트에 등록 |
list_display | 목록에서 보여줄 필드 지정 |
이처럼 Django의 Admin 사이트는 개발자가 데이터 관리 페이지를 손쉽게 만들 수 있도록 도와줍니다.
특히 초기에 빠르게 MVP를 만들거나 내부 관리 도구가 필요할 때 아주 유용해요.
5. 예고: 모델 간 관계 설정 개념 🔗
지금까지는 하나의 모델만을 기준으로 데이터를 다뤘어요.
하지만 현실 세계의 데이터는 대부분 서로 관계를 맺고 있죠.
예를 들어, 사용자(User)가 여러 개의 게시글(Post)을 작성하거나, 하나의 카테고리(Category)가 여러 개의 상품(Product)을 포함하는 구조 말이에요.
🔄 다양한 관계(Relation)의 형태
- 1:1 관계 (OneToOneField) – 예: 사용자와 프로필
- 1:N 관계 (ForeignKey) – 예: 사용자와 게시글
- N:N 관계 (ManyToManyField) – 예: 사용자와 그룹
이런 관계를 정의하려면 Django 모델에서 ForeignKey
, OneToOneField
, ManyToManyField
같은 필드를 사용합니다.
다음 블로그 글에서는 이렇게 모델 간 관계를 정의하고 이를 활용하는 방법을 심도 있게 다룰 예정이에요.
예를 들어 게시글(Post)에 작성자(User)를 연결하거나, 하나의 글에 여러 개의 댓글(Comment)을 연결하는 구조를 만드는 실전 예제를 보여드릴게요.
복잡한 데이터 구조도 Django에서는 간단하고 우아하게 정의할 수 있다는 사실, 꼭 다음 편에서 확인해보세요!
6. 마무리 정리 및 다음 글 안내 📌
이번 포스팅에서는 Django에서 데이터를 다루기 위해 꼭 알아야 할 데이터베이스 설정, 모델 정의, ORM 사용법, 그리고 Admin 사이트 활용까지 폭넓게 살펴봤습니다.
처음에는 생소할 수 있는 개념들이지만, 직접 따라 해보면서 실습해보면 어느 순간 "아, 이제 좀 알겠다!" 하는 순간이 분명 찾아올 거예요.
데이터를 설계하고 관리하는 과정은 앞으로 더 다양한 기능들을 구현할 때 아주 중요한 기반이 됩니다.
그리고 다음 글에서는 드디어 모델 간 관계 설정에 대해 본격적으로 들어갑니다.
ForeignKey를 이용해 사용자와 게시글을 연결하고, 댓글을 추가해보는 등 조금 더 현실적인 예제를 다룰 예정이에요.
🔥 이제 여러분은 Django 데이터 모델링의 첫 단계를 마스터했습니다.
다음 단계에서는 훨씬 더 유기적이고 확장성 있는 데이터 구조를 함께 만들어봅시다!
'Python > Python 웹프로그래밍' 카테고리의 다른 글
[Django-07] CRUD 구현과 Todo 앱 개발 (0) | 2025.04.26 |
---|---|
[Django-06] Django 모델 생성과 데이터 출력 완전 정복 (0) | 2025.04.22 |
[Django-04] 첫 Django 앱 생성과 간단한 페이지 구현 (0) | 2025.04.21 |
[Django-03] Django 앱 구조와 URL·뷰·템플릿 완전 정복 (0) | 2025.04.20 |
[Django-02] 개발환경 구축과 Django 프로젝트 시작 (0) | 2025.04.19 |