pytest 사용법 — 스크립트에 테스트 붙이기, 리팩터링 실수를 0.07초 만에 잡은 기록 (실측)

pytest 사용법 — 스크립트에 테스트 붙이기, 리팩터링 실수를 0.07초 만에 잡은 기록 (실측)

업무용 파이썬 스크립트는 처음 만들 때 몇 번 돌려 보고 “잘 되네” 하고 넘어가는 경우가 많습니다. 문제는 나중에 코드를 고칠 때입니다. 함수 하나를 짧게 다듬었는데 예전에 되던 입력이 조용히 틀린 값을 내도, 직접 다시 확인하기 전까지는 알 수 없습니다. 이 글은 pytest 사용법을 처음 익히는 분을 위해, 작은 유틸 함수 3개에 테스트 13개를 붙여 실제로 … 더 읽기

파이썬 병렬 처리 — multiprocessing으로 13초 작업을 1.9초로, 스레드는 왜 그대로였나 (실측)

파이썬 병렬 처리 — multiprocessing으로 13초 작업을 1.9초로, 스레드는 왜 그대로였나 (실측)

파일 200개를 하나씩 처리하는 스크립트가 있습니다. 작업 관리자를 열어 보면 코어 16개 중 하나만 바쁘고 나머지는 놀고 있습니다. 파이썬 병렬 처리를 쓰면 이 남는 코어를 일에 동원할 수 있습니다. 로그 200개(415MB)의 단어를 세는 스크립트로 직접 재 보니 직렬 13.06초가 작업자 14개에서 1.92초가 됐습니다. 다만 그 숫자까지 가는 길이 곧지는 않았습니다. 처음 쓴 코드는 오류를 내고 … 더 읽기

파이썬 pathlib 사용법 — os.path 코드를 pathlib로 바꿔 보기 (실측)

파이썬 pathlib 사용법 — os.path 코드를 pathlib로 바꿔 보기 (실측)

os.path.join, os.path.splitext, os.path.dirname이 한 줄에 겹쳐 있는 코드는 쓸 때도 읽을 때도 눈이 아픕니다. 파이썬 pathlib 사용법을 익히면 이런 경로 코드가 Path 객체 하나로 정리됩니다. 이 글에서는 실제로 돌아가는 os.path 백업 스크립트를 pathlib로 옮기면서 생긴 일을 그대로 기록했습니다. 반복문은 17줄에서 12줄로 줄었고 결과 파일은 내용까지 같았지만, 그냥 옮긴 첫 실행은 cp949 오류로 바로 멈췄고, rename()은 … 더 읽기

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

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

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

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

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

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

파이썬 cProfile 사용법 — 느린 스크립트 병목 찾기, 2.9초를 0.3초로 (실측)

파이썬 cProfile 사용법 — 느린 스크립트 병목 찾기, 2.9초를 0.3초로 (실측)

매일 돌리는 파이썬 스크립트가 점점 느려지는데 어디가 느린지 모를 때, 감으로 코드를 고치기 시작하면 엉뚱한 곳에 시간을 쓰기 쉽습니다. 파이썬 cProfile 사용법을 알면 설치 없이 명령 한 줄로 “어느 함수가 몇 번 불려 몇 초를 썼는지” 표로 볼 수 있습니다. 접속 로그 10만 줄을 요약하는 스크립트로 직접 해 보니, 처음 버전은 2.92초가 걸렸고 cProfile 표를 … 더 읽기

argparse 사용법 — 파이썬 스크립트에 명령줄 옵션 붙이기, 직접 걸려 본 함정 4가지 (실측)

argparse 사용법 — 파이썬 스크립트에 명령줄 옵션 붙이기, 직접 걸려 본 함정 4가지 (실측)

처음 만든 스크립트는 보통 sys.argv[1]로 값을 받습니다. 혼자 쓸 때는 괜찮지만, 며칠 지나 다시 실행하거나 다른 사람에게 넘기면 “인자 순서가 뭐였더라”부터 막힙니다. 이 글에서는 파이썬 표준 라이브러리인 argparse 사용법을 오래된 파일을 보관 폴더로 옮기는 실용 스크립트에 붙여 보며 정리합니다. 이 노트북(윈도우 11, Python 3.12.10)에서 직접 돌려 보니, 기본값 그대로 둔 argparse가 –move가 아니라 –mov라고만 쳐도 … 더 읽기

대용량 로그 검색 — 620MB 로그에서 원하는 줄만 빠르게 뽑아내기 (파이썬 실측)

대용량 로그 검색 — 620MB 로그에서 원하는 줄만 빠르게 뽑아내기 (파이썬 실측)

로그 파일이 수백 MB로 불어나면 에디터로 열어 Ctrl+F를 누르는 것부터 부담이 됩니다. 그래서 대용량 로그 검색을 파이썬 표준 라이브러리만으로 해결해 보려고, 이 노트북(윈도우 11, 파이썬 3.12)에서 620MB·900만 줄짜리 테스트 로그를 만들어 여섯 가지 방법을 비교했습니다. 흔히 쓰는 “한 줄씩 읽으며 in으로 찾기”는 평균 2.5~3.8초, 큰 덩어리로 읽고 bytes.find로 위치만 찾는 방법은 0.76초였습니다. 특정 시간대만 뽑을 … 더 읽기

자동화 헬스체크 스크립트 — 돌아가는 자동화들을 한 번에 점검하기

자동화 헬스체크 스크립트 — 돌아가는 자동화들을 한 번에 점검하기

자동화가 하나둘 늘어나면 “잘 돌고 있겠지”라는 믿음도 같이 늘어납니다. 이 블로그는 매일 정해진 시각에 발행 작업이 돌고, 실행할 때마다 logs/ 폴더에 날짜별 로그를 남깁니다. 이번에 이 로그들을 한 번에 훑는 자동화 헬스체크 스크립트를 만들어 직접 돌려보니, 로그 48개 중 9개가 정상 종료가 아니었습니다. 7개는 종료 코드 1로 끝났고, 2개는 종료 표시 자체가 없었습니다. 실패 알림이 … 더 읽기

스크립트 로그 관리 — 실행 로그를 날짜별로 남기고 오래된 건 자동 삭제하기

자동화 스크립트를 작업 스케줄러에 걸어두고 며칠이 지난 뒤, 결과물이 안 만들어져 있는 걸 발견합니다. 그런데 스케줄러 기록에는 “성공(0x0)”만 찍혀 있습니다. 스케줄러는 프로세스가 실행됐는지만 보고, 스크립트가 중간에 무엇 때문에 멈췄는지는 알지 못합니다. 남아 있는 단서가 없으면 결국 같은 상황을 손으로 재현해봐야 하는데, 그게 매번 30분씩 걸립니다. 반대로 로그 한 줄만 있으면 1분입니다. 이번 글에서는 스크립트 로그 … 더 읽기