로드 중

컴퓨터 사용: API 없이 데스크톱 소프트웨어 자동화하기

강의 79분

대부분의 회사에는 API가 전혀 없는 앱이 적어도 하나는 있습니다. 앞선 레슨에서 다룬 도구들은 이런 앱에 접근할 수 없습니다. 호출할 대상 자체가 없기 때문입니다.

가상의 엔지니어링 컨설팅 회사인 Meridian에도 이런 앱이 있습니다. PlotDesk라는 이름의 오래된 도면 관리 프로그램으로, 이 역시 가상의 프로그램입니다. 매주 금요일마다 한 사람이 하루 종일 동일한 화면을 클릭하며 PDF 도면 세트를 내보내는 작업을 합니다. PlotDesk에는 API도, 명령줄도 없습니다. 오직 창과 버튼만 있을 뿐입니다.

컴퓨터 사용 기능을 이용하면 Claude가 사람이 하듯이 스크린샷을 보고 무엇을 클릭할지, 어떤 텍스트를 입력할지 판단하여 이러한 창과 버튼을 통해 PlotDesk를 조작할 수 있습니다.

Meridian은 Claude가 프로젝트 MEG-2026-0142의 오늘자 PDF 도면 세트를 내보내 주기를 원합니다.

각 동작을 누가 수행하는지 확인하기

API를 통해서는 Claude가 데스크톱에 직접 연결되지 않습니다. Claude가 만들어내는 것은 그 안에 도구 호출이 담긴 응답뿐입니다. 여러분의 프로그램, 즉 Messages API를 호출하는 Python 프로그램이 데스크톱에서 각 동작을 실제로 수행하고 그 결과를 다시 전송합니다.

루프는 이렇게 동작합니다. Claude가 스크린샷을 요청합니다. 여러분의 프로그램이 스크린샷을 찍어 이미지로 다시 전송합니다. Claude는 이를 보고 주어진 좌표를 클릭하거나 어떤 텍스트를 입력하는 등의 다음 동작을 전송합니다. 여러분의 프로그램이 그 동작을 수행하고, 작업이 끝날 때까지 이 루프가 반복됩니다. 이미 익숙한 도구 루프와 동일하지만, 결과 중 일부가 스크린샷이라는 점만 다릅니다.

Meridian의 전체 내보내기 작업은 일곱 번의 동작으로 이루어졌습니다.

Claude의 동작일어난 일
screenshotClaude가 PlotDesk 창을 찾습니다
left_clickProject number 필드에서
typeMEG-2026-0142
left_clickOpen에서
screenshotPlotDesk가 프로젝트를 보여줍니다: Pump Station Replacement, 22매
left_clickExport PDF에서
screenshot상태 표시줄에 "Exported MEG-2026-0142_plots.pdf"라고 표시됩니다

데스크톱을 전용 컨테이너에서 실행하기

Claude는 화면에 나타나는 것에 따라 동작합니다. 웹 페이지나 이미지에 담긴 텍스트가 여러분의 지시를 무시하게 만들거나 Claude를 실수로 이끌 수 있습니다. 잘못된 한 번의 동작이 끼칠 수 있는 피해를 제한하려면, 작업에 필요한 것만 담긴 전용 컨테이너나 가상 머신을 데스크톱에 부여하세요. 다음과 같이 설정합니다:

  • 각 세션마다 전용 컨테이너를 부여합니다.
  • 컨테이너에는 인증 정보가 없고, 호스트에서 마운트된 디렉터리도 없습니다.
  • 컨테이너는 해당 작업이 사용하는 네트워크 호스트에만 접근할 수 있습니다.

여러분의 프로그램과 API 키는 컨테이너 바깥에 둡니다.

동작을 작성하고, SDK가 루프를 실행하게 하기

Python 및 TypeScript SDK에는 컴퓨터 도구 세트라는 클래스가 있습니다. 이 클래스를 서브클래싱하여 작업에 필요한 각 동작마다 메서드 하나씩을 작성합니다. 이 클래스는 도구 세트의 tools 항목을 대신 만들어주며, 베타 상태입니다. Python에서는 SDK 버전 1.12.0 이상이 필요합니다.

