Claude Code 플러그인, 통째로 깔지 않고 알맹이만 빼왔다

지난 편 → 6편 — 챗GPT랑 클로드, 왜 서로 대화는 못 시킬까 Claude Code로 한동안 일하다 보면, 남이 만들어 둔 도구를 가져다 쓰고 싶어지는 순간이 옵니다. 마켓플레이스에 올라온 플러그인 중 하나가 눈에 들어왔습니다. 코드를 필요 이상으로 부풀리지 않게, "게으른 시니어 개발자"처럼 최소로만 짜도록 붙잡아 주는 도구였습니다. 마음에 들었습니다. 그런데 막상 설치하려니 손이 멈췄습니다. 제가 원한 건 그 안에 담긴 원칙 하나 였는데, 플러그인은 그것 말고도 이런저런 것들을 통째로 데려옵니다. 안 쓸 기능까지 제 환경에 얹히는 게 영 내키지 않았습니다. 그래서 깔지 않고, 열어서 필요한 알맹이만 빼내기로 했습니다. 그러려면 먼저 "플러그인"과 "스킬"이 뭐가 다른지부터 알아야 했습니다. 스킬과 플러그인은 뭐가 다른가 한 줄로 하면 이렇습니다. 스킬은 부품 하나, 플러그인은 부품을 담은 상자. 스킬(Skill) 은 최소 단위입니다. SKILL.md 라는 마크다운 파일 하나가 전부고, 필요하면 옆에 보조 파일(스크립트·데이터)을 둘 수 있습니다. 두는 곳도 단순합니다. 개인용: ~/.claude/skills/<이름>/SKILL.md 프로젝트용: .claude/skills/<이름>/SKILL.md 파일 맨 위 frontmatter에 "이 스킬을 언제 써야 하는지"를 적어두면, Claude가 상황을 보고 알아서 불러 씁니다. 아니면 /스킬이름 으로 직접 부를 수도 있습니다. 말하자면 "이 일은 이렇게 처리해라"라고 적어둔 지침 한 장 입니다. 플러그인(Plugin) 은 그 부품들을 담아 배포하는 상자입니다. .claude-plugin/plugin.json 이라는 매니페스트를 중심으로, 여러 종류의 구성요소를 한 번에 묶습니다. skills/ — 스킬들 agents/ — 커스텀 에이전트(서브에이전트...

공고 알림봇 만들기 (8편) — 윈도우 작업 스케줄러로 파이썬 봇을 자동 실행했습니다

결론부터: 파이썬 스크립트를 PC 켤 때마다 자동으로 돌리려면 윈도우 작업 스케줄러 + 로그온 시 실행이면 충분합니다. 단, 환경변수가 전달되지 않는 함정이 있어 런처 스크립트를 한 겹 씌워야 합니다.

7편까지 만들고 나니 알림은 쓸 만해졌어요. 그런데 정작 제가 직접 켜야 돌아갔습니다.

지난 편 → 7편 — 텔레그램 봇 인라인 키보드로 버튼을 달았습니다

켜는 걸 잊으면 소용이 없어요

터미널을 열고 실행하면 잘 돌아갑니다. 문제는 그 창을 닫으면 멈춘다는 거죠.

공고는 제가 컴퓨터를 안 볼 때도 올라옵니다. 알림봇을 만든 이유가 "놓치지 않으려고"인데, 제가 켜는 걸 잊으면 그 순간 의미가 없어져요. 켜두는 것까지가 기능이었습니다.

클라우드에 올리는 방법도 있지만, 그건 나중 일로 미뤘어요. 일단 집 PC에서 확실히 돌아가는 것이 먼저였습니다.

작업 스케줄러 + 로그온 시 실행

윈도우에는 작업 스케줄러가 기본으로 들어 있어요. 여기에 등록하면서 트리거를 "로그온할 때" 로 잡았습니다.

이러면 PC를 켜고 로그인하는 순간 봇이 자동으로 뜹니다. 제가 할 일이 없어요.

부팅 시 실행하는 방법도 있는데 로그온 시 실행을 골랐습니다. 이 봇은 제 계정의 환경변수를 쓰기 때문에, 로그인 전에는 필요한 값이 준비되지 않거든요.

함정 — 환경변수가 안 넘어갑니다

여기서 막혔어요. 손으로 실행하면 잘 되는데, 작업 스케줄러로 띄우면 API 키를 못 읽습니다.

원인은 이거였어요. 제 토큰과 API 키는 코드에 안 박고 윈도우 사용자 환경변수에 넣어뒀는데, 작업 스케줄러가 띄우는 프로세스에는 그게 그대로 전달되지 않았습니다.

그래서 런처 스크립트를 한 겹 씌웠어요.

사용자 환경변수를 읽어서 → 프로세스 환경변수로 넣고 → 파이썬 실행

파워셸로 열 줄 남짓입니다. 작업 스케줄러는 이 런처를 부르고, 런처가 키를 챙겨서 봇을 띄우는 구조죠.

이렇게 하니 키가 코드에도, 설정 파일에도 안 남습니다. 설정 파일엔 ${환경변수이름} 같은 자리표시자만 있고, 실제 값은 실행할 때 채워집니다. 저장소에 올려도 안전해요.

30초마다 깨어나되, 매번 조회하진 않아요

봇은 30초마다 한 번씩 깨어납니다. 그런데 그때마다 API를 부르진 않아요.

소스별로 얼마 만에 다시 볼지를 따로 정해뒀습니다. 대부분 한 시간이고, 유튜브는 두 시간이에요. 30초 주기는 "지금 부를 때가 됐나"만 확인하는 용도입니다.

이렇게 나눈 이유는 두 가지예요.

  • API 호출량을 아끼려고 — 공공 API는 하루 호출 한도가 있습니다
  • 소스마다 갱신 속도가 다르니까 — 공고는 하루에 몇 번, 유튜브 댓글은 더 느리게 쌓입니다

설정만 바꾸면 재시작 없이 반영돼요

돌려보니 또 불편한 게 생겼습니다. 폴링 주기를 조금 바꾸고 싶은데, 그때마다 봇을 껐다 켜야 했어요.

그래서 설정 파일이 바뀌면 알아서 다시 읽도록 했습니다. 원리는 단순해요. 파일의 수정 시각을 기억해뒀다가, 매번 확인해서 달라졌을 때만 다시 읽습니다. 안 바뀌었으면 그냥 넘어가고요.

여기에 안전장치를 하나 넣었어요. 설정 파일을 잘못 고쳐서 읽기에 실패하면, 이전 설정을 그대로 유지합니다. 오타 하나로 봇이 죽으면 곤란하니까요.

덕분에 지역 필터 같은 걸 켜고 끄는 데 재시작이 필요 없습니다. 파일 저장하면 30초 안에 반영돼요.

여기서 제가 착각한 것

설정은 다시 읽지만, 코드는 다시 읽지 않습니다.

당연한 얘기인데 실제로 당했어요. 얼마 전 필터 기능을 새로 만들고 설정까지 켰는데 아무 일도 안 일어났습니다. 한참 들여다보고 나서야 알았죠 — 돌고 있던 프로세스는 열두 시간 전에 올라온 옛날 코드를 메모리에 들고 있었던 겁니다.

바꾼 것반영되나
설정 파일✅ 30초 안에
파이썬 코드❌ 재시작 필요

"핫 리로드가 되니까 알아서 반영되겠지" 하고 넘어간 게 화근이었어요. 어디까지 자동이고 어디부터 수동인지를 헷갈리면 이런 일이 생깁니다.

정리 — 자동화의 마지막 한 칸

돌아보면 이 편에서 한 일은 기능이 아니라 지속성이었어요.

아무리 잘 만들어도 사람이 매번 켜야 하면 그건 반쯤 완성된 도구입니다. 제가 잊어버리는 순간 멈추니까요. 켜두는 것까지 자동화해야 비로소 도구가 됩니다.

지금은 PC를 켜면 알아서 뜨고, 텔레그램으로 "시작했습니다" 메시지가 한 번 옵니다. 그 메시지를 보면 오늘도 돌고 있구나 하고 넘어가요. 그거면 충분합니다.

다음 편

수집한 게 많아지니 이번엔 읽을 가치가 있는지가 문제였어요. 그래서 제 PC 안에서 도는 작은 언어 모델에게 1차 판단을 맡겼습니다. → 9편 — LM Studio 로컬 LLM으로 수집 결과를 걸렀습니다


(이전 편: 7편 — 텔레그램 봇 인라인 키보드로 버튼을 달았습니다)

댓글