Security와 Privacy를 고민하다.
이 글은 시리즈로 이어지는 것이라, 나의 첫 번째 글을 먼저 읽어야 맥락이 이해될 것입니다. 참고해 주세요.
나의 고민은 크게 두 가지로 나누어 정리될 예정이다.
첫째. AI를 어떻게 개발에 사용할 것인가. Best Practice를 찾아내는 작업이다.
둘째. AI를 잘 사용하기 위해서 S/W Engineer로써 키워야 하는 자질은 무엇인가. 예를 들어 설명해 보면, 좋은 팀장이 되기 위해서는 리더십이 필요하듯이, AI Coder를 잘 사용하기 위한 근본적인 역량을 짚어보는 작업이다.
첫 번째 글 말미에 AI에게 물어본 결과를 단순 나열했었는데, 이는 두 번째 고민을 위한 시작이었다. 하지만 오늘은 첫 번째 고민부터 해결해 보려고 한다. 그중에서도 AI의 선택 문제이다.
많은 AI가 Coding에 사용될 수 있다. 내가 사용해 보거나 기사를 통해 접한 것들을 나열해 보면,
ChatGPT 및 그와 유사한 범용 생성형 AI (ChatGPT 4o의 경우에는 코딩도 매우 잘한다. 다른 AI들이 4o와 비교를 많이 하고 있다.)
코딩에 특화하여 학습된 Open Source AI 들: Qwen 2.5 Coder (0.5B ~ 32B까지 다양한 크기의 모델이 존재), DeepSeek Corder
Anthropic Claude Code: 아직 잘 모르겠다. 다른 AI에 비해서 장점이 뭔지...
등이 있다. 이 중 Github Copilot (이하 Copilot)과 ChatGPT는 사용을 해 보았고 (4o model을 사용했다. 3.5는 개인적으로 그냥 참고용으로 사용할 수는 있어도 본격적으로 개발에 사용하기에는 무리가 있다고 생각한다.), 나머지 것들은 기사로만 접해 보았다. Qwen 2.5 Coder (이하 Qwen)에 매우 관심이 많은 상태여서 조만간 사용해 볼 예정이다.
먼저 Copilot과 ChatGPT를 비교해 놓은 글을 먼저 공유해 본다. 글도 길지 않고 잘 정리해 놓은 것이니 잠깐 둘러보시면 좋을 것 같다. 하지만 나의 과거 경험이나 공유한 글도 과거의 유물이 될 수 있다. 솔직히 이 글을 처음 시작할 때, "Copilot은 실시간 AI pair programmer, 그 이상도 이하도 아니다." 하면서 모범 사례를 참고해 보라고 말하려고 했었다. 모범 사례에서 말하는 Copilot Chat은 일반 생성형 AI를 사용하고 있기 때문에 자연스럽게 이야기를 생성형 AI로 넘어가면서 글을 마무리 지을 생각이었다.
하지만 Copilot Agent의 등장으로 또 많은 것들이 바뀌었다. Copilot Agent에 대한 Review도 벌써 나와 있다. 더군다나 함께 발표된, Project Padawan은 기대를 많이 하게 만든다. 이게 현실화되면 Copilot을 더 잘 활용하기 위해서 Github의 Issue를 반드시 사용해야 하고, AI가 잘 이해할 수 있도록 정형화되어야 할 것이다. 결국 이는 개발 프로세스를 어떻게 정의하고 무슨 Tool을 가지고 관리할까의 문제로 연결되기 때문에, 미리미리 고민해 봐야 할 문제로 보이며, VSCode도 선택이 아닌 필수가 되지 않을까 한다.
여기까지 글을 써 놓고 며칠을 방치했었다. 글의 방향성을 어떻게 잡아야 할지 정하지 못했기 때문이다. 정확하게는 Copilot Agent를 사용해 본 후에 글을 이어 나가는 것이 좋지 않을까 하는 생각 때문이었다. 왜냐하면 Copilot의 추가된 기능을 보면서 나의 첫 번째 선택은 Github Copilot이 되었기 때문이다. 그렇다고 내 고민의 방향성이 아직 잘못되지는 않았기 때문에 Copilot과 같은 Cloud에서 서비스되는 AI를 사용했을 때 반드시 고민해야 하는 문제를 짚어 볼까 한다. 그중에서도 Security와 Privacy 문제를 다루면서 글을 마무리 지을까 한다.
내가 접한 Blog에 이 문제가 잘 정리되어 있다. 비록 Copilot에 대한 이야기를 하고 있지만, 전체 AI를 대상으로 생각해도 무방할 것이다. 해당 Blog의 내용을 요약하면서 내 생각을 조금씩 덧붙여 보았다.
다들 아시겠지만 AI가 제시해 주는 code는 Internet에 공개된 source code로 학습된 내용을 바탕으로 한다. 여기에 더해 내가 AI를 사용하면서 올리는 - 내가 직접 올리지 않더라도 tool을 통해서 올리게 되는, source code도 학습에 포함된다. 그럼 결국 AI가 다음을 알게 되는 것이고, 이는 적절한 질문을 통해 다른 사람에게 노출될 수 있는 위험이 있다는 것이다.
source code에 hard coding 된 secret 정보 및 민감한 code 그 자체: Secret 정보는 말할 필요도 없고, Source Code는 회사의 자원이다. 개인이 함부로 공유할 수 있는 자원이 아니다.
사용한 Package의 version 정보: 보안 문제가 있는 오래된 package나 library를 아직도 사용하고 있다면?
원하는 작업을 구체적으로 지시하기 위해서 첨부한 고객 혹은 사원 정보: 말해 무엇하랴.
이와 더불어 다음의 문제도 주의 깊게 살펴보아야 한다. 이는 Open Source Model을 사내에 설치해 사용했을 때에도 고려해야 하는 문제들이다.
AI에 의해 제안된 보안 문제가 있는 코드: AI는 학습된 data를 가지고 제안한다는 사실을 잊지 말자. 명시적이고 구체적으로 prompt를 통해서 AI에게 지시하지 않는다면 보통의 개발자가 많이 하는 실수가 포함된 코드가 생성될 수 있다. 더욱이 오래된 코드는 보안문제를 안고 있을 수밖에 없다. 더군다나 최신 정보는 AI 학습에 아직 사용되지도 않았다.
Hallucination을 이용한 악성 코드 배포: 없는 것을 마치 있는 것처럼 제시하는 Hallucination. 이건 AI가 제시하는 code에도 예외는 아니다. AI가 제안하는 package 중 존재하지 않는 것이 30% 정도라는 발표가 있었다 (YouTube Link). 표본이 좀 적다고 생각하지만 Hallucination 비율은 무시하지 못할 수준이며, 이렇게 AI에 의해서 제안된 Package를 실제 만들어 배포하는 놈들이 있다고 한다. 악성 코드를 심어서 말이다.
AI에 의해 제시되는 Code의 License 문제: 이 부분은 법적인 문제라... 일단 문제가 있다는 정도만 언급해 두려고 한다.
그렇기 때문에 AI를 다룰 때는 말썽을 일으키는 신입사원을 대하는 자세로 계속 검증해야 한다. 그런데 생산성을 위해 AI를 도입했기 때문에 개발 속도가 제일 중요한 개발 문화가 형성되면 이 검증의 단계를 생략하기가 쉬워진다. 문제가 터진 후에 복구하는 풍토가 당연한 것처럼 여겨지지 않았으면 하는 바람이다.