CLARC: C/C++ Benchmark for Robust Code Search

이 논문은 기존 벤치마크의 한계를 극복하고 C/C++ 코드의 의미적 이해와 강건성을 평가하기 위해 실제 GitHub 저장소에서 파생된 대규모 데이터셋 'CLARC'를 제안하고, 식별자 익명화 및 저수준 컴파일 등 다양한 도전적 환경에서 기존 모델들이 어휘적 특징에 과도하게 의존한다는 사실을 규명했습니다.

Kaicheng Wang, Liyan Huang, Weike Fang, Weihang Wang

게시일 2026-03-06
📖 2 분 읽기☕ 가벼운 읽기

Each language version is independently generated for its own context, not a direct translation.

1. 문제점: "단어 외우기"만 하는 AI 들

지금까지 개발자들이 코드를 찾을 때 사용하는 AI 들은, 마치 단어장을 외운 학생과 비슷했습니다.

  • 상황: "사과를 껍질 벗기는 함수"를 찾으려 합니다.
  • 기존 AI 의 반응: 코드 안에 'apple', 'peel' 같은 단어가 들어있으면 "아! 이거야!"라고 바로 찾아냅니다.
  • 문제: 하지만 변수 이름을 'apple' 대신 'fruit'로 바꾸거나, 코드를 기계가 읽는 언어 (어셈블리) 로 번역하면, 이 AI 들은 당황해서 "이게 무슨 말인지 모르겠다"며 엉뚱한 답을 내놓습니다. 즉, 코드의 진짜 뜻을 모르고 단어만 보고 추측하는 것입니다.

2. 해결책: CLARC (클라크) 라는 새로운 시험지

저자들은 이 문제를 해결하기 위해 CLARC라는 새로운 시험지를 만들었습니다.

  • 실전 같은 문제: 기존 시험지들은 파이썬 같은 쉬운 언어만 다뤘지만, CLARC 는 C/C++(시스템을 만드는 어려운 언어)로 만들어졌습니다.
  • 완벽한 코드: 이 코드는 실제로 컴퓨터에서 실행 (컴파일) 될 수 있도록 완벽하게 준비되어 있습니다. (기존 시험지들은 실행이 안 되는 불완전한 경우가 많았음)
  • **다양한 함정 **(스트레스 테스트) AI 가 진짜로 코드를 이해하는지 보기 위해 다음과 같은 '함정'을 넣었습니다.
    1. **이름 가리기 **(Anonymization) 변수나 함수 이름을 func_a, var_b 처럼 아무 의미 없는 이름으로 바꿉니다. (단어 외우기 불가능)
    2. 기계어 변환: 코드를 사람이 읽기 힘든 **어셈블리 **(Assembly)나 **웹어셈블리 **(WebAssembly)로 바꿉니다. (원래 코드의 모양이 완전히 사라짐)

3. 실험 결과: AI 들의 실망스러운 성적

이 새로운 시험지 (CLARC) 로 최신 AI 6 개를 시험해 봤습니다. 결과는 충격적이었습니다.

  • 정답: "이름을 바꾸거나 기계어로 바꾸면, AI 들의 성능이 뚝 떨어졌습니다."
  • 해석: 이는 AI 들이 코드의 논리나 구조를 이해하는 게 아니라, **단어 **(이름)에 의존하고 있다는 뜻입니다. 마치 "사과"라는 단어가 없으면 "사과"를 못 찾는 학생과 같습니다.
  • 특이점: 아주 최신 모델들도 이 함정에는 걸렸습니다. 특히 복잡한 코드를 기계어로 바꾸면, AI 들은 거의 아무것도 못 찾았습니다.

4. 결론 및 시사점: "진짜 이해"가 필요하다

이 논문의 핵심 메시지는 다음과 같습니다.

"지금의 AI 는 **코드를 읽는 게 아니라, 코드의 '스킨' **(단어)입니다.
개발자가 변수 이름을 바꾸거나, 코드를 최적화해서 기계어로 만들면 AI 는 길을 잃습니다.
앞으로는 단어가 바뀌어도 코드의 의미를 파악할 수 있는, 더 똑똑한 AI 가 필요합니다."

🍎 한 줄 요약

"지금의 코드 검색 AI 는 '이름'만 보고 코드를 찾는 '단어장 외우기' 수준입니다. CLARC 라는 새로운 시험지로 그 사실을 증명했으니, 이제 진짜 '이해'를 하는 AI 를 만들어야 할 때입니다!"

이 연구는 개발자들이 더 안전하고 정확한 코드를 찾을 수 있도록, AI 의 능력을 진짜 실전 (이름을 바꿔도, 기계어로 바꿔도) 에 맞춰 테스트하는 기준을 마련했다는 점에서 매우 중요합니다.