AI 답변 캐시 — 같은 질문을 두 번 보내지 않게 SQLite에 저장하기 (실측)

AI 답변 캐시 — 같은 질문을 두 번 보내지 않게 SQLite에 저장하기 (실측)

문서 수십 개를 AI에게 하나씩 요약시키는 스크립트를 돌리다가 중간에 오류로 멈추면, 다시 돌릴 때 이미 받은 답까지 처음부터 또 요청하게 됩니다. 시간도 들고, 유료 API라면 같은 답에 돈을 두 번 냅니다. AI 응답 캐시는 이 문제를 막는 가장 간단한 장치입니다. 질문을 키로 삼아 답을 SQLite 파일에 저장해 두고, 같은 질문이 다시 오면 AI 대신 파일에서 … 더 읽기

명령줄 JSON 보기 — jq 없이 python -m json.tool로 펼치고 값만 골라내기 (실측)

명령줄 JSON 보기 — jq 없이 python -m json.tool로 펼치고 값만 골라내기 (실측)

API 응답이나 설정 파일을 열었더니 JSON이 한 줄로 쭉 이어져 있어서 어디가 어딘지 알 수 없을 때가 있습니다. 보통 jq를 쓰라고 하지만, 회사 PC처럼 프로그램을 마음대로 설치할 수 없는 환경도 많습니다. 파이썬이 깔려 있다면 명령줄 JSON 보기는 설치 없이 python -m json.tool 한 줄이면 됩니다. 이 글에서는 이 명령의 옵션을 직접 돌려 보고, json.tool에 없는 … 더 읽기

마크다운 표 CSV 변환 — AI 답변 속 표를 파이썬으로 CSV·엑셀 파일로 바꾸기 (실측)

마크다운 표 CSV 변환 — AI 답변 속 표를 파이썬으로 CSV·엑셀 파일로 바꾸기 (실측)

ChatGPT나 Claude에게 “표로 정리해 줘”라고 하면 답변은 | 지점 | 매출 | 같은 마크다운 표로 옵니다. 화면에서는 보기 좋지만 엑셀로 옮기려고 복사해 붙여 넣으면 한 칸에 줄 전체가 들어가거나 세로 막대가 그대로 남습니다. 이 글에서는 마크다운 표 CSV 변환 스크립트를 파이썬으로 만들어, AI 답변 텍스트를 통째로 넣으면 표만 골라 CSV와 엑셀(xlsx) 파일로 저장하는 과정을 직접 … 더 읽기

개인정보 마스킹 파이썬 — AI에 문서 넣기 전 전화·이메일·주민번호를 정규식으로 가리고 되돌리기 (실측)

개인정보 마스킹 파이썬 — AI에 문서 넣기 전 전화·이메일·주민번호를 정규식으로 가리고 되돌리기 (실측)

고객 문의나 상담 기록을 ChatGPT·Claude 같은 AI에 붙여 넣고 “정리해 줘”라고 하면 편하지만, 그 안의 전화번호·이메일·주민번호까지 그대로 외부 서비스로 나갑니다. 이 글에서는 개인정보 마스킹 파이썬 스크립트를 표준 라이브러리만으로 만들어, 보내기 전에 개인정보를 [전화_1] 같은 토큰으로 바꾸고 AI 답변이 돌아오면 원래 값으로 되돌리는 과정을 직접 돌려 봅니다. 처음 실행에서는 16자리 주문번호가 카드번호로 잘못 분류됐고, 인터넷에 흔한 … 더 읽기

폴더 동기화 파이썬 스크립트 — 두 폴더를 비교해 바뀐 파일만 복사하기, 2,000개 중 35개만 0.03초 (실측)

폴더 동기화 파이썬 스크립트 — 두 폴더를 비교해 바뀐 파일만 복사하기, 2,000개 중 35개만 0.03초 (실측)

작업 폴더를 외장 디스크나 다른 드라이브에 백업할 때 매번 폴더째 통째로 복사하면, 바뀐 건 몇 개뿐인데도 전체를 다시 씁니다. 이 글에서는 폴더 동기화 파이썬 스크립트를 표준 라이브러리만으로 만들어, 두 폴더를 비교한 뒤 새로 생기거나 바뀐 파일만 복사하고 필요하면 원본에서 지운 파일도 정리하게 해 봅니다. 직접 2,000개 파일(약 100MB) 폴더로 돌려 보니 처음 전체 복사는 1.774초, … 더 읽기

RecursionError 해결 — 재귀 깊이 초과 원인과 반복문으로 바꾸기 (실측)

