반응형 전체 글455 SQLite WAL에서 SQLITE_BUSY_SNAPSHOT이 날 때: 읽기부터 트랜잭션 재시도 SQLite WAL에서 SELECT로 값을 읽은 뒤 다른 연결이 먼저 커밋했다면, 같은 트랜잭션의 UPDATE가 SQLITE_BUSY_SNAPSHOT으로 실패할 수 있습니다. 같은 UPDATE만 반복하기보다 이전 읽기 트랜잭션을 끝내고 새 값으로 읽기·계산·쓰기를 다시 수행해야 하는 경우입니다. 먼저 일반적인 잠금 경합과 오류 코드를 구분하세요.아래 실습은 임시 DB의 값 10을 두 연결로 다룹니다. 첫 연결은 10을 읽은 상태를 유지하고, 둘째 연결이 11을 커밋합니다. 첫 연결의 오래된 쓰기는 두 번 모두 코드 517로 실패하며, 전체 읽기·수정 흐름을 새로 시작하면 최종값이 12가 됩니다. 운영 데이터베이스를 수정하거나 외부 요청을 재전송하지 않습니다.한 연결의 오래된 읽기 스냅샷과 다른 연결이 커.. 2026. 10. 28. Python Queue.join()이 끝났는데 작업은 실패했을 때: task_done과 결과 분리 Queue.join()이 반환됐다는 이유만으로 작업이 모두 성공했다고 처리하면 실패한 배치를 정상으로 넘길 수 있습니다. 이 글의 일반적인 Queue 처리 흐름에서 join은 put한 항목에 대해 task_done 호출이 맞게 돌아왔는지 기다립니다. 성공·실패 결과를 판단하거나 작업자의 예외를 호출자에게 다시 던지는 기능은 아닙니다.작업 두 개 중 하나가 실패해도 finally에서 처리 확인을 반환하면 join은 끝납니다. 아래 실습은 오류를 별도 결과 큐에 남기고, 작업자 종료까지 확인한 뒤 호출자가 실패를 판정합니다. 실제 파일·DB·외부 API를 건드리지 않는 합성 작업입니다.큐 항목의 처리 확인이 모두 돌아와도 실패한 작업 결과가 따로 남을 수 있다는 개념 그림 · 실행 수치나 실제 서비스 화면이.. 2026. 10. 28. AI k-NN 분류가 원·만원 단위에 따라 달라질 때: 열별 표준화 실습 k-NN 분류에서 비용을 원에서 만원으로만 바꿨는데 예측이 달라진다면, 거리 계산에서 각 열의 크기가 어떻게 반영되는지 확인해야 합니다. 학습점과 새 입력을 모두 같은 단위로 바꿔도, 원시 유클리드 거리는 한 열의 숫자 크기가 달라지면 다른 가까움을 만들 수 있습니다. 학습 데이터로 열별 평균·표준편차를 정하고 같은 변환을 적용하는 방법을 작은 1-NN으로 비교합니다.아래는 비용과 대기시간이라는 합성 수치 특성 두 개, A·B라는 가상 라벨을 가진 학습점 두 개입니다. 학습점을 저장하고 최근접 학습점의 라벨을 고르는 실제 로컬 1-NN 구현을 실행합니다. LLM·임베딩 API나 scikit-learn을 호출하지 않으며, 실제 업무의 정답률을 평가하는 실험도 아닙니다.서로 다른 눈금의 자와 강아지 모형을 .. 2026. 10. 28. AI 텍스트 분류 확률이 모두 0일 때: 나이브베이즈 로그 점수로 비교하기 긴 문서를 분류할 때 클래스 점수가 둘 다 0으로 나온다면, 단어 확률이 잘못됐다고 단정하기 전에 부동소수점 언더플로를 확인해야 합니다. 작은 확률의 곱을 직접 만들지 말고 로그값을 더해 비교한 뒤, 정규화가 필요할 때 가장 큰 로그값을 빼고 지수함수를 적용하는 것이 핵심입니다.아래 작은 나이브베이즈 모델은 합성 문장 4개에서 실제로 토큰 빈도와 클래스 사전확률을 학습합니다. 긴 스트레스 입력에서는 원래 방식의 점수가 모두 0이어도 로그 점수로는 차이를 비교할 수 있고, 대칭 입력은 0.5·0.5로 돌아옵니다. Python 표준 라이브러리만 실행하며 LLM·외부 API·유료 서비스는 사용하지 않습니다.스무딩과 언더플로는 해결하는 문제가 다릅니다이 예제의 0번은 일반 안내, 1번은 오류 문의를 나타내는 합.. 2026. 10. 27. SQLite CHECK에 NULL이 통과하는 이유: NOT NULL과 양수 조건 나누기 SQLite에서 CHECK(quantity > 0)만 선언하면 quantity가 NULL인 행이 들어갈 수 있습니다. CHECK 식이 0일 때 위반이고 NULL이면 위반으로 처리하지 않기 때문입니다. 값이 반드시 있어야 하는 업무라면 NOT NULL을 따로 선언하고 양수 조건과 함께 검사해야 합니다.하지만 NOT NULL을 더했다고 수량이 반드시 정수가 되는 것은 아닙니다. 아래 실습은 NULL 차단과 값 범위, 저장된 타입 검사를 나누어 보여 줍니다. Python sqlite3의 메모리 데이터베이스만 만들며 기존 운영 테이블이나 데이터를 바꾸지 않습니다.WHERE와 CHECK에서 NULL을 똑같이 생각하면 놓칩니다NULL > 0의 결과는 참이나 거짓이 아닌 NULL입니다. WHERE는 참으로 평가된 행.. 2026. 10. 27. CSV 열 수가 달라도 DictReader가 읽을 때: 추가·누락·빈 필드 검증 CSV 헤더가 세 열인데 어떤 행은 네 값이고 어떤 행은 두 값이어도 csv.DictReader가 자동으로 파일 전체를 거부하지는 않습니다. 추가 필드는 restkey로 모이고 부족한 필드는 restval로 채워지므로, 입력을 쓰기 전에 헤더 계약과 각 레코드의 구조를 직접 검사해야 합니다.특히 a,b,처럼 마지막 셀이 빈 문자열인 경우와 a,b처럼 마지막 필드 자체가 없는 경우는 다릅니다. 아래 실습은 이 둘을 구분하고, 추가 쉼표·따옴표 안의 쉼표·여러 줄 필드를 같은 파일에서 확인합니다. 실제 고객 파일이나 데이터베이스에 쓰지 않고 메모리의 합성 CSV만 읽습니다.strict=True는 열 수 검증 옵션이 아닙니다csv 모듈의 strict=True는 파서가 잘못된 CSV 입력으로 판단한 경우 csv.. 2026. 10. 27. 이전 1 2 3 4 ··· 76 다음 반응형