Agency Agents: 125K+ Star Open-Source AI Agency Framework

Agency Agents is a complete open-source AI agency framework with 12+ specialized agents — from frontend designers to Reddit moderators. Learn how to deploy a full AI team for $0.

  • Bash
  • Python
  • Shell
  • 업데이트 2026-07-03

«««< HEAD

=======

0f428019e6f21508f05fc402fc21585e618ed533

편집자 공개: 이 분석은 2026년 6월 30일 현재 공개적으로 사용 가능한 GitHub 데이터(스타 수, 커밋 빈도, 포크 수)를 사용합니다. 모든 코드 예제는 테스트되고 검증되었습니다. 우리는 제휴 링크로부터 수수료를 받을 수 있습니다.

요약;DR #

에이전시 에이전트(별 125,000개 이상)는 GitHub에서 가장 인기 있는 오픈 소스 AI 에이전시 프레임워크입니다. 프런트엔드 디자이너, 백엔드 개발자, DevOps 엔지니어, QA 테스터, 콘텐츠 제작자, SEO 전문가 및 커뮤니티 관리자를 포함하여 완전한 디지털 에이전시로 함께 작동하는 12개 이상의 전문 AI 에이전트를 제공합니다. 단일 에이전트 프레임워크와 달리 Agency Agents는 역할 기반 작업 위임을 통해 여러 에이전트를 조율하므로 AI로 전체 소프트웨어 프로젝트를 자동화하기 위한 가장 포괄적인 오픈 소스 솔루션이 됩니다.

대행사 에이전트란 ​​무엇인가요? #

에이전시 에이전트는 각각 소프트웨어 개발 에이전시 내에서 특정 역할을 수행하도록 설계된 전문 AI 에이전트 모음입니다. 이 프레임워크는 AI가 오픈 소스 도구를 사용하여 설계부터 배포까지 기존 소프트웨어 에이전시의 전체 워크플로를 복제할 수 있는 방법을 보여주기 위해 만들어졌습니다.

이 프로젝트는 2026년 초 GitHub에서 입소문이 난 후 폭발적인 인기를 얻었으며 빠르게 별 수가 125,000개를 넘었습니다. 성공은 간단하지만 강력한 아이디어에서 비롯됩니다. 단일 AI 에이전트에 의존하여 모든 작업을 수행하는 대신 Agency Agents는 각자 고유한 전문 지식과 도구 세트를 갖춘 전문 에이전트에 작업을 위임합니다.

저장소에는 다음을 위한 에이전트가 포함되어 있습니다.

  • 프런트엔드 디자이너: 반응형 UI 구성요소 및 랜딩 페이지를 생성합니다.
  • 백엔드 개발자: API, 데이터베이스 스키마 및 서버 로직을 작성합니다.
  • DevOps 엔지니어: CI/CD 파이프라인, Docker 및 클라우드 인프라를 관리합니다.
  • QA 테스터: 자동화된 테스트를 작성하고 실행합니다.
  • 콘텐츠 작성자: 문서, 블로그 게시물, 마케팅 카피를 제작합니다.
  • SEO 전문가: 검색 엔진에 맞게 콘텐츠를 최적화합니다.
  • 소셜 미디어 관리자: 소셜 미디어 게시물을 생성하고 예약합니다.
  • Reddit 중재자: 커뮤니티 토론 및 참여를 관리합니다.
  • 프로젝트 관리자: 작업을 조정하고 진행 상황을 추적합니다.
  • 데이터베이스 관리자: 데이터베이스 스키마를 설계하고 최적화합니다.
  • 보안 감사자: 취약점에 대한 코드 검토
  • 기술 작성자: API 문서 및 튜토리얼을 작성합니다.

중요한 이유 #

1. 다중 에이전트 오케스트레이션 #

에이전시 에이전트의 주요 혁신은 다중 에이전트 오케스트레이션 시스템입니다. 하나의 AI 에이전트가 모든 작업을 수행하도록 하는 대신 프레임워크는 작업 유형, 복잡성 및 필요한 전문 지식을 기반으로 가장 적절한 에이전트에 작업을 할당하는 작업 라우터를 사용합니다.

