AWS

Amazon Nova Act 살펴보기 – 화면을 보고 움직이는 웹 UI 자동화 에이전트

안녕하세요. GS Neotek 문승현 입니다.
이번 글에서는 정식 출시(GA)된 Amazon Nova Act를 정리하고, 직접 테스트해 본 결과를 공유해 보겠습니다.
Nova Act는 사람이 브라우저에서 하던 반복 작업을 AI 에이전트가 화면을 보고 대신 처리하도록 만드는 AWS 서비스입니다.
셀렉터 대신 자연어로 목표를 주고, 막히는 단계에서는 사람이 이어받을 수 있게 설계되어 있습니다.

한눈에 보기

항목내용
서비스Amazon Nova Act
(정식 출시, 그 전에는 리서치 프리뷰)
하는 일웹 UI 워크플로 자동화 에이전트를 만들고, 배포하고, 운영
모델커스텀 Amazon Nova 2 Lite 모델
개발 도구1. 웹 플레이그라운드(nova.amazon.com/act)
2. Python SDK(nova-act)
3. IDE 확장(VS Code, Kiro, Cursor)
4. CLI, AWS 콘솔
배포·운영Amazon Bedrock AgentCore Runtime 배포, AWS 콘솔 대시보드·실행 로그, Amazon CloudWatch
리전미국 동부(버지니아 북부, us-east-1)
요금에이전트 시간당 $4.75
(사람 응답을 기다리는 시간은 제외)

기존 브라우저 자동화가 어려웠던 이유

Selenium, Puppeteer, Cypress 같은 기존 브라우저 자동화 도구는 HTML DOM의 ID, 클래스명, XPath 셀렉터로 화면 요소를 찾습니다.
그래서 프런트엔드 코드나 CSS가 조금만 바뀌어도 스크립트가 멈추는 일이 잦았습니다.
픽셀 좌표나 단순 OCR에 기대는 데스크톱 RPA도 해상도나 렌더링이 바뀌면 같은 문제가 생깁니다.
자동화할 화면이 많아질수록 이 깨짐을 고치는 유지보수가 RPA 도입의 가장 큰 부담이 되곤 했습니다.

Nova Act는 어떻게 동작하나

Nova Act는 웹 화면의 스크린샷을 멀티모달 모델로 직접 해석해서, 버튼·입력란·메뉴를 사람처럼 눈으로 찾아 클릭하고 입력합니다.
AWS는 이 서비스를 커스텀 모델, 오케스트레이터, 브라우저 액추에이터 등을 수직으로 통합한 구조라고 설명합니다.
모델은 “웹 짐(web gym)”이라는 합성 웹 환경 안에서 에이전트를 실행하며 강화 학습으로 훈련하는 방식입니다.

SDK에서 쓰는 용어는 아래와 같습니다.

용어뜻
Actnova.act("…") 한 번의 호출. 목표를 달성할 때까지 에이전트 루프를 돈다
StepAct 안에서 화면을 보고 행동하는 한 단계
Session브라우저(또는 API 클라이언트) 인스턴스 하나
Workflow자연어와 Python 코드를 섞어 정의한 자동화 흐름
Workflow run워크플로 한 번의 실행. 그 안에서 여러 세션을 병렬로 돌릴 수 있다

GitHub README에는 30단계 이내로 끝나는 작업에서 가장 안정적이라고 적혀 있습니다.
긴 업무는 하나의 큰 지시보다 여러 개의 act() 호출로 나눠 쓰는 것이 좋습니다.

개발 흐름: 플레이그라운드에서 배포까지

  • 1. 플레이그라운드(nova.amazon.com/act)
    코드 없이 URL과 자연어 동작을 입력해 실제 브라우저에서 바로 시험합니다. 시험용 가상 사이트(Nova Act Gym)도 제공됩니다.
  • 2. IDE로 내보내기
    VS Code, Kiro, Cursor용 Nova Act IDE 확장에서 노트북 형태의 빌더 모드, 실시간 브라우저 화면, 실행 로그를 보며 다듬습니다.
  • 3. 배포
    IDE 확장의 Deploy 탭에서 워크플로를 Docker 컨테이너로 만들어 Amazon ECR에 올리고, 필요한 IAM 역할과 S3 버킷을 만든 뒤 Amazon Bedrock AgentCore Runtime에 배포합니다.
  • 4. 운영
    AWS 콘솔의 워크플로 정의 화면에서 실행 결과를 보고, 단계별 로그에서 에이전트의 판단·동작·스크린샷을 확인합니다.

