[연수자료] AI 시대, 웹 접근성을 넘어 보편적 인프라로: 문서 접근성부터 교육 콘텐츠, 조직 운영 자동화까지

김헌용 · 신명중학교 영어 교사, 함께하는장애인교원노동조합 위원장


이 글은 2026년 4월 20일 시민기술네트워크 이로운기술정책연구소의 제6회 공개 웨비나 발표와 그 뒤에 이어진 질의응답을 정리한 것입니다. 블로그 글의 목적에 맞게 주제 의식을 조금 더 드러내는 방향으로 수정하였습니다.
발표 슬라이드 보기


들어가며

시민기술네트워크 이로운기술정책연구소에서 주최한 웨비나 발표 날은 공교롭게도 제46회 장애인의 날이었다. 일 년 중 가장 바쁜 날 가운데 하나다. 아침부터 장애인 교원 관련 보도자료를 배포하고, 장교조 조합원들에게 기념 이벤트를 공지하고, 수업을 하고, 기자들 문의 전화를 받느라 발표 자료는 시작 직전에야 막바지 손질을 마칠 수 있었다. 저녁 7시에 접속한 Zoom에는 시민기술네트워크의 낯익은 이름과 새로운 인연이 고르게 섞여 있었다.

이 네트워크와의 인연은 작년 5월로 거슬러 올라간다. 당시 시민기술네트워크가 내놓은 16대 정책 매니페스토에는 접근성 네 가지 안건, 교육 분야 두 가지 안건이 들어가 있었고, 그중 8번 「교육 분야 포용적 AI 기술 개발 및 도입」이 내가 초안을 잡은 항목이었다. 이번 웨비나 자리는 그 제안이 1년이 지난 지금 현장에서 어떤 실천으로 이어지고 있는지 돌아보는 자리였다.

웨비나에 참여한 분들께 나를 이렇게 소개했다. 시각장애가 있고, 서울 신명중학교에서 16년 차 영어 교사로 있으며, 함께하는장애인교원노동조합(장교조)의 위원장으로 6년째 일하고 있다고. 한편, AI 사용 경력에 대해서는 "Claude Code를 사용하고 있다"는 말로 소개를 갈음했다. 요즘엔 보통 이 한마디면 'AI를 조금 다룰 줄 아는 사람'으로 통하는 분위기이기 때문이다.

내가 기술과 관련해 평소에 골몰하는 화두 중 시민기술네트워크의 지향과 연결되는 것이 두 가지 있다. 하나는 장애인 접근성을 둘러싼 법제도와 현장의 괴리를 어떻게 좁힐까 하는 것이다. 다른 하나는 AI가 전방위적으로 침투하는 교육 분야에서 장애인의 교육받고 가르칠 권리를 어떻게 지켜 내고, 나아가 모두를 위한 AI로 어떻게 넓혀 갈 것인가 하는 문제다.

우리나라의 디지털·AI 관련 법은 세계 어디에 내놓아도 손색없을 만큼 선진적이다. 올해 1월 22일 시행된 AI 기본법과 디지털포용법은 윤리 원칙의 핵심 요소로 '접근성'을 명시하고 있고, 장애인차별금지법은 이미 오래전부터 디지털 접근성을 정당한 편의 제공의 범주로 흡수해 왔다. 특수교육법에서도 어느 정도 다루고 있다. 그런데 노동조합 활동을 오래 하다 보면 늘 같은 지점에 부딪힌다. 법제도와 현실의 간극이 너무 크다는 것. 이동권, 교육받을 권리, 문화 향유권까지, 법률에서 선언하는 다양한 권리는 좀처럼 장애인, 교통약자·취약계층의 삶에서는 구현되지 않는다. 이 간극은 디지털 기술 및 웹 접근성의 영역에서는 훨씬 더 넓게 벌어진다.

한편, 교육 쪽 고민은 조금 다른 방향에서 왔다. AI 디지털교과서(이하 'AIDT')가 국정 과제로 처음 올라온 2023년 이래로 교육 분야의 AI 논의는 사실상 이 한 주제로 수렴해 왔다. 학계의 효과 검증도, 교사 단체의 기술 관련 담론도, 시도교육청의 인프라 투자 계획도, 장애 학생과 장애인 교원의 접근성 논의까지도 모두 AIDT라는 한 그릇 안에서만 다루어졌다. 접근성 영역으로 좁혀 보면 이 쏠림은 한층 뚜렷했다. 대체자료 납본, 장애학생 맞춤형 콘텐츠, 에듀테크 개발 초기 당사자 참여처럼 오래전부터 장애인교원·장애학생 쪽에서 짚어 온 교육자료 접근성 관련 과제들이 AIDT 개발이라는 새 의제 안에서만 힘을 얻었다. 그러나 장애인 교육 주체의 관점에서 이 전환은 양가적인 감정을 불러일으켰다. AIDT처럼 국가가 한꺼번에 도입해 버리는 방식은 접근성 기준과 검증 절차만 잘 설계하면 전국 학교에 일률적으로 적용되는 장점이 있었기 때문이다.

그러던 2025년 8월, 초중등교육법 개정으로 말도 많고 탈도 많았던 AIDT가 '교과서' 지위를 잃고 '교육자료'로 내려앉았다. 그리고 그 자리에는 디지털·AI 춘추전국 시대가 열렸다. 올해부터는 각 학교의 학교운영위원회가 학습지원 소프트웨어 한 건 한 건을 심의하는 구조로 바뀌었다. 심의의 필수 기준은 대체로 개인정보 보호로 촘촘하게 짜여 있다. 문제는 접근성이 '선택 사항'으로만 머물러 있다는 점이다. 학교마다 도입하는 소프트웨어가 제각각이어서 법률 하나로 이를 일괄 규제하기도 어렵다. 분산된 환경에서 접근성이 일률적으로 보장되는 것이 사실상 불가능해진 셈이다. 학운위에 스크린리더나 보조공학을 직접 검수해 본 구성원이 있을 가능성도 높지 않다. 그래서 오히려 이런 분산 구조일수록 중앙에서 붙들어 줘야 할 지지대가 필요해진다. 시민기술네트워크가 일찍부터 제안해 온 공공조달 우선구매, AI 사회적 영향평가 제도화 같은 장치가 이 빈틈을 대신 메워 주는 방향으로 작동할 수 있다.

이 글에서는 시스템의 공백 속에서 당사자의 필요에 의해 대안적으로 구축된 세 가지 AI 활용 사례를 공유한다. 시각장애인, 교사, 노동조합 위원장이라는 세 역할을 수행하며 현장에서 적용해 온 접근성 도구, 교실 수업 도구, 노동조합 운영 도구가 그것이다.


1. PDF와 한글 문서를 AI가 읽게 만드는 두 스킬

일상생활에서 내가 가장 자주 부딪히는 것이 문서 접근성이다. 옛날에는 이 접근성 격차를 메워주는 것이 OCR(광학 문자 인식)의 몫이었다. OCR은 오랫동안 시각장애인에게 가장 친숙한 보조 기술이었다. 그런데 AI 시대가 되면서 OCR만으로는 부족해졌고, OCR을 기본 탑재한 문서 파싱(Document Parsing)이라는 개념이 보편화됐다. 많은 테크 기업이 여기에 매달리는 이유는 단순하다. 우리 주변에 쌓인 비정형 데이터를 AI가 처리할 수 있는 정돈된 형태로 클렌징하는 일이 어느 조직에서든 AI 도입의 첫 관문이기 때문이다.

AI가 가장 잘 다루는 형식은 마크다운 같은 텍스트 기반 문서인데, 공교롭게도 그런 텍스트 기반 문서를 평생 가장 절실하게 원해 온 집단이 시각장애인이다. 시각적 정보와 이미지 기반 정보를 어떻게 텍스트화할 것인가는 우리에게 평생의 고민이다. 그래서 내가 자주 하는 이야기가 있다. AI 시대에 시각장애인이 AI의 도움을 받는다는 쪽으로만 말이 흐르는데, 실제로는 시각장애인을 위해 개발되어 온 보조 기술이 AI 발전에 꽤 기여한다는 사실이다. 얼마 전 구글이 개발 관련 팟캐스트에서도 개발자들이 같은 이야기를 하는 걸 들었다. AI의 기술과 장애인 접근성이 그렇게 멀지 않다는 것은 앞으로 여러 국면에서 점점 더 자주 확인될 것이다.

이런 배경에서 내가 오랫동안 구축하고 보완해 온 두 가지 스킬이 있다.

