지난 3월 24일, AI 개발자 커뮤니티에 충격적인 소식이 전해졌다. 인기 있는 LLM 래퍼 라이브러리인 liteLLM의 PyPI 패키지가 악성 코드에 감염된 채 배포된 것이다. 개발자들이 흔히 사용하는 `pip install` 명령어 한 줄로, API 키가 외부로 유출될 수 있는 심각한 상황이 발생했다.

이 사건은 단순히 특정 라이브러리의 취약점을 넘어섰다. Wiz의 분석에 따르면 클라우드 환경의 36%에 liteLLM이 설치되어 있었으며, 노출된 약 3시간 동안 하루 340만 건에 달하는 다운로드가 이루어졌다. 단 3시간이라는 짧은 시간에도 불구하고 광범위한 피해 가능성이 드러났다. PyPI에서 악성 코드가 제거된 후에도, 이미 감염된 버전은 "Python 시작만으로 악성 코드 실행"이라는 경고가 나왔다. 이 사건은 AI 시대의 개발자들이 직면한 새로운 보안 위협의 본질을 명확히 보여준다. 의존성을 끊고 스스로 만드는 패러다임으로의 전환이 불가피하다는 강력한 신호다.

AI 시대의 공급망 보안, 제로 디펜던시가 답이다

AI 개발의 빠른 속도는 수많은 오픈소스 라이브러리와 패키지 사용을 촉진했다. 새로운 LLM이 나오면 이를 감싸는 래퍼 라이브러리가 즉시 등장하고, 개발자들은 빠른 프로토타이핑을 위해 이를 기꺼이 가져다 쓴다. 그러나 `liteLLM` 사건은 이러한 편리함 뒤에 숨겨진 치명적인 위험을 드러냈다. 오픈클로(Openklo) 또한 liteLLM을 사용하고 있어 즉시 점검에 들어갔다는 사실은, 대형 서비스마저도 이러한 위협에 노출되어 있음을 방증한다.

이런 유형의 공격이 발생하는 구조적 원인은 AI 개발 생태계의 복잡한 의존성 관계와 빠른 변화 속도에 있다. 새로운 AI 기술이 빠르게 등장하면서, 이를 지원하는 수많은 마이크로 패키지들이 쏟아진다. 이 패키지들은 대부분 커뮤니티 주도로 개발되며, 전통적인 소프트웨어 개발에 비해 보안 검증이나 지속적인 감사 과정이 상대적으로 미흡하다. AI가 코드를 대신 짜주는 시대가 도래하면서, '바퀴를 다시 만들 필요는 없다'는 오랜 격언이 때로는 맹점으로 작용하기도 한다. 검증되지 않은 외부 의존성이 마치 신뢰할 수 있는 요소인 양 코드베이스에 스며드는 것이다.

이러한 흐름이 계속되면, 개발자들은 근본적인 보안 전략의 변화를 추구하게 된다. 핵심은 '제로 디펜던시(Zero Dependency)' 전략이다. AI가 코드를 대신 짜주는 덕분에, 처음부터 직접 만드는(build from scratch) 비용이 전과 비교할 수 없을 정도로 낮아졌다. 외부 패키지 한두 개를 가져다 쓰는 대신, 필요한 기능을 직접 구현하는 것이 더 안전하고 비용 효율적인 선택이 될 수 있다. 물론 모든 기능을 직접 만들 수는 없다. 그러나 최소한의 핵심 기능을 직접 통제하고, 외부 의존성을 최소화하는 방향으로 무게 중심이 이동할 것이다. 장기적으로는 보안 리스크를 줄이는 동시에, 시스템에 대한 더 깊은 이해와 제어권을 확보하는 계기가 된다. 공급망 보안은 이제 선택이 아닌 필수가 되었으며, '내가 무엇을 쓰고 있는지'를 넘어 '내가 무엇을 직접 만들 것인지'에 대한 고민이 중요해졌다.

AI는 '쓰기'보다 '만들기'를 돕는다: 시스템 언어와 에이전트 CLI

AI 개발 커뮤니티의 분위기가 달라졌다. 올해 초 AI 코딩 도구에 열광하던 모습은 3개월 만에 잦아들었다. 관심이 식은 게 아니다. 가져다 쓰던 시대에서 직접 만드는 시대로 무게 중심이 옮겨가고 있는 현상이다. 이정민 개발자의 분석처럼, AI는 단순히 코드를 "써주는" 도구를 넘어, 개발자가 더 깊이 있는 시스템을 "만드는" 데 핵심적인 조력자로 자리매김하고 있다.

