Apidog

올인원 협업 API 개발 플랫폼

API 설계

API 문서

API 디버깅

API 모킹

API 자동화 테스트

아마존 노바 액트 API 및 SDK 사용 방법

Young-jae

Young-jae

Updated on April 3, 2025

Amazon Nova Act는 Amazon 인공지능 일반 지능(AGI)이 발표한 연구 미리보기로, 개발자들이 웹 브라우저 내에서 작업을 수행할 수 있는 에이전트를 구축할 수 있도록 해줍니다. 이 기술은 자연어 지침과 Python 스크립팅, Playwright 자동화를 결합하여 웹사이트를 탐색하고, 버튼을 클릭하고, 양식을 작성하며, 데이터를 동적으로 추출할 수 있게 합니다.

전통적인 웹 자동화 도구가 불안정한 스크립트와 웹사이트 특정 코드를 사용하는 것과 달리, Nova Act는 AI를 사용하여 웹사이트와 보다 적응적으로 상호작용하며, 지속적인 유지보수 없이도 웹 인터페이스의 변화를 처리할 수 있도록 돕습니다.

💡
귀하의 API 개발 워크플로우를 간소화하고 싶으신가요? Apidog는 API 설계, 디버깅, 테스트 및 문서화에 대한 종합적인 도구 모음을 제공하는 궁극적인 Postman 대안으로 두각을 나타냅니다. 모든 도구가 하나의 통합 플랫폼에 있습니다. 
button

직관적인 인터페이스, 협업 기능 및 강력한 자동화 기능을 갖춘 Apidog는 개발 시간을 크게 단축시키면서 API 품질을 향상시킵니다.

\
button

전제 조건

Amazon Nova Act를 시작하기 전에 필요한 것은 다음과 같습니다:

  • 운영 체제: MacOS 또는 Ubuntu (Windows는 현재 지원되지 않음)
  • Python: 3.10버전 이상
  • Amazon 계정: API 키 생성을 위해 필요
  • 위치 요구 사항: Amazon Nova Act는 현재 미국에서만 연구 미리보기로 제공됨

Amazon Nova Act API 키 받기

Amazon Nova Act를 사용하려면:

  1. nova.amazon.com/act로 이동하여 Amazon 계정으로 로그인합니다.
  2. 탐색 창의 Labs 섹션에서 "Act"를 선택합니다.
  3. API 키를 생성합니다.
  4. 접속이 즉시 이루어지지 않으면 대기자 명단에 올려지고 접속이 허용되면 이메일로 알림을 받게됩니다.

설치

API 키를 받은 후:

# SDK 설치
pip install nova-act

# 환경 변수로 API 키 설정
export NOVA_ACT_API_KEY="your_api_key"

참고: Nova Act를 처음 실행하면 Playwright 모듈을 설치하는 데 1-2분이 걸릴 수 있습니다. 이후 실행은 더 빠르게 시작됩니다.

기본 사용법

문서에서 가져온 간단한 예시로 시작해 보겠습니다:

from nova_act import NovaAct

with NovaAct(starting_page="https://www.amazon.com") as nova:
    nova.act("커피 메이커 검색")
    nova.act("첫 번째 결과 선택")
    nova.act("장바구니에 담기 버튼이 보일 때까지 아래로 스크롤한 후 '장바구니에 담기' 클릭")

이 스크립트는:

  1. 크롬을 열고 아마존으로 이동합니다.
  2. 커피 메이커를 검색합니다.
  3. 첫 번째 결과를 선택합니다.
  4. "장바구니에 담기" 버튼을 찾아 클릭합니다.

상호작용 모드

Nova Act는 실험을 위해 상호작용 방식으로 사용할 수 있습니다:

# Python 셸 시작
$ python
>>> from nova_act import NovaAct
>>> nova = NovaAct(starting_page="https://www.amazon.com")
>>> nova.start()
>>> nova.act("커피 메이커 검색")

첫 번째 작업이 완료된 후, 다음 단계로 계속 진행합니다:

>>> nova.act("첫 번째 결과 선택")

문서에 따르면, Nova Act는 현재 iPython을 지원하지 않으며 표준 Python 셸을 사용해야 합니다.

효과적인 프롬프트 전략

공식 문서에서는 신뢰성을 위해 작업을 더 작은 단계로 나누라고 강조합니다:

1. 구체적이고 명확하게

하지 마세요

nova.act("내 주문 내역에서, India Palace에서 가장 최근 주문을 찾아서 다시 주문해 주세요")

하세요