첫째는 docparse 스킬이다. 시중에 나와 있는 어떤 문서 파서도 완벽하지 않기 때문에 오픈소스와 상용 도구 다섯 개를 결합해 교차 검증을 시키는 용도로 개발했다. LlamaParse, Upstage, Mistral, Gemini에 최근 한컴에서 오픈소스로 풀어낸 Open Data Loader(ODL)까지 5종이다. 특히, ODL은 오픈소스인데도 텍스트 기반 PDF에서는 거의 프로덕션 급이고, 속도도 빠른 데다 무료다. 여러 엔진의 결과를 교차 검증해 최대한 무결한 마크다운 문서를 만들어내는 것이 이 스킬의 핵심이다.

그런데 이 과정은 내 개인 보조 기술에만 머물지 않는다. 어떤 조직이든 AI를 도입할 때 가장 먼저 마주치는 문제가 "우리 조직의 비정형 문서를 AI가 읽을 수 있는 형태로 어떻게 바꿀까"이다. 따라서 장애 당사자의 필요에서 시작된 이 스킬은 범용적인 문서 전처리 파이프라인으로도 확장 가능하다. 실제로 나는 장교조가 보유한 데이터를 AI 처리를 위해 파싱할 때도 이 스킬을 자주 사용한다.

둘째는 hwpx-automation 스킬이다. 내가 각종 오픈소스 도구를 엮어 만든 한글 문서 처리 스킬이다. 매일같이 보는 수많은 공문을 일일이 테스트해 가며 스크립트와 지침을 계속 손질한 덕에 이제는 어느 정도 쓸 만해졌다. 학교에서 서식을 받으면 Claude Code에 던져 주고 "이 공문 서식 채워 줘"라고 말하면 채워진 한글 문서가 나온다. 시각장애인 교사에게 가장 고통스러운 '표 안의 셀 탐색'이 자연어 한 줄로 바뀐 것이다. MIT 라이선스로 공개해 두어 같은 문제를 마주한 다른 사람도 바로 가져다 쓸 수 있다.

이러한 도구들은 공공 부문의 비정형 데이터를 정제하고 자산화하는 과제와 직결된다. 장애 보조를 위해 구축한 도구로 출발했지만, 모두를 위한 보편적 생산성 인프라로 진화할 가능성이 있는 셈이다.

2. AI로 만든 수업용 앱들

두 번째 사례는 올해 내가 가르치는 중학교 1학년 영어 수업을 준비하면서 나온 것들이다. 어느 날 아침 영영풀이 단어 학습지를 보다가, 이걸 중학교 1학년 학생들에게 그대로 외우라고 하면 너무 재미없겠다 싶었다. 수업을 30분 앞두고 Claude Code에게 게임으로 만들어 달라고 제안했고, 그렇게 Word Bomb이라는 게임이 탄생했다. 상용 API를 쓰지 않은 순수 코딩 결과물이었는데도 아이들의 반응이 매우 좋았다.

재미난 에피소드도 하나 있었다. 아이들이 좋아하니까 욕심이 나서 Gemini API로 단어 발음을 추가했는데, 'laugh'라는 단어가 발음 대신 진짜 웃음소리로 생성된 것이다. 수업 중 그 파일이 재생되는 순간 아이들이 빵 터졌다. 이후로는 내가 앱을 가져갈 때마다 "선생님, 이번엔 실수 없어요?"라며 실수를 기다린다. 섬뜩할 만큼 자연스러운 음성을 만들지만 여전히 한두 개씩 실수를 하는 AI의 빈틈이 오히려 학생들과 나의 정서적 접점이 되어 주었다.

▶ 실제로 생성된 소리 ('laugh' 발음을 요청했더니 나온 결과)

▶ 원래 의도했던 'laugh' 발음

이걸 계기로 힘을 얻어 게임 두 개를 더 만들었다. 교과서 지문을 탐정 서사로 재구성한 독해 게임 Story Detective, 문법 규칙을 마법의 물약 테마로 푼 Grammar Potion Lab이다. 발음만 해도 Gemini TTS로 입힌 음성이 교과서 성우 녹음과는 다른 자연스러움이 있어서 그 자체로도 듣는 재미가 있다. 점수제도 내가 특별히 정교하게 짜지 않고 Claude Code가 제안한 대로 두었는데, 정확도에 속도까지 반영되는 구조여서 재미를 더했다. 아이들은 점수에 사활을 걸고 문제를 푼다.

한편 동료 교사의 주문으로 시작된 Pick Me도 있다. 수업 중 학생을 무작위로 뽑되 성별 인원을 지정할 수 있고, 미리 교사가 선정해 둔 학생이 뽑히게 할 수도 있다. Claude Code로 앱을 개발하면서 "시각적으로 화려하되 접근성을 갖춰 달라"는 한 줄을 덧붙였다. 그 결과 ARIA 레이블, 키보드 내비게이션, 고대비 색상이 첫 프롬프트에서부터 자연스럽게 구현된 3D 앱이 나왔다. 3일 만에 나온 작품이다. Claude Code가 접근성 구현을 기가 막히게 해 주기 때문에, 이제는 어떤 앱을 만들 때 "접근성을 몰라서 못 만든다"는 말이 더는 설득력을 갖기 어려운 시대가 되었다.

물론 비개발자로서 한계도 경험했다. 1년간 고도화해 온 자리표 앱은 작년 8월 Claude의 Artifact 한 장으로 시작해 지금은 Supabase와 Vercel을 얹은 풀스택 앱으로 진화했다. 그런데 교사 뷰와 학생 뷰를 좌우로 반전시켜 보여 주는 기능이 화면 위에서는 완벽하게 돌아가지만, 스크린리더로 똑같이 반전하여 탐색할 수 있게 하는 것에는 끝내 실패했다. 그 기능 없이도 앱을 사용하는 데는 전혀 문제가 없지만, 아주 세밀한 구현 단계에서는 이렇게 시행착오를 겪는 일이 매우 흔하다.

3. 1인 실무자 장교조를 스킬 20개와 에이전트 7개로 돌리다

세 번째 사례는 장교조 업무다. 우리는 상근 사무국이 없다. 현직 교사들이 교직과 노조를 겸하다 보니 위원장인 내가 회의록, 회계, 법령 모니터링, 조합원 안내까지 거의 모든 업무의 실무를 겸한다.

그런데 올해 2월부터는 이 업무들을 AI 중앙집행위원회라는 이름으로 정리해 놓고 운영하고 있다. 구체적으로는, 스킬 20개, 에이전트 7개, 커스텀 GPT 1개를 구축했다. 크게 세 층위로 나누어 볼 수 있다. 집행부 층위·조합원 층위·대외 층위가 그것이다.

가장 낮은 층위는 내부 업무다. 사무처·정책실·대변인·재정국 업무까지 Human in the loop, 즉 사람이 마지막에 검증하는 원칙을 유지하면서도 많은 부분을 자동화해 두었다. 총회 같은 한 달짜리 프로젝트는 D-35부터 D+2까지의 워크플로우를 하나의 스킬로 결정화해, 다음 총회부터는 "총회 준비해 줘" 한 마디로 움직이게 만들었다. 짧게는 알리고를 이용하는 문자 발송까지 스크립트로 묶어, 외부 서비스도 Claude Code가 이용할 수 있도록 만들었다.

두 번째, 중간 층위는 구성원 반경이다. 에이전트 중 가장 쓸 만해진 것이 고충 상담 에이전트다. 어느 날 한 청각장애 선생님이 채팅방에 "학교에서 이런 일을 당했는데 어떻게 공제회에 신청할 수 있을까요" 하고 물어왔는데 내가 바로 답하기 어려웠다. 그래서 장교조 드라이브에서 Claude Code를 실행하고, 드라이브에 쌓인 자료들을 검색해 답변을 만들게 했다. 앞으로 비슷한 질문이 계속 올 것이라 판단해 이 과정을 에이전트로 묶어 두었다. 다만 조합원에게 직접 영향을 주는 AI 활용은 더 조심해야 한다. 개인정보가 포함될 수밖에 없는 고충 상담 영역은 특히 그렇다. 그래서 지금은 조합원의 실제 고충 상황을 직접 데이터로 입력하지 않고, 반복되는 제도 질문에 어느 정도 답할 수 있을 정도로만 열어 두었다.

세 번째, 가장 높은 층위는 대외 층위다. 장교조 어시스턴트는 비조합원도 접근할 수 있는 커스텀 GPT다. 근로지원인 제도, 편의지원, 가입 조건 같은 정보 중심으로 구성했다. 장교조 페이스북에 링크를 올려놓았더니 거기서 우리 조합을 알게 된 분이 먼저 어시스턴트에게 근로지원인 정보를 물어본 뒤, 해결되지 않는 궁금증에 대하여 노조 사무실로 전화해 문의한 사례가 있었다. 내부 데이터를 전부 RAG로 구현해 챗봇을 만드는 일은 쉽지 않기 때문에, 핵심 문서를 지식 베이스로 올려 둔 커스텀 GPT를 시도했는데, 이런 구체적인 전환 사례를 마주하면서 내 관점이 바뀌었다. 공익 AI가 단순한 자동화 도구가 아니라 조직 외부와의 접촉면을 넓히는 장치가 될 수 있다는 것을 확인했다.


