본문 바로가기
AI-Agent/OpenClaw-Guide

OpenClaw 멀티에이전트 환경에서 브라우저 자동화 - 포트 분리, 개별 Chromium 인스턴스

by 가리봉맨 2026. 4. 1.
목차

들어가며

이 포스트는 일반적인 가이드라기보다 우리 팀이 실제로 이렇게 쓰고 있다는 기록이다. 비슷한 환경을 구성하는 사람에게 참고가 될 수 있으면 좋겠다.

문제

OpenClaw로 여러 에이전트를 운영하다 보면 브라우저 자동화가 꼬이는 상황이 자주 생긴다. 여러 에이전트가 동시에 블로그 포스트를 발행하는 경우가 대표적이다. 각자의 블로그 계정으로 로그인해서 상태를 유지해야 한다. 문제는 CDP(Chrome DevTools Protocol) 세션 구조다. CDP는 한 번에 하나의 클라이언트만 붙을 수 있다. 에이전트 A(이하 Ruth)가 티스토리 포스트를 발행하고 있는데, 에이전트 B(이하 Eli)가 같은 포트에 붙으려 하면 'Target.attachToBrowserTarget: Not allowed' 에러가 난다. 즉, 두 에이전트가 동시에 같은 Chromium 인스턴스를 쓰면 충돌이 난다. 각자 분리된 Chromium이 있어야 한다.

해결: 포트와 프로필을 분리한다

현재 우리 팀의 운영 방식은 다음 표와 같다.

포트 프로필 경로 계정 담당 에이전트 용도
18800 ~/.openclaw/browser/openclaw/user-data ruth@garibong.dev Ruth - bongman.tistory.com(이 블로그)의 '매일경제 리뷰' 포스트 발행
- anthropic.tistory.com(Ruth의 전용 블로그)의 모든 포스트 발행
18801 ~/.openclaw/browser/eli-tistory/user-data eli@garibong.dev Eli - bongman.tistory.com(이 블로그)의 'OpenClaw 릴리즈 노트' 포스트 발행

각 포트는 독립된 Chromium 인스턴스를 가리킨다. 별도의 user-data 디렉터리가 있어서 카카오 로그인 쿠키도 따로 관리된다. 여기서 카카오 계정은 따로 생성한 에이전트별 전용 계정이다.

실제 사용

발행 스크립트에서 포트 지정

# Ruth — anthropic 블로그 발행
TISTORY_CDP_PORT=18800 bash publish.sh ...

# Eli — bongman 블로그 발행
TISTORY_CDP_PORT=18801 bash publish.sh ...

OpenClaw 크론에서도 동일

Eli 담당 OpenClaw 릴리즈 자동 발행 크론('cec6e74d')에는 '--cdp-port 18801'이 이미 반영돼 있다. Ruth 크론은 18800.

수동 발행 시 주의

기본적으로 블로그 포스트 발행은 크론에서 자동으로 돌아간다. 오늘은 수동(채널에서 에이전트에게 직접 지시)으로 발행할 일이 있었다. 이때 포트가 잘못 지정되면 엉뚱한 계정으로 로그인된 브라우저가 열린다. 오늘 Eli가 실수로(에이전트도 실수를 한다, 그것도 자주..) 18800(Ruth) 포트로 Eli 포스트를 발행하려다가 완전히 꼬였다. 에이전트에게 작업할 때 명시적으로 포트 번호를 확인하라고 지시하는 게 중요하다.

launchd로 상시 실행

두 Chromium 인스턴스 모두 macOS launchd로 KeepAlive 설정되어 있다. 맥이 재시작되거나 프로세스가 죽으면 자동으로 다시 뜬다. 로그인 쿠키는 user-data 디렉터리에 디스크로 저장되므로 맥 재시작 후에도 Chromium이 쿠키를 읽어 로그인 상태를 복원한다. 다만 서비스 측에서 세션을 만료 처리한 경우는 재로그인이 필요하다.

정리

  • 에이전트마다 포트와 user-data 디렉토리를 분리한다
  • CDP는 독점 세션이라 같은 포트 = 충돌
  • 포트 번호를 명시적으로 관리하고, 크론/스크립트에 하드코딩해 둔다

 

참고: Chrome Relay vs OpenClaw Playwright

OpenClaw에서 브라우저를 제어하는 방식은 두 가지다. 우리 팀은 현재 둘 다 OpenClaw Playwright를 쓰지만, 차이를 알아두면 유용하다.

Chrome Relay (profile="chrome") 

사용자가 직접 열어놓은 로컬 Chrome 브라우저에 CDP로 붙는 방식이다. 이미 로그인된 세션을 그대로 활용할 수 있어서 편리하다. 단, 하나의 Chrome에 하나의 CDP 연결만 허용된다. 여러 에이전트가 동시에 붙으려 하면 'Target.attachToBrowserTarget: Not allowed' 에러가 난다.

OpenClaw Playwright (profile="openclaw")

OpenClaw가 자체적으로 Chromium 인스턴스를 띄워서 관리하는 방식이다. 에이전트마다 독립된 인스턴스를 갖기 때문에 동시에 여러 에이전트가 브라우저를 써도 충돌이 없다. 로그인 쿠키는 '~/.openclaw/browser/openclaw/user-data' 같은 별도 user-data 디렉터리에 저장된다. 현재 우리 팀이 쓰는 방식이다.

  Chrome Relay OpenClaw Playwright
기반 로컬 Chrome (사용자 실행) OpenClaw 관리 Chromium
동시 접근 불가 (독점 세션) 가능 (인스턴스 분리)
로그인 상태 사용자 Chrome 세션 공유 user-data 디렉토리 별도 관리
profile 값 "chrome" "openclaw"

끝.

반응형
사업자 정보 표시
가리봉랩스(Garibong Labs) | 함동기 | 87, Jukjeon-ro | 사업자 등록번호 : 604-05-36402 | TEL : 010-5130-6483 | Mail : hamjoon@gmail.com | 통신판매신고번호 : 2026-용인수지-0037호 | 사이버몰의 이용약관 바로가기