코드로 보면

설치는 pip 한 줄입니다(Python 3.10 이상).

pip install nova-act
export NOVA_ACT_API_KEY="<YOUR_API_KEY>"
Bash

가장 간단한 예시는 시작 페이지와 자연어 목표만 주는 형태입니다(README 예시).

from nova_act import NovaAct

with NovaAct(starting_page="https://nova.amazon.com/act/gym/next-dot/search") as nova:
    nova.act("Find flights from Boston to Wolf on Feb 22nd")
Python

화면에서 값을 읽어 올 때는 act_get()에 스키마를 넘겨 구조화된 결과를 받습니다.
README는 예/아니요 같은 단순한 답에도 스키마를 쓰라고 권합니다.

from pydantic import BaseModel

class PlanetData(BaseModel):
    gravity: float
    average_temperature: float

result = nova.act_get(
    f"Go to the {planet} page and return the gravity and average temperature.",
    schema=PlanetData.model_json_schema(),
)
planet_data = PlanetData.model_validate(result.parsed_response)
Python

비밀번호 같은 민감한 값은 프롬프트에 넣지 않습니다.
입력란에 커서만 옮기고, 값은 Playwright 키보드 입력으로 직접 넣는 방식이 안내되어 있습니다.

from getpass import getpass

nova.act("click on the password field")
nova.page.keyboard.type(getpass())
nova.act("sign in")
Python

사람이 이어받아야 할 때: Human-in-the-Loop

자동화하다 보면 CAPTCHA처럼 AI가 혼자 넘기기 어려운 단계나, 결제 직전처럼 사람의 확인이 필요한 단계가 생깁니다.
Nova Act SDK는 이런 상황을 위해 두 가지 방식을 제공합니다.

방식동작
사람 승인(Human approval)현재 화면 스크린샷을 브라우저 기반 화면으로 검토자에게 보여 주고 승인을 받는다
UI 테이크오버(UI takeover)실시간 스트리밍 화면으로 브라우저 제어권을 사람에게 넘긴다(예: CAPTCHA 풀기)

다만 이 기능은 관리형 서비스가 아니라 SDK로 워크플로 안에 직접 구현하는 방식입니다.
HumanInputCallbacksBase를 상속해 approve, ui_takeover를 구현하고, NovaAct에 human_input_callbacks로 넘깁니다.
사람 응답을 기다리는 시간은 요금(에이전트 시간)에서 빠집니다.

기존 방식과 비교

비교 항목Amazon Nova ActSelenium / Puppeteer전통적 데스크톱 RPA
요소 인식멀티모달 모델의 스크린샷 해석DOM 구조와 CSS/XPath 셀렉터픽셀 좌표 매핑, 단순 OCR
UI 변경에 대한 내구성버튼 위치나 클래스가 바뀌어도 화면을 다시 해석작은 배포에도 셀렉터 수정이 필요할 수 있음해상도·렌더링 변경에 영향받기 쉬움
실행 환경AgentCore Runtime·AgentCore Browser 배포 지원Selenium Grid 등 자체 실행 환경 구성상시 가동 VM과 별도 라이선스
예외 처리SDK로 사람 승인·UI 테이크오버 구현타임아웃 후 실패 처리관리자 알림 후 대기
결과의 결정성모델 판단이라 실행마다 경로가 달라질 수 있음같은 스크립트는 같은 동작같은 스크립트는 같은 동작

마지막 줄처럼, 셀렉터 방식은 깨지기 쉬운 대신 동작이 결정적이고, Nova Act는 유연한 대신 판단이 확률적입니다.
매번 똑같이 검증해야 하는 단계는 기존 방식이나 API로 두고, 화면이 자주 바뀌는 구간에 Nova Act를 쓰는 조합도 고려해 볼 만합니다.

어디에 쓰면 좋을까

