ahic입니다. 저는 일상 업무를 AI 에이전트와 RPA로 자동화하며 13개의 에이전트를 운영하고 있습니다. 이번에는 Gemini Vision API를 사용하여 Mac 화면을 상시 모니터링하고, 특정 이벤트를 감지하여 자동으로 알림 및 기록을 수행하는 AI 에이전트 구축 절차를 소개합니다.
문제 제기: Mac 화면의 특정 상태를 감지하고 싶다
Mac 작업을 하는 도중에 특정 애플리케이션이 실행되거나, 특정 팝업이 표시되거나, 혹은 중요한 이벤트가 발생했을 때 이를 자동으로 감지하여 알림을 받고 싶다는 니즈가 있지 않으신가요?
예를 들어, 장시간 백그라운드 처리 완료 알림, 특정 시스템 경고 발생, 또는 공동 작업자가 특정 도구를 실행했을 때의 리마인더 등이 있습니다.
하지만 이러한 것들을 프로그램적으로 감지하는 것은 애플리케이션마다 API가 다르거나 OS 레벨에서의 후킹(hooking)이 어려워 쉽지 않습니다.
그래서 저는 Gemini Vision API를 활용하여 주기적으로 Mac 스크린샷을 캡처하고 AI에게 분석하게 함으로써 이 문제를 해결하는 AI 에이전트를 구축했습니다. 화면의 내용을 직접 분석하기 때문에 애플리케이션의 종류나 내부 구조에 의존하지 않고 유연한 모니터링이 가능합니다.
구현 절차: Gemini Vision과 launchd로 상주(常駐) AI 에이전트 구축하기
이 AI 에이전트는 다음 단계를 통해 구축됩니다.
- 환경 준비: Python 환경 설정 및 필요한 라이브러리 설치 -
- Google Gemini API 키 획득: Gemini Vision API를 이용하기 위한 API 키 -
- 스크린샷 캡처 스크립트 작성: Mac 화면을 캡처하는 Python 스크립트 -
- Gemini Vision 기반 이미지 분석 스크립트 작성: 스크린샷을 분석하여 특정 텍스트나 상태를 감지하는 Python 스크립트 -
- 상주화 설정:
launchd
을 이용하여 스크립트를 주기적으로 실행하도록 설정
1. 환경 준비
Python 3이 설치되어 있는 것을 전제로 합니다. 필요한 라이브러리를 설치해 주세요.
pip install google-generativeai pillow pyautogui
google-generativeai
: Gemini API를 이용하기 위한 라이브러리입니다.
pillow
: 이미지 처리를 수행하는 라이브러리입니다. 스크린샷을 임시로 저장할 때 사용합니다.
pyautogui
: 스크린샷을 캡처하는 데 이용합니다.
2. Google Gemini API 키 획득
Google AI Studio (https://aistudio.google.com/) 에 접속하여 새로운 API 키를 생성해 주세요.
획득한 API 키는 후술할 launchd
설정 파일에 직접 기재합니다. 이는 launchd
의 실행 환경에서 확실하게 API 키를 이용하기 위한 베스트 프랙티스입니다.
3. 스크린샷 캡처 및 Gemini Vision 분석 스크립트 작성
다음 Python 스크립트(screen_monitor.py)
을 작성합니다.
이 스크립트는 Mac의 스크린샷을 임시로 캡처하고, 해당 이미지를 Gemini Vision API에 전송하여 분석하게 합니다. 그리고 특정 조건에 부합할 경우 로그를 출력합니다.
보충: 스크립트 내의 /Users/ahic/
경로는 사용자님의 사용자 이름으로 바꿔주세요.
import os
import time
import pyautogui
...
이 스크립트는 TARGET_PHRASE
에 설정된 문자열이 화면에 표시되어 있는지 Gemini Vision에게 판단하게 합니다. 판단 결과는 LOG_FILE
에 기록됩니다.
TARGET_PHRASE
나 프롬프트는 모니터링하고 싶은 내용에 맞춰 유연하게 조정해 주세요. 예를 들어, “이 화면에 에러 메시지가 표시되어 있나요?”, “특정 애플리케이션이 실행되고 있나요?” 등 구체적인 질문을 던지는 것만으로도 더욱 고도화된 감지가 가능합니다.
로그 파일 경로에 대하여:
LOG_FILE
의 경로는 반드시 사용자님의 사용자 이름(예: /Users/yourusername/Library/Logs/)으로 설정해야 합니다.
다음 경로를 지정할 때 쓰기 권한을 가지고 있어야 합니다.
4. launchd를 이용한 상시 구동 설정
생성된 screen_monitor.py 파일을 주기적으로 실행하기 위해 macOS의 launchd를 사용합니다.
먼저, 다음 내용으로 ~/Library/LaunchAgents/com.ahic.screenmonitor.plist 파일을 생성합니다.
참고: plist 내의 /Users/ahic/ 경로는 본인의 사용자 이름으로 바꿔주세요.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
...
plist 파일 주의사항:
- Python 경로 및 스크립트 전체 경로: Python의 경로 (
ProgramArguments에 /usr/local/bin/python3 등)와 screen_monitor.py 스크립트의 전체 경로를 정확하게 지정해야 합니다. 경로는 which python3 명령어로 확인할 수 있습니다.
- 표준 출력 및 표준 에러 출력: 이 로그 파일은 스크립트의 표준 출력(StandardOutPath)과 표준 에러 출력(StandardErrorPath)이 기록되는 곳입니다. 문제 해결에 중요하므로, 쓰기 권한을 가진 경로를 지정해야 합니다.
- 실행 간격: 스크립트를 실행할 간격을 초 단위로 지정합니다. 위의 예시에서는 60초(1분)마다 실행됩니다. API 사용 요금이나 시스템 부하를 고려하여 조정해 주세요 (
StartInterval).
- Gemini API 키 환경 변수:
launchd의 실행 환경에서는 셸의 환경 변수가 항상 상속되지 않을 수 있으므로, 여기에 명시적으로 기재하는 것이 가장 확실합니다. YOUR_GEMINI_API_KEY를 본인의 API 키로 바꿔주세요 (EnvironmentVariables).
plist 파일을 저장했다면, 다음 명령어로 launchd에 로드하여 실행을 시작합니다.
launchctl load ~/Library/LaunchAgents/com.ahic.screenmonitor.plist
launchctl start com.ahic.screenmonitor
중지하고 싶다면, 다음 명령어를 실행합니다.
launchctl stop com.ahic.screenmonitor
launchctl unload ~/Library/LaunchAgents/com.ahic.screenmonitor.plist
설정이 올바르게 되었다면, 1분마다 screen_monitor.py가 실행되어 Mac 화면이 자동으로 감시됩니다. 로그 파일 (/Users/ahic/Library/Logs/screen_monitor.log)을 확인하여 탐지 결과가 기록되었는지 확인해 주세요.
막히는 부분과 대처법 (Troubleshooting)
pyautogui.screenshot()으로 화면 캡처 불가 또는 권한 오류
- macOS Ventura 이후 버전에서는
pyautogui와 같은 스크린샷 기능을 이용할 때, 보안 및 개인 정보 보호 설정에서 '스크린 레코딩' 권한을 부여해야 합니다.
- '시스템 설정' > '개인 정보 보호 및 보안' > '화면 녹화'로 이동합니다.
- 여기에 '터미널'(launchd로 실행되는 경우)이나 Python 실행 환경(예: VS Code에서 직접 실행하는 경우)을 추가하고, 체크박스를 켭니다.
2. Gemini API 키 오류 또는 결제 설정 문제
- API 키가 올바르게 설정되지 않은 경우 인증 오류가 발생합니다.
plist 파일 내의 EnvironmentVariables에 기재된 API 키가 잘못되지 않았는지 확인해 주세요.
- Gemini API는 사용량에 따라 요금이 발생합니다. Google Cloud Platform에서 결제가 활성화되어 있는지 확인해 주세요. 무료 사용량이 있지만, 이용 빈도에 따라 요금이 발생할 수 있습니다.
launchd
스크립트가 실행되지 않거나 오류가 발생하는 경우
-
경로 오류: plist 파일 내의 Python 실행 파일 경로 (/usr/local/bin/python3) 또는 스크립트 경로 (/Users/ahic/scripts/screen_monitor.py)가 잘못된 경우, 스크립트는 실행되지 않습니다. 전체 경로를 다시 확인해 주세요.
- 로그 확인:
StandardOutPath와 StandardErrorPath에 지정한 로그 파일 (com.ahic.screenmonitor.stdout.log, com.ahic.screenmonitor.stderr.log)을 확인하세요. 여기에 Python의 오류 메시지나 스크립트 출력이 기록되어 있습니다.
- 권한: 스크립트나 로그 파일이 저장되는 디렉토리에 적절한 쓰기 권한이 있는지 확인해 주세요.
4. Gemini Vision 분석 정확도가 낮은 경우
- 프롬프트 조정: Gemini Vision에 제공하는 프롬프트는 매우 중요합니다. 더 구체적이고 명확한 지시를 제공함으로써 분석 정확도를 높일 수 있습니다. 예를 들어, "이 화면에 '처리 완료'라는 텍스트가 있습니까? '예' 또는 '아니오'로 답변해 주세요."와 같이 기대하는 출력 형식을 지정하는 것도 효과적입니다.
- 감지 대상 조정: 화면 해상도, 글꼴, 배경색 등에 따라 AI가 텍스트를 정확하게 인식하지 못할 수 있습니다. 모니터링 대상 UI 요소가 화면에 명확하게 표시되어 있는지 확인하고, 필요하다면 감지 로직을 미세 조정해 주세요.
요약
본 기사에서는 Mac의 화면을 Gemini Vision API로 자동 모니터링하여 특정 상태를 감지하고 알림 및 기록을 수행하는 AI 에이전트 구축 방법을 설명했습니다. pyautogui로 스크린샷을 캡처하고, google-generativeai 라이브러리로 Gemini Vision에 분석을 맡기며, launchd로 상시 구동함으로써 애플리케이션에 의존하지 않는 유연한 화면 모니터링이 가능합니다.
이 AI 에이전트는 단순히 특정 텍스트를 감지하는 것을 넘어, 프롬프트를 고안하여 더욱 복잡한 화면 상태를 AI가 판단하도록 할 수 있습니다. 예를 들어, 특정 그래프의 변동, 비정상적인 UI 요소의 출현, 또는 공동 작업자의 작업 진행 상황 감지 등 응용 범위는 매우 광범위합니다.
일상 업무에서 "만약 이 화면이 이렇게 되면 자동으로 무언가를 해줬으면 좋겠다"라는 니즈가 있다면, 이번 방법을 꼭 시도해 보세요. AI 에이전트를 통한 업무 자동화는 여러분의 Mac을 더욱 스마트하고 효율적으로 만들어 줄 것입니다.
ahic이었습니다.
Discussion