Node.js에서 .cmd 실행이 EINVAL로 죽을 때 (윈도우)

윈도우에서 Node.js 스크립트로 npm이나 npx를 호출하다가 node spawn EINVAL 에러를 만나면 대부분 당황합니다. 코드를 한 줄도 고치지 않았는데, Node 버전을 올린 다음부터 갑자기 죽기 때문입니다. 저도 자동 발행 스크립트에서 이걸 만나 30분 넘게 오타를 찾았습니다. 원인은 오타가 아니라 Node 자체의 보안 패치였습니다. 이 글에서는 왜 이런 일이 생기는지, 그리고 상황별로 어떤 해결책을 골라야 하는지 정리합니다. … 더 읽기

AI 응답을 JSON으로 안정적으로 받아내는 법 — 파싱 실패를 없애는 4단계

상품 리뷰 500건을 AI로 분류하는 스크립트를 돌렸는데, 340번째에서 JSONDecodeError가 나면서 멈췄습니다. 로그를 열어 보니 모델이 JSON 앞에 “물론이죠! 아래는 분석 결과입니다.”라는 인사말을 한 줄 붙였더군요. 이런 식으로 AI JSON 응답 파싱이 실패하면, 그때까지 쓴 API 비용은 그대로 날아가고 처음부터 다시 돌려야 합니다. 500건에 20분이 걸리는 작업이라면 하루에 두세 번만 실패해도 한 시간이 사라집니다. 이 글에서는 … 더 읽기

작업 스케줄러 등록을 스크립트로 자동화하기

자동화 스크립트를 하나 만들 때마다 작업 스케줄러 창을 열고, “작업 만들기”를 누르고, 이름 적고, 트리거 탭으로 가서 시각을 정하고, 동작 탭에서 실행 파일과 인수와 시작 위치를 채우고, 조건 탭에서 전원 옵션을 끄고… 이 과정이 마우스 클릭 스무 번쯤 됩니다. 한 번이면 참을 만한데, PC를 새로 세팅하거나 스크립트 경로가 바뀌면 처음부터 다시입니다. 무엇보다 어떻게 등록했는지가 아무 … 더 읽기

디스코드 웹훅으로 스크립트 실행 결과 받아보기

디스코드 웹훅으로 스크립트 실행 결과 받아보기

자동화 스크립트를 스케줄러에 걸어두고 나면 이상한 습관이 하나 생깁니다. 잘 돌았는지 확인하려고 하루에 몇 번씩 로그 폴더를 열어보는 겁니다. 파일을 찾고, 맨 아래로 내리고, 시간을 대조하고, 아무 일 없었음을 확인하고 닫습니다. 한 번에 2분씩 하루 세 번이면 한 달에 세 시간입니다. 그런데 정작 진짜 문제가 터진 날에는 며칠 뒤에야 알아차립니다. 디스코드 웹훅 알림을 파이썬 코드 … 더 읽기

작업 스케줄러는 “성공”인데 아무 일도 안 일어났을 때

작업 스케줄러는 “성공”인데 아무 일도 안 일어났을 때

윈도우 작업 스케줄러를 열어 보면 마지막 실행 결과: 0x0 (작업이 완료되었습니다)라고 적혀 있습니다. 그런데 만들어졌어야 할 파일이 없습니다. 보내졌어야 할 메일이 없습니다. 심지어 스크립트가 제일 먼저 만드는 로그 폴더조차 생기지 않았습니다. 작업 스케줄러가 성공이라는데 실행이 안 된 것처럼 보이는, 가장 짜증나는 종류의 고장입니다. 저도 매일 아침 9시에 도는 자동화에서 이걸 겪었습니다. 스케줄러 기록에는 8월 14일 … 더 읽기

SSL 인증서 오류(CERTIFICATE_VERIFY_FAILED) 해결 총정리 — verify=False가 답이 아닌 이유