뜨거운 Q&A가 이어지다

발표 뒤에 Q&A가 길게 이어졌다. 질문이 다양하고 깊어서 대답하는 쪽이 더 공부가 되는 시간이었다. 주요한 대목만 정리해 둔다.

  • Q. 스크린리더는 아무래도 기계적인 낭독 방식이잖아요. Claude Code 안에 응답을 읽어 주는 AI 기능이 따로 장착돼 있다면 훨씬 세련될 것 같은데, 선생님은 Claude Code로 코딩하실 때 그 내부 기능을 쓰시는지, 아니면 바깥의 스크린리더를 쓰시는지 궁금합니다. 어떤 원리로 돌아가는지 조금 이해하고 싶어서요.

    • A. 업무 환경 구축 이야기인데, 사실 업무 환경 구축이라는 건 우리 모두의 과제 아닌가 싶습니다. 기본은 스크린리더에 점자 디스플레이를 붙여 씁니다. 처음에는 이 터미널을 점자로 디스플레이를 못 해 주더라고요. 그래서 제가 엄청 컴플레인을 넣었죠. 터미널을 점자까지 읽어 주게 하라고. 소리만 듣고는 Claude Code의 복잡한 텍스트 정보를 다 따라갈 수 없으니까요. 그런데 그걸로도 부족해서 Claude Code의 응답을 음성으로 요약해 읽어 주는 플러그인을 찾아냈습니다. Agent Vibes라는 도구인데, 이걸 제가 원하는 방식으로 고쳐서 중간 버전·긴 버전 요약으로 읽어 주게 했습니다. 훅을 쓰는 방법입니다. 그래서 '소리 나는 Claude Code'를 어느 정도는 구현해 두었습니다. 참고로 제가 아는 한 시각장애인 교장 선생님은 터미널이 각광받는 이 변화를 두고 "GUI가 보편화되며 시각장애인을 뒤로 밀어냈던 그 이전, 그러니까 1990년대 DOS 시대가 다시 돌아온 것 같다"라고 표현하셨습니다. 터미널의 부상이 시각장애인에게 글로 비장애인과 다시 대등하게 컴퓨터를 만질 창을 열어 준 셈입니다.

  • Q. 시민기술네트워크는 원래 10년 가까이 카카오톡 단체 채팅만으로도 충분한 공동체였는데, 2년 전부터 정책 매니페스토를 같이 쓰고 법안도 같이 만들면서 업무용 협업툴이 필요해져 결국 텔레그램으로 옮겨 왔습니다. 선생님은 시각장애로 텔레그램 접근성이 어려우시다고 하셔서, 얼마 전 저희 텔레그램 그룹을 복제한 가상 공간에 선생님 에이전트 AI를 붙여 세 계정이 모의 테스트를 해 본 적이 있습니다. 가능성은 많이 확인했지만 Claude와 텔레그램이 잘 매칭되지 않아 결국 접었는데요. 에이전틱 AI를 커뮤니티나 공론장, 협업 네트워크에 붙여 보신 그간의 소회가 궁금합니다. 텔레그램에서는 특히 어떤 지점이 가장 막혔는지도 듣고 싶습니다.

    • A. 저희 네트워크의 텔레그램 그룹을 복제해 가상 그룹을 만들고 거기에 제 오픈클로(OpenClaw) 에이전트를 붙여 본 실험이 있었습니다. 가능성은 확인했지만 결국 접었습니다. 기술적인 문제보다 역시 개인정보 문제가 컸어요. 오픈클로가 텔레그램에 붙어도 남의 대화를 먼저 읽지는 않도록 기본 설정이 되어 있는데, 그 가드를 낮추는 순간 그룹의 모든 대화가 클라우드 회사로 흘러 들어가는 보안 문제가 생겨 버립니다. 한편으로는 다행스러웠습니다. 모든 것이 다 AI로 넘어가면 안 되니까요. 카카오도 ChatGPT 통합을 신중하게 진행하는 이유가 같은 자리에 있을 것이고요. 반대로 같은 시기에 다른 경로의 협업이 열리기도 했습니다. 투표 기능이 있는 파티 타운홀 플랫폼의 접근성이 조금 부족해서, 제 접근성 지식에 Claude Code의 도움을 더해 사이트 진단 보고서를 다양한 형태로 만들어 드렸더니 빠르게 개선되어 저희 총회 투표에 쓸 수 있었습니다. 기존 AI가 없었다면 상상하지 못했을 협업이 조금씩 가능해지고 있다는 감각을 저는 이 사례에서 받았습니다.

  • Q. 저희는 작년 AIDT 만들 때도 접근성 평가를 아주 열심히 했고, 올해도 새 평가가 진행되고 있는 걸로 압니다. 그런데 평가 기준표를 보다 보면 'AI로 이미 처리 가능한 항목인데 왜 여전히 이걸 사람 점수로 매기고 있지' 싶은 지점이 꽤 있어요. 지금의 접근성 평가나 관련 정책이 AI 시대를 반영하지 않은 채 만들어져 있다는 게 제 진단인데요. 선생님이 보시기에, AI 시대에 맞춰 접근성 평가 기준에서 가장 개선되어야 할 점, 반대로 이제는 더 이상 필요가 없어진 항목, 그리고 AI 시대에 새로 필요해진 기준이 있다면 무엇일까요.

    • A. 웹 접근성 영역은 사실 인프라이기도 합니다. 웹 접근성이 갖춰진 곳에서 AI가 그 위에서 뛰어놉니다. Claude Code 같은 에이전트가 알아서 DOM 트리를 읽고 작업을 하기 때문이에요. 그래서 제 앱을 AI가 접근 가능하게 만드는 전처리 과정에 저는 웹 접근성이 있다고 봅니다. 서로 배제 관계가 아니라 포함 관계에 가깝습니다. 제도상 뒤처진 부분은 그 위에서 열린 새로운 영역들입니다. 로봇 같은 피지컬 AI나 멀티모달 쪽, 그리고 단순한 게시판 형태를 벗어난 복잡한 UX의 접근성. 지금은 UI 접근성 수준까지만 논의가 되어 있고, 장애인이 이 앱에서 어떻게 즐길 수 있을지 같은 기획 단계의 접근성은 제도가 담지 못합니다. 장애인차별금지법을 볼 때마다 답답해지는 이유입니다. 지금 기술이 열어 주는 무한한 가능성에 비하면, 장차법이 보장해 주는 것이 너무 적은 것인가 하는 생각을 자주 합니다.

  • Q. 오늘 발표 중에 Human-in-the-Loop 이야기를 하셨습니다. 에이전트가 인더루프(in the loop)에 있어야 할지 언더루프(under the loop)에 있어야 할지가 AI 시대에 큰 숙제 같은데요. 일상생활에서도, 어떤 결정적 장면에서도 인간이 꼭 안에 있어야 하는 순간이 분명히 있고, 반대로 자율형 에이전트에 맡겨야 효율적인 순간도 있을 겁니다. 선생님이 보시기에 인간이 통제할 수 있는 에이전트와 자율형 에이전트 사이 경계는 어디쯤이 적당할까요. 특히 장애인 당사자의 일상에서 AI에 어느 선까지 위임해도 되는지, 선생님 본인의 경험에 비추어 방향성을 듣고 싶습니다.

    • A. 너무 큰 주제여서 제가 답하기에 부족할 수 있지만, 저는 장애인으로서의 취약점을 극복하거나 보완하기 위해 AI를 무지막지하게 사용하는 쪽에 가깝습니다. 월 200달러짜리 Claude Code 구독을 쓰고 있고요. 실제로 장애인들은 그냥 다 위임해 버리고 싶은 마음이 굴뚝같을 거예요. 그런데 그 위임에서 초래될 수 있는 위기에도 가장 취약한 존재가 바로 장애인입니다. 사용하다가도 "내가 여기까지 하는 게 맞나" 싶어지는 순간이 자주 옵니다. 어디까지 위임할 것인가를 최전선에서 고민하는 것도 결국 장애인인 것 같아요. 저희 노동조합에는 목 아래로는 거의 움직이지 못하고 손도 아주 조금만 쓰시는 휠체어 장애인 선생님이 계신데, 그분도 AI에 관심이 정말 많으십니다. 비장애인보다 위임의 역치가 낮고, 그래서 훨씬 더 둔감해지기도 쉽고, 반대로 훨씬 더 과감하게 도전하게도 됩니다.

  • Q. SNS 접근성에 대한 질문입니다. 저는 선생님의 인스타그램과 페이스북을 팔로우하며 근황을 접하고 있는데요, 인스타그램은 이미지와 영상이 반드시 있어야 글을 올릴 수 있는 시각 중심 SNS라 시각장애인의 정보 접근성이 현저히 낮다고 합니다. 특히 24시간 뒤 사라지는 스토리 기능은 대체 텍스트를 다는 사람이 거의 없고, 작성자 입장에서 AI로 자동 대체 텍스트를 생성해 주는 기능도 아직 구현되어 있지 않더라고요. 청년들이 가장 많이 쓰는 SNS가 인스타그램인 만큼 이 공백이 꽤 크게 느껴집니다. 선생님이 인스타그램을 쓰시며 겪으신 애로사항이 있는지, 그리고 메타가 AI를 활용해 시도할 수 있는 개선책은 무엇이 있을지 여쭙고 싶습니다.

    • A. 저희 인스타그램은 블라인드벗(@blind.but) 계정이라는 이름으로 아내가 운영하고 있습니다. 저는 텍스트 위주라 페이스북을 더 많이 썼고요. 비즈니스 계정으로는 메타 API가 열려 있어서 Claude Code로 이미지 대체 텍스트를 생성하는 구현이 기술적으로는 얼마든지 가능합니다. 다만 클라우드 API로 처리하면 비용이 꽤 듭니다. 그래서 최근에는 노트북에 설치된 로컬 LLM(온디바이스 AI)으로 제 컴퓨터의 한 폴더에 있는 이미지 1,000여 개의 파일명을 대체 텍스트로 한꺼번에 바꿔 봤는데 비용이 0원이었습니다. 로컬 온디바이스 AI가 확산되면 인스타그램 같은 플랫폼이 자체 기능을 넣어 주지 않아도, 시각장애인이 자기 디바이스 설정만 켜면 접근성이 크게 올라가는 구조가 생깁니다. 올해가 또 온디바이스의 해가 될 것 같아서, 이쪽에 기대를 걸고 있습니다.


