요즘 많은 개발자가 코드를 작성하는 데 생성형 인공지능(AI)을 사용합니다. 미국 소프트웨어 기업 Sourcegraph 설문조사에 따르면, 개발자 95%가 ‘코드 작성에 도움을 받고자 생성형 AI를 이용한다’고 응답했죠. 시중에는 OpenAI의 ChatGPT, GitHub의 Copilot, Google의 Gemini, Amazon의 CodeWhisperer 등 다양한 코드 생성 AI 도구가 있습니다.
생성형 AI는 짧은 시간에 많은 코드를 작성하는 데 도움이 되죠. 그러나 AI로 생성한 코드에는 부정확하고, 최적의 상태가 아닌 알고리즘이 있을 수 있습니다. 또 잠재적인 보안 결함이 있을 수도 있죠. 이러한 코드를 테스트 없이 프로덕션에 적용하면 소프트웨어에 취약점이 발생하고요. 이는 비즈니스에 부정적 영향을 미칠 수 있습니다.
개발자는 이러한 문제점을 염두에 두고 소프트웨어 개발에 생성형 AI를 분별력 있게 사용해야 하는데요. 이 글에서는 AI로 생성한 코드의 문제점과 그에 따른 유의 사항을 자세히 살펴보고요. GitLab의 AI 기능 모음인 GitLab Duo를 사용해 AI로 생성한 코드의 문제점을 파악하고, 보안과 코드 품질을 향상하는 방법을 알아보겠습니다.
보안 위험
출처=픽사베이IT 업계에서는 ‘AI로 생성한 코드가 안전하지 않다’는 실험·설문 결과가 계속 나오고 있습니다. 미국 스탠퍼드대 연구진은 ‘생성형 AI인 Codex로 생성한 코드가 사이버 보안에 취약하다’는 실험 결과*를 발표했는데요. Codex를 이용한 참가자 집단은 이 도구를 사용하지 않은 집단보다 사이버 보안 측면에서 안전하지 않은 코드를 만들었죠. 미국 사이버 보안 기업 Snyk가 소프트웨어 엔지니어링과 보안 팀원, 리더 537명을 대상으로 설문 조사한 결과, 응답자 91.6%가 “AI 코딩 도구가 안전하지 않은 코드 제안을 가끔 생성했다”고 답했습니다.
문제는 AI로 생성한 코드가 안전하지 않은데도 ‘안전하다’고 생각하는 이들이 많고요. 코드 보안을 향상하려는 노력이 부족하다는 건데요. 스탠퍼드대 연구진의 실험에서 Codex를 이용한 참가자 집단은 ‘Codex로 생성한 코드가 안전하지 않은데도 안전하다’고 믿었습니다. Snyk 설문조사에 따르면, 응답자 80%가 ‘조직 내 개발자들이 AI 보안 정책을 우회한다’고 답했고요. 응답자 25%만 ‘AI 코딩 제안에 포함된 오픈 소스 구성요소의 보안을 확인하기 위해 자동화된 스캐닝 도구를 사용한다’고 했죠. 오픈 소스 라이브러리가 안전한지 보장하고자 적절한 조치를 취하려는 이가 적다는 겁니다.
AI로 코드를 생성하면, 입력 데이터를 제대로 검증하지 않아 SQL 인젝션, 크로스 사이트 스크립팅(XSS) 등 보안 취약점을 초래할 수 있습니다. 아울러 폴더 구조를 고려하지 않은 파일 저장과 불러오기 코드 때문에 코드가 비정상 작동할 수도 있고요. 또 코드 생성 AI 도구는 사용자의 기존 코드에 보안 문제가 있을 때, 안전하지 않은 코드를 제안할 수 있죠. Snyk에 따르면, GitHub의 Copilot은 기존 코드 리포지터리에서 패턴과 구조를 학습해 코드 스니펫을 생성하는데요. 이때 코드는 인접 파일에 있는 기존 보안 취약점이나 잘못된 관행을 복제할 수 있다고 합니다.
AI로 생성한 코드는 반드시 보안 전문가나 보안 필터를 거쳐 철저히 검토해야 합니다. 보안 취약점은 사전에 발견하고 수정해야 하는데요. 자동화된 보안 검사, 코드 감사로 보안 위험이 있는 코드를 찾고요. 코드 생성 AI 도구가 최신 기술 업데이트로 보안상 안전한지도 검토해야 합니다. 또 AI로 생성한 코드를 적절한 검토 없이 무조건 받아들이지 않고요. 조직에서는 개발자가 AI로 생성한 코드의 보안 취약점을 인식하고, 이를 수정하도록 보안 교육도 실시해야 합니다.
*연구진은 개발자 47명에게 Codex로 파이썬, 자바스크립트, C 등 언어로 코드를 생성토록 함
코드 품질 저하
출처=픽사베이AI로 생성한 코드에는 품질 문제도 제기됩니다. 미국 옵저버빌리티 기업 Dynatrace의 창업자이자 CTO인 Bernd Greifeneder는 다음 문제를 지적하는데요. 바로 코드 생성 AI 도구의 학습 데이터 품질 문제입니다. AI는 지금까지 Stack Overflow와 같은 코딩 사이트에서 사람이 큐레이팅한 좋은 소스로 학습했습니다. 그러나 앞으로 개발자들이 AI로 생성한 코드를 더 많이 사용하면 이러한 사이트를 업데이트할 동기가 약화할 수 있고요. 이로써 AI가 학습하는 데이터 품질이 저하돼 AI로 생성한 코드 품질도 낮아질 수 있습니다.
아울러 코드 생성 AI 도구의 신속한 복사/붙여넣기 프로세스가 저품질 코드를 확산할 수도 있는데요. Bernd Greifeneder는 “개발자가 코드 스니펫을 복사하고 붙여 넣어 배포 속도를 높이는 건 나쁜 관행으로 인식된다”라고 설명합니다. 이는 유지보수성을 저하하고, 오류나 취약점이 복제되거나 간과될 위험을 키우기 때문인데요. 코드 생성 AI 도구는 복사/붙여넣기 프로세스를 더 높은 속도로 자동화하죠. 이에 문제 있는 코드도 빠르게 복사하고 붙여 넣도록 해 오류와 취약점이 있는 저품질 AI 생성 코드가 널리 퍼질 수 있습니다. 개발팀의 업무가 과중하면 이러한 코드를 미리 검토하지 못할 수 있고요.
AI로 생성한 코드 품질을 높은 수준으로 유지하려면, AI가 양질의 데이터를 우선 학습해야 합니다. 사용자도 코드 생성 AI 도구가 학습한 데이터를 확인하고, 고품질 데이터로 학습한 도구를 사용하는 게 좋겠죠. 아울러 조직은 AI가 생성한 코드를 면밀히 분석하고, 테스트하며, 품질과 보안 표준을 준수하는 개발 관행을 강화해야 합니다. 그 일환으로 AI 생성 코드에 ‘클린 코드’ 원칙을 적용하는 것도 중요한데요. 클린 코드는 일관되고, 의도적이며, 새로운 환경에 적응할 수 있고, 책임 있는 코드이죠. 이는 개발 생산성을 높이고, 소프트웨어 품질을 향상하는 데 도움이 되는데요. AI로 생성한 코드에 클린 코드가 최종 구현되도록 테스트와 분석을 수행해 코드 품질을 보장해야 합니다.
저작권 침해
출처=Unsplash코드 생성 AI 도구로 만든 코드는 저작권 침해 우려가 있습니다. Copilot과 같은 도구는 입력 코드를 리팩토링해 코드를 만드는데요. 이러한 도구는 AI 모델을 학습시키는 데 사용된 학습 데이터와 학습된 모델이 생성한 출력 코드에서 비롯된 저작권, 오픈 소스 라이선스 문제에 직면할 수 있죠. 2022년 미국에서는 GPT-3에 GitHub의 오픈 소스 코드를 학습시킨 Copilot이 ‘해당 코드의 오픈 소스 라이선스를 준수하지 않았다’며 집단 소송이 제기됐습니다.
글로벌 로펌 Finnegan에 따르면, 코드 생성 AI 도구는 기본 AI 모델을 학습시키는 데 사용하는 코드의 사본을 추천하는 걸로 알려졌습니다. GitHub도 ‘Copilot이 생성한 코드가 학습된, 공개적으로 사용할 수 있는 오픈 소스 코드를 인용할 때가 있다’고 인정했죠. GitHub 내부 조사에 따르면, 확률은 1%로 지극히 낮지만 Copilot이 학습 코드와 정확히 일치하는 일부 코드 블록을 포함하는 코드를 생성할 수 있다고 합니다. 오픈 소스 코드의 라이선스는 Copilot을 사용해 개발한 코드에 적 용될 수도 있죠.
Finnegan에서는 ‘오픈 소스 라이선스가 적용된 코드를 코드 생성 AI 도구로 만든 코드로 반복 사용하면, 해당 코드의 사용이 저작자 표시, 배포와 같은 오픈 소스 라이선스 조건을 따르지 않을 때 저작권 위반이 될 수 있다’고 설명합니다. 참고로 코드 생성 AI 도구로 제안한 코드의 추적성이 부족해 ‘생성된 코드에 원래 오픈 소스 라이선스 조건에 위배될 수 있는 반복 코드가 포함됐는지’ 바로 알 수 있는 방법은 없다고 하고요.
이에 저작권 침해를 방지하려면 AI로 생성한 코드를 수동으로 검토해 알려진 인기 코드를 확인해야 합니다. 또는 코드 스캐닝 도구를 사용해 오픈 소스 라이선스가 적용된 코드를 점검해야 하고요. 아울러 조직에서는 AI 저작물 관련 법을 지속해서 관찰, 추적해야 합니다. AI로 생성한 코드 활용 지침과 저작권 교육, 기타 대응책을 마련해 구성원에게 안내하는 건 물론이고요.
GitLab으로 AI 생성 코드 문제 어떻게 해결할까?
출처=GitLabAI로 생성한 코드의 보안, 품질, 저작권 문제를 방지하려면 자동화된 보안 검사, 코드 감사 등이 필요한데요. GitLab은 AI 기능 모음인 GitLab Duo로 AI 생성 코드의 보안과 품질 문제를 파악하고 개선하도록 지원합니다. 관련 워크플로는 아래와 같습니다.
- GitLab.com에서 프로젝트 만들기
- GitLab Duo Code Suggestions를 활용해 코드 작성하기
- GitLab Duo Chat으로 테스트 코드 생성하기
- GitLab Duo Chat으로 AI 생성 코드의 문제점 파악하기
- 테스트 실행 후, 테스트 보고서 생성하기
- GitLab Pages를 사용해 테스트 보고서 배포하기
- MR 위젯에 테스트 보고서 임베딩(CI/CD 파이프라인 구성에 테스트 보고서 포함)
GitLab에서는 AI 생성 코드의 테스트, 문제점 파악, 테스트 보고서 생성을 AI로 쉽게 수행할 수 있습니다. 이로써 AI 생성 코드의 보안과 품질을 높게 유지할 수 있습니다. 자세한 방법은 이 글을 참고해 주세요.
맺음말
AI는 오늘날 소프트웨어 개발 방식에 큰 변화를 불러왔습니다. AI로 생성한 코드는 개발 생산성을 향상하는 데 큰 잠재력이 있습니다. 그러나 보안, 품질, 저작권 측면에서 위험 부담이 있기에 이를 간과해선 안 됩니다. 개발자들은 이러한 문제점을 인식하고, AI를 적절히 사용해 고품질 코드를 안전하게 작성하도록 노력해야 합니다.
특히 코드 생성 AI 도구는 충분한 검토가 이뤄지고, 올바른 사용 지침이 마련될 때 지속 가능하게 활용할 수 있습니다. 이는 조직이 더 나은 소프트웨어를 개발하고, 기술 부채를 줄이며, 안정적인 개발 환경을 구축하는 데 도움이 될 수 있습니다. 개발자들이 AI로 우수하고, 신뢰할 만한 소프트웨어를 만드는 데 이 글이 도움이 되길 바랍니다.
참고 자료
- Avoiding the dangers of AI-generated code
- "코드 생성AI는 보안에 취약"...스탠포드 연구진 실험 결과
- AI Code, Security, and Trust: Organizations Must Change Their Approach
- 코드 생성 AI로 인해 발생하는 일반적인 취약점 분석
- 생성형 AI 보안 위협과 대응방안
- "깃허브 코파일럿이 보안 취약점까지 복제한다면?" AI 코딩 도구 주의보
- How To Reduce Vulnerable Code Risks In AI-Generated Software
- 생성형 AI 관련 저작권 쟁점과 대응 방안 이슈 리포트
- MS "생성 AI로 저작권 문제 발생 시 대신 배상"
- Copyrights, Professional Perspective - IP Issues With AI Code Generators
- Developing GitLab Duo: Secure and thoroughly test AI-generated code
우리 회사에 딱 맞는 DevSecOps 관행과 프레임워크를 찾고 계시나요? DevOps 전문가, 인포그랩과 상담하세요.