[Open WebUI] 이메일 인증 시 이중 조회를 단일 JOIN으로 교체
PR 링크: open-webui/open-webui#21010 상태: Merged | 변경: +12 / -5
들어가며
사용자 인증은 모든 요청의 시작점입니다. Open WebUI의 authenticate_user_by_email 함수는 이메일로 인증할 때 Auth 테이블을 먼저 조회하고, 결과가 있으면 User 테이블을 다시 조회하는 이중 쿼리 패턴을 사용하고 있었습니다. 두 테이블이 같은 id를 공유하므로 JOIN으로 한 번에 처리할 수 있습니다.
핵심 코드 분석
Before (auths.py):
def authenticate_user_by_email(self, email, db=None):
try:
with get_db_context(db) as db:
auth = db.query(Auth).filter_by(email=email, active=True).first()
if auth:
user = Users.get_user_by_id(auth.id, db=db)
return user
except Exception:
return None
After:
def authenticate_user_by_email(self, email, db=None):
try:
with get_db_context(db) as db:
result = (
db.query(Auth, User)
.join(User, Auth.id == User.id)
.filter(Auth.email == email, Auth.active == True)
.first()
)
if result:
_, user = result
return UserModel.model_validate(user)
return None
except Exception:
return None
왜 이게 좋은가
- 인증 쿼리 2회(Auth SELECT + User SELECT)가 JOIN 1회로 줄어듭니다
- 데이터베이스 라운드트립이 절반으로 감소하여 네트워크 지연이 있는 환경에서 효과가 더 큽니다
Users.get_user_by_id내부의 추가적인 세션 관리 오버헤드도 제거됩니다- Auth와 User 테이블이
id컬럼으로 1:1 관계이므로 JOIN은 자연스러운 선택입니다 - 인증은 거의 모든 API 요청에서 호출되므로 전체 시스템 성능에 미치는 영향이 큽니다
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [pytorch] PyTorch CUDA 메모리 스냅샷 최적화 — 트레이스 선택적 포함
- 현재글 : [Open WebUI] 이메일 인증 시 이중 조회를 단일 JOIN으로 교체
- 다음글 [uvloop] uvloop의 SSL 성능 최적화: SSLWantReadError 비용 줄이기
댓글