자주 헷갈리는 것들 모음. 개념 정리, 차이 비교, 짧은 팁.
에이전트 / 회색지대 자동화
BrowserMCP — 본인 Chrome 에 붙어 회색지대 사이트 자동화
공식 API 가 막히거나 토큰·rate limit 으로 자주 끊기는 회색지대 사이트(네이버·인스타·당근·부동산 등) 를 사람처럼 클릭해 자동화하기 위한 MCP 서버. 본인이 평소 켜둔 Chrome 창에 붙어서 그 탭의 DOM 을 읽고 명령을 흘려넣는다. 본인 로그인 세션·쿠키·브라우저 핑거프린트를 그대로 들고 가서, 깨끗한 chromium 으로 띄우는 Playwright 보다 Cloudflare·네이버 봇 탐지를 훨씬 잘 통과한다.
| 방식 |
비용·속도 |
봇 탐지 |
| Computer Use (시각) |
스크린샷 + LLM 1만 토큰/클릭, 5~15초 |
강함 (사람처럼 보임) |
| Playwright clean chromium |
무료·빠름 |
약함 (Cloudflare 차단) |
| BrowserMCP / Playwright persistent |
무료·빠름 |
강함 (본인 세션 그대로) |
실전 팁: 본진 맥은 이미 Playwright MCP + persistent context 로 같은 효과를 운영 중 — 네이버 블로그 자동 발행, 유튜브 스튜디오 업로드, Play Console "앱 만들기" 폼, ASC 심사 클릭이 전부 이 방식으로 돈다. BrowserMCP 의 차이는 attach 지점 — 평소 쓰는 Chrome 창에 직접 끼어드는 쪽이라 인터랙티브 디버깅("이 탭 한 번 봐봐") 에 살짝 편하고, Playwright persistent 는 별도 프로필 창이라 자동화 본진과 형님 평상시 브라우저가 깔끔하게 분리된다. 본질은 동일, 새로 깔 필요는 아직 X.
2026-05-24
에이전트 / 신기술 catch-up
acpx — 에이전트끼리 대화하는 표준 프로토콜의 CLI
Agent Client Protocol (ACP) 의 헤드리스 CLI 클라이언트. 한 AI 에이전트나 오케스트레이터가 다른 코딩 에이전트(Claude Code, Codex, Pi, Gemini 등) 와 PTY 스크래핑 대신 구조화된 프로토콜로 대화하게 해준다. npm install -g acpx, Node 22+. github.com/openclaw/acpx (alpha).
| 방식 |
통신 |
한계 |
| PTY 스크래핑 |
터미널 출력 글자 긁기 |
포맷 바뀌면 깨짐, 세션 상태 추적 어려움 |
| ACP (acpx) |
JSON 메시지 + 세션 ID |
아직 alpha, 지원 에이전트 한정 |
실전 팁: "우회"라는 표현이 붙는 건 두 갈래 — (a) Cursor / Antigravity / Zed 같은 에디터에서 자기네 API 빌링 대신 Claude Pro · ChatGPT Plus 구독을 CLI(Claude Code / Codex) 경유로 끌어쓰는 트릭, (b) 멀티 에이전트 mesh 를 ACP 표준으로 묶는 용도. 본진 5노드 mesh + tmux METHOD A 운반체로 같은 일이 이미 돌고 있어서 형님 입장에선 catch-up 정도면 충분.
2026-05-24
영어 / 자연어
prefix / suffix — 앞·뒤에 붙는 것
| 용어 |
위치 |
예시 |
| prefix |
앞 |
텔레그램 답신 첫 줄의 🏭 이모지, "pre-" 접두사 |
| suffix |
뒤 |
파일명 .md, .yaml 같은 확장자, "-ing" 접미사 |
실전 팁: 챗봇 답신 첫 줄에 🏭 같은 기기 이모지를 박는 게 기기 prefix. CLAUDE.md 도 같은 단어 씀. 잘못 박힌 prefix 한 글자가 어느 기기에서 답하는지 잘못 알려주는 사고로 이어진다 (2026-05-14 / 2026-05-18 이슈).
2026-05-18
영어 / 의사결정
priori — 미리 정해진 디폴트
| 상태 |
단서 |
LLM 행동 |
| 단서 있음 |
env / hostname / 봇 username |
단서대로 정확히 식별 |
| 단서 없음 |
0개 |
학습된 priori 로 디폴트 (보통 가장 흔한 케이스) |
실전 팁: 챗봇이 자기 정체성도 priori 로 결정함. CLAUDE.md 매핑 표 첫 행이 🍎 Mac 본진이라 LLM 가 단서 없으면 자동으로 본진 행세. 그래서 forcing function 으로 단서를 첫 turn 에 강제 surface 해야 함. "선험적 / 사전적" 으로도 번역.
2026-05-18
자동화 / 안전
forcing function — 강제로 작동하게 만드는 장치
사람 의지·기억에만 의존하면 잊거나 미루기 마련이라, 코드·훅·룰 레벨에서 자동으로 작동하게 박아두는 장치. 이슈 포스트모템 "예방" 섹션이 사실상 forcing function 모음.
| 종류 |
예시 |
강도 |
| 메모리 |
"다음부턴 X 하지 말기" 메모리 |
약함 — LLM 가 잊을 수 있음 |
| 룰 문서 |
CLAUDE.md "첫 줄에 이모지 prefix" |
중간 — 본인 의지에 의존 |
| 훅 |
Stop hook 이 reply 0회면 차단 |
강함 — 시스템이 막음 |
| 자동화 cron |
launchd 가 매일 03:00 자동 실행 |
가장 강함 — 사람 손 0 |
실전 팁: 이슈 재발은 거의 항상 forcing function 강도 부족이 원인. 2026-05-14 → 5-18 이모지 prefix 재발도 (a) env 명시만 박고 (b) SessionStart 훅이라는 더 센 forcing function 은 안 박았기 때문.
2026-05-18
데이터 / 동기화
SoT vs mirror — Source of Truth 와 그 사본
| 항목 |
SoT |
mirror |
| 정의 |
원본, 단일 진실의 출처 |
SoT 를 복제한 사본 |
| 권위 |
충돌 시 이쪽 우선 |
충돌 시 양보 |
| 예시 |
~/claude-skills/issues/ |
~/daejong-page/issues/ |
| 수정 권한 |
직접 수정 OK |
자동/스크립트 동기화로만 |
실전 팁: SoT 만 수정하고 mirror 는 동기화 스크립트로 자동 갱신해야 drift 0. mirror 를 사람이 손대면 양쪽 어긋남 (SoT vs mirror drift) → 다음 sync 때 어느 쪽이 맞는지 분기 필요. 마스킹(민감정보 가림) 같은 mirror 변형이 있으면 그 룰을 명시.
2026-05-18
Anthropic / 비용 모델
headless / interactive / SDK / API billing — Claude 호출 4가지 방식
| 모드 |
호출 예시 |
billing |
| interactive 챗봇 |
텔레그램·터미널 CLI 챗봇 |
정액 (Claude Pro/Max) |
| headless |
claude -p "프롬프트" 한 방 |
정액 (CLI 안에 묶임) |
| Agent SDK |
코드에서 sdk.Claude(...).run() |
별도 종량 (API 토큰당 과금) |
| 직접 API |
curl api.anthropic.com/... |
종량 (가장 비쌈) |
실전 팁: 인터랙티브 챗봇이 가장 싸고 안전. Python 으로 직접 API 부르면 우회되는 것 같지만 종량제 billing 으로 더 비싸짐. tmux paste 패턴 = 챗봇이 받은 메시지를 다른 챗봇 tmux 세션에 paste 해서 5노드 fan-out 하는 것 → API 호출 0, 정액 안에서 처리.
2026-05-18
git / 자주 헷갈리는 것
stash / rebase / cherry-pick — git 3대 자주 헷갈리는 명령
| 명령 |
하는 일 |
언제 씀 |
git stash |
현재 변경을 임시 보관소에 넣고 작업 디렉터리 비움 |
다른 브랜치 잠깐 갔다 와야 할 때 |
git rebase |
내 커밋들을 다른 베이스 위로 옮겨 다시 쌓기 |
브랜치 시작점이 낡았을 때 |
git cherry-pick |
다른 브랜치의 특정 커밋 하나만 가져와 붙이기 |
한 커밋만 골라 가져올 때 |
실전 팁: stash 는 "임시 주머니", rebase 는 "기차 차량을 다른 선로로 옮기기", cherry-pick 은 "체리 한 알만 따오기" 비유. rebase 는 commit hash 가 바뀌므로 이미 push 한 브랜치엔 위험 (force push 필요).
2026-05-18
분산 / 자동화
fan-out — 한 명령을 여러 곳에 동시 발사
명령 1 개를 여러 워커(기기·프로세스·에이전트)에게 한 번에 뿌리는 패턴. 5노드 (🍎/🪟/🏭/🖥/💻) 에 같은 directive 를 동시 전달하는 게 대표 예.
| 패턴 |
동작 |
걸리는 시간 |
| 순차 (serial) |
1 → 2 → 3 → 4 → 5 |
5배 |
| fan-out (병렬) |
1 동시에 5곳 발사 |
1배 |
실전 팁: 본진이 directive 1 통 만들고 mac-mini-directive.sh / wsl-directive.sh / desktop3060ti-directive.sh 동시 호출하면 fan-out. 결과는 mac-report.sh 로 다시 본진 1 곳에 모아옴 — 이건 반대 방향이라 fan-in.
2026-05-18
시스템 / 안전 디자인
idempotent — 여러 번 실행해도 결과 같은
같은 명령을 1번 실행하든 100번 실행하든 시스템 상태가 같은 성질. 자동화 스크립트가 idempotent 하지 않으면 cron 이 두 번 fire 됐을 때 사고로 이어짐.
| 동작 |
idempotent? |
이유 |
mkdir -p ~/foo |
O |
디렉터리 이미 있어도 같음 |
echo X >> ~/log |
X |
실행 횟수만큼 누적됨 |
git pull --rebase |
대체로 O |
이미 최신이면 no-op |
gh pr create |
X |
중복 생성 시도하면 에러 |
실전 팁: 자동화 스크립트는 가능한 idempotent 하게 짤 것. PR·배포·메일 발사 같이 본질적으로 non-idempotent 한 동작은 별도 "이미 했는지 확인" 한 줄 (preflight check) 을 앞에 박아두면 안전.
2026-05-18
GitHub Pages / Cloudflare Pages
GH Pages vs CF Pages — custom domain SSL 발급 차이
| 항목 |
GH Pages |
CF Pages |
| Git auto-deploy |
main push → 자동 빌드+배포 |
Git Provider 연결 여부 선택 (No 시 wrangler 명시 호출) |
| Custom cert |
Let's Encrypt 자동 (가끔 stuck) |
Cloudflare 자체 cert (즉시 발급) |
| 발급 진단 |
gh api repos/<o>/<r>/pages/health |
wrangler pages project list |
| HTTPS 강제 |
cert 발급 후 https_enforced=true |
기본 활성 |
실전 팁: GH Pages cert provisioning 이 멈췄을 때 (서버가 *.github.io wildcard cert 만 서빙) — CNAME 을 잠시 비웠다 다시 박는 토글 트릭으로 재트리거. gh api -X PUT repos/<o>/<r>/pages -F 'cname=' → sleep 8s → -F 'cname=<domain>'. 30초 안에 authorization_pending → approved 전환.
2026-05-17
launchd / macOS
launchd 에서 tmux 호출 — socket path 명시 필수
| 항목 |
인터랙티브 셸 |
launchd plist |
| TMUX env var |
셸 환경에서 상속 |
inherit 안 됨 |
tmux 단독 호출 |
기존 세션 attach OK |
새 서버 spawn, 기존 세션 못 봄 |
| 해결 |
자동 |
tmux -S /private/tmp/tmux-501/default 처럼 socket 명시 |
실전 팁: bash array TX=( tmux -S /private/tmp/tmux-501/default ) 정의 후 "${TX[@]}" 로 호출하면 plist ProgramArguments / 셸 스크립트 양쪽에서 동일하게 작동. UID 가 501 이 아니면 /private/tmp/tmux-$(id -u)/default 식으로 동적 결정.
2026-05-17
Gmail / 도구 선택
gog CLI vs Gmail MCP create_draft — 메일 발사 도구
| 항목 |
Gmail MCP create_draft |
gog CLI send |
| 발사 |
초안만 (수동 send 별도) |
즉시 발송 |
| 호출 |
MCP 도구 (Claude 안) |
gog send --to ... --subject ... --body ... 한 줄 |
| SMTP credential |
불필요 (OAuth) |
불필요 (OAuth) |
| 적합 |
초안 검토 후 사람이 클릭 발송 |
자동 메일 zero-touch 발사 |
실전 팁: 자동화 사이클 안에서 메일 한 통 발사가 목적이라면 gog 가 우월. Gmail MCP create_draft 는 Claude 가 draft 만 만들고 강대종이 Gmail UI 들어가 send 버튼 눌러야 해서 사람 손 1번 들어감 — zero-touch 안 됨. 반대로 "발송 전 본인 확인 필수" 케이스면 create_draft 가 안전.
2026-05-17
Claude Code / 세션
/loop fixed-interval vs dynamic — 두 모드의 차이
| 항목 |
fixed-interval |
dynamic |
| 호출 |
/loop 5m /foo |
/loop /foo (interval 생략) |
| 메커니즘 |
CronCreate (cron 표현식) |
ScheduleWakeup (매 turn 자체 픽) |
| 자동 cap |
7일 |
없음 (모델이 끊을 때까지) |
| 끄는 법 |
CronDelete / 세션 종료 |
"loop stop" → 모델이 wakeup 생략 |
| 적합 케이스 |
고정 주기 폴링 (5분~수시간) |
모델이 페이스 조정 (지능형 loop) |
실전 팁: dynamic 모드는 모델이 다음 iter 를 자체 픽해서 즉시 진행. iter 사이 후보를 surface 하고 ack 받는 건 dynamic 의 의도 위반 — 매 iter ack 요구하면 그냥 수동 chain 이 됨.
2026-05-13
Claude Code / 세션
/loop dynamic 의 delaySeconds — 5분 prompt cache TTL 분기점
| 구간 |
비용 특성 |
적합 |
| 60s ~ 270s |
cache hit 유지 |
활성 폴링 (빌드 끝났나, PR 코멘트 왔나) |
| 300s ~ 1000s |
❌ worst-of-both |
금지 — cache miss + 잦은 fire 둘 다 페이 |
| 1200s ~ 3600s |
miss 1회를 길게 amortize |
idle 사이클·휴리스틱 점검 |
실전 팁: Anthropic prompt cache TTL 이 5분(300s) 이라 그 근처 구간이 최악. dynamic 진입 시 즉시 fallback delay 결정 — 활성 폴링이면 250s, 아니면 1500s. ScheduleWakeup 의 reason 필드에 "cache TTL 안" 또는 "miss 1회 amortize" 명시하면 다음 self-review 때 검증 가능.
2026-05-13
Shell / macOS
.zprofile vs .zshrc — 뭐가 다른가
| 파일 |
언제 실행 |
주로 쓰는 것 |
| .zprofile |
로그인 셸 시작 시 (터미널 앱 새 창) |
PATH, 환경변수 |
| .zshrc |
인터랙티브 셸마다 (탭 새로 열 때마다) |
alias, 함수, 프롬프트 |
실전 팁: Ghostty·iTerm2 같은 터미널이 로그인 셸로 시작하면 .zprofile만 읽고 .zshrc를 안 읽음.
alias가 없으면 .zprofile에 [[ -f ~/.zshrc ]] && source ~/.zshrc 한 줄 추가.
2026-05-08