마치며: 개인의 결핍이 공공의 인프라로 연결되는 길

내가 만들어 온 세 가지 사례는 서로 다른 자리에서 시작했지만 결국 하나의 뿌리로 수렴한다. 어느 것도 거창한 공익을 앞세워 출발하지 않았다는 점이다. 시각장애가 있어 문서를 읽어야 했고, 수업이 지루하지 않기를 바랐으며, 상근자 없는 노조가 굴러가야 했기에 도구를 만들었다. 출발은 지극히 개인적이고 절박한 필요였으며, 지금도 여전히 현장의 투박한 도구로 남아 있다.

그러나 이 개인적인 필요가 닿은 자리는 꽤 자주 공공의 빈틈과 정확히 겹쳐 있었다. 비정형 데이터를 AI가 읽을 수 있게 정제하는 과정은 공공 데이터 개방의 선결 과제이며, 현장 교사가 직접 접근성 도구를 구축하는 일은 에듀테크의 포용성을 측정하는 리트머스 시험지다. 노조 운영의 자동화 역시 기술을 통한 공론장 확장의 가능성을 보여주는 중요한 실험이다. 결국 장애라는 조건은 AI를 공익에 활용하려는 이들이 언젠가 마주하게 될 미래를 조금 앞당겨, 기술의 한계가 드러나는 최전선에 우리를 먼저 세웠을 뿐이다.

결국 시각장애인이 평생 요구해 온 텍스트 기반 환경이나 기획 단계부터의 접근성 설계는 AI가 세상을 더 정확히 이해하게 만드는 보편적 인프라로 이어진다. 이런 의미에서 접근성은 더는 시각장애인만을 위한 배려가 아니다. 그것은 AI 시대에 기술이 인간을 소외시키지 않도록 지탱하는 가장 단단한 토대이자 데이터의 흐름을 돕는 필수적인 혈관이다.

물론 현장의 개별적인 분투만으로는 한계가 명확하다. 앞서 언급했듯, 학교 단위로 파편화된 AI 도입 환경에서 중심을 잡아줄 제도적 지지대가 반드시 필요하다. 개별 교사나 당사자의 선의에 의존하는 단계를 넘어, 현장의 실천이 정책적 기준으로 결정화되어야 한다. 장벽을 허물기 위해 쌓아 올린 현장의 코드가 이 지지대와 만날 때, 기술은 비로소 누구도 소외시키지 않는 온기를 가질 수 있다.

이재흥 이사는 웨비나에서 "함께 교류하고 행동하여 세상을 바꾸어 나가자"고 말했다. 세상을 바꾸는 일은 거창한 설계도를 한꺼번에 실행하는 것이 아니라, 각자가 처한 장벽 앞에서 먼저 낸 작은 길들을 서로 발견하고 그 사이를 잇는 과정이다. 터미널의 검은 화면 위에서 점자 디스플레이를 만지며 써 내려간 이 기록들이, 또 누군가가 마주한 장벽 너머의 길과 연결되기를 바란다.


[연수자료] 시각장애인 교사의 바이브 코딩/에이전틱 엔지니어링 실전기: 수업용 미니게임 제작부터 조직 운영까지 AI로 자동화하기

시각장애인 교사의 바이브 코딩/에이전틱 엔지니어링 실전기: 수업용 미니게임 제작부터 조직 운영까지 AI로 자동화하기

김헌용 · 신명중학교 영어 교사, 함께하는장애인교원노동조합 위원장


이 글은 2026년 4월 3일 한국시각장애교육재활학회 춘계 세미나 발표 원고를 바탕으로 작성하였습니다. 발표 슬라이드 보기



들어가며: Claude Code와 만나다

나는 시각장애가 있는 영어 교사이자 함께하는장애인교원노동조합의 위원장으로 AI를 학교 및 조합 업무에 활용하는 방법을 탐색해 왔다. 시중에 나와 있는 AI 도구는 다양하지만, 성능이나 스크린 리더 접근성 면에서 Anthropic의 Claude는 늘 첫 번째 선택지였다. 나는 2025년 7월즈음부터는 월 100 달러의 맥스 플랜을 사용하고 있다. 이제 Claude는 수업 자료를 만들거나, 조합의 각종 문서를 정리할 때 없어서는 안 되는 도구가 되었다.

그런데 지난 해 8월 말부터는 Claude Code를 사용하기 시작하면서 AI 활용의 영역이 문서 작업에서 소프트웨어 개발로 한 층 더 확장되었다. Claude Code는 채팅창이 아니라 내 컴퓨터의 터미널에서 돌아가는 AI 코딩 에이전트다. 파일을 읽고, 코드를 쓰고, 실행하고, 에러가 나면 스스로 고친다. 내가 "수업에 쓸 단어 퀴즈 게임을 만들고 싶어"라고 말하면, Claude Code가 코드를 작성하고 실행 가능한 파일을 만들어 준다. 이런 식으로 프레젠테이션 슬라이드, 수업용 미니게임, 데이터베이스가 붙은 풀스택 웹앱까지 — 코드를 한 줄도 직접 짜지 않고 만들게 되었다. 올해 1~2월에는 사용량이 너무 늘어서 한시적으로 월 $200 티어까지 올려야 했을 정도다.

주변에서는 "대체 AI를 가지고 뭘 하는 거야?"라고 묻는 사람들이 많다. 이 글은 그 질문들에 대한 나름의 답이다. 이 글을 읽기에 앞서 Claude Code가 무엇인지, 사용하기 위해 어떤 환경이 필요한지 같은 기본적인 내용이 궁금한 분들은 장교조 내 실무 연수를 위해 작성한 강의안을 참고하길 바란다.

이 글에서 다루는 두 가지 핵심 개념인 바이브 코딩과 에이전틱 엔지니어링에 관해 먼저 간략히 정리한다.

먼저, 바이브 코딩(Vibe Coding)은 2025년 2월 OpenAI 공동창립자 Andrej Karpathy가 만든 말이다. 자연어로 AI에게 원하는 것을 설명하면 AI가 코드를 만들어 주고, 결과물이 괜찮으면 그냥 쓰는 방식이다. 코드가 어떻게 생겼는지는 신경 쓰지 않는다. 자연어로 코딩이 가능해졌다는 것은 곧 개발자가 아닌 사람도 소프트웨어를 만들 수 있게 되었다는 뜻이다. 바이브 코딩의 초점은 산출물, 그러니까 내가 원하는 앱, 게임, 웹페이지가 의도에 맞게 만들어지느냐에 있다.

에이전틱 엔지니어링(Agentic Engineering)은 정확히 1년 뒤인 2026년 2월, Karpathy가 다시 내놓은 후속 개념이다. 그의 설명을 빌리면, "'Agentic'인 이유는 99%의 시간 동안 코드를 직접 작성하지 않기 때문이다. 당신은 코드를 작성하는 에이전트를 오케스트레이션하고 감독한다. 'Engineering'인 이유는 거기에 기술과 과학과 전문성이 있기 때문이다."

