카테고리

툴과 개발 환경

1인 운영을 떠받치는 머신, 에이전트 환경, 원격 접속, 알림 셋업 기록.

전체 글

27
같은 모양의 배포 스크립트 아이콘 여러 개가 줄 서 있고 전부 '--dry-run' 배지를 달고 있는데, 그중 하나만 배지가 회색으로 비어 있고 그 아래에서 화살표가 곧장 'PRODUCTION' 상자로 들어간다.
툴과 개발 환경8 분 읽기

제 `--dry-run`이 프로덕션에 게시했습니다

앱마다 배포 스크립트가 하나씩 있고 형태가 거의 같습니다. 먼저 --dry-run으로 돌려 보고, 출력이 맞으면 플래그를 떼고 다시 돌립니다. 그날도 --dry-run을 붙였는데 버전이 그대로 프로덕션에 나갔습니다. 그 스크립트에는 argparse가 없었습니다.

#automation#android#gotchas#reality-check
왼쪽은 대화형 ssh가 0바이트에 Exit status 1로 즉사하고 pty.Open device not configured 로그가 뜬 화면, 오른쪽은 511 천장에 붙은 527개 ttys와 20일째 살아있는 claude/codex 세션 목록
툴과 개발 환경9 분 읽기

제 SSH가 죽은 건 20일치 좀비 셸 때문이었습니다

대화형 tailscale ssh가 0바이트를 뱉고 즉사했습니다. tailnet도 ACL도 호스트키도 버전 경고도 전부 무죄였습니다. 진짜 원인은 20일 동안 아무도 안 만진 CLI 세션들이 PTY를 전부 소진한 것 — 그리고 PTY를 쥔 건 claude가 아니라 그 부모 셸이었습니다.

#tailscale#ssh#macos#gotchas
왼쪽: 리포의 141행 영어 스켈레톤. 오른쪽: 라이브의 563행 다국어 산출물. 리포를 올리면 오른쪽이 왼쪽으로 덮인다.
툴과 개발 환경12 분 읽기

배포하려던 리포가 라이브보다 한 세대 낡아 있었습니다

정책 문구 한 줄을 고치려고 정적 사이트 배포 스크립트를 부르려던 순간이었습니다. 라이브 파일 178개를 먼저 내려받아 대조했더니 일치가 0개였고, 라이브가 페이지마다 50KB 더 컸습니다. 그대로 올렸으면 170여 페이지에서 그만큼을 지웠을 겁니다.

#deployment#verification#gotchas#reality-check
개념 도식: 왼쪽은 200 OK와 '10개 채널 업데이트 완료', 오른쪽은 서버가 그대로 들고 있는 옛 제목
툴과 개발 환경10 분 읽기

API가 200을 돌려주고 제 값을 버렸습니다

채널 열 개의 제목을 API로 바꿨습니다. 에러는 없었고 스크립트는 전부 성공을 찍었습니다. 다시 읽어 보니 제목은 하나도 안 바뀌어 있었습니다. 그날 하루에 밟은 조용한 실패 다섯 개를 정리했습니다.

#gotchas#youtube-api#automation#og-image
개념 도식: 파일들이 논리 크기는 정상인데 실제 블록 수는 0인 APFS dataless. mv/rsync가 닿으면 파일당 동기 다운로드. find -name '*.icloud'는 0건.
툴과 개발 환경6 분 읽기

파일 이동이 멈춘 이유

iCloud Drive의 git 저장소를 로컬로 옮기려 `mv`를 걸었더니 수백 개 파일이 10분 넘게 안 끝났습니다. iCloud 파일은 디스크에 실제로 없을 수 있고, `mv`가 닿으면 파일당 동기 다운로드가 걸립니다. 게다가 최신 macOS는 `.icloud` sidecar가 아니라 APFS dataless 파일이라 `find -name '*.icloud'`로는 하나도 안 잡힙니다.

#macos#icloud#git#gotchas
개념 도식: 한 디렉터리에서 create/delete/stat은 초록으로 통과하고 read/ls/append만 빨갛게 막힌다. Full Disk Access는 이미 부여됨. 이 비대칭이 TCC가 아니라 EndpointSecurity 확장의 신호.
툴과 개발 환경6 분 읽기

쓸 수는 있는데 읽을 수 없는 디렉터리

파일은 만들 수도 지울 수도 있는데 `open()`만 안 됐습니다. `Operation not permitted`. 전체 디스크 접근은 이미 켜져 있고 샌드박스도 무관했습니다. 범인은 TCC가 아니라 EndpointSecurity 기반 DLP 에이전트였고, 판별의 열쇠는 '현재 프로세스가 방금 만든 파일만 읽힌다'는 비대칭이었습니다.

#macos#endpointsecurity#filesystem#gotchas
1인 에이전트 팩토리: 내 셋업
툴과 개발 환경4 분 읽기

1인 에이전트 팩토리: 내 셋업

웹앱 34개, 페이퍼 트레이딩 봇 몇 개, 다국어 영상 파이프라인 — 전부 그냥 계속 켜져 있는 2017년 인텔 노트북에서 돈다. 전체 셋업과, 왜 구형 하드웨어가 오히려 도움이 됐는지.

#setup#launchd#macos#automation