from app.core.database import AbstractUnitOfWork from app.shared.logger import setup_logger logger = setup_logger(__name__) class SqlAlchemyUow(AbstractUnitOfWork): def __init__(self, session_factory): self.session_factory = session_factory self.session = None def __enter__(self): logger.debug("세션 시작") self.session = self.session_factory() # repository 등록 return super().__enter__() def __exit__(self, exc_type, exc_val, exc_tb): super().__exit__(exc_type, exc_val, exc_tb) logger.debug(f"세션 종료 시도 (예외: {exc_type})") try: if exc_type: logger.warning(f"예외 발생으로 롤백 수행: {exc_val}") self.rollback() if self.session: self.session.close() logger.debug("세션 정상 종료") except Exception as e: logger.error(f"세션 종료 중 오류 발생: {str(e)}") finally: self.session = None def commit(self): logger.debug("트랜잭션 커밋") self.session.commit() def detach_from_persistence(self): self.session.expunge_all() def rollback(self): logger.debug("트랜잭션 롤백") if self.session: self.session.rollback() def flush(self): self.session.flush()