[python] Peewee와 ORM 성능 비교 측정

이번 포스트에서는 Peewee와 다른 ORM(Object-Relational Mapping) 라이브러리의 성능을 비교하고 측정해보려고 합니다. ORM은 데이터베이스와 애플리케이션 간의 상호작용을 추상화하여 개발자가 직접 SQL 쿼리문을 작성하지 않고도 데이터베이스를 조작할 수 있게 해주는 도구입니다.

ORM 라이브러리 소개

Peewee

Peewee는 파이썬에서 사용할 수 있는 가벼운 ORM 라이브러리로, SQLite, MySQL, PostgreSQL 등의 데이터베이스를 지원합니다. Peewee는 단순하고 직관적인 API를 제공하여 개발자가 쉽게 데이터베이스를 다룰 수 있도록 도와줍니다.

SQLAlchemy

SQLAlchemy는 파이썬에서 가장 인기 있는 ORM 라이브러리 중 하나로, 다양한 데이터베이스를 지원하고 강력한 기능을 제공합니다. SQLAlchemy는 객체 관계 매핑과 SQL 표현식 언어를 지원하여 더욱 유연한 쿼리 작성이 가능합니다.

성능 비교 방법

성능 비교를 위해 간단한 데이터베이스 모델을 작성하고, 해당 모델에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 코드를 작성해보겠습니다. 이때 Peewee와 SQLAlchemy를 각각 사용하여 동일한 작업을 수행하며, 작업 수행 시간을 측정할 것입니다.

코드 예시

먼저 Peewee와 SQLAlchemy를 설치하고, 필요한 라이브러리를 임포트합니다.

pip install peewee
pip install SQLAlchemy

from peewee import *
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker

Peewee 예시

# Peewee 모델 정의
db = SqliteDatabase('my_database.db')

class Person(Model):
    name = CharField()
    age = IntegerField()

    class Meta:
        database = db

db.create_tables([Person])

# CRUD 작업 수행
start_time = time.time()

Person.create(name='John', age=25)
Person.create(name='Jane', age=30)

people = Person.select()
for person in people:
    print(person.name, person.age)

end_time = time.time()
elapsed_time = end_time - start_time
print("Elapsed Time (Peewee):", elapsed_time)

SQLAlchemy 예시

# SQLAlchemy 모델 정의
engine = create_engine('sqlite:///my_database.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

Base = declarative_base()

class Person(Base):
    __tablename__ = 'person'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

Base.metadata.create_all(engine)

# CRUD 작업 수행
start_time = time.time()

person1 = Person(name='John', age=25)
person2 = Person(name='Jane', age=30)

session.add(person1)
session.add(person2)
session.commit()

people = session.query(Person).all()
for person in people:
    print(person.name, person.age)

end_time = time.time()
elapsed_time = end_time - start_time
print("Elapsed Time (SQLAlchemy):", elapsed_time)

성능 측정

위의 코드를 실행하여 Peewee와 SQLAlchemy의 성능을 측정해봅니다. 업데이트 및 삭제 작업도 위와 동일하게 수행하여 성능을 비교할 수 있습니다. 측정 결과, Peewee와 SQLAlchemy 모두 안정적이고 빠른 성능을 보여줍니다. 따라서 개발자는 프로젝트의 요구사항에 맞게 ORM을 선택하면 됩니다.

결론

Peewee와 SQLAlchemy는 파이썬에서 많이 사용되는 ORM 라이브러리 중 일부입니다. 각각의 장단점이 있으며, 성능 측면에서도 우수한 성능을 보입니다. 개발자는 프로젝트의 요구사항과 성능을 고려하여 적합한 ORM을 선택할 수 있습니다.

Reference