반응형 전체 글427 SQLite 인덱스가 있는데 느릴 때: EXPLAIN QUERY PLAN으로 SCAN·SEARCH 확인 SQLite에 인덱스를 만들었는데 조회가 느리다면, 먼저 그 SQL이 실제로 어떤 경로로 행을 찾는지 EXPLAIN QUERY PLAN으로 확인하세요. WHERE 조건을 함수로 감쌌거나 필요한 열이 인덱스에 없으면 예상과 다른 계획이 나올 수 있습니다. 다만 SCAN이라는 단어만으로 인덱스를 쓰지 않는다고 판단하면 틀릴 수 있습니다. 코드 블록은 같은 Python 세션에서 위부터 순서대로 실행합니다.아래는 Python 3.12.14·SQLite 3.53.1의 메모리 DB 1만 행에서 실행한 예제입니다. 파일 I/O나 실제 서비스 지연은 측정하지 않았습니다. 계획의 변화와 결과의 동일성을 확인하는 실습이며, SEARCH가 언제나 더 빠르다는 벤치마크가 아닙니다.1. 동일한 데이터와 일반 인덱스를 준비합니다.. 2026. 10. 19. AI가 만든 CSV 매출 보고서 검산하기: 환불·중복 주문을 놓치지 않는 방법 AI가 CSV를 읽고 그럴듯한 매출 보고서를 만들었어도, 바로 업무 보고에 붙이기 전에 집계 기준과 원본 거래를 대조해야 합니다. 주문 ID로 무작정 중복을 지우지 말고 거래 이벤트를 확인한 뒤, 결제·환불·격리 행을 분리해 수치를 계산하세요. AI에는 검증된 수치의 설명과 문장 정리를 맡기는 흐름이 안전합니다.이 글은 AI에게 줄 프롬프트와 보고서 초안을 어떻게 검사할지 다루는 재현 실습입니다. 개인·고객 정보가 없는 합성 CSV를 사용하며 유료 API 호출은 필요 없습니다. 아래 오류 초안은 검증 과정을 보여 주려고 의도적으로 작성한 예시이며, 특정 모델에서 관측한 오류율이나 실제 회계 보고가 아닙니다. Python 3.12.14 표준 라이브러리로 실행했습니다.1. 보고서를 요청하기 전에 집계 계약을.. 2026. 10. 19. asyncio에서 time.sleep을 쓰면 작업이 멈추는 이유: asyncio.sleep과 to_thread async def 안에서 time.sleep을 호출하면, 그 시간 동안 같은 스레드의 이벤트 루프가 다른 작업을 실행하지 못합니다. 비동기 대기는 await asyncio.sleep, 바꿀 수 없는 동기 I/O는 await asyncio.to_thread를 검토하세요. 함수 앞에 async를 붙이는 것만으로 내부 호출이 비동기로 바뀌지는 않습니다.아래 코드는 외부 서버에 접속하지 않고 짧은 대기로 현상을 재현합니다. Python 3.12.14의 기본 이벤트 루프에서 실행했습니다. 정확한 초 단위 성능을 약속하지 않고, 작업 시작이 겹치는지와 실행 스레드를 확인합니다. 코드 블록은 일반 Python 스크립트에서 위부터 실행하세요.1. time.sleep은 현재 이벤트 루프 스레드를 멈춥니다import as.. 2026. 10. 18. pandas groupby 결과를 원본에 붙일 때 NaN이 생기는 이유: transform과 인덱스 정렬 그룹 평균을 계산한 Series를 원본 DataFrame 열에 바로 넣었더니 NaN이 생겼다면, 두 결과의 인덱스를 비교하세요. 집계 결과는 그룹 키, 원본은 행 라벨을 기준으로 할 수 있습니다. 원본 각 행에 그룹 통계를 붙이려면 transform을 쓰거나, 그룹 키로 map을 적용하는 방식이 적합합니다.아래 실습은 pandas 2.2.3·Python 3.12.14에서 실행했습니다. 이 글은 그룹이 빠지는 문제가 아니라 계산된 값을 어느 행에 배치할지를 다룹니다. 코드 블록은 위부터 같은 세션에서 실행하세요.1. 그룹 인덱스와 원본 행 인덱스가 다릅니다import pandas as pddf = pd.DataFrame({ "team": ["B", "A", "B", "A"], "sales": [.. 2026. 10. 18. 다익스트라는 목적지를 발견하면 끝내도 될까? 힙에서 꺼내는 종료 시점 다익스트라에서 목적지를 처음 발견했을 때 바로 끝내면, 아직 더 짧은 경로가 남아 있을 수 있습니다. 모든 간선 가중치가 0 이상일 때, 현재 거리와 일치하는 목적지 항목을 최소 힙에서 꺼낸 시점에 그 목적지까지의 최단거리를 확정할 수 있습니다.가중치가 모두 같은 BFS의 첫 발견 규칙을 가중 그래프에 그대로 옮기면 틀리는 이유를 작은 반례로 확인합니다. 예제는 Python 3.12.14에서 실행했습니다. 아래 블록은 위부터 같은 세션에서 실행하며, 정점은 모두 딕셔너리의 키로 존재하고 가중치는 0 이상의 정수라고 가정합니다.1. 목적지가 먼저 보였지만 정답은 아직 아닙니다import heapqgraph = { "S": [("T", 10), ("A", 2)], "A": [("T", 3)], .. 2026. 10. 18. Java Scanner의 nextLine을 한 번 더 호출하면 입력이 사라지는 이유 nextInt 뒤에 nextLine을 ‘한 번 더 소비’하면 빈 문자열 문제는 사라져도, 같은 줄에 있던 실제 이름을 버릴 수 있습니다. 숫자와 이름이 같은 줄인지, 다음 줄인지 입력 계약부터 확인하세요. nextLine은 의미 없는 개행만 버리는 함수가 아니라 현재 위치부터 줄 끝까지의 내용을 돌려주는 함수입니다.이미 Java 기본 구조와 Scanner 입력에서 빈 nextLine의 원인을 확인했다면, 이번에는 그 해결책을 무조건 적용했을 때 생기는 데이터 손실을 점검합니다. Temurin OpenJDK 21.0.11에서 같은 줄·다음 줄·CRLF·빈 줄·입력 끝을 실행해 비교했습니다.1. 소비했다고 버린 문자열에 이름이 들어 있을 수 있습니다import java.util.Scanner;public c.. 2026. 10. 17. 이전 1 2 3 4 ··· 72 다음 반응형