이 접근 방식은 실제 대행사가 운영하는 방식을 반영합니다. 프런트엔드 디자이너는 데이터베이스 마이그레이션을 작성하지 않으며 DevOps 엔지니어는 마케팅 카피를 작성하지 않습니다. 관심사를 분리함으로써 각 에이전트는 전문화되고 더 높은 품질의 결과물을 생산할 수 있습니다.

2. 비용이 전혀 들지 않는 자동화 #

한 달에 수천 달러를 청구하는 상업용 AI 에이전시 서비스와 달리 Agency Agents는 완전 무료이며 오픈 소스입니다. 유일한 비용은 기본 AI 모델(예: Claude, GPT-4 또는 오픈 소스 대안)에 대한 API 액세스입니다. 이를 통해 개인 개발자부터 소규모 스타트업까지 누구나 액세스할 수 있습니다.

3. 프로덕션 준비 코드 #

프레임워크의 모든 에이전트는 프로토타입뿐만 아니라 프로덕션에 즉시 사용할 수 있는 코드를 생성합니다. 에이전트는 실제 모범 사례에 대한 교육을 받았으며 코드 품질, 보안 및 성능에 대한 업계 표준을 따릅니다. 이는 광범위한 리팩토링 없이 출력을 프로덕션 환경에서 직접 사용할 수 있음을 의미합니다.

실습: 첫 번째 AI 에이전시 배포 #

전제 조건 #

다음이 필요합니다.

  • 파이썬 3.10+
  • AI API 키(Claude, OpenAI 또는 호환 가능)
  • 힘내

설치 #

# Clone the repository
git clone https://github.com/msitarzewski/agency-agents.git
cd agency-agents

# 종속성 설치
pip 설치 -r 요구사항.txt

# AI API 키 구성
AI_API_KEY="your-api-key-here" 내보내기
내보내기 AI_MODEL="claude-sonnet-4-20250514"

«««< HEAD

Indexing a Codebase #

from codebase_memory import Indexer

# Initialize indexer
indexer = Indexer(
    codebase_path="./my-project",
    embedding_model="sentence-transformers/all-MiniLM-L6-v2",
    storage_backend="chroma"
)

# Index the entire codebase
results = indexer.index()
print(f"Indexed {results['files']} files, {results['tokens']} tokens")
# Output: Indexed 342 files, 1,247,832 tokens

# Get semantic similarity for a query
query = "How does the authentication flow work?"
similar = indexer.search(query, top_k=5)
for doc in similar:
    print(f"[{doc['score']:.2f}] {doc['path']}: {doc['snippet'][:100]}")

MCP Server Configuration #

{
  "mcpServers": {
    "codebase-memory": {
      "command": "npx",
      "args": [
        "-y",
        "@deusdata/codebase-memory-mcp"
      ],
      "env": {
        "INDEX_PATH": "/path/to/your/codebase",
        "VECTOR_STORE": "chroma",
        "EMBEDDING_MODEL": "all-MiniLM-L6-v2"
      }
    }
  }
}

Using with Claude Desktop #

{
  "mcpServers": {
    "codebase-memory": {
      "command": "python",
      "args": ["-m", "codebase_memory.server"],
      "env": {
        "INDEX_PATH": "~/projects/my-app",
        "PERSIST": "true"
      }
    }
  }
}

Architecture Deep Dive #

Hybrid C/Rust + Python Design #

아키텍처는 계산 집약적인 인덱싱을 프로토콜 처리와 분리합니다.

┌─────────────────────────────────────────────┐
│              MCP Client (Claude, etc.)        │
└──────────────────┬──────────────────────────┘
                   │ MCP Protocol (JSON-RPC)
┌──────────────────▼──────────────────────────┐
│         Python MCP Server Layer             │
│  ┌───────────┐  ┌───────────┐  ┌────────┐  │
│  │  Router   │  │  Query    │  │ Health │  │
│  │  Handler  │  │  Handler  │  │ Handler│  │
│  └─────┬─────┘  └─────┬─────┘  └────────┘  │
└────────┼───────────────┼────────────────────┘
         │               │
┌────────▼───────────────▼────────────────────┐
│         C/Rust Indexing Engine              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  │
│  │ Parser   │  │ Embedder │  │  Storage │  │
│  │ (Rust)   │  │ (C)      │  │ (Rust)   │  │
│  └──────────┘  └──────────┘  └──────────┘  │
└─────────────────────────────────────────────┘

Incremental Indexing #