SSL 인증서 오류(CERTIFICATE_VERIFY_FAILED) 해결 총정리 — verify=False가 답이 아닌 이유

어제까지 잘 돌던 수집 스크립트가 오늘 아침에만 CERTIFICATE_VERIFY_FAILED를 뱉고 멈춰 있습니다. 브라우저로 같은 주소를 열어보면 자물쇠 아이콘까지 멀쩡한데, 파이썬에서만 안 됩니다. 이 SSL 인증서 오류는 검색하면 verify=False 한 줄이 제일 먼저 나오고, 실제로 그걸 붙이면 당장은 돌아갑니다. 그래서 대부분 거기서 끝내는데, 그 한 줄이 나중에 어떤 비용으로 돌아오는지는 잘 안 알려져 있습니다. 이번 글에서는 이 … 더 읽기

AI로 단위 테스트 자동 생성하는 법 — 프롬프트부터 커버리지 확인까지

AI로 단위 테스트 자동 생성하는 법 — 프롬프트부터 커버리지 확인까지

함수는 다 짰는데 테스트는 안 짠 상태로 커밋해 본 적이 있을 겁니다. 테스트가 중요하다는 건 알지만, 함수 하나에 케이스 대여섯 개를 손으로 적다 보면 정작 기능 개발보다 시간이 더 걸립니다. 그래서 대부분은 콘솔에 값 몇 개 찍어보고 넘어가죠. 그러다 두 달 뒤 할인 로직을 고치면서 쿠폰 계산이 조용히 깨지고, 그걸 고객 문의로 알게 됩니다. AI … 더 읽기

git worktree로 브랜치 전환 없이 여러 작업 동시에 하기

git worktree로 브랜치 전환 없이 여러 작업 동시에 하기

기능 개발을 한창 하고 있는데 “결제 페이지에서 500 떨어진다”는 연락이 옵니다. 지금 작업 트리에는 반쯤 고친 파일이 여덟 개쯤 열려 있습니다. 커밋하기엔 아직 동작하지 않고, 버리기엔 아깝습니다. 그래서 git stash로 밀어 넣고, 브랜치를 옮기고, 의존성을 다시 깔고, 고치고, 돌아와서 stash pop을 하고, 충돌을 풉니다. 이 왕복 한 번에 보통 10~15분이 날아갑니다. 하루에 두 번만 끼어들어도 … 더 읽기

폴더 감시 자동화 — 파일이 들어오면 알아서 분류하는 스크립트 만들기

폴더 감시 자동화 — 파일이 들어오면 알아서 분류하는 스크립트 만들기

다운로드 폴더를 열어 보면 설치 파일, 거래명세서 PDF, 캡처 이미지, 압축 파일이 순서 없이 500개쯤 쌓여 있습니다. 필요한 파일 하나를 찾느라 정렬 기준을 바꿔 가며 훑는 데 매번 1~2분씩 쓰고, 분기에 한 번 날을 잡아 정리하면 한 시간이 그냥 사라집니다. 폴더 감시 자동화는 이 문제를 접근 방향부터 바꿉니다. 쌓인 뒤에 치우는 게 아니라, 파일이 들어오는 … 더 읽기

파일 경로 오류(FileNotFoundError) 해결 총정리 — 상대경로·공백·백슬래시

분명 파일은 그 자리에 있는데 스크립트는 없다고 합니다. 파일 경로 오류는 입문자가 가장 자주 만나는 오류이면서, 동시에 경력이 쌓여도 환경이 바뀔 때마다 다시 만나는 오류입니다. 어제까지 잘 돌던 스크립트가 작업 스케줄러에 등록하자마자 FileNotFoundError를 뱉는 상황이 대표적입니다. 한 번 막히면 보통 20~30분은 날아가는데, 원인은 대부분 네댓 가지 중 하나입니다. 이 글에서는 그 원인을 증상별로 갈라내는 법과, … 더 읽기