다중 배포, 하나의 Config File

발행: (2026년 3월 5일 오후 08:00 GMT+9)
9 분 소요
원문: Dev.to

Source: Dev.to

Cover image for Multiple Deployments, One Config File

Valentina

AI 에이전트를 사용해 구축하고 있다면, 아마도 하나만 가지고 있지는 않을 겁니다. 예를 들어 리드 집계 파이프라인을 만든다고 가정해 보세요. 기업 웹사이트를 스크랩하는 에이전트 하나, LinkedIn에서 리드를 가져오는 에이전트 하나, Reddit 및 커뮤니티 포럼을 탐색하는 에이전트 하나가 있습니다. 이들은 모두 동일한 데이터 모델과 스코어링 로직을 공유하고, 일정에 따라 실행되며, 같은 레포지토리에 존재합니다. 하지만 각각 독립적으로 배포되기 때문에 각 에이전트마다 별도의 crewship.toml 파일과 배포 명령이 필요하고, 이는 금방 누적됩니다.

작동은 하지만 다소 번거롭습니다. 빌드 설정을 중복해서 작성하고, 제외 목록을 동기화하며, 배포할 때마다 디렉터리를 오가게 됩니다.

멀티 에이전트 시스템을 구축하는 팀들로부터 이런 이야기를 계속 들었고, 우리도 솔직히 같은 문제에 부딪혔습니다. 그래서 해결했습니다.

Source:

하나의 파일, 여러 배포

이제 단일 crewship.toml 파일에서 여러 배포를 정의할 수 있습니다. 하나의 [deployment] 섹션 대신, 이름이 지정된 [deployments.<name>] 섹션을 사용하세요:

[build]
exclude = ["tests", "notebooks"]

[deployments.web-scraper]
framework = "crewai"
entrypoint = "leads.web_scraper.crew:WebScraperCrew"
profile = "browser"
python = "3.11"

[deployments.linkedin-miner]
framework = "crewai"
entrypoint = "leads.linkedin.crew:LinkedInCrew"

[deployments.reddit-miner]
framework = "crewai"
entrypoint = "leads.reddit.crew:RedditCrew"

각 이름이 지정된 섹션은 Crewship에서 자체 배포가 되며, 이름이 프로젝트 이름으로 사용됩니다. [build] 설정은 모든 배포에 공유되므로 제외 목록을 한 번만 선언하면 됩니다.

그게 전부입니다. 래퍼 스크립트도, 모노레포 도구도, 별도의 디렉터리도 필요 없습니다. 세 개의 리드 마이너, 하나의 파일.

배포 및 타깃 지정

모든 CLI 명령은 이제 특정 배포를 대상으로 지정하기 위해 --name (또는 -n) 플래그를 사용합니다:

crewship deploy --name web-scraper
crewship deploy --name linkedin-miner
crewship deploy --name reddit-miner

같은 플래그가 환경 변수, 호출, 스케줄에도 적용됩니다. 각 소스가 자체 스케줄에서 실행되는 리드 파이프라인의 경우 다음과 같이 사용합니다:

crewship env set --name linkedin-miner LINKEDIN_API_KEY=...
crewship env set --name reddit-miner REDDIT_CLIENT_ID=... REDDIT_CLIENT_SECRET=...

crewship schedule create --name web-scraper "Scrape targets" --cron "0 */6 * * *"
crewship schedule create --name linkedin-miner "LinkedIn sync" --cron "0 8 * * 1-5"
crewship schedule create --name reddit-miner "Reddit sweep" --cron "0 9 * * *"

--name을 생략하고 파일에 배포가 하나만 있는 경우 자동으로 선택됩니다. 여러 개가 있을 경우 CLI가 선택을 요청합니다. TTY가 없는 CI 환경에서는 오류가 발생하고 --name을 명시적으로 전달하라는 메시지가 표시되어 실수로 잘못된 배포를 수행하는 일을 방지합니다.