nova.act("햄버거 메뉴 아이콘을 클릭하고, 주문 내역으로 가서, India Palace에서 가장 최근 주문을 찾아서 다시 주문해 주세요")

2. 복잡한 작업을 더 작은 단계로 나누기

하지 마세요

nova.act("내가 선택한 별점이 가장 높은 100달러 이하의 호텔을 예약해줘")

하세요

nova.act(f"휴스턴에서 {startdate}부터 {enddate}까지 호텔 검색")
nova.act("평균 고객 리뷰로 정렬")
nova.act("100달러 이하의 첫 번째 호텔에서 예약하기 클릭")
nova.act(f"{blob}에 따라 내 이름, 주소 및 생년월일 입력")

웹 페이지에서 데이터 추출하기

Nova Act는 Pydantic 모델을 사용하여 구조화된 데이터 추출을 지원합니다:

from pydantic import BaseModel
from nova_act import NovaAct, BOOL_SCHEMA

class Book(BaseModel):
    title: str
    author: str

class BookList(BaseModel):
    books: list[Book]

def get_books(year: int) -> BookList | None:
    """해당 연도의 NYT 베스트셀러를 가져와 BookList로 반환합니다."""
    with NovaAct(starting_page=f"https://en.wikipedia.org/wiki/List_of_The_New_York_Times_number-one_books_of_{year}#Fiction") as nova:
        result = nova.act(
            "소설 목록에 있는 책을 반환합니다.",
            schema=BookList.model_json_schema()
        )
        
        if not result.matches_schema:
            # Act 응답이 스키마와 일치하지 않음
            return None
            
        # JSON을 Pydantic 모델로 파싱
        book_list = BookList.model_validate(result.parsed_response)
        return book_list

단순한 부울 응답의 경우, 내장된 BOOL_SCHEMA를 사용합니다:

result = nova.act("내가 로그인했나요?", schema=BOOL_SCHEMA)
if result.matches_schema:
    if result.parsed_response:
        print("로그인되었습니다.")
    else:
        print("로그인되지 않았습니다.")

여러 브라우저 세션을 이용한 병렬 처리

GitHub 문서에서는 Nova Act가 여러 브라우저 세션을 이용한 병렬 처리를 지원한다고 확인합니다:

from concurrent.futures import ThreadPoolExecutor, as_completed
from nova_act import NovaAct, ActError

# 결과를 여기에 집계합니다.
all_books = []

# 최대 동시 브라우저 세션 설정
with ThreadPoolExecutor(max_workers=10) as executor:
    # 여러 해의 책들을 병렬로 가져옵니다.
    future_to_books = {
        executor.submit(get_books, year): year
        for year in range(2010, 2025)
    }
    
    # 결과 수집
    for future in as_completed(future_to_books.keys()):
        try:
            year = future_to_books[future]
            book_list = future.result()
            if book_list is not None:
                all_books.extend(book_list.books)
        except ActError as exc:
            print(f"오류로 인해 {year}년을 건너뜁니다: {exc}")

인증 및 브라우저 상태

인증이 필요한 웹사이트의 경우, Nova Act는 기존의 Chrome 프로필을 사용할 수 있는 옵션을 제공합니다:

import os
from nova_act import NovaAct

user_data_dir = "path/to/my/chrome_profile"
os.makedirs(user_data_dir, exist_ok=True)

with NovaAct(
    starting_page="https://amazon.com/", 
    user_data_dir=user_data_dir,
    clone_user_data_dir=False
) as nova:
    input("웹사이트에 로그인한 후 Enter를 눌러주세요...")

이를 위한 내장 도우미 스크립트도 있습니다:

python -m nova_act.samples.setup_chrome_user_data_dir

민감한 정보 처리

문서는 민감한 데이터를 처리하는 것에 대해 특별히 경고합니다:

# 올바르게 로그인합니다.
nova.act("사용자 이름 janedoe를 입력하고 비밀번호 필드를 클릭하세요.")

# 민감한 데이터에 대해서는 직접 Playwright 사용
nova.page.keyboard.type(getpass())  # getpass()는 비밀번호를 안전하게 수집합니다.

# 자격 증명이 입력된 후 계속 진행
nova.act("로그인")

보안 경고: 문서에서는 실행 중에 캡처된 스크린샷이 보이는 모든 민감한 정보를 캡처한다고 주의합니다.

추가 기능

캡차 작업

result = nova.act("화면에 캡차가 있나요?", schema=BOOL_SCHEMA)
if result.matches_schema and result.parsed_response:
    input("캡차를 푸시고 완료되면 Enter를 누르세요.")

