생성형 AI의 잠재력이라든가 쓸 만한 곳을 이야기할 때 항상 상위권으로 랭크되는 영역이 바로 ‘코딩 (Coding)’입니다. ‘Github Copilot: 당신의 AI 동료 프로그래머’, ‘OpenAI Codex: 자연어를 코드로’, ‘Devin: 최초의 AI 소프트웨어 엔지니어’ 같은 헤드라인은 전 세계 개발자 커뮤니티의 상상력을 사로잡고 흥분시켰죠. 우리나라의 기업에서도 생성형 AI를 개발 작업에 활용하는데 큰 관심을 가지고 있습니다 - 그게 새로운 코드를 만들어 내는 것이든, 아니면 메인프레임 코드를 파이선 코드로 전환하는 마이그레이션이든 간에요.

오늘은, 컴퓨터 사이언티스트이자 개발자, 기업가인 일라이 후튼 (Eli Hooten)과 함께 생성형 AI가 소프트웨어 개발에 미치는 영향에 대해서 이야기해 봅니다. 모바일 로봇 공학, HCI (Human-Computer Interface), 소프트웨어 테스팅, 프로그래밍, CI/CD, 코드 분석 및 자동화 분야에서 많은 경험을 쌓은 일라이는 자신만의 독특한 관점으로 이야기를 풀어냅니다. 반더빌트 대학교에서 박사 학위를 받은 후, 일라이는 GameWisp를 공동 창업해서 6년 동안 CTO로 일했습니다. 여기서 제품 설계를 이끌고 소프트웨어 팀을 키우는 과정에서, 신뢰하기 힘든 코드에 대한 불만이 많았다고 합니다. 이런 깨달음을 바탕으로, 코드 커버리지 (SW 테스트에서 사용하는 지표 중 하나로, 코드 실행 여부를 바탕으로 코드의 품질과 완성도를 측정하는 방법) 솔루션 Codecov에 공동 창업자 겸 CTO로 합류했습니다. 이후 Codecov가 Sentry에 인수되었고, 현재 일라이는 Sentry의 엔지니어링 디렉터로 일하고 있습니다.

이 인터뷰에서는, 생성형 AI가 소프트웨어 개발 환경에 미치는 영향, 그리고 향후 몇 년간 개발자가 ‘코딩 자동화’ 관점에서 기대할 만한 것들이 무엇인지에 대한 일라이의 생각을 살펴볼 수 있습니다.

Q. 일라이 안녕하세요? 인터뷰에 응해주셔서 감사합니다. HCI (Human-Computer Interaction)을 공부한 입장에서, 지금 우리가 경험하고 있는 ‘생성형 AI 혁명’이 올 것이라고 예상했나요?

제가 공부하고 연구한 것들을 생각해 보면, 아마도 제 살아 생전에 AI 분야에서 이런 발전이 이루어질 거라고 생각하는 것 자체는 어찌보면 당연할 겁니다. 그렇지만, 일반 대중들이 지금같은 방식으로, 지금같은 규모로 AI를 접할 것이라고는 예상 못했고, 이런 발전이 이렇게 빨리 이루어질 거라고도 생각 못했습니다. 10년 전만 해도 Copilot이나 ChatGPT 같은 AI 도구가 늘상 하는 업무들에 의미있는 도움이 될 거라고 상상을 못했는데, 어느새 그런 세상에 살고 있네요.

Q. LLM이 개발 - 특히 코딩- 의 방법, 관행을 변화시키고 있는데요. 혹시 코딩이나 테스트 하는 과정에서 실무적으로 LLM을 테스트 또는 활용해 보셨나요? 만약 해 보셨다면, 쓸만한 곳은 어떤 곳들이고, 어떤 한계가 있다고 생각하세요?

코딩이나 테스트에 LLM을 적용해 보려고 몇 가지 모델을 써 봤는데, 사실상은 ChatGPT를 주로 사용하고 있어요. 제가 느낀 가장 큰 한계점은, 그냥 ‘전반적으로 코드를 개선하거나 오류를 찾는 방법’과 같은 질문은 별 쓸모가 없다는 거예요. 우리는 빨리 작업을 하니까, LLM에 개발자가 뭔가 개선을 해 달라고 요청하면 바로 도움이 되는 답변을 내놓기를 바라지만, 실제로 그렇게 하긴 힘들어요. 질문을 어떤 식으로든 수정해 가면서, 운이 좋아서 효과가 있을 때도 있지만. LLM이 진짜 유용해질 때는 언제냐 하면, 확실히 집중해야 할 코드 부분이 파악이 되고 나서 “이 코드에서 정확히 어떤 부분을 변경해야 하는지 알려줘”같은 요청을 할 수 있을 때예요.