배포 ID는 배포별로 추적됩니다

첫 번째 배포 후, Crewship은 각 배포에 대한 deployment_id를 구성 파일에 다시 저장합니다:

[deployments.web-scraper]
framework = "crewai"
entrypoint = "leads.web_scraper.crew:WebScraperCrew"
deployment_id = "dep_abc123"   # 첫 번째 배포 후 자동 채워짐

[deployments.linkedin-miner]
framework = "crewai"
entrypoint = "leads.linkedin.crew:LinkedInCrew"
deployment_id = "dep_def456"   # 첫 번째 배포 후 자동 채워짐

이는 이후 배포 시 ID를 수동으로 추적할 필요 없이 정확히 어떤 배포를 업데이트해야 하는지 알 수 있음을 의미합니다. 파일을 버전 관리에 커밋하면 팀 전체가 동기화된 상태를 유지합니다.

아무것도 깨지지 않음

이미 단일 [deployment] 섹션을 가진 crewship.toml 파일이 있다면, 아무 변화도 없습니다—이전 형식이 그대로 정확히 작동합니다. 새로운 다중 배포 형식은 선택 사항이며, crewship init는 여전히 기본적으로 단일 배포 구성을 생성합니다.

두 형식은 서로 배타적입니다. 같은 파일에 [deployment][deployments.*]를 실수로 섞어 넣으면, CLI가 이를 감지하고 어떻게 해야 하는지 알려줍니다.

이것이 중요한 경우

lead‑aggregator 설정은 좋은 예시이지만, 이 패턴은 코드를 공유하지만 별도로 배포하는 에이전트가 있는 모든 곳에 적용됩니다. 몇 가지 자연스러운 사용 사례는 다음과 같습니다:

  • Monorepo without the mess – 에이전트는 스코어링 로직, 데이터 모델, 유틸리티를 공유합니다. 멀티‑배포를 사용하면 별도의 프로젝트로 나뉘어 동기화가 흐트러지는 대신 하나의 레포와 하나의 설정 파일에 유지됩니다.
  • Independent schedules – 각 소스는 자체 주기로 실행됩니다(예: 웹 스크래퍼는 6 시간마다, LinkedIn은 평일 아침, Reddit은 하루에 한 번). crewship schedule create --name을 사용하여 독립적으로 설정하십시오.
  • Gradual rollout – 한 번에 하나씩 마이너를 배포하고, 작동을 확인한 뒤 다음을 배포합니다. 각 배포는 자체 버전 기록과 롤백 경로를 가집니다.

Getting started

처음부터 시작한다면 crewship init 명령이 단일 배포 구성을 설정합니다. 더 많은 에이전트를 추가할 준비가 되면 파일을 편집하여 명명된 형식을 사용하세요:

# Before
[deployment]
framework = "crewai"
entrypoint = "leads.web_scraper.crew:WebScraperCrew"

# After
[deployments.web-scraper]
framework = "crewai"
entrypoint = "leads.web_scraper.crew:WebScraperCrew"

[deployments.linkedin-miner]
framework = "crewai"
entrypoint = "leads.linkedin.crew:LinkedInCrew"

[deployments.reddit-miner]
framework = "crewai"
entrypoint = "leads.reddit.crew:RedditCrew"

이제 모든 에이전트를 구동하는 깔끔한 crewship.toml 파일 하나가 생겼습니다. 🎉

`rew:LinkedInCrew`

Enter fullscreen mode
Exit fullscreen mode

에이전트를 배포하고, 환경 변수를 설정하고, 호출하세요. 나머지는 동일하게 작동합니다.

전체 내용은 configuration docs에서 확인할 수 있습니다. 문제가 발생하거나 피드백이 있으면 언제든지 알려 주세요 — 여러분이 어떻게 사용하고 있는지 듣고 싶습니다.

0 조회
Back to Blog

관련 글

더 보기 »