Record/IT Diary

[AI 자동화] 웹접근성(WA) 대응 - 3,300개 이미지 Alt 텍스트 생성 자동화

범데이 2026. 3. 21. 23:41

1. 문제 배경: "이미지 alt를 다 달아야 한다"

 

공공기관 웹페이지 고도화 작업을 진행하면서
거쳐야 했던 WA 인증(웹 접근성 인증) 과정이 있었다.

여기서 요구하는 항목 중 하나가


모든 이미지에 대체 텍스트(alt)를 제공해야 한다”는 것이었다.

요구사항만 보면 이미지 설명을 작성하면 되는 단순한 작업처럼 보였다.
하지만 실제 데이터를 확인해보니 상황이 달랐다.

이미지가 포함된 게시글이 약 911개였고,
전체 이미지 수는 약 3,300개였다.

이 순간 느낀 것은 하나였다.

이건 사람이 일일이 처리하면 공수가 크게 발생하는 작업이다.

 

 

2. 초기 작업 방식 (ChatGPT 기반 수작업)

초기에는 ChatGPT를 활용하여 이미지를 하나씩 처리했다.

이미지를 복사하여 전달하고
해당 이미지에 대한 설명을 생성한 뒤
그 결과를 적용하는 방식이었다.

이미지 수가 적을 때는 문제가 없었지만
작업 수량이 늘어나면서 한계가 명확해졌다.

반복 작업으로 인한 피로도가 증가했고,
작업 속도 역시 크게 저하되었다.

이 방식으로는 전체 작업을 처리하기 어렵다고 판단했다.

 

 

3. OpenAI API 결제 및 연동

작업을 진행하면서
ChatGPT를 단순히 웹에서 사용하는 것만으로는 한계가 있다는 것을 인지했다.

특히 대량의 이미지를 자동으로 처리하기 위해서는
AI를 코드에서 직접 호출할 수 있는 구조가 필요했다.

이 과정에서 OpenAI API 사용이 필요했고,
기존 ChatGPT Plus 구독과는 별도로 API 결제가 필요했다.

작업 당시에는 일정 금액(약 5,000원 단위)을 설정해두고
사용량에 따라 비용이 차감되는 방식으로 사용했다.

이렇게 API를 사용할 수 있는 환경을 먼저 구성한 이후
본격적인 자동화 작업을 진행했다.

 

 

4. 데이터 구조 분석 (OpenClaw 활용)

이후 접근 방식을 변경하여
이미지 개별 처리 대신 전체 구조를 먼저 분석하기로 했다.

OpenClaw를 활용하여
대표 홈페이지의 메뉴 구조를 분석하고,
게시판 형태의 메뉴를 식별한 뒤,
각 게시판의 게시글 목록을 수집했다.

그 중 이미지가 포함된 게시글을 추려낸 결과
총 911개의 게시글이 확인되었고,
이미지 수는 약 3,300개로 집계되었다.

또한 이 과정에서
게시글 URL, 이미지 URL, 기존 alt 텍스트를 함께 정리하였다.

 

 

5. 초기 자동화 시도 (Cron Job 기반)

데이터 구조를 정리한 이후
alt 텍스트 생성을 자동화하기 위한 시도를 먼저 진행했다.

당시에는 Cron Job을 활용하여
일정 주기(약 10분 간격)로 API를 호출하고,
이미지에 대한 대체 텍스트를 생성하도록 구성했다.

하지만 실제로 운영해보니 문제가 발생했다.

한 번에 많은 이미지(약 200개 단위)를 요청하면
결과 품질이 급격히 떨어졌고,
이미지와 전혀 관련 없는 텍스트가 생성되거나
유사한 문장이 반복되는 형태가 나타났다.

그래서 요청 단위를 줄여
20개씩 나누어 처리하는 방식으로 변경했지만,
이 경우 전체 요청 횟수가 크게 증가하면서
작업 효율이 떨어지는 문제가 있었다.

또한 결과물을 확인해보면
웹 접근성 기준에 맞는 alt 텍스트로 보기 어려운 경우가 많았고,
결국 사람이 직접 검증하고 보정하는 과정이 필요했다.

이 과정에서 느낀 점은
단순 자동 생성만으로는 품질을 확보하기 어렵고,
추가적인 튜닝이나 검수 구조가 반드시 필요하다는 것이었다.

또한 반복 호출 과정에서 토큰 비용 역시 지속적으로 발생하고 있었다.

이러한 이유로 기존 방식은 유지하기 어렵다고 판단했고,
보다 통제 가능한 구조로 전환하기 위해
Cursor 기반의 스크립트 처리 방식으로 변경하게 되었다.

 

 

6. 로컬 데이터 기반 처리 방식 전환

이 단계부터는 작업 방식을 완전히 바꿨다.

기존처럼 웹에 직접 접근해서 처리하는 방식이 아니라
모든 데이터를 로컬로 내려받아서 처리하는 구조로 전환했다.

이 시점부터는 Cursor 기반으로 작업을 진행했고,
필요한 작업들은 Python 스크립트 형태로 구성하도록 했다.

구현은 직접 하나씩 작성하기보다는
Cursor에 프롬프트를 입력해서 스크립트를 생성하는 방식으로 진행했다.

게시글 HTML을 다운로드하고,
이미지를 모두 내려받고,
게시판 번호와 이미지 번호 기준으로 데이터를 정리하는 작업까지
전부 Cursor에게 요청해서 처리했다.