Meridian은 도구 세트의 동작 중 screenshot, left_click, type 세 가지를 구현합니다. 구현하지 않은 동작은 API에 비활성화 상태로 전송됩니다.

각 메서드는 작업을 backend에게 넘기는 단 한 줄짜리 코드입니다. backend는 VNC 클라이언트나 xdotool 등 데스크톱을 제어하는 어떤 것이든 감싸는 여러분만의 래퍼입니다. Python과 TypeScript로 작성된 이 최소한의 VNC 예제가 시작하기에 좋지만, 프로덕션용으로 만들어진 것은 아닙니다.

클래스 인스턴스를 프롬프트와 함께 tools에 전달하세요. SDK 헬퍼인 Tool Runner가 Claude가 도구 호출 없이 응답할 때까지 루프를 대신 실행해 줍니다.

2026년 10월 기준으로, 이 도구 세트는 Claude API와 Claude Models on Google Cloud(Google 관리형)에서 사용할 수 있습니다. Amazon Bedrock, Microsoft Foundry, 그리고 AWS의 Claude Platform에는 이전 버전의 베타 도구가 있습니다. 이들은 다른 tools 항목과 베타 기능을 켜는 요청 헤더인 베타 헤더를 사용합니다.

사람이 클릭과 입력을 승인하게 하기

인스턴스를 생성할 때 confirm이라는 함수를 전달하세요. SDK는 모든 동작이 실행되기 전에 이 함수를 호출합니다. 이 함수가 True를 반환하면 동작이 실행됩니다. 그 외의 값을 반환하면 동작이 거부되고, Claude에게는 사람이 이를 거절했다는 사실이 전달됩니다.

confirm은 동작과 그 입력값을 볼 수 있지만, 화면은 볼 수 없습니다. 데스크톱을 지켜보는 사람은 Claude가 클릭하려는 지점에 무엇이 있는지 볼 수 있습니다. 그래서 Meridian은 스크린샷은 자동으로 승인하고, 모든 클릭과 모든 type 동작은 데스크톱을 지켜보는 사람인 오퍼레이터에게 보내 승인받도록 합니다.

다음은 Meridian의 프로그램입니다. 이 중 세 가지 이름, 즉 backend, ask_operator, TASK는 SDK가 아니라 Meridian 자체 코드에서 온 것입니다. ask_operator는 오퍼레이터에게 해당 동작을 보여주고 그들의 답변을 반환하며, TASK는 프롬프트를 담고 있습니다.

로드 중

컴퓨터 사용이 적합한 경우 판단하기

모든 스크린샷은 대화 내역에 계속 남아 있으므로, 각 단계마다 이전보다 비용이 더 늘어납니다. 그러므로 소프트웨어에 MCP 서버(자신의 기능을 도구로 Claude에 제공하는 서비스)나 API, 또는 명령줄이 있다면 그것을 대신 사용하세요. 컴퓨터 사용은 PlotDesk처럼 이러한 것이 전혀 없는 소프트웨어를 위한 것입니다.

작업이 웹 페이지 내에서만 이루어진다면, 브라우저 사용 도구가 더 적합합니다. 이 도구는 페이지 자체를 읽고 그 위에서 동작하며, 전체 데스크톱이 필요하지 않습니다.

핵심 요점

  • Claude는 동작을 요청하고, 여러분의 프로그램이 이를 실제로 수행합니다.
  • 데스크톱은 세션마다 전용 컨테이너에서 실행됩니다.
  • 작업에 필요한 동작만 구현하면 됩니다.
  • Meridian의 confirm 함수는 모든 클릭과 모든 type 동작을 사람에게 보내 승인받게 합니다.
  • 직접적인 인터페이스가 있다면 그것을 사용하고, 없을 때만 컴퓨터 사용을 사용하세요.