그리고, 자주 잊어버리기 쉬운 것들을 찾고 싶을 때 큰 도움이 돼요. 개발자들이 잊어버리기 쉬운 정규 코드 표현식이라든가, 소프트웨어 개발하면서 필요는 한데 어려운 내용이 나왔을 때, 프롬프트로 물어보면 LLM이 구체적인 답을 잘 해 줍니다. 물론 더블체크는 필요하지만, 옛날 코딩 공부할 때 봤던 책을 뒤지거나 StackOverflow 사이트에서 찾는 것보다는 훨씬 편하고 빠르죠.

아직 남아있는 한계라면, LLM이 생성한 코드가 실제로 좋은 코드인지 여부를 판단하는게 어려운 문제라고 생각해요. 몇 가지 이유 때문인데요:

  • 가끔은 생성된 코드가 그냥 누가봐도 나쁜 코드일 때가 있어요. 아마 문제 정의를 잘못했거나 아니면 풀어야 하는 문제를 적당히 정의해서 그럴 수 있어요.

  • 사실 ‘좋은 코드’라는 게 어느 정도는 주관적일 수 밖에 없고, 그래서 품질 표준 자체도 보통 개발 팀간에 논의하고 합의를 해야 하는 거죠. 어떤 팀 입장에서는 뭐 충분히 좋다고 생각하는 코드가 다른 팀이라든가 다른 프로그래밍의 맥락에서는 전혀 받아들일 수 없을 수도 있습니다. 이 부분은 하나의 절대적인 답이 있는 게 아니라서, 지금 사람이 쓴 코드에 하듯이, 개발하는 팀들이 스스로 설정해서 사용할 수 있는 외부의 코드 품질 진단 도구에 의존할 수 밖에 없을 겁니다.

Q. LLM 트레이닝에 사용되는 데이터의 규모를 생각할 때, 그 모든 데이터들이 항상 높은 품질 기준을 충족하지는 못할 수도 있을 겁니다. 그런 관점에서, LLM이 신뢰할 만한 코드를 생성한다고 믿을 수 있다고 생각하세요, 아니면 명확한 한계가 있지만 시간을 절약해 주는 도구 정도로 보는게 낫다고 생각하세요? 그리고, AI 기반 코딩 어시스턴트에 대해서는 어떻게 생각하세요?

현재로서는, LLM을 활용해서 코딩하는 모든 개발자에게 ‘LLM이 코딩을 못하는 나 대신 해 주는 마법의 도구가 절대 아니니 시간을 절약하는 도구로 생각해라’고 조언하고 있어요. AI가 만들어내는 답변에서도 카피 앤 페이스트 (Copy & Paste) 문제가 급증하고 있는데, 이것도 그저 공개된 데이터셋에 질 나쁜 코드를 계속 추가하는 셈이예요. 코딩 어시스턴트도 이런 현상은 마찬가지라고 생각합니다. 일반적으로는 코딩 어시스턴트가 코드를 더 잘 만들고 테스트하고 고칠 수 있겠지만, 완벽하지는 않아요.

그렇지만, 앞으로 더 긍정적인 변화가 있을 겁니다. 내 비즈니스 영역에 특화된 독점적인 데이터로 훈련하고 실행할 수 있는 LLM 구축 도구들이 빠르게 등장하고 있는데, 기업에서 자체의 데이터로 자체의 모델을 학습한다면 아마 AI가 훨씬 나은 방향으로 최적화될 수 있을 겁니다. 생성하는 코드의 품질도 크게 향상될 거예요 - 하지만, 여전히 제대로 작동하게 하려면 사람이 검토 과정에 참여해야 할 거예요.

Q. 코딩과 테스트용 AI 도구의 개발이라는 관점에서, ‘오픈소스’가 중요한가요?

