[파이썬] ORM을 사용한 데이터베이스 퍼포먼스 테스트

소개

ORM(객체 관계 매핑)은 개발자들이 데이터베이스와 소프트웨어 애플리케이션을 쉽게 연동할 수 있도록 도와주는 도구입니다. 많은 프레임워크와 언어에서 ORM을 제공하며, 이를 활용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다.

이 글에서는 Python에서 ORM을 사용하여 데이터베이스 퍼포먼스 테스트를 수행하는 방법에 대해 알아보겠습니다. 특히, Django ORM을 사용하여 데이터베이스 속도를 비교해 보겠습니다.

테스트 환경

데이터베이스 설정

테스트를 위해 MySQL 데이터베이스를 사용하겠습니다. 먼저, MySQL 데이터베이스를 설치하고 로컬 환경에서 접근할 수 있는지 확인하세요. 그런 다음, Django 프로젝트를 생성하고 settings.py 파일에서 다음과 같이 데이터베이스 설정을 변경해주세요.

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '<your_database_name>',
        'USER': '<your_username>',
        'PASSWORD': '<your_password>',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

위의 설정에서 <your_database_name>, <your_username>, <your_password>를 실제 데이터베이스 이름, 사용자 이름, 비밀번호로 바꿔주세요.

모델 생성

데이터베이스 퍼포먼스를 테스트하기 위해 테스트용 모델을 생성해야 합니다. 예를 들어, 블로그 글을 저장하는 Post 모델을 생성해봅시다.

# models.py

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

위의 코드에서 Post 모델은 title, content, created_at 속성을 가진 간단한 모델입니다.

퍼포먼스 테스트

이제 모델을 생성했으므로 실제로 데이터베이스 퍼포먼스를 테스트해보겠습니다. Django ORM을 사용하여 아래와 같은 작업을 수행하겠습니다.

  1. 1,000개의 랜덤한 블로그 글을 생성합니다.
  2. 생성된 글 중에서 특정 수의 글을 조회합니다.
  3. 생성된 글을 하나씩 수정합니다.
  4. 생성된 글을 하나씩 삭제합니다.
import random
from datetime import datetime
from django.utils import timezone
from my_app.models import Post

# 1. 1,000개의 랜덤한 블로그 글 생성
for _ in range(1000):
    title = f"Post {_}"
    content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    created_at = datetime.now(tz=timezone.utc)
    Post.objects.create(title=title, content=content, created_at=created_at)

# 2. 특정 수의 글 조회
n = 10
random_posts = random.sample(list(Post.objects.all()), n)

# 3. 글 수정
for post in random_posts:
    post.title += " (수정)"
    post.save()

# 4. 글 삭제
for post in random_posts:
    post.delete()

위의 코드를 실행하면 1,000개의 랜덤한 블로그 글을 생성하고, 그 중에서 10개의 글을 조회하여 수정하고 삭제하는 작업을 수행합니다.

결과 비교

Django ORM을 사용하여 데이터베이스 퍼포먼스 테스트를 수행한 결과를 다른 ORM이나 직접 SQL 쿼리를 사용한 경우와 비교해보세요. 각각의 방법으로 동일한 작업을 수행하고 실행 시간을 측정하여 비교하면 됩니다.

결론

ORM을 사용하면 개발자들은 SQL 쿼리를 작성하는 노력을 덜 수 있고, 더 간편하고 편리한 방식으로 데이터베이스 작업을 수행할 수 있습니다. 그러나 ORM을 사용하면 성능 저하의 가능성도 있으므로, 실제 퍼포먼스 테스트를 통해 ORM의 성능을 확인하는 것이 중요합니다. 위의 예제를 참고하여 데이터베이스 퍼포먼스 테스트를 수행해보세요.