이후에는 Python 스크립트에서 OpenAI API를 연동하여
ChatGPT에 요청하는 것과 동일한 방식으로 alt 텍스트를 생성하도록 구성했다.

게시글 제목과 본문 내용을 함께 전달하고,
로컬에 저장된 이미지를 함께 전달하여
이미지 단독이 아닌 게시글 맥락을 기반으로 alt 텍스트를 생성하도록 했다.

이 과정 역시 프롬프트를 구성하여 요청하고
그 결과를 받아 저장하는 방식으로 처리했다.

또한 이후 작업에 활용할 수 있도록
해당 데이터들을 JSON 형태로 구조화하도록 구성했다.

이후부터는 웹이 아닌 로컬 데이터를 기준으로 작업하게 되었고,
작업 속도와 안정성이 확실히 개선되기 시작했다.

 

 

7. 자동 생성 구조 구성

로컬 데이터가 준비된 이후에
이미지에 대한 대체 텍스트를 자동으로 생성하는 단계로 넘어갔다.

이 과정 역시 Cursor를 활용하여
Python 스크립트 기반으로 구성했다.

로컬에 저장된 이미지와 게시글 HTML,
그리고 게시글 제목 등의 정보를 함께 활용하여
이미지에 대한 설명을 생성하도록 했다.

실제 대체 텍스트 생성은 OpenAI API를 호출하는 방식으로 처리했고,
스크립트 내부에서 이미지와 문맥 정보를 함께 전달하도록 구성했다.

이를 통해 단순 이미지 설명이 아닌
게시글 맥락을 반영한 결과를 얻을 수 있었다.

 

 

8. 이미지 유형에 따른 처리 방식 분리

초기 생성 결과를 확인해보니
이미지마다 결과 품질의 편차가 있었다.

원인을 분석해보니
이미지의 성격이 서로 달랐다.

그래서 이미지를 두 가지 유형으로 구분했다.

사진형 이미지는 상황 중심으로 간단하게 설명하고,
정보형 이미지는 이미지 내 텍스트나 내용을
누락 없이 설명하도록 처리했다.

이 기준을 적용한 이후
대체 텍스트의 품질이 전반적으로 안정되었다.

 

 

9. 병렬 처리 적용

전체 이미지 수가 많다 보니
순차 처리 방식으로는 작업 시간이 과도하게 소요되었다.

이를 해결하기 위해
Python 스크립트에 병렬 처리 구조를 적용했다.

작업 단위를 나누고
동시에 여러 요청을 처리하도록 구성하여
전체 처리 시간을 단축할 수 있었다.

 

 

10. 검수 단계 및 도구 구성


자동 생성 이후 결과를 확인해보니
일부 문구에서 어색하거나 정보가 부족한 경우가 있었다.

이 부분은 자동화로 해결하기 어렵다고 판단했고,
별도의 검수 과정을 구성했다.

다만 3,300개의 이미지를 하나씩 확인하는 방식은 비효율적이었기 때문에
검수 역시 도구 형태로 구성했다.

Cursor를 활용하여
Python 기반의 간단한 검수 도구를 제작했다.

이미지와 생성된 대체 텍스트를 동시에 확인할 수 있도록 구성하고,
이전/다음 이동이 가능하도록 키 바인딩을 추가했다.

이를 통해 마우스 조작 없이 빠르게 이미지를 넘기면서
대체 텍스트를 확인할 수 있도록 했다.

또한 각 이미지에 대해 피드백을 입력할 수 있도록 구성하여
부족한 설명이나 잘못된 내용을 기록하고,
이 피드백을 이후 재생성 과정에서 참고할 수 있도록 했다.

게시판 번호, 이미지 번호, 게시글 정보까지 함께 확인할 수 있도록 구성하여
실제 원문과 비교하면서 검수가 가능하도록 했다.

이 도구를 활용하여
전체 이미지에 대한 검수를 진행했다.

 

Python으로 구성한 검수 툴. (좌측은 이미지, 우측 상단은 작성된 alt내용, 우측하단은 피드백 입력 구간이다.)

 

11. 최종 작업 완료 및 비용

총 사용된 예산, 토큰, 요청 수

 

결과적으로 약 3,300개의 이미지에 대해
대체 텍스트 생성과 검수를 모두 완료했다.

생성은 자동화로 처리했지만,
최종 품질은 직접 확인하는 방식으로 마무리했다.

전체 작업에 소요된 AI 비용은
약 32,000원 수준이었다.

수작업 대비 작업 시간을 크게 줄일 수 있었고,
대량 반복 작업에 대한 효율적인 처리 구조를 구축할 수 있었다.

 

 

12. 정리

이번 작업은 단순히 이미지 alt를 작성하는 작업이 아니라
대량 반복 작업을 어떻게 구조화할 것인지에 대한 과정이었다.

웹 기반 처리에서 로컬 데이터 기반 처리로 전환한 것이 핵심이었고,
AI와 스크립트를 결합하여 자동화 구조를 만들었다.

또한 자동 생성 결과를 그대로 사용하는 것이 아니라
검수 단계를 통해 품질을 보완하는 방식으로 진행했다.

이 방식은 향후 유사한 작업에도
적용 가능한 구조로 활용할 수 있을 것으로 판단된다.

728x90
반응형