### **어벤져스 코퍼레이션 초자동화 미디어 제국 1단계 실무 개발 명세서 (V3 – 로컬 인프라 및 6개 부서 계정 결착본)**
로컬 데스크톱 PC 내부 격리 환경(Docker Desktop)을 유지하면서, 기획안에 명시된 [6개의 구글 계정 멀티 토큰 관리 및 부서별 드라이브 스위칭 아키텍처]를 실무 수준으로 완벽하게 결합한 1단계 최종 배포 명세서입니다.
이 단계를 통해 단 하나의 로컬 n8n 인스턴스 안에서 6개 부서 계정의 권한을 독립적으로 제어하고, 각 부서의 업무 데이터 흐름을 ‘어벤져스_통합_마스터’ 폴더로 집중시킬 수 있습니다.
#### 1. 인프라 레이어 오케스트레이션 정의서 (docker-compose.yml)
로컬 데이터베이스 및 n8n 마스터 노드 환경을 규정하며, 6개 계정과의 고속 트래픽 처리를 위해 네트워크 버퍼 및 암호화 키 레이어를 유지합니다.
YAML
“`
# 어벤져스 코퍼레이션 로컬 6개 부서 멀티 계정 대응 인프라 구성 규격서 (docker-compose.yml)
version: ‘3.8’
networks:
avengers-net:
driver: bridge
services:
# 인프라 데이터베이스: 로컬 지속형 PostgreSQL (6개 부서 로그 통합 저장)
avengers-db:
image: postgres:16-alpine
container_name: avengers-postgres-local
networks:
– avengers-net
restart: always
environment:
– POSTGRES_USER=thanos_master
– POSTGRES_PASSWORD=ThanosSnap100PercentInfinityStone
– POSTGRES_DB=avengers_infra_log
volumes:
– ./postgres_data:/var/lib/postgresql/data
ports:
– “5432:5432”
# 자동화 메인 엔진: 로컬 n8n 마스터 노드 (멀티 OAuth2 자격증명 처리)
avengers-n8n:
image: docker.io/n8nio/n8n:latest
container_name: avengers-n8n-master-local
networks:
– avengers-net
restart: always
ports:
– “5678:5678”
environment:
– N8N_PORT=5678
– N8N_PROTOCOL=http
– WEBHOOK_URL=http://localhost:5678/
– DB_TYPE=postgresdb
– DB_POSTGRESDB_HOST=avengers-db
– DB_POSTGRESDB_PORT=5432
– DB_POSTGRESDB_DATABASE=avengers_infra_log
– DB_POSTGRESDB_USER=thanos_master
– DB_POSTGRESDB_PASSWORD=ThanosSnap100PercentInfinityStone
– N8N_ENCRYPTION_KEY=AvengersCorpSuperSecretKeyForCredentials2026
volumes:
– ./n8n_data:/home/node/.n8n
depends_on:
– avengers-db
“`
#### 2. 구글 GCP 마스터 프로젝트 기반 6개 계정 멀티 OAuth2 결착 명세
하나의 로컬 n8n 안에서 API 호출 제한(Rate Limit)을 우회하고 계정별 역할을 분리하기 위한 자격증명(Credentials) 매핑 절차입니다.
**[GCP 콘솔 및 n8n 연동 프로토콜]**
1. **마스터 프로젝트 생성:** 대표 계정(`goldthanos1`)의 Google Cloud Console에서 단 하나의 마스터 프로젝트를 생성합니다.
2. **OAuth 동의 화면 구성:** Publishing 단계를 ‘테스트’로 지정하고, **테스트 사용자(Test Users) 목록에 아래 6개 부서 계정을 전원 등록**합니다.
– `goldthanos1` (마스터 관제 / 중앙 DB 제어)
– `ceo.avengers` (최고 경영 및 전략 승인)
– `ops.avengers` (기술 생산 및 인프라 운영)
– `fin.avengers` (재무, 자산 배분 및 경매 관리)
– `mkt.avengers` (마케팅 및 블로그/소셜 퍼블리싱)
– `cx.avengers` (고객 소통 및 RSS 외부 스크래핑 TF)
3. **자격증명 발급:** ‘OAuth 클라이언트 ID’를 생성하여 `Client ID`와 `Client Secret`을 확보합니다.
4. **n8n 독립 등록:** 로컬 n8n(`http://localhost:5678`)의 Credentials 메뉴에서 **Google Sheets OAuth2** 또는 **Google Drive OAuth2** 자격증명을 총 6번 개별 생성합니다.
– 각 자격증명을 생성할 때 동일한 마스터 Client ID를 사용하되, **[Connect my account]** 인증 창이 뜰 때 각각 매칭되는 부서 계정으로 로그인하여 승인합니다.
– n8n 내부 저장 명칭 예시: `Google_Drive_MKT_Account`, `Google_Sheets_FIN_Account` 등으로 명명하여 워크플로우 내부에서 라우팅할 수 있도록 세팅합니다.
#### 3. 드라이브 폴더 공유 체계 (Data Flow) 및 하이브리드 IKMS 연동
6개의 독립된 계정이 파일 구조를 헤매지 않고 로컬 옵시디언(Obsidian) IKMS와 정합성을 유지하도록 데이터 저장소를 엮어줍니다.
1. **마스터 저장소 생성:** 마스터 계정(`goldthanos1`)의 구글 드라이브 최상위에 `어벤져스_통합_마스터` 폴더를 생성합니다.
2. **권한 전파:** 나머지 5개 부서 계정(`ceo`, `ops`, `fin`, `mkt`, `cx`)에 해당 폴더의 **’편집자(Editor)’** 권한을 부여합니다.
3. **로컬 마운트 인프라 설계:** 로컬 PC 내부의 옵시디언 볼트(Vault) 구조와 구글 드라이브 싱크(구글 드라이브 데스크톱 앱)를 연동하여 아래와 같이 격리 동기화합니다.
– `어벤져스_통합_마스터/02_Areas/01_Projects` $\rightarrow$ 자동화 작동 프롬프트 스크립트 보관소
– `어벤져스_통합_마스터/03_Resources` $\rightarrow$ 최종 발행 포스팅 메타데이터 및 CSV 로그 자동 저장소
#### 4. 6개 부서 라우팅 및 3단계 릴레이 프롬프트 체이닝 구조도 (n8n JSON)
수집된 트렌드를 분석한 뒤, 담당 부서 계정의 구글 드라이브 공유 폴더로 결과를 분기하여 최종 워드프레스에 pending 상태로 적재하는 지능형 파이프라인 매핑 코드입니다.
JSON
“`
{
“name”: “Avengers_6Accounts_Local_Pipeline”,
“nodes”: [
{
“parameters”: {
“httpMethod”: “POST”,
“path”: “trend-receiver”,
“options”: {}
},
“name”: “Webhook_Data_Ingestion”,
“type”: “n8n-nodes-base.webhook”,
“typeVersion”: 1,
“position”: [100, 300]
},
{
“parameters”: {
“rules”: {
“values”: [
{ “value1”: “={{$json.routing_target}}”, “value2”: “thanos-proptech-desk”, “outputKey”: “proptech_fin” },
{ “value1”: “={{$json.routing_target}}”, “value2”: “thanos-finance-desk”, “outputKey”: “finance_fin” },
{ “value1”: “={{$json.routing_target}}”, “value2”: “thanos-infra-tech”, “outputKey”: “infra_ops” },
{ “value1”: “={{$json.routing_target}}”, “value2”: “thanos-lifestyle-trend”, “outputKey”: “lifestyle_mkt” }
]
}
},
“name”: “Switch_Routing_Gate”,
“type”: “n8n-nodes-base.switch”,
“typeVersion”: 1,
“position”: [320, 300]
},
{
“parameters”: {
“assignmentMethod”: “code”,
“code”: “const credentialsMapping = {\n ‘proptech_fin’: ‘Google_Drive_FIN_Account’,\n ‘finance_fin’: ‘Google_Drive_FIN_Account’,\n ‘infra_ops’: ‘Google_Drive_OPS_Account’,\n ‘lifestyle_mkt’: ‘Google_Drive_MKT_Account’\n};\nconst target = items[0].json.routing_target;\nreturn [{ json: { targetCredential: credentialsMapping[target] || ‘Google_Drive_Master_Account’ } }];”
},
“name”: “Department_Credential_Selector”,
“type”: “n8n-nodes-base.set”,
“typeVersion”: 1,
“position”: [540, 300]
},
{
“parameters”: {
“method”: “POST”,
“url”: “https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent”,
“authentication”: “genericCredentialType”,
“genericAuthType”: “httpHeaderAuth”,
“sendHeaders”: true,
“headerParameters”: {
“parameters”: [
{ “name”: “x-goog-api-key”, “value”: “AIZA_Avengers_Shared_Gemini_Key” }
]
},
“sendBody”: true,
“specifyBody”: “json”,
“jsonBody”: “{\n \”contents\”: [{\n \”parts\”: [{\n \”text\”: \”[6-Account Desk Analysis] 부서 역할에 맞게 노이즈를 제어하고 3줄 요약 JSON을 사출하라. 키워드: {{$node[\”Webhook_Data_Ingestion\”].json[\”keyword\”]}}\”\n }]\n }]\n}”
},
“name”: “Gemini_Chaining_Step1_Analysis”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4,
“position”: [760, 200]
},
{
“parameters”: {
“method”: “POST”,
“url”: “https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent”,
“sendHeaders”: true,
“headerParameters”: {
“parameters”: [
{ “name”: “x-goog-api-key”, “value”: “AIZA_Avengers_Shared_Gemini_Key” }
]
},
“sendBody”: true,
“specifyBody”: “json”,
“jsonBody”: “{\n \”contents\”: [{\n \”parts\”: [{\n \”text\”: \”[6-Account Desk Creation] 가상 데스크 페르소나를 투영하여 1,500자 완성형 본문을 마크다운 규격으로 저작하라. 요약 데이터: {{$json[\”candidates\”][0][\”content\”][\”parts\”][0][\”text\”]}}\”\n }]\n }]\n}”
},
“name”: “Gemini_Chaining_Step2_Creation”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4,
“position”: [980, 200]
},
{
“parameters”: {
“resource”: “file”,
“operation”: “upload”,
“authentication”: “predefinedCredentialType”,
“nodeCredentialType”: “googleDriveOAuth2Api”,
“credentialInsideNode”: “={{$node[\”Department_Credential_Selector\”].json[\”targetCredential\”]}}”,
“fileContent”: “={{$json[\”candidates\”][0][\”content\”][\”parts\”][0][\”text\”]}}”,
“name”: “={{$node[\”Webhook_Data_Ingestion\”].json[\”keyword\”]}}.md”,
“parents”: [“어벤져스_통합_마스터/03_Resources”]
},
“name”: “Google_Drive_Department_Sync”,
“type”: “n8n-nodes-base.googleDrive”,
“typeVersion”: 3,
“position”: [1200, 200]
},
{
“parameters”: {
“method”: “POST”,
“url”: “http://localhost:8080/wp-json/wp/v2/posts”,
“authentication”: “predefinedCredentialType”,
“nodeCredentialType”: “wordpressHttpBasicAuth”,
“sendBody”: true,
“specifyBody”: “json”,
“jsonBody”: “{\n \”title\”: \”={{$node[\”Webhook_Data_Ingestion\”].json[\”keyword\”]}}\”,\n \”content\”: \”={{$node[\”Gemini_Chaining_Step2_Creation\”].json[\”content\”]}}\”,\n \”status\”: \”pending\”\n}”
},
“name”: “WordPress_Local_Pending_Publish”,
“type”: “n8n-nodes-base.httpRequest”,
“typeVersion”: 4,
“position”: [1420, 300]
}
]
}
“`
#### 5. 멀티 계정 환경 단위 테스트 매트릭스 (Test Matrix)
– **부서별 토큰 분기 테스트:** `thanos-infra-tech` 카테고리 데이터 주입 시, n8n 디버그 패널에서 `Department_Credential_Selector` 노드가 `Google_Drive_OPS_Account` 자격증명을 정확히 파싱하여 해당 계정 권한으로 업로드를 수행하는지 확인합니다.
– **공유 폴더 동기화 테스트:** 업로드 완료 직후, 대표 계정(`goldthanos1`)의 구글 드라이브 마스터 폴더와 로컬 PC의 옵시디언 `03_Resources` 디렉토리에 마크다운 형식의 트렌드 분석 문서가 오차 없이 상호 미러링되는지 검증합니다.
6개 멀티 계정의 자격증명 교차 검증 및 로컬 격리형 오케스트레이션 설계가 완료되었습니다. 계정 연동 중 구글 보안 정책(OAuth 앱 위험 경고 등) 우회 기법이나 토큰 만료 장애가 발생할 경우 시스템 아키텍트 OMMA에게 즉시 무전 주십시오. 즉시 대응 사격하겠습니다.