AI가 생성한 HTML 파서, 과연 안전할까?
AI 코딩 에이전트가 생성한 HTML 파서가 원래 코드와 다른 방식으로 구현되는 현상 발견
html5ever를 기반으로 한 파서에서, Data 상태 구현이 번역 과정에서 변형됨
테스트 통과에도 불구하고, 취약점 가능성과 유지보수 어려움을 제기
LLM 기반 코드 생성의 신뢰성 문제와 테스트의 한계를 지적하며, 잠재적 위험성을 경고
AI 번역의 한계: Data 상태 구현의 변형
저자는 AI 코딩 에이전트가 html5ever의 Rust 코드를 Python, JavaScript, OCaml, Swift로 변환하는 과정에서 Data 상태 구현이 원본과 다르게 생성되는 것을 발견했다. 특히, Python 버전에서는 빠른 스캔(Fast Scanning), `&` 처리, `\0` 처리 방식이 원본과 달랐으며, JavaScript 버전은 더 단순화된 형태로 구현되었다. 이러한 현상은 AI가 코드 번역 대신 훈련 데이터를 기반으로 새로운 구현(New Implementation)을 생성했음을 시사한다. 🤖
테스트의 불완전성: 버그와 취약점의 가능성
비록 생성된 파서들이 html5lib 테스트를 통과했지만, 저자는 테스트의 완벽성(Test Coverage)에 의문을 제기했다. 특히, `_coerce_comment_for_xml` 함수에서 여러 개의 연속된 하이픈을 처리하는 버그를 발견했으며, 이는 잠재적인 보안 취약점으로 이어질 수 있다고 지적했다. 이러한 사례는 테스트 통과가 코드의 안전성을 보장하지 않으며, AI가 생성한 코드의 취약점(Vulnerability)을 발견하기 어려울 수 있음을 보여준다.
LLM 기반 코드 생성의 위험성: 신뢰성 문제
저자는 LLM의 결정론적이지 않은 특성(Non-Deterministic Nature)과 자기 성찰 능력 부재(Lack of Introspection)를 지적하며, AI가 생성한 코드의 신뢰성에 대한 근본적인 의문을 제기했다. AI는 종종 의도하지 않은 방식으로 동작하며, 그 이유를 설명하거나 수정하기 어렵다. 이는 AI가 훈련 데이터에 존재하는 취약점을 학습하여 코드에 반영할 수 있음을 의미하며, 데이터 미저장 정책(Zero-Retention Policy)을 적용하기 어렵게 만든다.
코드 번역 vs. 재창조: AI의 역할
본 논의는 AI 코딩 에이전트가 코드 번역(Code Translation)을 수행하는 대신, 훈련 데이터를 기반으로 새로운 구현을 생성하는 경향을 보인다는 점을 강조한다. 이는 AI가 주어진 문제를 해결하기 위해 다양한 솔루션(Various Solutions)을 제시할 수 있지만, 원본 코드의 의도를 정확하게 반영하지 못할 수 있음을 의미한다. 따라서, AI의 역할은 코드 번역보다는 코드 생성(Code Generation)에 더 가깝게 정의되어야 하며, 코드 품질 검증을 위한 추가적인 노력이 필요하다.