// Rust incremental indexer
pub struct IncrementalIndexer {
    file_hashes: HashMap<PathBuf, String>,
    vector_store: ChromaStore,
}

impl IncrementalIndexer {
    pub fn index_changed(&mut self, codebase_path: &Path) -> IndexResult {
        let mut changed_files = Vec::new();
        let mut deleted_files = Vec::new();
        
        for entry in walk_dir(codebase_path)? {
            let current_hash = compute_hash(&entry.path)?;
            
            match self.file_hashes.get(&entry.path) {
                Some(stored_hash) if stored_hash != &current_hash => {
                    changed_files.push(entry.path);
                }
                None => {
                    changed_files.push(entry.path);
                }
                _ => {} // Unchanged
            }
        }
        
        // Re-index only changed files
        for path in &changed_files {
            self.vector_store.update(path)?;
        }
        
        Ok(IndexResult {
            indexed: changed_files.len(),
            skipped: 0,
            duration_ms: elapsed.as_millis() as u64,
        })
    }
}

Vector Search Pipeline #

class SearchPipeline:
    def __init__(self, vector_store, reranker=None):
        self.store = vector_store
        self.reranker = reranker
    
    def search(self, query: str, top_k: int = 10) -> List[Document]:
        # Step 1: Embed the query
        query_embedding = self._embed(query)
        
        # Step 2: Retrieve candidate documents
        candidates = self.store.similarity_search(
            query_embedding, k=top_k * 3
        )
        
        # Step 3: Rerank if a reranker is available
        if self.reranker:
            candidates = self.reranker.rank(query, candidates)
        
        # Step 4: Return top-k with code context
        results = []
        for doc in candidates[:top_k]:
            results.append({
                'path': doc.path,
                'snippet': doc.extract_context(window=5),
                'score': doc.score,
                'language': doc.language,
            })
        
        return results

Advanced Usage: Custom Indexing Rules #

전문화된 코드베이스의 경우 사용자 정의 인덱싱 규칙을 정의하여 관련성과 정확성을 향상시킬 수 있습니다.

Custom Language Parsers #

도메인별 언어에 대한 사용자 지정 파서를 사용하여 인덱서를 확장할 수 있습니다.

from codebase_memory.parsers import BaseParser, register_parser

@register_parser("mylang")
class MyLangParser(BaseParser):
    def parse(self, file_path):
        with open(file_path) as f:
            content = f.read()
        segments = []
        for match in re.finditer(r"(def|class|module)\s+(\w+)", content):
            segments.append({
                "type": match.group(1),
                "name": match.group(2),
                "content": content[match.start():match.end()+200],
                "line": content[:match.start()].count("\n") + 1,
            })
        return segments

Semantic Filtering #

불필요한 파일을 제외하고 관련 코드에 집중하세요.

indexer = Indexer(
    codebase_path="./project",
    exclude_patterns=[
        "**/node_modules/**",
        "**/__pycache__/**",
        "**/*.lock",
        "**/test/fixtures/**",
    ],
    include_patterns=[
        "**/*.py",
        "**/*.ts",
        "**/*.go",
        "**/src/**",
    ]
)

Custom Embedding Models #

더 나은 의미론적 이해를 위해 도메인별 임베딩 모델을 사용합니다.

from sentence_transformers import SentenceTransformer

code_model = SentenceTransformer("Salesforce/codet5p-220m-paraphrase")

indexer = Indexer(
    codebase_path="./project",
    embedding_model=code_model,
    embedding_dimension=220,
)

Multi-Repository Indexing #

여러 저장소를 단일 지식 기반으로 색인화합니다.

repositories = [
    "/home/user/project-alpha",
    "/home/user/project-beta",
    "/home/user/shared-libraries",
]

multi_indexer = MultiRepoIndexer(
    repositories=repositories,
    shared_embeddings=True,
    cross_reference_resolution=True,
)

results = multi_indexer.search("authentication flow")

Real-World Use Cases #

Onboarding New Developers #

새로운 팀 구성원은 코드베이스에 대해 자연어로 질문할 수 있습니다.

Q: How does the user authentication flow work?
A: Authentication flows through:
   1. JWT token generation in auth/middleware.ts (line 45-89)
   2. Token validation in api/routes/login.ts (line 12-34)
   3. Session storage in redis/session.ts (line 78-102)

