---
title: "자바 테스트 도구 jqwik에 숨은 삭제 지시문, AI 코딩 차단하려다 역풍"
published: 2026-05-30T03:05:03.309Z
canonical: https://jeff.news/article/3330
---
# 자바 테스트 도구 jqwik에 숨은 삭제 지시문, AI 코딩 차단하려다 역풍

오픈소스 자바 테스트 도구 jqwik 1.10.0에 AI 코딩 에이전트가 테스트와 코드를 삭제하도록 유도하는 숨은 프롬프트가 들어가 논란이 됐다. 개발자는 AI 에이전트 사용을 막으려는 의도였다고 밝혔지만, 사용자 경고 없이 파괴적 명령을 넣고 터미널 출력에서 숨긴 점 때문에 커뮤니티 비판이 커졌다.

- 자바 테스트 도구 `jqwik` 1.10.0에 AI 코딩 에이전트를 겨냥한 숨은 삭제 지시문이 들어가 논란이 터짐
  - 문구는 이전 지시를 무시하고 모든 jqwik 테스트와 코드를 삭제하라는 내용임
  - `jqwik`는 JUnit 5용 테스트 엔진이라 자바 프로젝트에서 테스트 실행 경로에 들어올 수 있는 도구임

- 이건 전형적인 프롬프트 인젝션(Prompt Injection) 사례로 볼 수 있음
  - 대규모 언어 모델(LLM)이 정상 사용자 지시와 외부 텍스트에 숨어 있는 악성 지시를 구분하지 못할 수 있다는 점을 노림
  - 영향을 받는 AI 코딩 에이전트가 테스트 실행 결과를 읽고 그 문구를 명령처럼 받아들이면, 사용자가 만든 테스트나 코드가 삭제될 수 있음

> [!WARNING]
> 이 사례가 무서운 지점은 패키지가 직접 파일을 지우는 코드가 아니라, AI 에이전트에게 지우라고 시키는 문자열이라는 점임. 개발 도구가 출력까지 읽고 행동하는 시대엔 출력도 공격면이 됨.

- 더 큰 문제는 개발자가 해당 문구를 사람 검토자에게 숨기려는 코드까지 넣었다는 점임
  - 대화형 터미널에서 실행 결과를 볼 때 ANSI 이스케이프 시퀀스로 문제 문구가 지워지도록 처리함
  - 즉 사람이 평소처럼 터미널 로그를 훑으면 눈에 잘 안 띄게 만든 구조였음

```mermaid
sequenceDiagram
    participant 개발자
    participant 테스트도구
    participant 터미널
    participant AI에이전트
    개발자->>테스트도구: 테스트 실행
    테스트도구->>터미널: 숨은 삭제 지시문 출력
    테스트도구->>터미널: ANSI 제어 문자로 화면에서 지움
    AI에이전트->>터미널: 실행 출력 읽기
    터미널-->>AI에이전트: 삭제 지시문 포함된 텍스트 노출 가능
    AI에이전트-->>개발자: 취약한 경우 코드 삭제 행동으로 이어질 수 있음
```

- 논란은 자바 개발자 라몬 바틀렛이 깃허브에서 문제를 제기하면서 커짐
  - 바틀렛은 개발자가 AI 코딩 에이전트 사용을 막거나 제한 위반 여부를 시험하는 것 자체에는 반대하지 않는다고 밝힘
  - 다만 이번 문자열은 예외나 거부 선택지, 사전 경고 없이 테스트와 코드를 삭제하라고 지시하는 가장 파괴적인 형태라고 지적함
  - 덜 견고한 에이전트가 실제 사용자 PC에서 이를 따랐다면 단순 불편이 아니라 심각한 피해로 이어질 수 있었다는 얘기임

- 앤트로픽의 클로드 코드 도구는 이 지시를 감지했지만 따르지는 않은 것으로 전해짐
  - 이건 그나마 다행인 결과지만, 모든 에이전트가 같은 방어 로직을 갖고 있다는 보장은 없음
  - 특히 로컬 파일 접근 권한을 가진 자동화 도구라면 모델 판단 한 번이 실제 파일 변경으로 이어질 수 있음