오픈소스 AI에 대한 뉴스가 뭐 거의 매주 나오는 것 같은데, 사실 소프트웨어 개발자들이 생각하는 ‘오픈소스’는 지금 AI 영역에서 이야기하는 오픈소스하고는 좀 달라요. ‘오픈소스 AI’가 좋으냐 나쁘냐 갑론을박이 많은 걸로 아는데, 실제로 그게 뭘 뜻하는지 자체가 정확히 동의된 바가 없어요. 오픈소스를 정의하는 기관, OSI (Open Source Initiative)도 ‘오픈소스 AI’의 분류에 필요한 기준을 아직 결정하지 못했고, 현재 OSI의 한 그룹에서 이 정의를 명확히 하는 작업이 진행 중인 것으로 압니다. 문제는, 과연 세부 사항이나 이해 관계의 충돌, AI가 변화하는 속도 등에 비춰볼 때 OSI가 도대체 언제 이 문제를 해결할 수 있을지가 불투명하다는 거예요.

그런 전제가 있다고 치고, 그럼에도 불구하고 오픈소스 코드는 LLM을 훈련하는데 사용되는 중요한 코드고, 따라서 오픈소스 코드를 계속해서 유지한다면 LLM이 소프트웨어 개발의 발전방향 (새로운 도구, 프레임웍, 프로그래밍 패러다임 등)을 잘 따라잡고 이용도 하면서 발전할 수 있을 거라고 생각합니다. LLaMA 3와 같은 오픈소스 모델은 많은 소프트웨어 개발자들이 독립적으로 작업하는 과정에서 더 나은 모델로 발전할 수 있을 거예요. “LLM이 본질적으로 폐쇄형 모델로 만들어지고 사용되는 것이 최적의 방법이다”라는 생각은 근시안적인 생각이예요. LLM도 다른 오픈소스 프로젝트와 마찬가지로 오픈소스로서의 이점이 얼마든지 도움이 될 겁니다.

Q. 최근에 ‘Running a Red Light: An Investigation into Why Software Engineers (Occasionally) Ignore Coverage Checks’라는 논문을 공동으로 썼는데요. 이 문제의 해결을 위해서, 전통적으로 사용되는 소프트웨어 테스트 도구를 AI가 어떻게 개선할 수 있을까요? 그리고 ‘예측 분석(Preditive Analytics)’의 역할은 무엇일까요?

저는 AI가 실제로 서로 다른, 다양한 오류 조건과 문제의 맥락을 코드로 전환하는 작업을 꽤 잘 할 수 있다고 생각합니다. 그런 점에서 AI는 생성된 오류를 해석하고 그 원인 및 오류를 피하기 위한 방법을 평이한 영어(언어)로 이야기해주는 ‘통역자’의 역할을 하는 거죠. 시간이 지나면, 테스트 도구에도 이것과 비슷한 접근 방식을 도입하고자 하는 시도가 생길 텐데, 그 상당수는 오히려 잘못된 정보 (노이즈)나 관련성이 낮은 정보를 제공하는 것처럼 보여서, 뭔가 인사이트를 얻으려면 엔지니어링 팀이 상당한 시간을 들여서 조정, 설정을 해야 할 겁니다. 이럴 때, AI가 테스팅 도구나 코드 품질 관리도구의 결과물을 개발자들이 유의미하게, 유용하게 활용할 수 있도록 프로세스를 자동화하거나 정보를 정리하는 역할을 하리라 생각합니다.

Q. 시간이 지날수록 AI가 더 많은 코딩과 테스트 작업을 하게 될 것은 분명한데, 특히 주니어 레벨의 개발자들은 미래에 대비하려면 어떻게 어떤 기술을 익혀야 될까요? 학생들이 변화하는 환경에 대비할 수 있게 도와주려면, 컴퓨터 사이언스 커리큘럼은 어떻게 발전해야 된다고 생각하세요?