파일 다운로드

with nova.page.expect_download() as download_info:
    nova.act("다운로드 버튼 클릭")
    
# 영구적으로 저장
download_info.value.save_as("my_downloaded_file")

세션 기록하기

nova = NovaAct(
    starting_page="https://example.com",
    logs_directory="/path/to/logs",
    record_video=True
)

실제 예: 아파트 검색

dev.to 기사에서는 기차역 근처에서 아파트를 찾는 실제 예를 보여줍니다. 다음은 그 예의 핵심 구조입니다:

from concurrent.futures import ThreadPoolExecutor, as_completed
import pandas as pd
from pydantic import BaseModel
from nova_act import NovaAct

class Apartment(BaseModel):
    address: str
    price: str
    beds: str
    baths: str

class ApartmentList(BaseModel):
    apartments: list[Apartment]

class CaltrainBiking(BaseModel):
    biking_time_hours: int
    biking_time_minutes: int
    biking_distance_miles: float

# 먼저 아파트 찾기
with NovaAct(starting_page="https://zumper.com/", headless=headless) as client:
    client.act(
        "쿠키 배너를 닫으세요. "
        f"{caltrain_city}, CA 근처의 아파트를 검색한 후, "
        f"{bedrooms} 침실 및 {baths} 욕실로 필터링하세요."
    )
    
    # 아파트 목록을 스키마와 함께 추출
    result = client.act(
        "현재 보이는 아파트 목록을 반환합니다.",
        schema=ApartmentList.model_json_schema()
    )
    
# 그 후 자전거 거리를 병렬로 확인
with ThreadPoolExecutor() as executor:
    # 자전거 거리 확인을 위한 병렬 작업 제출
    future_to_apartment = {
        executor.submit(add_biking_distance, apartment, caltrain_city, headless): apartment 
        for apartment in all_apartments
    }
    
    # 결과 처리
    for future in as_completed(future_to_apartment.keys()):
        # 결과 수집 및 처리
        pass

# 결과 정렬 및 표시
apartments_df = pd.DataFrame(apartments_with_biking)

이 예는 Nova Act가 다음을 수행할 수 있음을 보여줍니다:

  • 웹사이트에서 구조화된 데이터 추출
  • 여러 브라우저 세션을 병렬로 처리
  • 다양한 정보 출처를 결합

알려진 제한 사항

문서에 따르면, Nova Act에는 다음과 같은 제한사항이 있습니다:

  • 브라우저 전용: 비 브라우저 응용 프로그램과 상호작용할 수 없음
  • 제한된 신뢰성: 고수준 프롬프트에 어려움을 겪을 수 있음
  • UI 제약: 마우스를 올려놓는 요소와 상호작용할 수 없음
  • 브라우저 모달: 권한 요청과 같은 브라우저 창 모달과 상호작용할 수 없음
  • 지리적 제한: 현재 미국 내에서만 이용 가능
  • 연구 상태: 실험적 미리보기이며, 생산 서비스 아님

NovaAct 생성자 옵션

문서에 따르면, NovaAct를 초기화할 때 다음과 같은 매개변수를 나열합니다:

NovaAct(
    starting_page="https://example.com",  # 필수: 시작할 URL
    headless=False,                       # 브라우저를 보이게 실행할지 여부
    quiet=False,                          # 로그 억제 여부
    user_data_dir=None,                   # Chrome 프로필 경로
    nova_act_api_key=None,                # API 키 (대신 env var 사용 가능)
    logs_directory=None,                  # 로그 저장 경로
    record_video=False,                   # 세션 기록 여부
    # 문서에 문서화된 기타 옵션들
)

결론

Amazon Nova Act는 AI와 전통적인 자동화 기술을 결합하여 브라우저 자동화에 대한 혁신적인 접근 방식을 나타냅니다. 여전히 제한 사항이 있는 연구 미리보기이지만, 웹 자동화를 더욱 신뢰할 수 있고 적응력 있게 만들기 위한 유망한 방향을 제시합니다.

Nova Act의 주요 장점은 복잡한 브라우저 상호작용을 자연어 지침을 사용하여 분리된 신뢰할 수 있는 단계로 나눌 수 있다는 점입니다. 이러한 지침은 Python 코드와 결합되어 유연하고 강력한 자동화 워크플로우를 구축할 수 있습니다.

현재 연구 미리보기 상태이며 미국에서만 사용 가능하므로 지속적인 변화와 개선이 예상됩니다. 가장 최신 정보를 얻으려면 항상 GitHubnova.amazon.com/act의 공식 문서를 참조하세요.