[파이썬] ORM을 사용한 데이터베이스 마스터-슬레이브 구조

데이터베이스 마스터-슬레이브 구조는 많은 웹 애플리케이션에서 사용되는 일반적인 아키텍처 패턴입니다. 이 아키텍처는 데이터베이스에 대한 읽기와 쓰기 작업을 분리하여 성능과 확장성을 향상시킵니다. 마스터 데이터베이스는 쓰기 작업을 처리하고, 슬레이브 데이터베이스는 읽기 작업을 처리합니다.

Python에서 ORM(Object-Relational Mapping)을 사용하여 마스터-슬레이브 구조를 구현할 수 있습니다. ORM은 데이터베이스와 애플리케이션 사이의 추상화 계층으로, 객체 지향 프로그래밍과 관계형 데이터베이스 간의 변환을 자동으로 처리합니다. Python에서 가장 유명한 ORM인 SQLAlchemy를 사용하여 예제를 살펴보겠습니다.

마스터 데이터베이스 설정

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 마스터 데이터베이스에 대한 연결 설정
master_engine = create_engine('sqlite:///master.db')
MasterSession = sessionmaker(bind=master_engine)
master_session = MasterSession()

# 마스터 데이터베이스용 모델 생성
MasterBase = declarative_base()

class User(MasterBase):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    username = Column(String)
    email = Column(String)

위의 코드는 SQLAlchemy를 사용하여 마스터 데이터베이스에 대한 연결 설정과 모델 정의를 수행하는 예제입니다. create_engine() 함수로 마스터 데이터베이스에 대한 연결을 생성하고, sessionmaker() 함수로 세션을 생성합니다. declarative_base() 함수를 사용하여 모델 클래스의 베이스 클래스를 정의하고, 모델 클래스는 Base 클래스를 상속받아 정의됩니다. 위의 예제에서는 User 모델을 정의하였습니다.

슬레이브 데이터베이스 설정

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 슬레이브 데이터베이스에 대한 연결 설정
slave_engine = create_engine('sqlite:///slave.db')
SlaveSession = sessionmaker(bind=slave_engine)
slave_session = SlaveSession()

슬레이브 데이터베이스에 대한 연결 설정은 마스터 데이터베이스와 유사하게 수행됩니다. create_engine() 함수로 슬레이브 데이터베이스에 대한 연결을 생성하고, sessionmaker() 함수로 슬레이브 세션을 생성합니다.

쓰기 작업

# 마스터 데이터베이스에 레코드 추가
new_user = User(username='johnsmith', email='john@example.com')
master_session.add(new_user)
master_session.commit()

마스터 데이터베이스에 대한 쓰기 작업은 위의 코드와 같이 수행됩니다. add() 메서드로 새로운 레코드를 마스터 세션에 추가한 후, commit() 메서드로 변경 사항을 데이터베이스에 반영합니다.

읽기 작업

# 슬레이브 데이터베이스에서 모든 레코드 조회
users = slave_session.query(User).all()
for user in users:
    print(user.username, user.email)

슬레이브 데이터베이스에서의 읽기 작업은 위의 코드와 같이 수행됩니다. query() 메서드를 사용하여 User 모델의 모든 레코드를 조회한 후, all() 메서드를 호출하여 결과를 가져옵니다. 이후 반복문을 사용하여 각 레코드의 필드 값을 출력합니다.

결론

ORM을 사용한 데이터베이스 마스터-슬레이브 구조는 웹 애플리케이션의 성능과 확장성을 향상시키는 유용한 아키텍처 패턴입니다. Python에서 SQLAlchemy와 같은 ORM 라이브러리를 사용하면 데이터베이스 접근을 간편하게 처리할 수 있습니다. 이를 바탕으로 마스터-슬레이브 구조를 구현하면, 데이터베이스 작업을 효율적으로 분산시킬 수 있습니다.