생성형 AI가 개발과 관련된 논의의 마당에 큰 주제가 되었을 때, 처음에 저는 초급 엔지니어의 고용 안정성이 가장 걱정스러웠어요. 그 때는, AI가 하급 엔지니어의 일을 할 수 있을 거라고 생각했거든요 - 물론 아직까지 그런 일이 대규모로 일어난 상황은 아니지만요. 저는 AI가 바쁜 업무를 줄여줘서 소프트웨어 팀 규모를 더 간소화하게 도와줄 수는 있지만, 그 역할 자체를 없애지는 않을 거라고 봐요. 물론 앞으로 모든 초급 개발자들이, 기존에 익혀야 했던 기술들 외에도 ‘생성형 AI’ 도구를 자기가 하는 일에 연동하고 쓰는 방법을 배워야 할 거예요. 혼자서 시간을 내서 하든 아니면 어디 다른 곳에서 배우든, 이건 필수적인 기술이 될 거예요. 학교 환경에서라면, 학생들이 이런 기술을 무조건 배워야 하니까 챗GPT나 Copilot, 아니면 그 비슷한 도구 사용법을 커리큘럼에 포함하거나 실습 과정같은 것을 개발하는 것이 좋겠죠. 이미 일부 소프트웨어 개발을 가르치는 교육기관에서 소프트웨어 개발 뿐 아니라 테스트, 디버깅 영역에도 초점을 맞추고 교육을 하는 것으로 아는데, 여기서 생성형 AI가 테스팅 같은 곳에 많이 사용되기 시작하고 있어요. 학교 입장에서도, 이런 발전되고 새로운 커리큘럼이 있어야만 학생들이 관심을 가지겠죠.

Q. 향후 10년을 내다볼 때, 연구자들이 우선순위를 두어야 할 AI 분야의 '거대한 도전과제'는 어떤 것이 있다고 보세요? 그리고, 일상적으로 하는 업무 영역 외에 특별히 관심을 가지고 있는 연구 분야가 있나요?

일반적으로 얘기했을 때, AI는 광범위한 문제 영역을 탐색하고 어떤 솔루션들을 찾아내서 이게 실행 가능한지 아닌지 판단을 빠르게 하는데 탁월하다고 생각해요. 이미 임상시험 효율성을 높여서 기초 연구의 속도를 높이고, 알츠하이머라든가 파킨슨 병을 해결하는데 도움이 되는 등의 사례도 있죠. 궁극적으로는, 어떤 문제가 있을 때 가능한 해결책을 탐색하는 것부터 데이터의 해석, 나아가 과학 연구 논문 자체를 쓰고 출판하는 것까지도, 사실상 과학적 연구 과정의 거의 모든 부분에 AI가 활용되리라고 생각해요.

Q. 컴퓨터 사이언티스트, 개발자, 또는 ML 엔지니어가 되고 싶은 사람들에게 추천해 주고 싶은 책이 있을까요?

ML/AI 영역에서는, 사실 온라인으로 볼 수 있는 자료를 활용하라고 하고 싶어요. 온라인 강좌, YouTube 동영상, 블로그 게시물 등에서 얼마든지 AI/ML에 대해서 배울 수 있고, 고급 수준의 실무자든 아니면 진짜 초보자든 자기 수준에 적합한 자료를 그냥 구글 검색 한 번만 하면 찾을 수 있으니까요.

특정한 자료를 추천하는 것보다는, 일단 전반적으로 소프트웨어를 구축하는 것에 대한 전반적인 지식과 경험을 쌓는 것이 중요하다고 봐요. 많은 양의 코드를 빠르게 작성하는 건 그 어느 때보다도 쉬워졌지만, 여전히 제품을 만들고 마케팅을 이해하거나 아이디어를 비즈니스로 전환하는 방법을 배우는 데 ‘지름길은 없다’고 생각합니다. ‘기본적인 것’을 대신할 수 있는 방법도 마찬가지로 없어요. 생성형 AI의 작동 원리를 이해하지 못하면, 엔지니어로서 생성형 AI가 만들어내는 코드 자체가 무슨 가치가 있겠어요?

그 다음으로는, 코딩 작업 자체는 생성형 AI가 엄청나게 큰 도움을 줄 거라는 전제 하에서, 그렇다면 AI가 도움을 주지 못하는, 나만 할 수 있는 영역이 뭔가 하는 쪽으로 관심을 두세요. 시스템 설계, 아키텍처, 제품 디자인, 사용성, 고객 관계 등 영역은 소프트웨어 제품을 만드는데 여전히, 그리고 앞으로도 매우 중요한 영역이예요. 생성형 AI가 벌어 준 시간을 활용해서 다른 분야에서 지식과 경험을 쌓으세요.

솔직히, 책 추천을 저한테 부탁할 필요가 뭐가 있나요? 챗GPT가 있는데요 ㅎㅎ

읽어주셔서 감사합니다. 재미있게 보셨다면 친구와 동료 분들에게도 뉴스레터를 추천해 주세요.

Reply

Avatar

or to participate

Keep Reading