AWS가 공식으로 제시하는 대표 용도는 웹 QA 테스트, 데이터 입력, 데이터 추출, 결제(체크아웃) 흐름입니다.
실무에서는 아래 같은 상황에서 효과가 클 것으로 보입니다.

  • 1. E2E 회귀 테스트와 합성 모니터링
    회원가입·구매 같은 핵심 사용자 여정을 주기적으로 돌릴 때, UI 변경 때문에 생기는 오탐 알람을 줄일 수 있습니다. 바로 아래에서 직접 테스트해 봤습니다.
  • 2. API가 없는 시스템의 반복 업무
    레거시 공급망 시스템이나 오래된 사내 ERP에서 정기적으로 데이터를 내려받거나 입력하는 작업을 API 개발 없이 자동화할 수 있습니다.
  • 3. 여러 사이트에서 같은 정보 모으기
    병렬 세션으로 여러 페이지를 동시에 돌며 act_get()으로 구조화된 데이터를 모을 수 있습니다.

직접 해 보기: UI가 바뀌어도 통과하는 회귀 테스트

첫 번째 용도를 직접 확인해 보려고 작은 데모 쇼핑몰을 두 버전으로 만들었습니다.
회원가입 → 상품 담기 → 장바구니 → 배송·결제 입력 → 주문 완료까지 흐름은 같고, v2는 디자인 개편 배포를 가정해 버튼 문구, 요소 ID·클래스, 장바구니 위치를 바꿨습니다.
같은 여정을 기존 셀렉터 방식(Playwright)과 Nova Act로 각각 돌려 봤습니다.