Karpathy의 개념을 내가 AI를 활용하는 방식으로 재해석하자면, 에이전틱 엔지니어링이란 개별 앱 하나를 만드는 것이 아니라, AI 에이전트를 활용해 업무의 워크플로우나 시스템 전체를 설계하고 자동화하는 행위다. 바이브 코딩의 초점이 산출물에 있다면, 에이전틱 엔지니어링의 초점은 과정 자체에 있다. 여기서 필요한 것은 코딩 지식이 아니다. 내 업무가 어떤 흐름으로 이루어지는지에 대한 이해, 그리고 내가 사용하는 AI 에이전트가 무엇을 잘하고 어디서 실수하는지에 대한 명확한 인식이다. 그 이해를 바탕으로 여러 에이전트, 스크립트, API, 때로는 물리적 환경 자체를 조율하고 재구성하는 것이 에이전틱 엔지니어링이다.

이 글에서 소개하는 다섯 개의 프로젝트를 분류하면, 바이브 코딩 사례 세 가지와 에이전틱 엔지니어링 사례 두 가지이다. 이 둘은 단순히 난이도가 다른 것이 아니라, 서로 다른 층위의 작업이다. 바이브 코딩 프로젝트는 "만들어 줘"에서 시작해 비교적 짧은 시간 안에 결과물이 나오고, 개발과 디버깅, 배포 과정이 단순하다. 반면 에이전틱 엔지니어링 프로젝트는 시스템을 설계하고 구축하는 것 자체가 도전이며, 그렇게 만든 도구나 워크플로우가 실제로 효과가 있는지 검증하기도, 조직 안에서 확산시키기도 쉽지 않다.

이 글에서는 이 두 가지 층위의 작업이 어떻게 다른지, 그리고 각각이 학교 업무와 노동조합 업무에 어떻게 적용될 수 있는지를 보여 주려 한다. 수업 30분 전에 "만들어 줘"로 시작한 미니게임부터, 학교 및 노조 업무에서 범용적으로 사용할 수 있는 한글 문서 처리 스킬을 개발하고 고도화한 과정, 노동조합의 에이전트 시스템 및 업무 자동화 스킬 구축 과정까지. 이 글이 AI를 채팅 도구를 넘어 업무에 사용하고자 하는 분들께 시행착오를 기록한 일종의 '체험기'로서 도움이 되길 바란다.


1. 수업용 미니게임: 학습지 한 장이 게임이 되다

Word Bomb · Story Detective · Grammar Potion Lab

첫 번째 사례는 전형적인 바이브 코딩 프로젝트다.

수업 시작 전에 별 생각 없이 출판사에서 제공한 영영풀이 학습지를 검토하다가 학생들이 재미있게 학습할 수 있는 게임으로 바꿔 보고 싶어졌다. 어떤 게임으로 만들지에 대한 아이디어도 없이 Claude Code에 물어 보았다. 이 학습지를 어떻게 하면 학생들이 재미있게 학습할 수 있겠느냐고. Claude Code는 몇 가지 게임 아이디어를 제안했고, 그 중 정해진 시간 안에 단어를 맞히지 못하면 폭탄이 터지는 콘셉트가 가장 박진감 넘칠 것 같았다.

그렇게 Word Bomb이 탄생했다. 영어 정의를 듣고 4지선다로 단어를 맞추는 게임이다. 게임 아이디어가 단일 HTML 파일 앱으로 완성되기까지 걸린 시간은 단 30분이었다. 공강 시간에 뚝딱 만들 수 있는 정도의 난이도이고, 실제로 나도 공강 시간을 이용해서 만들었다. 이후 수업을 하면서 발견된 버그들은 차차 수정했지만, 첫 번째 버전만으로도 학생들의 몰입을 이끌어내기에는 충분했다.

그런데 한 가지 유쾌한 버그가 발생했다. 영어 단어 중 laugh의 오디오가 단어 발음이 아니라 진짜 웃음소리로 생성된 것이다. 초기 버전에서는 단어 발음 음성을 구현하지 않았는데 이후 Gemini API를 사용하여 발음을 추가하는 과정에서 잘못 생성된 것이었다. 그것도 모르고 수업 중 발음을 재생했다가 AI의 기괴한 웃음소리가 흘러나오자 교실은 한바탕 웃음바다로 변했다. 학생들은 "AI가 실수를 할 수도 있구나!" 하면서 오히려 흥미를 보였고, 이후 내가 AI로 앱을 만들 때마다 "실수를 꼭 하나씩 넣어 달라!"며 보챌 정도였다.

한편, HTML 단일 파일로 작성된 앱의 가장 큰 장점은 역시 단순성에 있다. 문서 구조가 단순하니 AI 에이전트도 빠르게 제작 및 수정할 수 있고, HTML 파일 규칙을 아는 사용자라면 수동으로 개입하기도 편하다. 뿐만 아니라, GitHub 연동 없이 바로 로컬에서 브라우저로 열 수 있어 개발 지식이 거의 없는 사용자들도 첫 번째 바이브 코딩 프로젝트로 도전하기에 가장 적합하다.

Word Bomb으로 지루한 학습지 풀이가 게임이 되자 교실 분위기가 완전히 달라졌다. 나는 이 경험에서 자신감을 얻어 본격적인 게임 두 개를 더 만들었다.

  • Story Detective — 교과서 읽기 지문을 탐정 테마로 재구성한 독해 퀴즈
  • Grammar Potion Lab — 문법 규칙을 연금술 테마로 풀어낸 게임

Word Bomb과 달리 이 두 게임은 몰입감을 높이기 위해 음성, 이미지, 사운드 효과를 풍부하게 사용하기로 결정했다. 영어 발음은 앞선 앱에서 실수가 있긴 했지만 압도적 자연스러움을 자랑하는 Gemini TTS API로 생성하고, 게임 내 이미지도 Gemini Image API로 생성하기로 했다. 효과음은 ElevenLabs MCP로 만들었다. Claude Code 하나만으로는 불가능한 일이었고, 여러 AI 도구를 조합하여 지시해야 했다. 바이브 코딩이라 해서 반드시 도구 하나만 쓰는 것은 아니다. Claude Code는 메인 코딩 에이전트로 다양한 도구를 사용할 수 있으므로 그 기능을 십분 활용하는 것이 최종 결과물의 품질을 높이는 좋은 방법이다.

Story Detective는 교과서 읽기 지문을 탐정 스토리로 재구성한 독해 퀴즈 게임이다. 학생이 "탐정"이 되어 지문 속 단서를 찾아가며 문제를 풀도록 설계했다. 교과서 본문을 그대로 쓰되 테마만 바꾸는 방식이라, 수업 내용과 자연스럽게 연결된다는 장점이 있었다.

Grammar Potion Lab은 문법 규칙을 연금술 테마로 풀어낸 게임이다. 학생이 "마법사 견습생"이 되어 문법 재료를 올바른 순서로 조합하면 포션이 완성되는 방식으로, 학습지의 문법 설명을 게임 안에서 자연스럽게 반복 학습하게 된다. 그런데 이 게임에서 한 가지 시행착오가 있었다. 처음 만들어진 버전에서는 학습지의 문법 설명 중 일부만 선택적으로 게임에 포함되어 있었다. 게임만 진행하기에는 전혀 문제가 없었지만, 수업 중 화면을 띄워 놓고 학습지 순서에 맞춰 진행하기에는 어려움이 있었다.

그래서 학습지 전체를 1:1로 대응시키는 동기화 작업이 필요했다. 이 동기화 과정이 이 프로젝트에서 가장 까다로웠던 부분이다. 게임의 "포션 레시피"는 학습지의 문법 설명과 글자 하나, 순서 하나까지 정확히 일치해야 한다. 그래서 AI에게 세 번 검증을 시켰지만, 결국 AI가 잡아내지 못했다. 데이터의 정확성은 AI에게만 맡겨서는 안 되고, 반드시 교사가 직접 검증해야 한다는 교훈을 얻을 수 있었다.


2. Pick Me: 동료 교사의 주문으로 앱을 제작하다

Pick Me 데모

두 번째 사례 역시 바이브 코딩이다. 다만 미니게임과 다른 점이 하나 있다. 이번에는 내가 아닌 다른 사람의 주문으로 시작되었다는 것이다.

지난 해 11월, 동료 교사가 이런 요청을 했다. 수업 중에 학생을 무작위로 뽑고 싶은데, 성별 인원을 지정할 수 있었으면 좋겠고, 교사가 미리 특정 학생을 당첨자로 정해놓을 수 있으면 좋겠다고. 이 세 가지 요구사항을 Claude Code에게 전달하면서, "시각적으로 화려하면서도 접근성을 갖춘 형태"라는 방향을 덧붙였다. Claude Code는 Three.js로 3D 애니메이션을, Web Audio API로 에셋 없이 코드만으로 효과음을 합성하는 방식을 제안했다. 기술 선택은 AI가 했고, 내가 한 것은 방향을 정한 것이다. 이렇게 해서 룰렛, 로또, 낚시 세 가지 테마를 갖춘 3D 앱이 3일 만에 완성되었다.

