[파이썬] ORM을 사용한 데이터베이스 테스트 코드 작성

개요

ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 사이의 데이터 변환을 자동화하는 도구입니다. 이를 통해 개발자는 SQL 쿼리를 직접 작성하지 않고도 데이터베이스에 접근하고 조작할 수 있습니다. 이번 포스트에서는 Python에서 많이 사용되는 ORM인 SQLAlchemy를 활용하여 데이터베이스 테스트 코드를 작성하는 방법에 대해 알아보겠습니다.

사전 준비

다음과 같은 패키지를 설치해야 합니다:

pip install SQLAlchemy pytest

데이터베이스 설정

먼저 SQLAlchemy를 사용하여 데이터베이스에 연결하는 설정을 해야 합니다. 예를 들어, SQLite 데이터베이스를 사용하는 경우 다음과 같이 설정 파일에 다음 내용을 적습니다:

from sqlalchemy import create_engine

DATABASE_URI = "sqlite:///test.db"

engine = create_engine(DATABASE_URI)

모델 정의

다음으로 데이터베이스 모델을 정의해야 합니다. SQLAlchemy에서는 클래스를 테이블로 매핑하는 방식으로 모델을 정의합니다. 각 클래스는 테이블의 컬럼을 속성으로 가지며, 테이블간의 관계를 정의할 수도 있습니다. 예를 들어, 다음과 같이 User 모델을 정의할 수 있습니다:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    username = Column(String)
    email = Column(String)

테스트 코드 작성

이제 테스트 코드를 작성해보겠습니다. pytest를 사용하여 테스트를 수행하기 때문에, 각 테스트 함수는 test_로 시작해야 합니다. 먼저 데이터베이스에 모델을 생성하고 쿼리를 수행하여 결과를 검증하는 테스트를 작성해보겠습니다:

from sqlalchemy.orm import sessionmaker

from myapp.db import engine, Base, User

Session = sessionmaker(bind=engine)

def setup_module():
    Base.metadata.create_all(bind=engine)

def teardown_module():
    Base.metadata.drop_all(bind=engine)

def test_create_user():
    session = Session()
    user = User(username='john', email='john@example.com')
    session.add(user)
    session.commit()

    assert user.id is not None

def test_get_user_by_username():
    session = Session()
    user = session.query(User).filter_by(username='john').first()

    assert user.username == 'john'
    assert user.email == 'john@example.com'

실행 및 결과 확인

테스트를 실행하기 위해 프로젝트 루트 디렉토리에서 다음 명령을 실행합니다:

pytest

테스트 결과가 출력되며, 성공한 테스트는 초록색으로, 실패한 테스트는 빨간색으로 표시됩니다. SQLAlchemy를 사용하여 올바르게 데이터베이스에 접근하고 조작하는지 확인할 수 있습니다.

마치며

이번 포스트에서는 ORM을 사용하여 데이터베이스 테스트 코드를 작성하는 방법에 대해 알아보았습니다. SQLAlchemy를 통해 쉽게 데이터베이스 모델을 정의하고 테스트 코드를 작성할 수 있습니다. ORM을 활용하면 데이터베이스와의 상호작용이 간편해지며, 유지 보수성과 생산성을 높일 수 있습니다.