파라미터 바인딩과 연결 수명 주기로 SQLite를 다룹니다.
Python DB-API는 연결과 cursor, execute, commit/rollback의 공통 형태를 제공합니다. 값은 placeholder로 바인딩합니다. sqlite3 연결의 with 블록은 성공 시 commit하고 예외 시 rollback하지만 연결 자체는 닫지 않으므로, 바깥쪽 contextlib.closing이 연결 종료를 맡습니다.
트랜잭션 경계는 repository 호출 하나가 아니라 업무 작업 전체를 기준으로 서비스 계층에서 정합니다.
결과를 전부 fetchall하지 말고 데이터 규모에 따라 streaming·pagination을 사용합니다.
운영에서는 pool 크기, query timeout, 재시도 가능한 오류와 로그의 개인정보 노출을 설정합니다.
f-string으로 SQL과 사용자 입력을 합치면 인젝션 위험이 생깁니다.
직접 바꿔보세요같은 email 삽입 실패가 전체 트랜잭션을 되돌리는지 확인하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.