바이브 코딩에서 한 가지 강조하고 싶은 점이 있다. 시각장애인인 내가 이 앱을 직접 사용해야 했기에, ARIA 레이블, 키보드 내비게이션, 고대비 색상은 첫 프롬프트부터 포함시켰다. 경험상 "접근성을 고려해 줘"라고 AI에게 지시하면 놀라울 정도로 잘 구현해 준다. 접근성 구현이 어려운 것이 아니라, 그동안 우선순위에서 밀려났을 뿐이다. 바이브 코딩이 비개발자에게 소프트웨어 제작의 문을 열어 준 것처럼, 접근성 역시 "말로 요청할 수 있는 시대"가 되면 더 이상 미뤄둘 이유가 없다.

하지만 이 앱에서도 AI의 한계를 보여주는 에피소드가 있었다. 올해 새 학기가 되어 앱을 일부 업데이트하는 과정에서 Claude Code가 버그를 만들어냈다. 함수를 분리하는 과정에서 studentKey라는 함수의 본문을 return studentKey(s) — 자기 자신을 호출하는 코드로 잘못 작성하여 선발 버튼을 누르는 순간 무한 재귀가 발생해 앱이 멈추는 버그가 생긴 것이다. 그것을 검증하지 않고 수업에서 이 앱을 실행시켰다가 작동하지 않아 민망한 순간이 찾아왔다. 앞선 미니게임의 데이터 검증 실패와 같은 패턴이었다. AI는 코드를 잘 만들지만, 자기가 만든 결과를 검증하는 데는 취약하다. "맞습니다"라고 말해도 실제로 맞는지는 사람이 확인해야 한다.

그 디버깅 과정을 제외하면 Pick Me는 매우 성공적인 프로젝트였다. 초기 버전이 3일 만에 완성되었고, 이번 학기 들어 거의 매 수업 시간마다 사용하고 있다. 학생들은 걸핏하면 "'픽미'하시죠?"라며 수업 중 이 앱을 통한 뽑기를 즐거워 한다.


3. 자리표 앱: 바닐라 HTML 앱에 데이터베이스를 붙이다

세 번째 사례는 바이브 코딩에서 시작해 풀스택 앱으로 성장한 프로젝트다. 앞선 두 프로젝트가 단일 HTML 파일로 완결되는 구조였다면, 이 앱은 데이터베이스와 서버 API, 배포 인프라까지 붙은 구조로 확장되었다. 무작위로 학생들의 자리를 바꾸는 단순한 목적에서 시작했지만, 실제 교실에서 운영하면서 시행착오가 무척 많았다.

자리표 앱의 시작은 아주 소박했다. 2025년 8월, Claude의 Artifact 기능으로 만든 자리표였다. JavaScript 배열에 학생 이름이 하드코딩된 HTML 한 장짜리 앱이었다. 내 첫 번째 바이브 코딩 프로젝트였는데, 작동하는 앱이 나오자 감탄이 절로 나왔다. 디자인도 깔끔해서 교실에서 학생들에게 보여주기에 전혀 손색이 없었다.

그런데 앱을 업데이트하는 과정에서 시행착오가 이어졌다. 가장 까다로웠던 것은 키보드 접근성이었다. 자리표에는 학생 뷰와 교사 뷰를 전환하는 반전 기능이 있다. 교사가 교실 앞에서 학생들을 바라보는 시점과 학생이 칠판을 바라보는 시점은 좌우가 반대이기 때문에, 양쪽 모두를 지원해야 했다. 그런데 이 반전 기능에서 버그가 속출했다. 화면상의 글자가 좌우로 뒤집혀 보이거나, 화면에서는 정상적으로 반전되었는데 스크린 리더는 반전 전 상태를 그대로 읽어주는 식이었다. 시각장애인인 내가 직접 스크린 리더로 테스트하며 하나씩 잡아 나가야 했고, 이 과정이 꽤 지난했다. 시각적 반전은 결국 완벽하게 작동하게 만들었지만, 스크린 리더로 교사 뷰의 반전된 자리표를 읽게 하는 기능은 현재까지 구현하지 못하고 있다.

다음 시행착오는 데이터베이스 확장이었다. 올해 새 학년을 맡으면서 이전 데이터를 아카이빙하고 새 데이터를 로딩해야 했다. 게다가 작년까지는 나 혼자 로컬에서 쓰는 앱이었지만, 올해부터는 업무보조 선생님과 내가 바뀐 자리를 동시에 실시간으로 확인할 수 있어야 했다. 그래서 Supabase로 데이터베이스를 붙이기로 했다.

데이터베이스를 연동한 지 얼마 되지 않아 에러가 떴다. "학기 목록 로드 실패: 500." 원인을 찾아보니 코드 문제가 아니었다. 내 다른 프로젝트에도 같은 Supabase 계정을 쓰고 있었는데, 무료 플랜의 프로젝트 개수를 초과하자 데이터베이스가 자동으로 일시정지된 것이다. 대시보드에서 Resume 버튼을 누르니 복구되었지만, 데이터베이스 서비스 무료 플랜의 한계를 체감할 수 있었다.

배포 과정에서도 뜻밖의 에러를 만났다. HTML 파일일 때는 GitHub Pages로 간단히 배포할 수 있었지만, 풀스택 앱이 되면서 Vercel이라는 배포 플랫폼을 사용해야 했다. 그런데 배포 명령을 실행하자 Error: 김헌용 @ vercel is not a legal HTTP header value라는 메시지가 떴다. 내 이름의 한글이 HTTP 헤더의 허용 범위를 벗어난다는 것이다. 국제화를 표방하는 플랫폼에서 한글 이름이 에러를 일으킨 것이 실망스럽긴 했지만, 사실 개발 과정에서 언어 인코딩 문제는 그리 드문 일이 아니라는 점에서 놀랍진 않았다. 다행히 원인도 우회 방법도 Claude Code가 찾아주었다.

실제 사용 과정에서 발견한 문제도 있었다. 업무보조 선생님이 좌석 배치용 CSV를 업로드했는데, 형식 선택 드롭다운이 "명렬"로 되어 있어 CSV 전체가 이름 목록으로 잘못 파싱된 것이다. "1분단-좌, 1분단-우"가 학생 이름으로 들어갔다. 이 또한 Claude Code가 다양한 형식의 데이터에서 실제 학생 이름만을 추출하도록 패치를 적용하여 해결해 주었다.

자리표 앱이 남긴 교훈은 분명했다. 앱을 만드는 것과 운영하는 것은 전혀 다른 문제다. 데이터베이스를 붙이고 배포하고 다른 사용자와 공유하는 과정, 다시 말해 앱이 풀스택으로 진화하는 과정에서는 바이브 코딩만으로는 감당하기 어려운 영역에 진입하게 된다. 앱을 만들 때는 AI가 대부분 해결해 주지만, 운영할 때는 사용자가 직접 환경을 이해하고 판단해야 하는 순간이 자주 찾아온다. 앱 바깥의 환경 — 데이터베이스 정책, 배포 플랫폼의 제약, 실제 사용자의 행동 패턴 — 까지 알아야 한다.


4. HWPX-Automation: 악명 높은 한글 문서 작업을 자동화하다

HWPX-Automation GitHub

여기서부터는 에이전틱 엔지니어링의 영역이다. 개별 앱을 만드는 것이 아니라, 반복되는 업무의 워크플로우 자체를 설계하고 자동화하는 작업이다.

학교에서는 모든 공문이 한컴오피스의 HWP/HWPX 형식으로 온다. 서식을 채워 넣어야 하는 경우도 많다. 시각장애인 교사로서 이 작업은 특히 부담이 크다. 한컴오피스의 서식 문서는 복잡한 표 구조가 많아서, 화면낭독기로 셀을 하나씩 탐색하며 채워 넣는 데 상당한 시간이 걸리기 때문이다.

처음에는 이걸 하나의 Python 스크립트로 해결하려 했다. 그런데 금방 깨달았다. HWPX 포맷은 XML 기반의 ZIP 아카이브인데, 그 구조가 워낙 복잡하고 함정이 많아서 단일 스크립트로는 불가능하다는 것을. 게다가 한글(HWP) 파일은 자체 바이너리 형식이라 또 다른 변환 도구가 필요하다.