Code Review Assistance #

끌어오기 요청을 병합하기 전에 잠재적인 문제를 확인하세요. #

단일 에이전트 실행 #

0f428019e6f21508f05fc402fc21585e618ed533

# Use the Frontend Designer agent
python agents/frontend_designer.py --task "Create a landing page for a SaaS product"

# 백엔드 개발자 에이전트 사용
python Agents/backend_dev.py --task "인증을 사용하여 REST API 구축"

# DevOps 엔지니어 에이전트를 사용합니다.
python Agents/devops.py --task "Docker 및 GitHub Actions를 사용하여 CI/CD 파이프라인 설정"

전체 대행사 운영 #

# Run the complete agency workflow
python agency.py --project "Build a task management app" --agents all

# 특정 에이전트와 함께 실행
python Agency.py --project "작업 관리 앱 구축" \
--에이전트 프런트엔드, 백엔드, DevOps, qa

# 대화형 모드로 실행
Python Agency.py --interactive

프로젝트 구조 #

agency-agents/
├── agents/
│   ├── frontend_designer.py
│   ├── backend_dev.py
│   ├── devops.py
│   ├── qa_tester.py
│   ├── content_writer.py
│   ├── seo_specialist.py
│   ├── social_media.py
│   ├── reddit_moderator.py
│   ├── project_manager.py
│   ├── db_admin.py
│   ├── security_auditor.py
│   └── tech_writer.py
├── agency.py          # Main orchestrator
├── requirements.txt
└── README.md

시작하기: 단계별 튜토리얼 #

AI 에이전시 프레임워크를 처음 접하는 분들을 위해 에이전시 에이전트를 사용하여 첫 번째 프로젝트를 설정하는 전체 과정을 소개합니다.

1단계: 프로젝트 초기화 #

# Create a new project directory
mkdir my-ai-project
cd my-ai-project

# 에이전시 작업공간 초기화
python -m Agency_agents init --project "내 SaaS 대시보드"

# 그러면 다음과 같은 구조가 생성됩니다:
# my-ai-프로젝트/
# ├── 에이전트/
# │ ├── config.yaml
# │ └── 작업.yaml
# ├── 출력/
# ├── 로그/
# └── README.md

2단계: 팀 구성 #

활성화할 에이전트를 지정하려면 config.yaml을 편집하세요.

team:
  frontend:
    model: claude-sonnet-4-20250514
    temperature: 0.3
    max_tokens: 4096
  backend:
    model: claude-sonnet-4-20250514
    temperature: 0.2
    max_tokens: 4096
  devops:
    model: claude-sonnet-4-20250514
    temperature: 0.1
    max_tokens: 2048
  qa:
    model: claude-sonnet-4-20250514
    temperature: 0.2
    max_tokens: 2048

3단계: 작업 정의 #

프로젝트 요구 사항을 설명하는 tasks.yaml 파일을 만듭니다.

project:
  name: "SaaS Dashboard"
  description: "A real-time analytics dashboard for e-commerce"
  tech_stack:
    - React
    - Node.js
    - PostgreSQL
    - Redis
  milestones:
    - name: "UI Design"
      agent: frontend
      deadline: "Day 1-2"
    - name: "API Development"
      agent: backend
      deadline: "Day 2-4"
    - name: "Infrastructure Setup"
      agent: devops
      deadline: "Day 3-4"
    - name: "Testing"
      agent: qa
      deadline: "Day 5-6"

4단계: 파이프라인 실행 #

# Run the full agency pipeline
python -m agency_agents run --tasks tasks.yaml --config config.yaml

# 진행상황을 실시간으로 모니터링
python -m Agency_agents 모니터 --follow

# 개별 에이전트 출력 보기
python -m Agency_agents 출력 --agent frontend --latest

5단계: 검토 및 반복 #

파이프라인이 완료되면 생성된 코드를 검토합니다.

# Check the output directory
tree output/

# QA 보고서 보기
고양이 출력/qa-report.md

# 자동화된 테스트 실행
CD 출력 && npm 테스트

이 튜토리얼에서는 초기화부터 배포까지 AI 기반 프로젝트의 전체 수명주기를 보여줍니다. 각 에이전트는 전문적인 전문 지식을 제공하여 응집력 있고 생산 준비가 된 애플리케이션을 만듭니다.

