23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
개발 도구에 AI를 집어넣는 과정에서 사용자의 명시적 동의 없이 권한을 넓히거나 외부 스크립트를 설치하는 일이 벌어지고 있습니다. AI 편의성을 명목으로 개발 환경의 제어권을 넘겨주는 일이 늘어나면서, 조직 차원에서는 어떤 데이터를 외부에 노출하고 어떤 API 요청을 허용할지 명확히 통제해야 하는 과제를 맞이했습니다. AI 기능을 켜두기만 하면 알아서 실무를 도와줄 것이라는 기대는 보안 위험과 직결됩니다.
AI 서비스와 개발 도구가 어디까지 권한을 가져가는지, 그리고 표준 규약인 Model Context Protocol(MCP, 모델 맥락 프로토콜)을 활용해 이 경계를 어떻게 제어할 수 있는지 살펴보겠습니다.
개발 환경에서 쓰이는 주요 AI 도구들이 사용자 알림 없이 옵션을 켜거나 외부 플러그인을 임의로 설치하는 사례가 잇따르고 있습니다.
OpenAI가 Codex 대화의 모델 학습 사용을 알림 없이 다시 활성화한 정황이 이용자 제보로 확인되었습니다. 이전에 지식재산 유출을 막기 위해 데이터 공유 설정을 끄고 사용해 오던 환경에서, ChatGPT 데이터 제어 설정의 'Improve the model for everyone' 항목이 사용자의 재동의 없이 활성화되어 있던 것으로 나타났습니다.
유사한 사례로 Postman이 동의 없이 Codex와 Claude Code 플러그인을 자동 설치한 현상도 보고되었습니다. macOS 환경에서 Postman을 실행한 뒤 Codex와 Claude Code 플러그인, 그리고 Postman CLI가 기기에 자동으로 추가되었습니다. 특히 Codex 시작 훅(hook)에 일반적인 API 작업 시 Postman 스킬을 우선 사용하도록 지시하는 설정과, 실행 프로그램이 이 시작 훅을 스스로 신뢰하도록 등록하는 로직까지 포함되어 있었습니다.
[Postman 자동 설치 스크립트 실행 흐름]
1. macOS용 Postman 앱 실행
2. 백그라운드에서 Postman CLI 및 Codex/Claude Code 플러그인 임의 설치
3. Codex 시작 훅(~/.codex/hooks)에 Postman 우선 사용 명령어 주입
4. 해당 시작 훅을 신뢰 시스템 목록에 자동 등록
이 두 가지 소식은 개발 환경의 자동화가 사용자 통제권을 넘어서는 현상을 보여줍니다. 원문은 원격 MCP 설정 시도가 실패하여 직접적인 데이터 유출로까지 이어지지는 않았다고 밝히고 있습니다. 하지만 사용자가 인지하지 못한 사이에 로컬 개발 도구의 실행 명령어가 수정되고 데이터 공유 설정이 바뀌는 것은 보안상 심각한 위협입니다.
해석하자면, 편의성을 명목으로 단행되는 자동 업데이트나 기본 옵션 변경이 조직의 데이터 보호 정책을 무력화할 수 있습니다.
개발 실무에서는 관리자가 UI 설정창에만 의존하지 않고, 사내 네트워크 단에서 outbound(외부 나가는) 요청 로그를 주기적으로 점검해야 합니다. 개발 도구가 로컬 환경에 어떤 바이너리나 훅 스크립트를 추가하는지 감시하는 프로세스 모니터링 체계가 필요합니다.
이러한 무단 데이터 재활성화 현상에 대해, OpenAI의 옵션 변경은 시스템 업데이트 과정에서 발생한 리셋일 수 있으므로 사용자는 개인정보 관리 페이지를 통해 상시 모니터링해야 합니다. 따라서 이는 아직 지켜볼 단계입니다. 한편 Postman의 임의 플러그인 설치는 개발 생산성 향상이라는 명분에 비해 보안 위험이 훨씬 큽니다. 이는 개발 편의성 측면에서 과대평가된 접근 방식입니다.
개발 환경 내 무분별한 훅 삽입이나 자율 동작이 일으키는 문제를 막으려면, LLM(대형 언어 모델)이 외부 데이터 및 API와 소통할 때 표준 명세를 거치도록 제한해야 합니다. 이에 대한 대안으로 주목받는 것이 Model Context Protocol(MCP)입니다. MCP는 AI 모델이 외부 시스템의 데이터와 기능을 안전하게 불러올 수 있도록 연결 통로를 규격화하는 인터페이스 규약입니다.
당근의 국내 최초 광고 MCP 출시 사례는 외부 AI가 서비스 데이터에 접근하는 통로를 명시적 표준으로 제한한 대표적 예시입니다. 기존에는 AI 도구가 특정 서비스의 정보를 조회하려면 별도 플러그인을 로컬 환경에 설치하거나 커스텀 API를 호출해야 했습니다. 당근은 광고주가 Claude와 같은 AI 서비스에서 계정 정보와 광고 성과 데이터를 조회할 수 있도록 인터페이스를 MCP 표준으로 작성해 공개했습니다.
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
// 당근 광고 성과 조회를 위한 MCP 서버 정의
const server = new Server(
{
name: "daangn-ad-mcp",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// 노출할 도구(Tool) 목록 정의
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_ad_performance",
description: "지난주 당근 광고 계정의 성과 데이터를 조회합니다.",
inputSchema: {
type: "object",
properties: {
accountId: { type: "string", description: "광고 계정 ID" },
startDate: { type: "string", description: "조회 시작일 (YYYY-MM-DD)" },
endDate: { type: "string", description: "조회 종료일 (YYYY-MM-DD)" },
},
required: ["accountId", "startDate", "endDate"],
},
},
],
};
});
// 실제 도구 실행 핸들러
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_ad_performance") {
const { accountId, startDate, endDate } = request.params.arguments as {
accountId: string;
startDate: string;
endDate: string;
};
// 명시된 엔드포인트와 인자만 사용하여 내부 API 호출
const performanceData = await fetchAdPerformance(accountId, startDate, endDate);
return {
content: [
{
type: "text",
text: JSON.stringify(performanceData),
},
],
};
}
throw new Error("요청한 도구를 찾을 수 없습니다.");
});
async function fetchAdPerformance(accountId: string, startDate: string, endDate: string) {
// 실제 광고 시스템 백엔드 통신 로직
return { accountId, impressions: 15000, clicks: 450, cost: 32000 };
}
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main().catch(console.error);
이 코드는 LLM이 임의로 개발자의 기기나 외부 엔드포인트에 접근하는 대신, 정해진 JSON-RPC 기반 스키마 규약 안에서만 데이터를 요청하도록 제한하는 방식을 보여줍니다.
해석하자면, Postman처럼 로컬 실행 환경에 몰래 훅을 심어 권한을 확장하는 방식은 위험하지만, MCP처럼 표준화된 명세를 사용하는 방식은 AI가 접근 가능한 범위(inputSchema, tools)를 개발자가 서버 코드 수준에서 완전히 제어할 수 있게 해줍니다.
표 1. 로컬 플러그인·훅 방식과 MCP 표준 방식의 권한 통제 비교
inputSchema, tools를 서버 코드에서 제어실무에서 달라지는 점은 명확합니다. 임의의 3사 AI 플러그인을 개별 설치하는 대신 사내 MCP 게이트웨이를 구축하면, LLM이 수행할 수 있는 동작과 호출 범위를 한곳에서 관리할 수 있습니다. 요청 파라미터 검증과 로깅을 중앙에서 통제할 수 있어 보안 사고를 미연에 방지합니다.
당근이 도입한 MCP 방식은 AI 서비스 연결의 투명성과 통제력을 동시에 확보할 수 있는 대안입니다. 데이터 접근 권한을 안전하게 격리하려는 팀이라면 지금 써볼 만합니다.
AI 도구를도입할 때는 자동화의 편리함 뒤에 은폐된 접근 권한을 최소화하는 조치가 필요합니다. 개발 도구가 로컬 파일 시스템이나 다른 CLI 환경을 무단으로 변경하지 못하도록 제한해야 합니다.
실무에서 구현할 수 있는 구체적인 가이드라인은 다음과 같습니다.
~/.codex/나 .vscode/settings.json 등 개발 도구 설정 경로를 Git 또는 파일 감시 에이전트로 모니터링하여, 사용자가 의도하지 않은 훅(hooks)이나 스킬 추가를 실시간으로 탐지합니다.Approval Gate)를 필수 요소로 추가합니다.AI 기능이 기존 개발 환경에 침투하는 속도가 커스텀 보안 정책의 작성 속도보다 빠릅니다. 따라서 '기본 차단, 명시적 허용' 원칙에 따라 표준 명세를 사용하는 도구만 선별적으로 도입해야 합니다.
조직에 AI 개발 도구나 MCP를 도입하기 전에 다음 항목을 검토하시기 바랍니다.
Opt-out) 옵션이 서비스 업데이트 후에도 유효하게 유지되는지 주기적으로 확인하는 스크립트나 절차가 있는가?위 검토 항목을 바탕으로 개발 환경의 보안 수준을 재점검하고, 표준 규약을 통한 안전한 AI 통합 환경을 구현하시길 권장합니다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.