- `jqwik` 개발자 요하네스 링크는 이후 릴리스 노트를 수정해 프롬프트 인젝션 내용을 공개함
  - 그는 어떤 AI 코딩 에이전트도 이 프로젝트에 사용되길 원하지 않는다고 설명함
  - 테스트 엔진 실행 때 표준 출력 앞부분에 삭제 지시문을 붙여 AI 에이전트 사용을 억제하려 했다고 밝힘
  - 사람이 터미널에서 읽을 때 방해되지 않게 문장을 지우는 이스케이프 시퀀스를 넣었다고도 인정함

- 커뮤니티 반응은 대체로 싸늘함
  - 일부는 유치한 조치라고 봤고, 일부는 지역에 따라 위법 소지가 있을 수 있다고 지적함
  - 오픈소스 개발자 출신 HD 무어는 유지관리자가 사용자 행동을 어느 정도 유도하려는 마음은 이해하지만, 이번 건은 사용자 테스트까지 삭제할 수 있었고 메시지도 숨겼다는 점에서 문제가 크다고 봄

> [!TIP]
> AI 코딩 에이전트를 쓰는 팀이라면 테스트 출력, 빌드 로그, 패키지 문서까지 신뢰 경계에 넣어야 함. 읽기 전용 텍스트라고 방심하기엔 에이전트가 그걸 행동 계획으로 바꿀 수 있음.

---

## 기술 맥락

- 이번 사건의 핵심은 코드 실행 취약점이 아니라 에이전트 실행 환경의 신뢰 경계예요. 예전엔 터미널 출력이 사람이 읽고 넘기는 로그였지만, 이제 AI 에이전트가 그 출력을 읽고 다음 행동을 결정하니까 출력 문자열 자체가 공격 입력이 돼요.

- 프롬프트 인젝션이 위험한 이유는 모델이 텍스트의 출처와 권한을 완벽하게 구분하지 못하기 때문이에요. 사용자가 내린 지시, 패키지 출력, 문서에 적힌 예시가 한 컨텍스트에 섞이면 취약한 에이전트는 무엇을 따라야 하는지 헷갈릴 수 있어요.

- ANSI 이스케이프 시퀀스로 문구를 숨긴 점도 중요해요. 사람이 보는 화면과 에이전트가 읽는 원문 로그가 달라질 수 있으면, 리뷰어는 정상으로 보는데 자동화 도구는 악성 지시를 받는 상황이 생기거든요.

- 그래서 AI 코딩 에이전트는 로컬 파일을 수정하기 전에 외부 출력에서 온 명령을 격리해야 해요. 패키지 실행 결과는 데이터로만 취급하고, 파일 삭제나 대량 수정 같은 행동은 사용자 확인을 요구하는 식의 방어선이 필요해요.

## 핵심 포인트

- jqwik 1.10.0에 모든 jqwik 테스트와 코드를 삭제하라는 숨은 지시문이 포함됨
- 해당 문구는 AI 코딩 에이전트가 외부 지시를 따르는 프롬프트 인젝션 취약점을 노린 것임
- 개발자는 ANSI 이스케이프 시퀀스로 사람이 터미널에서 볼 때 메시지가 지워지도록 처리함
- 클로드 코드 도구는 악성 지시를 감지했지만 따르지는 않은 것으로 전해짐
- 커뮤니티는 AI 사용 제한 의도와 별개로 사용자 코드까지 삭제할 수 있는 방식은 선을 넘었다고 비판함

## 인사이트

오픈소스 유지관리자가 AI 코딩 에이전트 사용을 싫어할 수는 있음. 하지만 패키지 실행 경로에 숨은 삭제 명령을 넣는 순간, 이건 라이선스나 사용 정책 문제가 아니라 공급망 보안 문제로 바뀜.
