Security and Quality in LLM-Generated Code: A Multi-Language, Multi-Model Analysis

이 논문은 다양한 프로그래밍 언어와 LLM 모델을 대상으로 생성된 코드의 보안 및 품질을 분석한 결과, 모델들이 최신 보안 기능을 활용하지 못하고 구식 방법을 사용하는 등 언어별 보안 효율성에 차이가 있음을 밝혀냈습니다.

Mohammed Kharma, Soohyeon Choi, Mohammed AlKhanafseh, David Mohaisen

게시일 Tue, 10 Ma
📖 3 분 읽기☕ 가벼운 읽기

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

이 논문은 **"인공지능 (AI) 이 코딩을 도와줄 때, 그 코드가 얼마나 안전하고 잘 만들어졌는지"**를 다양한 언어와 모델로 꼼꼼히 검사한 연구입니다.

마치 **"AI 코딩 도우미 5 명을 고용해서, 4 가지 다른 언어 (Python, Java, C++, C) 로 200 개의 다양한 미션을 수행하게 한 뒤, 그들의 결과물을 심사위원들이 면밀히 검토한 보고서"**라고 생각하시면 쉽습니다.

이 연구의 핵심 내용을 일상적인 비유로 설명해 드릴게요.


1. 실험 설정: "다양한 요리사와 다양한 재료"

연구진들은 최신 AI 모델 5 개 (GPT-4o, Claude-3.5, Gemini-1.5 등) 를 초대했습니다. 그리고 이들에게 **4 가지 다른 요리 재료 (프로그래밍 언어)**를 주었습니다.

  • 파이썬 (Python) & 자바 (Java): 요리하기 쉽고, 실수가 적어도 바로 알아차리기 힘든 재료들 (자동으로 안전 장치가 있는 냄비).
  • C++ & C: 요리하기 까다롭고, 조금만 실수하면 불이 나거나 다칠 수 있는 날카로운 칼과 뜨거운 기름 같은 재료들 (안전 장치가 없어서 요리사가 직접 신경 써야 함).

이들에게 "이런 요리를 만들어줘"라고 200 가지 미션을 주었더니, AI 들이 각자 요리를 만들어냈습니다.

2. 심사 과정: "세 가지 심판 기준"

연구진들은 AI 가 만든 요리를 세 가지 기준으로 평가했습니다.

  1. 식당 문 열기 전 (구문 오류 확인): 요리를 다 만들었는데, 냄비가 깨져서 조리할 수 없나요? (컴파일 오류)
  2. 맛보기 (기능 확인): 주문한 '불고기'를 시켰는데 '김치찌개'가 나왔나요? 혹은 맛이 너무 짜거나 싱거울까요? (단위 테스트를 통한 기능 정확도)
  3. 위생 및 안전 점검 (보안 및 품질): 식중독 위험은 없나요? (보안 취약점), 주방이 너무 지저분하거나 복잡하지는 않나요? (코드 품질)

3. 주요 발견: "언어마다 AI 의 실력이 달랐다"

  • 파이썬과 자바는 '상위권'입니다:
    AI 들이 파이썬과 자바로 요리를 할 때는 거의 완벽하게 성공했습니다. 문법이 쉽고 자동 안전 장치가 있어서 AI 가 실수할 여지가 적었기 때문입니다. 특히 Claude-3.5GPT-4o가 이 분야에서 가장 잘했습니다.

  • C 와 C++ 은 '난이도 최상'입니다:
    반면, C 와 C++ 로 요리할 때는 AI 들이 많이 헷갈렸습니다.

    • 메모리 관리 실수: "이 재료를 다 쓴 뒤에는 쓰레기통에 버려야 하는데, 버리지 않아서 주방이 쓰레기로 가득 찼다" (메모리 누수, 버퍼 오버플로우).
    • 필요 없는 도구: "이 요리에 쓸 필요가 없는 칼을 들고 나왔다" (불필요한 라이브러리 포함).
    • 오래된 레시피: "최신 위생 규정이 있는데, 10 년 전의 위험한 레시피를 그대로 썼다" (구식 암호화 방식 사용).
      특히 C 언어는 AI 가 가장 어려워해서, 코드가 실행되지 않거나 치명적인 보안 구멍이 많이 났습니다.

4. 보안 문제: "보이지 않는 함정"

AI 가 만든 코드는 겉보기엔 완벽해 보이지만, 속에는 보안 지뢰가 숨어있었습니다.

  • 비밀번호 노출: "비밀번호를 코드 안에 그대로 적어놨다" (하드코딩).
  • 열린 문: "문은 잠갔는데, 창문은 열어놨다" (입력값 검증 누락).
  • 낡은 자물쇠: "최신 자물쇠 대신, 쉽게 뚫리는 구식 자물쇠를 썼다" (암호화 오류).

특히 **C++**와 C에서는 메모리 관련 보안 문제가, 자바파이썬에서는 암호화나 인증 관련 문제가 더 자주 발견되었습니다.

5. 결론: "AI 는 아직 초보 요리사"

이 연구는 **"AI 가 코딩을 도와줄 수는 있지만, 무조건 믿고 쓰면 안 된다"**는 사실을 보여줍니다.

  • 언어 선택이 중요: AI 를 쓸 때는 파이썬이나 자바처럼 안전한 언어를 고르는 것이 C 나 C++ 보다는 훨씬 안전합니다.
  • 인간의 검증 필수: AI 가 만들어준 코드는 반드시 사람이 다시 한번 "이게 안전한가?"를 확인해야 합니다. 특히 보안이 중요한 부분에서는 AI 가 최신 보안 기술을 잘 모르는 경우가 많기 때문입니다.
  • 향후 과제: AI 개발자들은 이제 "단순히 코드를 잘 짜는 것"을 넘어, "보안과 품질까지 고려한 코딩"을 가르쳐야 합니다.

한 줄 요약:

"AI 코딩 도우미는 파이썬 같은 쉬운 언어에서는 훌륭한 요리사지만, C 같은 까다로운 언어에서는 실수를 많이 하고, 특히 '보안'이라는 위생 기준에서는 아직 인간이 직접 점검해줘야 할 필요가 많습니다."