목록으로
업무 생산성 개선을 위한 AI 활용
글로 적어 둔 작업 규칙을 AI가 건너뛰지 못하게, 어기기 직전에 멈춰 세우는 훅으로 바꿨다
문서에 적어 두었던 단계 순서와 금지 사항을 AI가 도구를 쓰는 앞뒤와 응답이 끝나는 때에 끼어들어 검사하는 훅 19개로 옮기고, 도구를 쓰기 직전에 건 훅으로 어기는 동작을 막아 온 기록이다.
🤖 활용 AI 도구
Claude Code(Anthropic)
① 어떤 상황에서 AI를 활용했나요?
나는 컴퓨터공학을 전공하는 대학생이다. 6월 29일부터 공모전 응모 일을 AI에게 맡기는 자동화 작업 틀(하네스)을 만들어 돌리고 있다. 링커리어, 위비티, 콘테스트코리아, 씽굿 네 곳에서 공고를 모으면 AI가 요강을 읽고 낼지 말지 판정하고, 낼 건은 양식을 받아 재료를 조사한 뒤 원고까지 쓴다. 10월 11일 기준으로 이렇게 분류한 공모가 1,669건이다. 그중 1,118건은 반려됐다. 최종 원고까지 간 건은 325건이고, 내가 실제로 제출한 건은 308건이다.
공고를 찾는 데까지는 검색으로도 된다. 그러나 요강을 읽고 자격과 AI 사용 허용 여부를 따져 걸러 내고, 남은 건마다 양식에 맞는 원고를 쓰는 일은 읽고 판단하는 일이라 언어 모델에게 맡겼다.
문제는 바로 그 판단하는 AI에게 있었다. 판정을 하고 글을 쓰는 AI는 내가 정한 순서와 금지 사항도 함께 지켜야 하는데, 그것을 문서에 글로만 적어 두면 건너뛰는 때가 생긴다. 하네스의 운영 지침에는 이 경험을 한 줄로 줄인 문장이 들어 있다. "규칙은 글로 적으면 우회되고 코드로 만들면 지켜진다." 그래서 이 사례의 물음은 하나로 좁혀졌다. 읽고 판단하는 일은 AI에게 맡기면서, 그 AI가 어길 수 없는 규칙은 어떻게 만들 것인가.
② 어떤 AI를 어떻게 활용했나요?
중심 도구는 Anthropic의 Claude Code다. 작업을 지휘하는 AI 하나가 역할별로 정의해 둔 AI들을 순서대로 부른다. 공고 판정, 재료 조사, 아이디어 후보 셋 만들기, 그중 하나 고르기, 초안, 채점, 다시 쓰기가 각각 다른 AI의 몫이다. 채점은 세 갈래가 나란히 돈다. 둘은 원고를 떨어뜨릴 결함을 찾고, 하나는 고칠 곳을 제안한다. 이미지 공모의 그림은 ChatGPT 이미지 생성으로 만들었고(초기 일부는 내가 직접 이미지 AI로 그렸다), 제출 문서 편집은 한/글 자동화가, 제출 목록은 노션이 맡았다.
규칙을 지키게 하는 장치가 훅이다. 훅은 AI가 어떤 도구를 쓰기 직전이나 직후에 끼어들어 조건을 확인하는 짧은 프로그램이다. 도구를 쓰기 직전에 건 훅은 조건이 맞지 않으면 그 동작을 실행 전에 막는다. Claude Code 공식 문서(code.claude.com/docs/en/hooks)에는 도구 호출 직전 시점(PreToolUse)에 건 훅이 그 호출을 막을 수 있다고 적혀 있고, 검사 프로그램이 종료 코드 2를 돌려주면 호출이 멈춘다. 10월 11일 기준 하네스에는 이런 훅 19개가 도구를 쓰기 전과 쓴 뒤, 한 차례 응답이 끝나는 때를 포함한 여섯 지점에 걸려 있었고, 하네스 자체를 점검하는 자기시험 31개도 함께 두었다.
훅 가운데 하나는 단계 순서를 지킨다. 예를 들어 아이디어 후보 파일이 폴더에 없으면 초안을 쓰는 AI를 부르는 호출 자체가 막힌다. 다른 하나는 AI가 어떤 일을 하기 전에 그 일의 지침서를 먼저 열었는지 본다. 지침서를 열지 않은 채 일을 시작하려 하면 그 자리에서 멈춘다.
③ 활용 결과 어떤 변화가 있었나요?
변화는 숫자보다 장면으로 남아 있다. 이 글이 만들어지는 동안에도 훅이 여러 번 일을 세웠다.
10월 22일, 이 공모의 아이디어 단계를 부르던 호출이 중복 공고문을 막는 훅에 걸렸다. 이 공모의 안내문 파일이 지난 회차 안내문과 같은 파일이었기 때문이다. 같은 공고를 두 번 다루지 않으려고 세운 문이 이번에는 새 회차 응모 앞에서 닫힌 셈이다. 이때 AI는 그 문을 스스로 열지 않았다. 막힌 사유를 내 질문 목록에 올려 두었고, 다음 날인 10월 23일 내가 "3번풀고만들고"라고 답한 뒤에야 작업이 이어졌다.
10월 26일에는 지침서를 먼저 열게 하는 훅이 작업을 지휘하는 AI를 세웠다. 웹에서 자료를 받으려는데 웹 수집 지침서를 아직 열지 않았다는 이유였고, 지침서를 연 뒤에는 같은 호출이 그대로 통과했다. 이날 이렇게 멈춘 일이 두 번 더 기록에 남아 있다. 같은 날 저녁 단계 점검을 돌렸을 때는, 아이디어 후보 파일이 아직 없으니 초안을 쓰는 AI는 차단 상태이고 아이디어 단계부터 하라는 답이 나왔다. 그 뒤 아이디어 후보 파일이 먼저 생겼고, 이 글의 첫 원고는 그다음에 쓰였다.
이 장면들이 보여 주는 변화는 구조에 있다. 단계 순서를 지켰는지, 금지한 동작을 하지 않았는지는 이제 어기는 동작이 실행되기 전에 기계가 확인한다. 막힌 쪽에는 이유가 글로 돌아오고, AI는 그 이유를 읽고 빠진 일을 채운 뒤 다시 시도한다. 규칙 자체를 풀어야 할 때는 사람에게 묻는다. 그래서 사람 몫은 규칙을 정하는 일, 막힌 규칙을 풀지 말지 결정하는 일, 본인인증과 서약이 필요한 제출, 수상 결과를 알려 주는 일로 정리되어 있다. 시간이 얼마나 줄었는지는 따로 재 두지 않아 여기에 적지 않는다.
④ 나만의 방식 또는 개선 포인트는 무엇인가요?
첫째, 규칙 하나를 문 하나로 만든다. 위에서 본 훅들이 지키는 규칙은 모두 예, 아니오로 답이 나온다. 아이디어 후보 파일이 있는가, 이 공고문이 이미 받은 파일과 같은가, 이 일의 지침서를 열었는가. 이렇게 답이 갈리는 규칙이어야 기계가 실행 전에 판단할 수 있다. AI가 끝낸 결과를 나중에 검사하는 방법은 널리 쓰인다. 이 하네스가 더 기댄 쪽은 어기는 동작이 실행되기 전에 멈추는 쪽이었다.
둘째, 훅이 못 막는 것은 훅에 맡기지 않는다. 원고 속 문장이 사실인지는 파일이 있는지처럼 예, 아니오로 가를 수 없다. 그 몫은 채점 세 갈래와 사람이 맡는다. 8월 9일부터는 원고의 통과 여부를 채점 점수로 정하지 않고, 구조적인 치명 결함이 남았는지로만 정한다. 표절 감사와 출처 표시 규율도 따로 두었다. 이 글을 쓸 때도 수치와 사건은 출처가 적힌 사실 대장에 있는 것만 썼다. 하네스 규모와 처리량 숫자는 10월 11일 저녁 작업 저장소와 제출 목록을 센 값이고, ⑤의 시험 숫자는 10월 26일 기록이다.
셋째, 문을 여는 열쇠는 사람이 쥔다. 무엇을 하지 않을지 정하는 일은 내가 하고, AI는 그 결정을 바꿀 수 없게 해 두었다. 10월 22일처럼 훅이 지나치게 막은 때에도 AI는 스스로 풀지 않았다. 같은 원칙으로 작업 기록 저장소는 외부에 올리지 않고, 개인정보가 밖으로 나가는 일은 매번 나에게 묻게 했다. 10월 1일부터는 AI 사용을 금지하는 공모를 처음부터 반려한다. 응모서에 AI 활용을 적는 칸이 있으면 사실대로 적는다.
⑤ 다른 사람도 따라 할 수 있나요?
10월 26일, 이 방식이 내 하네스 밖에서도 서는지 작게 시험했다. 시험은 하네스의 작업 AI가 돌렸고, 입력과 출력은 원문 그대로 기록에 남겼다. 먼저 내 하네스에 실제로 있는 규칙 다섯 줄을 평범한 문장으로 적었다.
1) 아이디어 후보 파일이 없으면 초안 파일을 새로 쓰지 못한다.
2) 원격 저장소로 올리는 명령은 실행하지 못한다.
3) 작업 상태를 기록하는 파일은 손으로 고치지 못한다.
4) 폴더 이름을 바꾸는 스크립트는 대상 번호 없이 돌리지 못한다.
5) 채점 결과 파일이 없으면 최종 원고 파일을 쓰지 못한다.
그리고 내 규칙도 훅도 없는 빈 폴더에서 Claude(소넷 모델)에게 규칙 한 줄씩을 주고, 도구 호출 직전에 막는 훅으로 바꿔 달라고 한 번씩 물었다. 돌려받을 것은 셋으로 정했다. 설정 파일에 넣을 등록 조각, 그 훅이 부르는 검사 프로그램(Windows의 PowerShell), 그리고 이 훅이 못 막는 경우 한 줄이다.
다섯 번 모두 세 가지가 다 나왔다. 검사 프로그램 다섯 개를 떼어 내고, 프로그램마다 규칙을 어기는 입력 하나와 정상 입력 하나를 넣어 따로 실행했다. 어기는 입력 다섯은 모두 막혔고 정상 입력 다섯은 모두 통과해, 열 번 모두 기대대로 움직였다.
더 쓸모 있던 것은 셋째 칸이었다. AI는 다섯 건 모두 못 막는 경우를 적었고, 그중 세 건은 파일을 쓰는 도구 대신 명령줄에서 출력을 파일로 돌려 쓰면(리다이렉션) 이 훅이 보지 못한다고 적었다. 채점 결과 파일 규칙에 대해서는 그 파일이 비어 있거나 엉터리여도 있기만 하면 통과한다는 점까지 짚었다. 규칙을 훅으로 바꿀 때 그 훅의 구멍 목록이 함께 돌아오니, 어디를 다른 훅이나 사람이 봐야 하는지도 같이 알게 된다.
이 시험은 작다. 표본 다섯 건을 모델 하나로 한 번씩 돌렸고, 만들어진 훅을 실제 Claude Code 세션에 등록해 AI의 호출을 막아 본 것이 아니라 검사 프로그램만 단독으로 실행했다. 보여 준 것은 평범한 문장으로 된 규칙 한 줄을 건네면 검사 프로그램과 그 한계 목록이 함께 돌아왔고, 그 프로그램이 이번 입력에서 기대대로 움직였다는 데까지다. 실제 세션에 걸어 보는 일은 다음 확인 거리로 남아 있다.
이 시험에서 출발점이 된 것은 Claude Code와, 이미 글로 적어 둔 규칙 한 줄이었다. 등록은 프로젝트 설정 파일(.claude/settings.json)의 훅 항목에 하고, 막을 때는 검사 프로그램이 종료 코드 2를 돌려주게 하는 것이 공식 문서에 적힌 방식이다. 내 규칙 다섯 줄도 공모전 낱말을 걷어 내면 앞 단계 결과물이 없으면 다음 파일을 쓰지 않는다, 작업물을 밖으로 올리지 않는다 같은 모양이었다. 빈 폴더의 AI가 규칙으로 받은 것도 위 다섯 줄 같은 평범한 문장 한 줄씩이었다.
나는 컴퓨터공학을 전공하는 대학생이다. 6월 29일부터 공모전 응모 일을 AI에게 맡기는 자동화 작업 틀(하네스)을 만들어 돌리고 있다. 링커리어, 위비티, 콘테스트코리아, 씽굿 네 곳에서 공고를 모으면 AI가 요강을 읽고 낼지 말지 판정하고, 낼 건은 양식을 받아 재료를 조사한 뒤 원고까지 쓴다. 10월 11일 기준으로 이렇게 분류한 공모가 1,669건이다. 그중 1,118건은 반려됐다. 최종 원고까지 간 건은 325건이고, 내가 실제로 제출한 건은 308건이다.
공고를 찾는 데까지는 검색으로도 된다. 그러나 요강을 읽고 자격과 AI 사용 허용 여부를 따져 걸러 내고, 남은 건마다 양식에 맞는 원고를 쓰는 일은 읽고 판단하는 일이라 언어 모델에게 맡겼다.
문제는 바로 그 판단하는 AI에게 있었다. 판정을 하고 글을 쓰는 AI는 내가 정한 순서와 금지 사항도 함께 지켜야 하는데, 그것을 문서에 글로만 적어 두면 건너뛰는 때가 생긴다. 하네스의 운영 지침에는 이 경험을 한 줄로 줄인 문장이 들어 있다. "규칙은 글로 적으면 우회되고 코드로 만들면 지켜진다." 그래서 이 사례의 물음은 하나로 좁혀졌다. 읽고 판단하는 일은 AI에게 맡기면서, 그 AI가 어길 수 없는 규칙은 어떻게 만들 것인가.
② 어떤 AI를 어떻게 활용했나요?
중심 도구는 Anthropic의 Claude Code다. 작업을 지휘하는 AI 하나가 역할별로 정의해 둔 AI들을 순서대로 부른다. 공고 판정, 재료 조사, 아이디어 후보 셋 만들기, 그중 하나 고르기, 초안, 채점, 다시 쓰기가 각각 다른 AI의 몫이다. 채점은 세 갈래가 나란히 돈다. 둘은 원고를 떨어뜨릴 결함을 찾고, 하나는 고칠 곳을 제안한다. 이미지 공모의 그림은 ChatGPT 이미지 생성으로 만들었고(초기 일부는 내가 직접 이미지 AI로 그렸다), 제출 문서 편집은 한/글 자동화가, 제출 목록은 노션이 맡았다.
규칙을 지키게 하는 장치가 훅이다. 훅은 AI가 어떤 도구를 쓰기 직전이나 직후에 끼어들어 조건을 확인하는 짧은 프로그램이다. 도구를 쓰기 직전에 건 훅은 조건이 맞지 않으면 그 동작을 실행 전에 막는다. Claude Code 공식 문서(code.claude.com/docs/en/hooks)에는 도구 호출 직전 시점(PreToolUse)에 건 훅이 그 호출을 막을 수 있다고 적혀 있고, 검사 프로그램이 종료 코드 2를 돌려주면 호출이 멈춘다. 10월 11일 기준 하네스에는 이런 훅 19개가 도구를 쓰기 전과 쓴 뒤, 한 차례 응답이 끝나는 때를 포함한 여섯 지점에 걸려 있었고, 하네스 자체를 점검하는 자기시험 31개도 함께 두었다.
훅 가운데 하나는 단계 순서를 지킨다. 예를 들어 아이디어 후보 파일이 폴더에 없으면 초안을 쓰는 AI를 부르는 호출 자체가 막힌다. 다른 하나는 AI가 어떤 일을 하기 전에 그 일의 지침서를 먼저 열었는지 본다. 지침서를 열지 않은 채 일을 시작하려 하면 그 자리에서 멈춘다.
③ 활용 결과 어떤 변화가 있었나요?
변화는 숫자보다 장면으로 남아 있다. 이 글이 만들어지는 동안에도 훅이 여러 번 일을 세웠다.
10월 22일, 이 공모의 아이디어 단계를 부르던 호출이 중복 공고문을 막는 훅에 걸렸다. 이 공모의 안내문 파일이 지난 회차 안내문과 같은 파일이었기 때문이다. 같은 공고를 두 번 다루지 않으려고 세운 문이 이번에는 새 회차 응모 앞에서 닫힌 셈이다. 이때 AI는 그 문을 스스로 열지 않았다. 막힌 사유를 내 질문 목록에 올려 두었고, 다음 날인 10월 23일 내가 "3번풀고만들고"라고 답한 뒤에야 작업이 이어졌다.
10월 26일에는 지침서를 먼저 열게 하는 훅이 작업을 지휘하는 AI를 세웠다. 웹에서 자료를 받으려는데 웹 수집 지침서를 아직 열지 않았다는 이유였고, 지침서를 연 뒤에는 같은 호출이 그대로 통과했다. 이날 이렇게 멈춘 일이 두 번 더 기록에 남아 있다. 같은 날 저녁 단계 점검을 돌렸을 때는, 아이디어 후보 파일이 아직 없으니 초안을 쓰는 AI는 차단 상태이고 아이디어 단계부터 하라는 답이 나왔다. 그 뒤 아이디어 후보 파일이 먼저 생겼고, 이 글의 첫 원고는 그다음에 쓰였다.
이 장면들이 보여 주는 변화는 구조에 있다. 단계 순서를 지켰는지, 금지한 동작을 하지 않았는지는 이제 어기는 동작이 실행되기 전에 기계가 확인한다. 막힌 쪽에는 이유가 글로 돌아오고, AI는 그 이유를 읽고 빠진 일을 채운 뒤 다시 시도한다. 규칙 자체를 풀어야 할 때는 사람에게 묻는다. 그래서 사람 몫은 규칙을 정하는 일, 막힌 규칙을 풀지 말지 결정하는 일, 본인인증과 서약이 필요한 제출, 수상 결과를 알려 주는 일로 정리되어 있다. 시간이 얼마나 줄었는지는 따로 재 두지 않아 여기에 적지 않는다.
④ 나만의 방식 또는 개선 포인트는 무엇인가요?
첫째, 규칙 하나를 문 하나로 만든다. 위에서 본 훅들이 지키는 규칙은 모두 예, 아니오로 답이 나온다. 아이디어 후보 파일이 있는가, 이 공고문이 이미 받은 파일과 같은가, 이 일의 지침서를 열었는가. 이렇게 답이 갈리는 규칙이어야 기계가 실행 전에 판단할 수 있다. AI가 끝낸 결과를 나중에 검사하는 방법은 널리 쓰인다. 이 하네스가 더 기댄 쪽은 어기는 동작이 실행되기 전에 멈추는 쪽이었다.
둘째, 훅이 못 막는 것은 훅에 맡기지 않는다. 원고 속 문장이 사실인지는 파일이 있는지처럼 예, 아니오로 가를 수 없다. 그 몫은 채점 세 갈래와 사람이 맡는다. 8월 9일부터는 원고의 통과 여부를 채점 점수로 정하지 않고, 구조적인 치명 결함이 남았는지로만 정한다. 표절 감사와 출처 표시 규율도 따로 두었다. 이 글을 쓸 때도 수치와 사건은 출처가 적힌 사실 대장에 있는 것만 썼다. 하네스 규모와 처리량 숫자는 10월 11일 저녁 작업 저장소와 제출 목록을 센 값이고, ⑤의 시험 숫자는 10월 26일 기록이다.
셋째, 문을 여는 열쇠는 사람이 쥔다. 무엇을 하지 않을지 정하는 일은 내가 하고, AI는 그 결정을 바꿀 수 없게 해 두었다. 10월 22일처럼 훅이 지나치게 막은 때에도 AI는 스스로 풀지 않았다. 같은 원칙으로 작업 기록 저장소는 외부에 올리지 않고, 개인정보가 밖으로 나가는 일은 매번 나에게 묻게 했다. 10월 1일부터는 AI 사용을 금지하는 공모를 처음부터 반려한다. 응모서에 AI 활용을 적는 칸이 있으면 사실대로 적는다.
⑤ 다른 사람도 따라 할 수 있나요?
10월 26일, 이 방식이 내 하네스 밖에서도 서는지 작게 시험했다. 시험은 하네스의 작업 AI가 돌렸고, 입력과 출력은 원문 그대로 기록에 남겼다. 먼저 내 하네스에 실제로 있는 규칙 다섯 줄을 평범한 문장으로 적었다.
1) 아이디어 후보 파일이 없으면 초안 파일을 새로 쓰지 못한다.
2) 원격 저장소로 올리는 명령은 실행하지 못한다.
3) 작업 상태를 기록하는 파일은 손으로 고치지 못한다.
4) 폴더 이름을 바꾸는 스크립트는 대상 번호 없이 돌리지 못한다.
5) 채점 결과 파일이 없으면 최종 원고 파일을 쓰지 못한다.
그리고 내 규칙도 훅도 없는 빈 폴더에서 Claude(소넷 모델)에게 규칙 한 줄씩을 주고, 도구 호출 직전에 막는 훅으로 바꿔 달라고 한 번씩 물었다. 돌려받을 것은 셋으로 정했다. 설정 파일에 넣을 등록 조각, 그 훅이 부르는 검사 프로그램(Windows의 PowerShell), 그리고 이 훅이 못 막는 경우 한 줄이다.
다섯 번 모두 세 가지가 다 나왔다. 검사 프로그램 다섯 개를 떼어 내고, 프로그램마다 규칙을 어기는 입력 하나와 정상 입력 하나를 넣어 따로 실행했다. 어기는 입력 다섯은 모두 막혔고 정상 입력 다섯은 모두 통과해, 열 번 모두 기대대로 움직였다.
더 쓸모 있던 것은 셋째 칸이었다. AI는 다섯 건 모두 못 막는 경우를 적었고, 그중 세 건은 파일을 쓰는 도구 대신 명령줄에서 출력을 파일로 돌려 쓰면(리다이렉션) 이 훅이 보지 못한다고 적었다. 채점 결과 파일 규칙에 대해서는 그 파일이 비어 있거나 엉터리여도 있기만 하면 통과한다는 점까지 짚었다. 규칙을 훅으로 바꿀 때 그 훅의 구멍 목록이 함께 돌아오니, 어디를 다른 훅이나 사람이 봐야 하는지도 같이 알게 된다.
이 시험은 작다. 표본 다섯 건을 모델 하나로 한 번씩 돌렸고, 만들어진 훅을 실제 Claude Code 세션에 등록해 AI의 호출을 막아 본 것이 아니라 검사 프로그램만 단독으로 실행했다. 보여 준 것은 평범한 문장으로 된 규칙 한 줄을 건네면 검사 프로그램과 그 한계 목록이 함께 돌아왔고, 그 프로그램이 이번 입력에서 기대대로 움직였다는 데까지다. 실제 세션에 걸어 보는 일은 다음 확인 거리로 남아 있다.
이 시험에서 출발점이 된 것은 Claude Code와, 이미 글로 적어 둔 규칙 한 줄이었다. 등록은 프로젝트 설정 파일(.claude/settings.json)의 훅 항목에 하고, 막을 때는 검사 프로그램이 종료 코드 2를 돌려주게 하는 것이 공식 문서에 적힌 방식이다. 내 규칙 다섯 줄도 공모전 낱말을 걷어 내면 앞 단계 결과물이 없으면 다음 파일을 쓰지 않는다, 작업물을 밖으로 올리지 않는다 같은 모양이었다. 빈 폴더의 AI가 규칙으로 받은 것도 위 다섯 줄 같은 평범한 문장 한 줄씩이었다.