그래서 이 프로젝트의 방향을 바꿨다. 하나의 완벽한 도구를 만드는 대신, Claude Code에게 여러 오픈소스 도구를 조합하여 사용할 수 있는 '지침'을 주자. Claude Code에는 스킬(Skill)이라는 시스템이 있다. 특정 업무의 절차와 규칙을 마크다운 파일로 정의해 두면, Claude Code가 관련 작업을 할 때 자동으로 그 지침을 참조한다. 바이브 코딩이었다면 "한글 문서 편집 앱을 만들어 줘"라고 했을 것이다. 에이전틱 엔지니어링에서는 접근이 다르다. "한글 문서를 다루는 방법을 가르쳐 줄 테니, 앞으로 내가 한글 문서 관련 작업을 지시하면 이 방법을 따라 해"라고 하는 것이다. 앱이 아니라 AI 에이전트가 따라 할 수 있는 워크플로우를 만드는 것이 목표이기 때문이다.

이렇게 만들어진 HWPX-Automation 스킬은 여러 오픈소스 도구를 하나의 워크플로우로 연결한다. HWP 파일이 들어오면 먼저 HWPX로 변환하고, 변환된 파일의 내부 구조를 편집한 뒤, 한컴오피스가 정상적으로 열 수 있도록 마무리 손질을 한다. 표의 특정 셀에 데이터를 채워 넣고, 문서 안에 이미지를 삽입하고, 서식을 다듬고, 한컴오피스 충돌을 일으키는 요소를 수정하고 검증하는 것까지 한 번에 처리된다. 내가 "이 공문 서식 채워 줘"라고 말하면, Claude Code가 이 워크플로우를 따라 알아서 처리하는 것이다.

이 스킬을 구축함에 있어 내가 내린 가장 중요한 결정은, 스킬 앞단에 "HWP이면 HWPX로 먼저 전환"이라는 단계를 추가함으로써 HWP 형식을 과감하게 포기했다는 것이다. 학교 현장에서는 여전히 HWP 형식이 많이 사용되지만, 관행적으로 그렇게 하는 것일 뿐 HWP를 고집할 이유는 전혀 없다. HWP는 독자적인 바이너리 형식이라 AI 에이전트가 내부를 들여다볼 수 없지만, HWPX는 XML 기반의 공개 구조여서 코드로 읽고 쓸 수 있다. 사람이 사용하는 지침이라면 굳이 필요 없는 단계였겠지만, AI 에이전트가 사용하는 지침이므로 스스로 처리할 수 있는 형식으로 입력을 통일하는 것은 이 스킬의 범용성을 높여주는 핵심적 단계였다.

linesegarray와의 사투

이 스킬을 만드는 과정에서 가장 힘들었던 것은 HWPX 파일의 손상 문제였다. Claude Code가 HWPX 문서를 편집할 때마다 한컴오피스에서 "파일이 손상되었습니다"라는 에러가 떴다. 표에 행을 추가하는 단순한 작업, 때로는 글자 하나만 바꾸는 작업에서조차 파일을 깨뜨렸다. 나로서는 원인을 알아낼 길이 없었다. 그저 Claude Code에게 계속 테스트해서 원인을 좁혀보라고 할 수밖에. 그러자 Claude Code가 가설을 세우고 검증하며 범인 찾기를 시작했다.

Claude Code는 HWPX 안의 구성 요소를 절반씩 제거하면서 어떤 요소가 손상을 일으키는지 좁혀가자고 했다. 그때부터 Claude Code가 테스트를 할 때마다 내가 hwpx 파일을 열어 손상됐는지 손상되지 않았는지 확인하고 결과를 알려주는 '무한 루프 지옥'이 시작됐다. 그렇게 수십 페이지 문서를 계속 절반씩 줄여가며 문제가 일어나는 지점을 추적한 끝에 단 하나의 원인을 특정해낼 수 있었다.

범인은 linesegarray라는 요소였다. 각 문단의 줄바꿈 위치를 추적하는 요소인데, 텍스트를 한 글자라도 수정하면 이 위치값이 틀어지고, 한컴오피스가 이를 "손상"으로 판단하는 것이었다. 해결책은 의외로 단순했다. 이 요소 전체를 삭제하면 한컴오피스가 파일을 열 때 자동으로 재계산한다. Claude Code가 오픈소스 프로젝트의 소스코드를 분석하여 이 요소가 필수가 아닌 선택적 항목임을 확인해 줬고, 삭제해도 안전하다는 것이 입증되었다. 어떤 공개 프로젝트도 이 문제를 문서화하지 않았기에, 우리가 직접 찾아낸 셈이다.

이 디버깅 과정에 2~3일이 걸렸다. 하지만 HWPX 파일이 정상적으로 열리는 것을 확인한 순간, 희열과 안도감이 동시에 밀려왔다. 돌이켜 보면 이 과정에서 가설을 세우고, 요소를 제거하고, 안전성을 입증할 근거를 찾아온 것은 모두 Claude Code였다. 내가 한 일은 파일을 열어서 "이번엔 손상됐다", "이번엔 열린다"를 알려주는 것뿐이었다. 에이전틱 엔지니어링에서 사람이 늘 설계자이고 AI가 늘 실행자인 것은 아니다. 디버깅처럼 코드 지식이 필요한 국면에서는 역할이 자연스럽게 뒤바뀐다. 중요한 것은 누가 주도하느냐가 아니라, 사람과 AI가 각자 할 수 있는 일을 맡아 문제를 함께 풀어간다는 것이다.

가장 큰 linesegarray 문제가 해결되었지만 자잘한 버그는 계속 발견됐다. Pandoc으로 변환하면 따옴표 안의 텍스트가 통째로 사라지는 버그, 빈 표 셀이 있으면 한컴오피스가 에러 없이 즉시 종료되는 버그, 표의 행을 복제할 때 구조가 미세하게 다르면 손상으로 판단되는 버그 — 이런 에지 케이스가 끊임없이 나타났다. 나는 하나씩 해결할 때마다 그 해결 과정을 스킬의 트러블슈팅 가이드에 기록하도록 했다.

에이전틱 엔지니어링의 산출물은 앱이 아니라 이런 축적된 지식과 워크플로우 자체다. 한 번 해결한 문제는 스킬에 기록되어, 다음에 같은 상황을 만나면 AI가 자동으로 올바른 방법을 선택한다. 이 점이 바이브 코딩과 가장 다르다. 바이브 코딩에서는 매번 새로운 대화를 시작하지만, 에이전틱 엔지니어링에서는 과거의 경험이 시스템에 축적되어 다음 작업을 더 잘 수행하게 만든다.

이렇게 만들어진 HWPX-Automation은 처음에는 단순 도구들의 느슨한 집합이었지만, 현재는 파싱부터 빌드까지 하나의 워크플로우에서 처리하는 통합 스킬로 발전했다. 그리고 이 스킬은 학교와 노동조합 업무를 가리지 않고 하루에도 몇 번씩 사용하는 유용한 자원이 되었다.


5. 장교조 업무 자동화: AI 중앙집행위원회를 설계하다

앞서 제시한 HWPX 스킬은 하나의 문서 형식을 자동화하는 워크플로우였다. 그렇다면 이런 스킬을 여러 개 모아서 조직의 업무 전체를 자동화하면 어떨까? 다섯 번째 사례는 조금 더 대담한 에이전틱 엔지니어링 적용 시도였다. HWPX 스킬이 하나의 문서 형식에 대한 워크플로우였다면, 이번에는 조직 전체의 업무 체계를 AI 시스템으로 재구성한 프로젝트다.

1인 실무자의 현실

함께하는장애인교원노동조합(장교조)은 소규모 노동조합이다. 상근 사무국 직원 없이 현직 교사들이 교직과 노조 업무를 병행한다. 위원장인 나 혼자서 회의록 작성, 회계 관리, 법령 모니터링, 조합원 안내, 블로그 게시 — 이 모든 것을 처리해야 했다.

바이브 코딩으로 이 문제를 해결하려면 어떻게 할까? 아마 "회계 관리 앱을 만들어 줘", "회의록 작성 도구를 만들어 줘"처럼 업무 하나하나에 대해 개별 앱을 요청하게 될 것이다. 하지만 실제로 필요한 것은 그게 아니었다. 이 업무들이 어떤 흐름으로 이루어지고, 어떤 순서로 처리되며, 서로 어떻게 연결되는지를 파악한 뒤, 그 전체를 하나의 시스템으로 자동화하는 것이 필요했다.

이 문제를 해결하기 위해 내가 설계한 시스템이 AI 중앙집행위원회다. 지난 2월, Claude Code에게 이렇게 말했다:

"나는 장교조 위원장 김헌용이야. 장교조 중앙집행위원회의 업무를 효과적으로 처리하기 위하여 5개의 Subagents를 만들고, AI 중앙집행위원회를 구성하고 싶어."