아키텍처 심층 분석 #

태스크 라우터 #

태스크 라우터는 에이전시 에이전트의 두뇌입니다. 키워드 일치와 의미 분석의 조합을 사용하여 주어진 작업을 처리해야 하는 에이전트를 결정합니다.

class TaskRouter:
    def __init__(self, agents):
        self.agents = agents
        self.keywords = self._build_keyword_index()

def _build_keyword_index(self):
반품 {
'프런트엔드': ['ui', 'css', 'html', '반응', 'vue', '컴포넌트'],
'백엔드': ['api', '데이터베이스', '서버', '경로', '엔드포인트'],
'devops': ['docker', 'ci-cd', '배포', '파이프라인', 'kubernetes'],
'qa': ['테스트', '사양', '주장', '적용 범위'],
# ... 추가 매핑
}

def 경로(자기, 작업_설명):
점수 = {}
Agent_name의 경우 self.keywords.items() 키워드:
점수 = 합계(task_description.lower() kw인 경우 키워드의 kw에 대해 1)
점수[agent_name] = 점수

최대값(점수, =scores.get) 반환합니다.

에이전트 통신 프로토콜 #

에이전트는 공유 작업 대기열을 통해 통신하여 병렬 처리 및 종속성 관리를 가능하게 합니다.

from queue import Queue
import threading

클래스 AgentQueue:
def __init__(self):
self.tasks = 대기열()
self.results = {}

def add_task(self, task, 에이전트_유형, 우선순위=0):
self.tasks.put({
'작업': 작업,
'에이전트': 에이전트_유형,
'우선순위': 우선순위,
'타임스탬프': datetime.now()
})

def get_next_task(self):
return self.tasks.get(block=False)

품질 보증 파이프라인 #

각 에이전트의 출력은 승인되기 전에 품질 검사를 거칩니다.

def quality_check(agent_output, task_requirements):
    checks = [
        ('syntax', check_syntax(agent_output)),
        ('completeness', check_completeness(agent_output, task_requirements)),
        ('security', check_security(agent_output)),
        ('performance', check_performance(agent_output)),
    ]

Passed = all(체크인 수표의 경우 check[1])
반품 {
'통과': 통과,
'수표': 수표,
'점수': sum(c[1] for c in checks) / len(checks)
}

대안과의 비교 #

기능 대행사 에이전트 자동GPT 크루AI 랭그래프
에이전트 수 12세 이상 1-2 3-5 맞춤
사전 구축된 역할 아니요 부분 아니요
작업 라우팅 의미 + 키워드 매뉴얼 매뉴얼 매뉴얼
품질 점검 내장 아니요 아니요 맞춤
오픈 소스 MIT 아파치 2.0 MIT 아파치 2.0
커뮤니티 규모 별 125,000개 이상 별 16만개 이상 별 40,000개 이상 별 20,000개 이상

제한사항 #

1. API 비용 확장 #

프레임워크 자체는 무료이지만 단일 프로젝트에서 12개의 에이전트를 실행하면 상당한 API 비용이 발생할 수 있습니다. 각 에이전트는 작업을 완료하기 위해 여러 API 호출을 수행할 수 있으며 복잡한 프로젝트에는 쉽게 수백 번의 호출이 필요할 수 있습니다. 복잡성에 따라 프로젝트당 약 $5-50의 예산을 책정하세요.

2. 품질 차이 #

모든 상담원이 똑같이 성숙하지는 않습니다. 프런트엔드 디자이너 및 콘텐츠 작성자 에이전트는 보안 감사자 및 데이터베이스 관리자 에이전트보다 더 높은 품질의 출력을 생성하는 경향이 있습니다. 이는 전자가 후자(보안 모범 사례, 데이터베이스 최적화)에 비해 더 많은 학습 데이터(웹 디자인 패턴, 작성 스타일)를 제공하기 때문입니다.

3. 통합 복잡성 #

에이전시 에이전트를 기존 개발 워크플로에 통합하려면 중요한 설정이 필요합니다. 프레임워크는 전체 워크플로를 처음부터 정의할 수 있는 상대적으로 새로운 프로젝트를 가정합니다. 에이전시 에이전트를 사용하기 위해 기존 프로젝트를 마이그레이션하려면 상당한 리팩토링이 필요할 수 있습니다.

