기술블로그

📌 Django와 PostgreSQL의 관계

Chansman 2025. 3. 27. 15:55

📌 Django와 PostgreSQL의 관계

Django는 Python으로 작성된 고급 웹 프레임워크로, 웹 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 다양한 도구와 기능을 제공합니다. PostgreSQL은 이러한 Django와 함께 사용되는 강력한 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 이 둘은 Python을 기반으로 한 웹 개발 환경에서 핵심적인 역할을 수행합니다.


🚦 Django와 PostgreSQL의 관계

Django의 역할:

  • Django는 웹 애플리케이션의 서버 측 로직을 처리합니다.
  • HTTP 요청을 받아들여, 비즈니스 로직을 수행한 후, HTTP 응답을 반환합니다.

PostgreSQL의 역할:

  • PostgreSQL은 웹 애플리케이션에서 발생하는 데이터를 안정적으로 저장하고 관리하는 데이터베이스 시스템입니다.

Django는 **ORM(Object-Relational Mapping)**을 통해 Python 객체와 데이터베이스의 테이블 간의 매핑을 처리하여, 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있도록 도와줍니다.


💻 Python과 Django, PostgreSQL 간의 관계

Python:

  • Python은 웹 애플리케이션의 비즈니스 로직을 구현하는 프로그래밍 언어입니다.

Django:

  • Django는 Python으로 작성된 웹 프레임워크로, 웹 애플리케이션의 구조를 정의하고, HTTP 요청/응답 처리, URL 라우팅, 보안 기능 등을 제공합니다.

PostgreSQL:

  • PostgreSQL은 웹 애플리케이션의 데이터를 저장하는 관계형 데이터베이스 관리 시스템입니다.

웹 애플리케이션의 흐름은 다음과 같습니다:

  1. 클라이언트 요청: 사용자가 웹 브라우저를 통해 Django로 구축된 웹 애플리케이션에 HTTP 요청을 보냅니다.
  2. URL 라우팅: Django의 URL 디스패처가 요청된 URL을 분석하여 해당하는 뷰(view) 함수를 호출합니다.
  3. 뷰 함수 처리: 뷰 함수는 비즈니스 로직을 수행하고, 필요한 경우 데이터베이스와 상호작용하여 데이터를 가져옵니다.
  4. 데이터베이스 상호작용: Django의 ORM을 통해 PostgreSQL 데이터베이스에 쿼리를 보내고, 결과를 받아옵니다.
  5. 응답 반환: 뷰 함수는 처리된 데이터를 템플릿에 전달하여 HTML 페이지를 생성하고, 이를 클라이언트에게 반환합니다.

🧪 실제 예시와 비유

예시 코드: 모델 정의 및 데이터 삽입

# models.py
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    birth_date = models.DateField()

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    published_date = models.DateField()

# 데이터 삽입 예시
author = Author.objects.create(name='홍길동', birth_date='1980-01-01')
book = Book.objects.create(title='Django 학습', author=author, published_date='2025-03-27')
 

위 코드는 AuthorBook 모델을 정의하고, 각각의 테이블에 데이터를 삽입하는 예시입니다. Django의 ORM을 사용하여 Python 객체를 데이터베이스의 레코드로 변환합니다.

 

1. 객체 (Object)란?

  • 객체는 현실 세계의 사물이나 개념을 컴퓨터에서 표현한 것입니다. 예를 들어, "책"이라는 객체를 생각해보세요. "책" 객체는 제목, 저자, 출판일 등의 속성(attribute)을 가질 수 있습니다.
  • 파이썬에서 객체는 사실 하나의 변수와 비슷하지만, 그 안에 여러 정보를 담을 수 있습니다.

예시: 책 객체

class Book:
    def __init__(self, title, author, publish_date):
        self.title = title
        self.author = author
        self.publish_date = publish_date

# 책 객체 생성
book1 = Book("Django for Beginners", "William S. Vincent", "2025-01-01")

여기서 book1은 책 객체입니다. 책의 제목, 저자, 출판일을 저장하는 객체죠.

2. 레코드 (Record)란?

  • 레코드는 데이터베이스에서 하나의 행(row)을 의미합니다. 쉽게 말해, 데이터베이스 테이블 안에 있는 한 줄을 말합니다.
  • 예를 들어, 책 테이블이 있다고 가정하면, 한 줄이 바로 책 한 권의 정보를 담고 있는 레코드입니다. 레코드는 여러 개의 **컬럼(열)**을 가집니다. 예를 들어, 제목, 저자, 출판일 등이 각각 하나의 컬럼이죠.

예시: 책 테이블 레코드

제목저자출판일
Django for Beginners William S. Vincent 2025-01-01

위와 같이, 책 한 권에 대한 정보가 테이블에 하나의 레코드로 저장됩니다.

3. ORM (Object-Relational Mapping)란?

  • ORM은 **객체(Object)**와 데이터베이스의 레코드(Record) 사이를 자동으로 변환해주는 도구입니다.
  • 쉽게 말해, 파이썬 객체(책 객체)를 데이터베이스의 레코드(책 레코드)로 바꿔주는 역할을 합니다. 또한, 그 반대로 데이터베이스의 레코드를 파이썬 객체로 변환하기도 합니다.

예시: ORM 사용

Django에서 ORM을 사용하면, 우리가 직접 SQL 쿼리를 작성하지 않아도, 파이썬 코드만으로 데이터베이스에 데이터를 저장하고 불러올 수 있습니다.

# models.py에서 Book 모델을 정의합니다.
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    publish_date = models.DateField()

# ORM을 사용해 책 객체를 데이터베이스에 저장
book = Book(title="Django for Beginners", author="William S. Vincent", publish_date="2025-01-01")
book.save()  # 데이터베이스에 저장

여기서 book은 파이썬 객체입니다. Django ORM이 이 객체를 데이터베이스 레코드로 변환해줍니다. 즉, 위 코드를 실행하면, 책 객체 book이 데이터베이스의 테이블에 한 줄의 레코드로 저장됩니다.

4. 요약

  • 객체: 데이터나 정보를 담고 있는 파이썬의 구조 (예: 책 객체)
  • 레코드: 데이터베이스 테이블에 저장된 한 줄의 정보 (예: 책 테이블의 한 줄)
  • ORM: 객체와 레코드를 자동으로 변환해주는 도구 (예: 파이썬 책 객체를 데이터베이스에 저장하거나, 데이터를 불러올 때 사용)

Django의 ORM을 사용하면 우리가 파이썬 코드로 객체를 다루듯이, 데이터베이스와 상호작용할 수 있어 훨씬 더 쉽게 데이터를 처리할 수 있습니다!

비유: 도서관 관리 시스템

  • Python: 도서관 관리 시스템의 프로그래밍 언어로, 시스템의 로직과 기능을 구현합니다.
  • Django: 도서관 관리 시스템의 프레임워크로, 웹 애플리케이션의 구조와 흐름을 정의합니다.
  • PostgreSQL: 도서관의 서고로, 책의 정보(제목, 저자, 출판일 등)를 안전하게 보관합니다.

사용자가 책을 검색하면, 도서관 관리 시스템(Django)이 서고(PostgreSQL)를 조회하여 해당 책의 정보를 반환합니다. 이 과정에서 Django는 ORM을 통해 데이터베이스와 상호작용합니다.