발상은 단순했다. 우리 노조의 실제 조직 구조를 AI 시스템에 그대로 매핑하자는 것이었다. 사무총장, 정책실장, 소통실장, 재정국장, 수석 부위원장 — 각 Agent가 실제 조직의 부서처럼 폴더를 관리하고 업무를 수행한다. 이후 연대 업무가 늘어나자 연대국장 Agent를, 교원 고충상담 업무가 생기자 고충상담사 Agent를 추가했다. 현재 7개 Agent가 운영되고 있다. 이 구조를 설계할 수 있었던 것은 코딩을 알아서가 아니다. 노조가 어떤 부서로 구성되어 있고, 각 부서가 어떤 업무를 담당하고, 어떤 업무가 서로 연결되어 있는지를 내가 알고 있었기 때문이다. 에이전틱 엔지니어링에서 가장 중요한 역량은 결국 자기 업무에 대한 이해다.

설계 과정에서 기술적 제약도 발견했다. 처음에는 "위원장 Agent가 나머지를 총 지휘하게 하자"고 구상했다. 그런데 막상 만들어 보니 Subagent는 다른 Subagent를 호출할 수 없었다. 그래서 설계를 수정했다. 나 자신이 직접 지휘자 역할을 맡고, 복합 업무에는 여러 Agent를 동시에 투입하는 팀 방식을 병행하기로 했다. 도구의 제약을 발견하고 그에 맞게 설계를 조정하는 것 — 이것이 에이전틱 엔지니어링에서 코딩 에이전트의 한계에 대한 인식이 필요한 이유다.

스킬은 일상적 업무 과정에서 진화한다

현재 17종의 스킬이 운영되고 있다. 공식 문서 변환, 회의록 작성, 재정 보고, 블로그 게시, 이메일·문자 발송, 법령 모니터링, 조례 비교 분석, 공문 수신 및 발신, 17개 시도교육청 인사관리기준 비교 등. 노조 운영에 필요한 상당수의 반복 업무가 스킬화되어 있다.

이 17종은 한 번에 만들어진 것이 아니다. 매일 업무를 처리하면서 하나씩 만들고, 쓰면서 고치고, 새로운 필요가 생기면 추가했다. 이 과정이 바로 에이전틱 엔지니어링이다. 결과물인 17개 스킬 목록이 중요한 게 아니라, 그것들을 만들고 조율하고 재구성해 나가는 과정 자체가 핵심이다.

내가 가장 많이 한 작업은 스킬 간의 구조 조정이었다. 법령조사 스킬과 편의지원 조례 분석 스킬이 겹치는 부분이 있어 통합을 검토했지만, 범용 법령 검색과 17개 광역시도 조례 비교는 사용 맥락이 달라서 분리를 유지했다. 이메일 발송과 수신도 합칠지 검토했는데, 보내는 것과 받는 것은 용도와 위험도가 다르다는 판단에 따라 역시 분리했다. 블로그 업로드의 경우, 중집위 스킬, 총회 스킬, 조례 비교 스킬 등 여러 스킬에 블로그 게시 절차가 중복되어 있는 것을 발견하고, 블로그 업로드를 별도 스킬로 분리한 뒤 나머지 스킬이 그것을 참조하도록 바꿨다. 중복을 줄이면서도 각 스킬의 독립성을 유지하는 구조다.

이런 판단들에는 공통점이 있다. AI는 기술적으로 가장 깔끔한 방안을 제시하지만, 조직 안에서 이 스킬들이 실제로 어떻게 쓰일지를 아는 것은 나다. 스킬을 통합할지 분리할지는 코딩 문제가 아니라 업무 설계의 문제이고, 그 판단은 업무를 직접 수행하는 사람이 내려야 한다.

총회 스킬: 9개 세션의 결정화

가장 큰 스킬인 총회 스킬의 탄생 과정이 에이전틱 엔지니어링의 특성을 잘 보여준다. 처음부터 총회 스킬을 만들겠다고 계획한 것이 아니었다. 2월 한 달간 정기총회를 준비하면서, 결산 검증, 결산 보고서, 사업 보고서, 감사 보고서, 사업계획서, 조합비 인상안, 선거인 명부, 자료집 통합, 총회 당일 운영 — 9개 세션에 걸쳐 각 업무를 하나씩 처리했다. 그때는 그냥 눈앞의 일을 하나씩 해치운 것이었다.

총회 준비 중간쯤부터 이 과정을 스킬로 정리해야겠다는 생각이 들었다. Claude Code에게 각 단계가 끝날 때마다 스킬에 반영하도록 지시했다. 끝나고 돌아보니, 이 9번의 경험이 하나의 재사용 가능한 워크플로우로 깔끔하게 정리됐다. Claude Code는 전체 총회 준비 과정을 14개 섹션의 총회 스킬로 결정화했다. D-35부터 D+2까지의 전체 라이프사이클 — 자료집 편찬, 투표 운영, SMS 발송, 후속 처리까지 — 이 하나의 스킬에 담겨 있다. 내년 총회부터는 "총회 준비해 줘" 한 마디면 35일간의 워크플로우가 자동으로 전개된다.

이 과정에서 보이는 것처럼, 에이전틱 엔지니어링은 처음부터 거창한 설계도를 그려놓고 시작하는 것이 아니다. 매일의 업무를 AI와 함께 처리하면서, 그 경험을 축적하고, 어느 시점에 "이건 재사용할 수 있겠다"고 판단하여 워크플로우로 정리하는 것이다. 바이브 코딩이 "지금 필요한 것을 지금 만드는 것"이라면, 에이전틱 엔지니어링은 "지금 한 일이 다음에도 쓸 수 있도록 시스템에 남기는 것"이다.


나오며

다섯 개의 프로젝트를 돌아보면서 느낀 것들을 정리해 본다.

바이브 코딩은 생각보다 강력하다. 공강 시간에 게임을 만들고, 3일 만에 3D 앱을 완성하고, 학기 중에 필요한 도구를 즉석에서 만들어 쓸 수 있다. 자연어로 코딩이 가능해진 덕분에, 개발자가 아닌 사람도 자기가 필요한 소프트웨어를 직접 만들 수 있는 시대가 열렸다. 다만 AI가 "맞다"고 보증해도 틀릴 수 있고, 코드 리뷰가 오히려 버그를 만들기도 한다. 산출물의 최종 검증은 사용자의 몫이라는 점은 꼭 기억해야 한다.

에이전틱 엔지니어링은 그보다 느리고 까다롭다. 며칠 동안 매달려서 linesegarray라는 하나의 원인을 가까스로 추적하고, 7개 Agent의 역할 경계를 조정하고, 17개 스킬의 통합과 분리를 판단하는 일은 "만들어 줘" 한 마디로 되는 작업이 아니다. 내 업무가 어떤 흐름으로 이루어지는지를 이해하고, 내 도구가 무엇을 잘하고 어디서 실수하는지를 알아야 한다. 하지만 한 번 구축한 워크플로우는 매년, 매학기 반복해서 쓸 수 있다. 바이브 코딩이 "지금 필요한 것을 지금 만드는 것"이라면, 에이전틱 엔지니어링은 "한 번 설계해서 오래 쓰는 것"이다.

이 두 층위는 배타적이지 않다. 자리표 앱처럼 바이브 코딩으로 시작해 풀스택 앱으로 성장하는 경우도 있고, 총회 스킬처럼 매일의 작업 경험이 축적되어 하나의 워크플로우로 결정화되는 경우도 있다. 바이브 코딩으로 시작하는 것을 두려워할 필요가 없다. 중요한 것은 "만들어 줘"로 충분한 상황과 시스템을 설계해야 하는 상황을 구분하는 감각이고, 그 감각은 직접 해봐야 생긴다.

마지막으로, 시각장애인 교사로서 한 가지만 덧붙인다. 이 글에서 소개한 모든 작업, 게임 기획, 접근성 설계, 문서 포맷 디버깅, 조직 업무의 시스템화에서 시각은 필요하지 않았다. 필요했던 것은 내 수업을 이해하는 것, 내 조직을 이해하는 것, 그리고 내 도구의 가능성과 한계를 아는 것이었다. 시각장애가 가로막는 것은 화면을 보는 일이지, 시스템을 설계하는 일이 아니다.


참고 자료 및 링크

  • 미니게임 세트: Word Bomb · Story Detective · Grammar Potion Lab — 동아출판 중3 영어 Lesson 1 기반 수업용 게임. 브라우저에서 바로 플레이 가능.
  • Pick Me: engccer.github.io/pickme — 무작위 학생 선발 앱. 누구든 수업 중 바로 사용할 수 있으며, 모든 데이터는 각자의 로컬 브라우저에 저장되므로 개발자가 확인할 수 없다.
  • HWPX-Automation: GitHub (오픈소스) — HWP/HWPX 문서 읽기, 편집, 변환을 위한 Claude Code 스킬. 오픈소스로 공개되어 있으며, 누구나 자유롭게 사용하고 기여할 수 있다.