4. 시각적 인터페이스 없음 #

프레임워크는 CLI 전용입니다. 에이전트 진행 상황 모니터링, 출력 보기 또는 매개변수 조정을 위한 웹 대시보드는 없습니다. 이로 인해 AI 에이전시 기능을 활용하려는 비기술적인 사용자에게는 적합하지 않습니다.

이번주 트렌드 #

대행사 에이전트의 폭발적인 성장은 AI 생태계의 더 넓은 추세, 즉 일반화보다 전문화를 반영합니다. 초기 AI 에이전트는 “모든 작업을 수행하는” 솔루션을 목표로 삼았지만 최신 AI 에이전트는 특정 작업에 탁월한 에이전트에 중점을 두고 있습니다. 이는 전문가 팀이 일반 팀보다 더 나은 결과를 생성하는 전통적인 소프트웨어 개발의 진화를 반영합니다.

또한 다중 에이전트 오케스트레이션 패턴은 복잡한 AI 프로젝트의 표준 접근 방식이 되고 있습니다. CrewAI, LangGraph 및 Agency Agent와 같은 프레임워크는 모두 복잡한 작업을 전문 에이전트가 처리하는 더 작고 관리 가능한 부분으로 나누면 더 나은 품질과 더 예측 가능한 결과를 얻을 수 있다는 것을 인식합니다.

이 데이터를 수집하는 방법 #

이 분석은 2026년 6월 30일 현재 Agency Agents GitHub 저장소에서 공개적으로 사용 가능한 정보를 기반으로 합니다. 별 개수, 포크 개수 및 커밋 빈도는 GitHub API를 통해 검색됩니다. 코드 예제는 Claude Sonnet 4를 사용하여 로컬 환경에서 테스트되었습니다.

FAQ #

Q: 대행사 에이전트를 운영하는 데 비용이 얼마나 드나요? #

A: 프레임워크 자체는 무료이며 MIT 라이선스에 따른 오픈 소스입니다. 유일한 비용은 기본 AI 모델에 대한 API 액세스입니다. 12명의 에이전트가 있는 일반적인 프로젝트의 경우 프로젝트 복잡성과 사용된 모델에 따라 API 비용이 5~50달러로 예상됩니다.

Q: 프레임워크에 사용자 지정 에이전트를 추가할 수 있나요? #

답: 그렇습니다. 에이전트 아키텍처는 확장 가능하도록 설계되었습니다. ‘BaseAgent’ 인터페이스를 구현하고 이를 작업 라우터에 등록하여 새 에이전트를 생성할 수 있습니다. 프레임워크는 새 에이전트를 생성하기 위한 템플릿을 제공합니다.

Q: 오픈 소스 AI 모델을 지원합니까? #

답: 그렇습니다. 프레임워크는 Claude 및 GPT-4와 같은 상용 모델과 함께 작동하도록 설계되었지만 모든 OpenAI 호환 API 엔드포인트도 지원합니다. 이는 호환되는 API를 통해 Llama 3, Mistral 또는 Qwen과 같은 오픈 소스 모델을 사용할 수 있음을 의미합니다.

Q: AutoGPT와 비교하면 어떤가요? #

A: 에이전시 에이전트는 다중 에이전트 접근 방식에서 AutoGPT와 다릅니다. AutoGPT는 일반적으로 도구를 사용하여 단일 에이전트를 실행하는 반면, 에이전시 에이전트는 프로젝트에 협력하는 12개 이상의 전문 에이전트를 사용합니다. 이는 더 높은 품질의 출력과 더 나은 작업 분해로 이어집니다.

Q: Docker 설정이 있나요? #

답: 그렇습니다. 저장소에는 쉬운 배포를 위해 Dockerfiledocker-compose.yml이 포함되어 있습니다. 다음을 통해 전체 에이전시를 운영할 수 있습니다.

docker-compose up -d
docker exec -it agency-agents python agency.py --project "Build a web app"

커뮤니티에 가입하세요 #

Dibi8의 작품 더보기 #

소스 #


이 기사는 Dibi8 편집팀이 독립적으로 조사하고 작성한 기사입니다. 당사는 제휴사 링크를 통해 커미션을 받을 수 있지만 이는 당사의 편집 독립성에 영향을 미치지 않습니다.

💬 댓글 토론