start_date와 end_date가 같을 때, 왜 데이터가 비어 있을까?
2025. 10. 13. 17:15
라이브러리 & 프레임워크/FastAPI
프로젝트를 진행하면서 단일 날짜(start_date == end_date)로 시뮬레이션 데이터를 조회할 때, 해당 날짜의 레코드가 전혀 조회되지 않는 문제가 있었다. 처음엔 쿼리 조건이 단순해서 금방 해결될 줄 알았는데, 생각보다 꽤 깊은 이슈였다. --- 문제 상황start_date 와 end_date 를 동일하게 입력했을 때 하루 전체 레코드가 조회되지 않았다.query = query.where(Simulation.created_at >= start_date)query = query.where(Simulation.created_at 즉, created_at이 datetime 컬럼일 경우 00:00:00 시점에 정확히 일치하는 데이터만 포함되고,그 날짜의 나머지 레코드는 모두 누락되었다.원인 ..
FastAPI와 SQLAlchemy에서 이해하는 낙관적 락과 비관적 락
2025. 10. 6. 16:53
컴퓨터 과학/데이터베이스
웹 개발이나 API 설계에서 동시성 문제는 피할 수 없는 주제입니다. 특히 시뮬레이션 실행이나 계좌 잔액 수정처럼 동시에 여러 요청이 들어오는 상황에서는 데이터 정합성을 유지하는 것이 중요합니다. 이를 위해 흔히 사용하는 방법이 락(Lock) 전략입니다. 이번 글에서는 **낙관적 락(Optimistic Lock)**과 비관적 락(Pessimistic Lock), 그리고 분산 락(Redis 락) 개념을 정리합니다.1. 비관적 락(Pessimistic Lock)원리:데이터를 조회하거나 수정할 때 즉시 잠금다른 트랜잭션이 해당 데이터를 수정하지 못하도록 차단장점:동시성 충돌 방지데이터 정합성 강력 보장단점:락이 유지되는 동안 다른 트랜잭션은 대기 → 성능 저하데드락 가능DB 적용 예 (PostgreSQL + ..