RecursionError 해결 — 재귀 깊이 초과 원인과 반복문으로 바꾸기 (실측)

파이썬에서 트리 구조 데이터를 재귀 함수로 훑다가 RecursionError: maximum recursion depth exceeded를 만나면 보통 “재귀 한도가 1000이니까 1000단계를 넘었구나” 하고 sys.setrecursionlimit()부터 올립니다. 그런데 직접 돌려 보니 단순하지 않았습니다. 중첩 댓글 개수를 세는 함수가 한도 1000에서 깊이 499에 멈췄고, 한도를 100만으로 올려도 어떤 재귀는 약 1,500단계에서 그대로 같은 오류를 냈습니다. 이 글에서는 RecursionError가 나는 실제 경계, … 더 읽기

RAG 원리 — AI 문서 검색을 TF-IDF 검색기로 직접 만들어 보기, 내 블로그 68편에서 질문 15개 실측

RAG 원리 — AI 문서 검색을 TF-IDF 검색기로 직접 만들어 보기, 내 블로그 68편에서 질문 15개 실측

사내 문서나 매뉴얼을 넣어 두고 “우리 자료 기준으로 답해 줘”라고 하는 AI 서비스는 대부분 RAG(검색 증강 생성) 방식입니다. 이름은 어렵지만 RAG 원리는 단순합니다. 질문과 관련 있는 문서 조각을 먼저 찾고, 그 조각만 질문과 함께 AI에 넘깁니다. 문서 전체를 넣을 수 없으니 “무엇을 골라 넣느냐”가 답의 품질을 좌우합니다. 그래서 그 검색 부분을 파이썬 표준 라이브러리만으로 직접 … 더 읽기

파이썬 sqlite 사용법 — 스크립트 데이터를 CSV 대신 SQLite에 저장하기, 2,000건 17초가 20만 건 0.8초로 (실측)

파이썬 sqlite 사용법 — 스크립트 데이터를 CSV 대신 SQLite에 저장하기, 2,000건 17초가 20만 건 0.8초로 (실측)

자동화 스크립트의 실행 기록이나 수집한 데이터를 CSV에 한 줄씩 붙여 두는 경우가 많습니다. 처음엔 편하지만 쌓일수록 불편해집니다. 조회할 때마다 파일 전체를 읽어야 하고, 스크립트가 두 번 돌면 같은 기록이 두 줄 들어가고, 두 스크립트가 동시에 쓰면 꼬입니다. 그래서 파이썬 sqlite 사용법을 실제 측정으로 정리해 봤습니다. sqlite3는 파이썬에 기본으로 들어 있어서 설치할 것이 없습니다. 실행 기록 … 더 읽기

깨진 링크 찾기 파이썬 스크립트 — 내 블로그 점검해 보니 경고 47개 중 22개가 오탐이었던 이유 (실측)

깨진 링크 찾기 파이썬 스크립트 — 내 블로그 점검해 보니 경고 47개 중 22개가 오탐이었던 이유 (실측)

글이 쌓이면 예전 글 속 링크가 하나둘 죽습니다. 지운 글, 주소가 바뀐 페이지, 사라진 이미지가 그대로 남습니다. 방문자는 404 화면을 보고 떠나고, 운영자는 아무도 알려 주지 않으니 모릅니다. 그래서 깨진 링크 찾기 파이썬 스크립트를 표준 라이브러리만으로 만들어 이 블로그(codetipbox.com)에 직접 돌려 봤습니다. 첫 실행 결과는 “깨진 링크 47개”였는데, 하나씩 열어 보니 22개는 스크립트 쪽 오탐이었습니다. … 더 읽기

JSONDecodeError 해결 — 깨진 JSON 파일에서 틀린 곳 정확히 찾아내기 (10가지 유형 실측)

JSONDecodeError 해결 — 깨진 JSON 파일에서 틀린 곳 정확히 찾아내기 (10가지 유형 실측)

설정 파일이나 API 응답을 json.load()로 읽다가 JSONDecodeError가 나면 메시지에 줄과 칸 번호가 찍힙니다. 그런데 그 위치로 가 봐도 틀린 게 안 보일 때가 많습니다. 직접 깨진 JSON 파일 10종을 만들어 돌려 보니, 쉼표가 빠진 파일은 쉼표가 빠진 6번 줄이 아니라 다음 줄인 7번 줄을 가리켰고, 원인이 다른 세 파일(마지막 쉼표·작은따옴표·주석)은 똑같은 메시지를 냈습니다. 이 글에서는 … 더 읽기