왼쪽 v1, 오른쪽 v2 회원가입 화면. 흐름은 같지만 문구와 요소 ID가 다르다
왼쪽 v1, 오른쪽 v2 회원가입 화면. 흐름은 같지만 문구와 요소 ID가 다르다
구분v1v2 (UI 개편)
회원가입 버튼Create account (#signup-btn)Sign up (#register-submit)
상품 담기Add to cartAdd to bag
장바구니오른쪽 위 Cart (1) 링크왼쪽 위 쇼핑백 아이콘
주문 버튼Checkout → Place orderProceed to payment → Pay now

기존 방식: 셀렉터 테스트

v1 화면을 기준으로 CSS 셀렉터를 지정해 작성한 테스트입니다.

STEPS = [
    ("회원가입", lambda p: (p.fill("#email", "qa.monitor@example.com"),
                         p.fill("#password", PASSWORD),
                         p.click("#signup-btn"))),
    ("상품 담기", lambda p: p.click('.product-card:has-text("Classic Tee") .add-to-cart')),
    ("장바구니", lambda p: p.click("#cart-link")),
    # ... 주문하기, 배송·결제 입력, 주문 완료 확인
]
Python

v1에서는 5초 만에 통과했지만, v2에서는 첫 단계에서 바로 멈췄습니다.
서비스는 정상인데 테스트만 실패하는, 전형적인 오탐 알람입니다.

Nova Act: 목표만 적은 테스트

같은 여정을 셀렉터 없이 목표 문장으로만 적었습니다.
비밀번호는 프롬프트에 넣지 않고 키보드로 직접 입력했고, 마지막에 act_get()으로 주문 성공 여부를 스키마로 받아 판정합니다.

class OrderResult(BaseModel):
    order_placed: bool
    order_number: str

with NovaAct(starting_page=url + "#signup", headless=True, record_video=True) as nova:
    nova.act("Type qa.monitor@example.com into the email field, then click the password field")
    nova.page.keyboard.type(os.environ["DEMO_PASSWORD"])
    nova.act("Submit the sign-up form")
    nova.act("Add the Classic Tee to the shopping cart")
    nova.act("Open the shopping cart and start the checkout")
    nova.act("Enter Jane Doe as the full name and 123 Example St, Seattle as the shipping address, "
             "choose cash on delivery, and place the order")
    r = nova.act_get("Was the order placed successfully? Return the order number shown on the page.",
                     schema=OrderResult.model_json_schema())
    result = OrderResult.model_validate(r.parsed_response)
Python

코드를 한 줄도 바꾸지 않고 v1, v2 모두 통과했습니다.
v2에서는 “Sign up”, “Add to bag”, 쇼핑백 아이콘, “Pay now”를 화면에서 스스로 찾아 눌렀습니다.

아래는 record_video=True로 녹화한 v2 실행 화면을 4배속으로 줄인 영상입니다.

Nova Act가 UI가 바뀐 v2에서 회원가입부터 주문 완료까지 진행하는 화면(4배속)

에이전트가 무엇을 보고 눌렀는지 확인하기

act()마다 실행 로그(HTML)가 남습니다.
단계별로 에이전트가 본 화면, 판단(think), 실제 동작(agentType, agentClick 등)이 함께 기록되어, 테스트가 실패했을 때 원인을 찾기 쉽습니다.

Nova Act Action Viewer. 단계마다 화면 캡처와 에이전트의 판단·동작이 기록된다
Nova Act Action Viewer. 단계마다 화면 캡처와 에이전트의 판단·동작이 기록된다
Action Viewer에서 배송·결제 입력 단계의 5개 스텝을 차례로 넘겨 보는 화면

결과 정리

구분v1v2 (UI 개편)비고
셀렉터 테스트통과 (5.3초)실패 (1단계)셀렉터 수정 전까지 매번 오탐
Nova Act통과 (96.5초)통과코드 수정 없음

다만 속도와 비용은 차이가 큽니다.
Nova Act는 한 번에 약 1분 30초가 걸렸고, AWS 서비스 요금(에이전트 시간당 $4.75)으로 계산하면 한 번에 약 $0.13입니다.
15분마다 돌리면 하루 약 $12, 한 달 약 $370 수준이므로(AgentCore 실행 비용 등 별도), 모든 테스트를 바꾸기보다는 UI가 자주 바뀌는 핵심 여정에 도입하는 것이 바람직해 보입니다.

합성 모니터링으로 운영하기

주기 실행 결과는 CloudWatch 사용자 지정 지표로 보내고, 성공 지표가 0이 되면 알람이 울리도록 구성할 수 있습니다. (기존 테스트 스크립트는 유치하고, 오류 발생시 Nova Act 실행 동작)

cw.put_metric_data(Namespace="SyntheticMonitoring/NovaAct", MetricData=[
    {"MetricName": "JourneySuccess", "Dimensions": dims, "Value": 1 if report["success"] else 0, "Unit": "Count"},
    {"MetricName": "JourneyDuration", "Dimensions": dims, "Value": report["total_seconds"], "Unit": "Seconds"},
])
Python

워크플로는 IDE 확장의 Deploy 기능으로 AgentCore Runtime에 배포하고, 주기 실행은 스케줄러에서 호출하는 방식으로 이어 가면 됩니다.

도입 전에 확인할 점

  • 1. 작업 단위
    30단계 이내의 작업에서 가장 안정적이라고 안내되어 있어, 긴 업무는 잘게 나눠 설계해야 합니다. 브라우저 밖의 앱이나 브라우저 권한 팝업은 다루지 못하는 점도 제약사항입니다.
  • 2. 보안
    스크린샷에 화면의 민감정보가 담길 수 있고, 페이지 내용을 통한 프롬프트 인젝션도 위험 요소로 안내됩니다. state_guardrail로 접근 가능한 URL을 제한하고, 파일 열기·업로드 경로는 기본으로 막혀 있으니 필요한 경로만 허용하는 것이 좋습니다.
  • 3. 대상 사이트의 정책
    공공 포털이나 외부 사이트를 자동화할 때는 이용약관과 자동화 허용 여부를 먼저 확인할 필요가 있습니다.

마치며

Nova Act는 “셀렉터를 관리하는 자동화”를 “목표를 설명하는 자동화”로 바꾸려는 서비스입니다.
플레이그라운드에서 바로 시험해 보고, IDE에서 다듬어, AgentCore로 배포하는 흐름이 한 서비스 안에 이어져 있다는 점이 눈에 띕니다.
리전이 미국 동부뿐이고 공식 지원 언어가 영어로 안내되어 있으니, 우선 영어 지시문으로 테스트 시나리오 하나를 작게 만들어 보고, 한국어 화면에서도 쓸 만한지 함께 확인해 보시길 권장합니다.

참고 자료

5/5 - (평가 개수 : 1)

궁금한 점이 있으신가요?

자세한 문의는 GS Neotek 홈페이지를 이용해 주세요.

문의하기

필자: 문 승현

전체 게시물수 : 3

전체 조회수 : 562

게시물 공유하기