이러한 변화의 한 축은 시스템 언어로의 전환이다. 기존 프로젝트를 Rust, Go, Zig 같은 시스템 언어로 옮기는 사례가 늘고 있다. 직접 시도해보니 AI 코딩 도구와 시스템 언어 조합이 생각보다 잘 맞았다고 한다. 메모리 안정성과 실행 속도를 가져가면서 운영 리소스를 줄이는 구조다. AI의 도움으로 시스템 언어 전환 난이도가 실질적으로 낮아진 것이다. 적은 인프라로 같은 기능 운영이 가능해지면서 비용 절감 효과가 즉각적으로 체감되고, 이는 사용자들의 긍정적인 반응으로 이어진다. 현재 시장의 주류 언어 재편이 가속화될 수 있다는 의견이 나오는 배경이다.

또 다른 핵심 변화는 에이전트용 CLI(Command Line Interface)의 부상이다. 앞서가는 개발자들은 CLI를 직접 만들어 에이전트 스킬과 연결하고 있다. 이일민 개발자 역시 개인 블로그 프로젝트에서 AI를 '동료'로 활용하며, AI가 생성한 글, 인간이 작성한 글, AI와 인간이 협업한 글을 구분해 게시하는 새로운 워크플로우를 선보였다. 이는 에이전트의 자율성을 극대화하는 동시에, 반복적이고 결정론적이지 않은 코드 생성의 한계를 극복하려는 시도다. 매번 코드를 생성하는 것은 토큰 낭비일 뿐만 아니라 결과의 안정성도 떨어진다.

에이전트에게 자율성을 부여하고 안정적으로 작동시키기 위한 CLI 개발에는 몇 가지 핵심 원칙이 있다. 첫째, "모든 입력을 `--flag`로 받을 것. 대화형 프롬프트는 에이전트를 멈추게 함." 대화형 인터페이스는 유연하지만 에이전트의 자동화된 작업 흐름을 방해한다. 둘째, "`--help`에 예시 필수. 에이전트는 설명이 아닌 mycli deploy --env staging 같은 예시로 패턴을 잡음." 에이전트는 추상적인 설명을 이해하기보다 구체적인 사용 패턴에서 학습한다. 셋째, "명령을 멱등(idempotent)하게 만들 것. 에이전트는 끊임없이 재시도함." 에이전트가 여러 번 실행해도 동일한 결과를 보장해야 한다. 마지막으로, "`--dry-run`과 `--yes`를 분리해서 파괴적 작업 전에 검증 단계를 넣을 것." 이는 치명적인 실수로부터 시스템을 보호하는 최소한의 안전장치다.

이러한 흐름이 계속되면, 개발자의 역할은 단순히 코드를 "생성"하는 것에서 벗어나, AI가 안정적이고 효율적으로 작동할 수 있는 "시스템과 인터페이스를 설계"하는 데 집중될 것이다. AI는 이제 프로그래밍 언어의 보조를 넘어, 소프트웨어 아키텍처와 운영의 핵심 파트너로 진화하고 있다. 승자는 이러한 새로운 협업 방식과 시스템 언어의 잠재력을 적극적으로 활용하는 개발자가 될 것이고, 패자는 과거의 방식에 갇혀 AI의 변화를 외부 도구로만 바라보는 이들이 될 것이다.

결국 이 모든 변화의 공통 방향은 외부 의존성을 끊고 스스로 만드는 것이다. 제로 디펜던시는 패키지 의존을, 시스템 언어는 런타임 의존을, CLI는 SaaS 의존을, 스킬 리포지토리는 코드 중심 배포 의존을 끊는다. AI가 코드를 대신 짜주면서 이 전환이 현실적으로 가능해졌다. 그러나 기술의 진보는 항상 책임이라는 그림자를 동반한다. 뉴멕시코 법원에서 메타(Meta)가 플랫폼의 위험을 경고하지 않고 아동 성 착취를 조장했다는 혐의로 3억 7,500만 달러의 손해배상 책임을 선고받은 사건은 기술 기업의 '만들기' 너머의 '책임'을 명확히 보여준다. 개발의 자율성이 커질수록, 자신이 만드는 시스템이 사회에 미칠 영향에 대한 책임감도 비례하여 커진다.

지금 바로 `pip show litellm` 명령어로 당신의 liteLLM 버전을 확인하라. 그리고 자신이 개발하는 AI 시스템의 외부 의존성을 점검하고, 에이전트용 CLI를 설계할 때 앞서 제시된 원칙들을 적용하여 자율성과 안정성, 그리고 책임이라는 삼박자를 모두 갖춰라.

참고