2021.07.09

백지장도 'AI'가 맞들면 더 낫다··· 코딩 돕는 ML 도구 3가지

Simon Bisson | InfoWorld
깃허브 코파일럿(Github Copilot), 딥데브(DeepDev), 인텔리코드(IntelliCode) 등 코드에 중점을 둔 머신러닝 애플리케이션이 더 나은 코드를 더 빠르게 제공할 수 있도록 지원하고 있다. 

코로나19 팬데믹으로 인한 디지털 트랜스포메이션 가속화는 대부분의 기업이 얼마나 준비되지 않았는지를 보여줬다. 여전히 해결되지 않은 큰 문제는 ‘앱 공백(App gap)’, 즉 최종 사용자가 효율적으로 업무를 처리하는 데 필요한 애플리케이션의 부족이다. 로우코드 및 노코드 도구가 UI 빌더와 RPA와 함께 격차를 메우는 데 어느 정도 역할을 했지만 아직 해야 할 일이 많다. 
 
ⓒGetty Images

한 가지 옵션은 머신러닝을 사용해 개발자의 생산성을 향상시키는 것이다. 예를 들면 이미 기본 규칙 기반 도구가 코드 자동 완성과 메서드 노출에 사용되고 있다.

그렇다면 여기서 나아가 대규모 퍼블릭 코드 데이터세트를 구축해 일반적인 설계 패턴이 어떻게 적용되는지, 어떤 알고리즘이 어떤 컨텍스트에서 사용되는지 그리고 개발자가 퍼블릭 API를 어떻게 활용하는지 공유하는 건 어떨까? 

깃허브 코파일럿(GitHub Copilot): AI 코딩 비서 
그것이 깃허브가 한 일이다. 코드 편집기와 함께 작동하면서 다음 단계를 제안하는 서비스를 구축하고 학습시킨 것이다. 이는 오픈 AI의 코덱스(Codex) 머신러닝 모델을 사용한다. 코덱스는 널리 알려져 있는 GPT-3와 같은 코드 중심 언어 모델이다. 

해당 서비스는 ‘코파일럿’이라고 명명됐고, ‘AI 파트너 프로그래머(AI pair programmer)’ 역할을 한다. 코파일럿은 퍼블릭 리포지터리에 있는 수백만 줄의 코드를 학습했다. 비주얼 스튜디오 코드(Visual Studio Code) 확장 프로그램으로 설치해 사용할 수 있다. 

이는 현재 편집기 창의 컨텍스트 내에서 작동하며, 입력 내용을 기반으로 제안을 제공하고, 사용 내역에 관한 세부 사항을 피드백 해준다. 프라이빗 코드는 새로운 코드 샘플로 해당 서비스를 학습시키는 데 쓰이지 않는다. 

단 코파일럿에서 생성된 코드가 정확할 것이라고 기대해선 안 된다. 우선 이러한 유형의 애플리케이션이 아직 초기 단계인 데다가 처음 데이터세트를 넘어서는 학습이 거의 없었기 때문이다. 물론 코파일럿을 쓰는 사람들이 많아질수록 이 서비스는 (사람들이) 제안된 코드를 어떻게 사용하는지 파악해 이를 강화학습에 이용하기 때문에 제안은 개선될 전망이다. 

그러나 사용하는 스니펫과 이를 어떻게 사용할지는 여전히 스스로 결정해야 한다. 또 보안 측면에서 코파일럿이 생성한 코드에 주의해야 한다. 깃허브가 코파일럿을 학습시키는 데 사용한 모든 코드를 검사하는 건 불가능하다. 디펜더봇(Depenabot) 및 코드QL(CodeQL) 보안 스캐너와 같은 도구를 사용할 순 있겠지만 결함 패턴, 일반적 버그를 가진 부실한 품질의 코드가 많다.  

이러한 위험에도 불구하고 코파일럿에는 흥미로운 점이 많다. 사용자의 주석을 가져와 코드로 변환하는 것, CI/CD 프로세스의 일부로 쓰일 수 있는 테스트를 제안하는 것 등이다. 

CI/CD 데브옵스 모델의 개발 및 테스트 부분에 AI를 접목하는 일은 매우 적절하다. 개발자의 업무 부담을 줄여 이들이 코드에 집중할 수 있게 해주기 때문이다. 그렇다 하더라도 이러한 테스트가 적절한지, 적절한 수준의 코드 커버리지 범위를 제공하는지 반드시 확인해야 한다. 편집기에서 결과 페이지를 살펴보고 승인하기 전에 가장 적합한 것이 무엇인지 확인할 수 있다. 

깃허브 코파일럿은 현재 프리뷰 상태다. 

딥데브(DeepDev): 개발자를 위한 최신 AI 모델 
마이크로소프트가 애플리케이션 개발자를 지원하기 위해 자체적인 머신러닝 모델 세트를 개발 중이다. 이것의 프로토타입인 딥데브 서비스는 아직 일반에 공개되지 않았지만 일부 문서는 볼 수 있다. 현재까지 공개된 내용에 따르면 딥데브는 깃허브 코파일럿과 유사한 기술을 사용하지만 더 광범위한 모델 세트인 것처럼 보인다.  

코파일럿과 마찬가지로 딥데브는 소스코드를 이해하고 사용하는 데 중점을 두고 여러 오픈소스 코드와 일반적인 문서를 혼합하여 학습했다. 일부 모델은 소스코드 라이브러리를 기반으로 한 추가 학습을 필요로 하는 일반적인 용도로 설계됐고, 반면에 특정 공통 작업을 처리하도록 설계된 모델도 있다. 

딥데브에 액세스하려면 적절한 API 키가 있어야 한다. 딥데브는 도구를 사용해  코드를 빌드하기 전에 시험해볼 수 있는 기능도 제공한다. 딥데브는 마이크로소프트의 머신러닝 모델을 통해 사용자의 도구를 확장하는 수단인 듯하다. CI/CD 파이프라인에 이러한 모델을 구축하면 코드를 체크인할 때 테스트를 생성할 수 있다. 

인텔리센스(IntelliSense)부터 인텔리코드(IntelliCode)까지 
인공지능(AI)의 도움을 받는 코딩은 개발 도구를 보강하는 흥미로운 진전이다. 비주얼 스튜디오의 인텔리센스와 인텔리코드와 같은 기술은 코드 자동 완성 그리고 코드 작성 시 코드를 디버그하는 실시간 컴파일 도구를 사용해 이미 개발의 효율성을 높이고 있다. 

인텔리코드는 깃허브의 퍼블릭 리포지토리를 사용해 코드 자동 완성 모델을 구축했고, 코드 품질 지표로 깃허브 별 등급을 사용한다. 

머신러닝 코딩 도구의 핵심은 맥락이다. API 세트를 사용하는 경우 코딩 도구는 (다른 사람의 API 사용 방식이 아니라) 사용자가 해당 API를 사용하는 방식에 반응해야 한다. 마찬가지로 코딩 도구는 사용자가 작성한 코드를 바탕으로 메소드에 적절한 오버로드를 제공해야 한다. 충분히 큰 학습 데이터와 반응형 모델이 필수적이다. 필요한 건 사용자가 원하는 결과물을 더 빠르게 제공하는 데 도움을 주는 도구다. 

아마도 인텔리코드가 가장 완성도 높고 사용하기 간편한 AI 비서일 것이다. 이미 익숙한 도구인 인텔리센스의 확장 프로그램처럼 느껴지기도 한다. 이는 비주얼 스튜디오에서만 사용할 수 있는 게 아니라 비주얼 스튜디오 코드 확장 프로그램으로도 사용할 수 있다. 일상적인 개발 환경에서 사용할 수 있다는 뜻이다. 

마이크로소프트는 표준 릴리즈와 함께 향후 출시될 기능을 실험해볼 수 있는 인사이더 빌드를 제공한다. 최신 인사이더 빌드에서 유용한 도구 한 가지는 (인식된 API에 샘플 호출을 표시하는) 파이썬용 API 샘플이다. 

별도의 편집기 창에서 인기도별로 그룹화된 항목을 찾을 수 있으므로 이를 코드에 복사해 붙여넣거나 아니면 단순히 API 사용 방법 가이드로 쓸 수 있다. 비주얼 스튜디오 코드의 빌트인 REPL과 연동해 사용자가 필요로 하는 응답을 제공하는 호출을 찾을 수도 있다. 

이 밖에 다른 인사이더 도구로는 일반적인 자바스크립트 라이브러리의 일자/시간 형식을 생성하는 방법이 있다. 사용자가 선호하는 표시 방식을 선택할 수 있도록 예제를 제시한다. 

‘데이터 트랜스포메이션’을 위한 코드 생성 
예제로 프로그래밍하는 것은 개발 프로세스에 AI 지원을 추가하는 또 다른 유용한 방법이다. 마이크로소프트 리서치(Microsoft Research)의 ‘프로즈(PROSE; Program Synthesis using Examples)’는 이미 엑셀(Excel)과 여러 애저(Azure) 및 파워 플랫폼(Power Platform) 도구, SQL 서버에서 사용되고 있다.  

비주얼 스튜디오는 이를 인텔리코드의 리팩토링 도구의 일부로 사용해 코드에서 패턴을 찾고 재사용할 수 있는 위치를 알려준다. 이는 데이터를 추출하고 일관성 있게 변환하며 (입력을 받아 예상되는 출력 형식으로 전달하는) 코드를 생성할 때 유용한 방법이기도 하다. 

AI 지원 개발 도구는 편집기에 내장된 파트너 프로그래머라고 간주하는 게 가장 좋다. 이는 사용자를 대신해 코드를 생성하는 기계는 아니다(원하는 경우 가능하긴 하다). 오히려 개발 프로세스를 가속하고 버그를 줄이며 반복적인 작업을 자동화할 수 있는 일종의 조언이다. 

테스트를 제안하는 편집기를 사용하면 테스트 중심의 개발 도입을 지원할 수 있으며, 예상되는 출력을 기반으로 정규표현식 및 변환을 생성할 수 있는 곳에서 문자열 및 데이터 조작을 단순화할 수 있다. 

앱 공백을 해결하기 위해서는 코드가 더욱더 빠르고 일관되게 전달돼야 한다. 개발 프로세스에 머신러닝을 추가한다면 작업 흐름을 방해하지 않으면서도 수천 명의 개발자 두뇌(지혜)를 빌릴 수 있다. 이를테면 스택 오버플로우(Stack Overflow)와 같은 도구는 다른 개발자가 동일하거나 유사한 문제를 어떻게 해결했는지 예시를 제공해 도움을 줄 수 있다. 

이런 새로운 AI 기반 도구들은 한 단계의 진전을 의미한다. 이는 문서화되지 않은 수백만 줄의 코드를 분석하고 이해하며 (직접 검색할 필요 없이) 사용자의 필요에 맞는 스니펫을 찾는다. 사용자는 그냥 앉아서 코딩하고 AI의 제안을 검토하기만 하면 된다. ciokr@idg.co.kr


 



2021.07.09

백지장도 'AI'가 맞들면 더 낫다··· 코딩 돕는 ML 도구 3가지

Simon Bisson | InfoWorld
깃허브 코파일럿(Github Copilot), 딥데브(DeepDev), 인텔리코드(IntelliCode) 등 코드에 중점을 둔 머신러닝 애플리케이션이 더 나은 코드를 더 빠르게 제공할 수 있도록 지원하고 있다. 

코로나19 팬데믹으로 인한 디지털 트랜스포메이션 가속화는 대부분의 기업이 얼마나 준비되지 않았는지를 보여줬다. 여전히 해결되지 않은 큰 문제는 ‘앱 공백(App gap)’, 즉 최종 사용자가 효율적으로 업무를 처리하는 데 필요한 애플리케이션의 부족이다. 로우코드 및 노코드 도구가 UI 빌더와 RPA와 함께 격차를 메우는 데 어느 정도 역할을 했지만 아직 해야 할 일이 많다. 
 
ⓒGetty Images

한 가지 옵션은 머신러닝을 사용해 개발자의 생산성을 향상시키는 것이다. 예를 들면 이미 기본 규칙 기반 도구가 코드 자동 완성과 메서드 노출에 사용되고 있다.

그렇다면 여기서 나아가 대규모 퍼블릭 코드 데이터세트를 구축해 일반적인 설계 패턴이 어떻게 적용되는지, 어떤 알고리즘이 어떤 컨텍스트에서 사용되는지 그리고 개발자가 퍼블릭 API를 어떻게 활용하는지 공유하는 건 어떨까? 

깃허브 코파일럿(GitHub Copilot): AI 코딩 비서 
그것이 깃허브가 한 일이다. 코드 편집기와 함께 작동하면서 다음 단계를 제안하는 서비스를 구축하고 학습시킨 것이다. 이는 오픈 AI의 코덱스(Codex) 머신러닝 모델을 사용한다. 코덱스는 널리 알려져 있는 GPT-3와 같은 코드 중심 언어 모델이다. 

해당 서비스는 ‘코파일럿’이라고 명명됐고, ‘AI 파트너 프로그래머(AI pair programmer)’ 역할을 한다. 코파일럿은 퍼블릭 리포지터리에 있는 수백만 줄의 코드를 학습했다. 비주얼 스튜디오 코드(Visual Studio Code) 확장 프로그램으로 설치해 사용할 수 있다. 

이는 현재 편집기 창의 컨텍스트 내에서 작동하며, 입력 내용을 기반으로 제안을 제공하고, 사용 내역에 관한 세부 사항을 피드백 해준다. 프라이빗 코드는 새로운 코드 샘플로 해당 서비스를 학습시키는 데 쓰이지 않는다. 

단 코파일럿에서 생성된 코드가 정확할 것이라고 기대해선 안 된다. 우선 이러한 유형의 애플리케이션이 아직 초기 단계인 데다가 처음 데이터세트를 넘어서는 학습이 거의 없었기 때문이다. 물론 코파일럿을 쓰는 사람들이 많아질수록 이 서비스는 (사람들이) 제안된 코드를 어떻게 사용하는지 파악해 이를 강화학습에 이용하기 때문에 제안은 개선될 전망이다. 

그러나 사용하는 스니펫과 이를 어떻게 사용할지는 여전히 스스로 결정해야 한다. 또 보안 측면에서 코파일럿이 생성한 코드에 주의해야 한다. 깃허브가 코파일럿을 학습시키는 데 사용한 모든 코드를 검사하는 건 불가능하다. 디펜더봇(Depenabot) 및 코드QL(CodeQL) 보안 스캐너와 같은 도구를 사용할 순 있겠지만 결함 패턴, 일반적 버그를 가진 부실한 품질의 코드가 많다.  

이러한 위험에도 불구하고 코파일럿에는 흥미로운 점이 많다. 사용자의 주석을 가져와 코드로 변환하는 것, CI/CD 프로세스의 일부로 쓰일 수 있는 테스트를 제안하는 것 등이다. 

CI/CD 데브옵스 모델의 개발 및 테스트 부분에 AI를 접목하는 일은 매우 적절하다. 개발자의 업무 부담을 줄여 이들이 코드에 집중할 수 있게 해주기 때문이다. 그렇다 하더라도 이러한 테스트가 적절한지, 적절한 수준의 코드 커버리지 범위를 제공하는지 반드시 확인해야 한다. 편집기에서 결과 페이지를 살펴보고 승인하기 전에 가장 적합한 것이 무엇인지 확인할 수 있다. 

깃허브 코파일럿은 현재 프리뷰 상태다. 

딥데브(DeepDev): 개발자를 위한 최신 AI 모델 
마이크로소프트가 애플리케이션 개발자를 지원하기 위해 자체적인 머신러닝 모델 세트를 개발 중이다. 이것의 프로토타입인 딥데브 서비스는 아직 일반에 공개되지 않았지만 일부 문서는 볼 수 있다. 현재까지 공개된 내용에 따르면 딥데브는 깃허브 코파일럿과 유사한 기술을 사용하지만 더 광범위한 모델 세트인 것처럼 보인다.  

코파일럿과 마찬가지로 딥데브는 소스코드를 이해하고 사용하는 데 중점을 두고 여러 오픈소스 코드와 일반적인 문서를 혼합하여 학습했다. 일부 모델은 소스코드 라이브러리를 기반으로 한 추가 학습을 필요로 하는 일반적인 용도로 설계됐고, 반면에 특정 공통 작업을 처리하도록 설계된 모델도 있다. 

딥데브에 액세스하려면 적절한 API 키가 있어야 한다. 딥데브는 도구를 사용해  코드를 빌드하기 전에 시험해볼 수 있는 기능도 제공한다. 딥데브는 마이크로소프트의 머신러닝 모델을 통해 사용자의 도구를 확장하는 수단인 듯하다. CI/CD 파이프라인에 이러한 모델을 구축하면 코드를 체크인할 때 테스트를 생성할 수 있다. 

인텔리센스(IntelliSense)부터 인텔리코드(IntelliCode)까지 
인공지능(AI)의 도움을 받는 코딩은 개발 도구를 보강하는 흥미로운 진전이다. 비주얼 스튜디오의 인텔리센스와 인텔리코드와 같은 기술은 코드 자동 완성 그리고 코드 작성 시 코드를 디버그하는 실시간 컴파일 도구를 사용해 이미 개발의 효율성을 높이고 있다. 

인텔리코드는 깃허브의 퍼블릭 리포지토리를 사용해 코드 자동 완성 모델을 구축했고, 코드 품질 지표로 깃허브 별 등급을 사용한다. 

머신러닝 코딩 도구의 핵심은 맥락이다. API 세트를 사용하는 경우 코딩 도구는 (다른 사람의 API 사용 방식이 아니라) 사용자가 해당 API를 사용하는 방식에 반응해야 한다. 마찬가지로 코딩 도구는 사용자가 작성한 코드를 바탕으로 메소드에 적절한 오버로드를 제공해야 한다. 충분히 큰 학습 데이터와 반응형 모델이 필수적이다. 필요한 건 사용자가 원하는 결과물을 더 빠르게 제공하는 데 도움을 주는 도구다. 

아마도 인텔리코드가 가장 완성도 높고 사용하기 간편한 AI 비서일 것이다. 이미 익숙한 도구인 인텔리센스의 확장 프로그램처럼 느껴지기도 한다. 이는 비주얼 스튜디오에서만 사용할 수 있는 게 아니라 비주얼 스튜디오 코드 확장 프로그램으로도 사용할 수 있다. 일상적인 개발 환경에서 사용할 수 있다는 뜻이다. 

마이크로소프트는 표준 릴리즈와 함께 향후 출시될 기능을 실험해볼 수 있는 인사이더 빌드를 제공한다. 최신 인사이더 빌드에서 유용한 도구 한 가지는 (인식된 API에 샘플 호출을 표시하는) 파이썬용 API 샘플이다. 

별도의 편집기 창에서 인기도별로 그룹화된 항목을 찾을 수 있으므로 이를 코드에 복사해 붙여넣거나 아니면 단순히 API 사용 방법 가이드로 쓸 수 있다. 비주얼 스튜디오 코드의 빌트인 REPL과 연동해 사용자가 필요로 하는 응답을 제공하는 호출을 찾을 수도 있다. 

이 밖에 다른 인사이더 도구로는 일반적인 자바스크립트 라이브러리의 일자/시간 형식을 생성하는 방법이 있다. 사용자가 선호하는 표시 방식을 선택할 수 있도록 예제를 제시한다. 

‘데이터 트랜스포메이션’을 위한 코드 생성 
예제로 프로그래밍하는 것은 개발 프로세스에 AI 지원을 추가하는 또 다른 유용한 방법이다. 마이크로소프트 리서치(Microsoft Research)의 ‘프로즈(PROSE; Program Synthesis using Examples)’는 이미 엑셀(Excel)과 여러 애저(Azure) 및 파워 플랫폼(Power Platform) 도구, SQL 서버에서 사용되고 있다.  

비주얼 스튜디오는 이를 인텔리코드의 리팩토링 도구의 일부로 사용해 코드에서 패턴을 찾고 재사용할 수 있는 위치를 알려준다. 이는 데이터를 추출하고 일관성 있게 변환하며 (입력을 받아 예상되는 출력 형식으로 전달하는) 코드를 생성할 때 유용한 방법이기도 하다. 

AI 지원 개발 도구는 편집기에 내장된 파트너 프로그래머라고 간주하는 게 가장 좋다. 이는 사용자를 대신해 코드를 생성하는 기계는 아니다(원하는 경우 가능하긴 하다). 오히려 개발 프로세스를 가속하고 버그를 줄이며 반복적인 작업을 자동화할 수 있는 일종의 조언이다. 

테스트를 제안하는 편집기를 사용하면 테스트 중심의 개발 도입을 지원할 수 있으며, 예상되는 출력을 기반으로 정규표현식 및 변환을 생성할 수 있는 곳에서 문자열 및 데이터 조작을 단순화할 수 있다. 

앱 공백을 해결하기 위해서는 코드가 더욱더 빠르고 일관되게 전달돼야 한다. 개발 프로세스에 머신러닝을 추가한다면 작업 흐름을 방해하지 않으면서도 수천 명의 개발자 두뇌(지혜)를 빌릴 수 있다. 이를테면 스택 오버플로우(Stack Overflow)와 같은 도구는 다른 개발자가 동일하거나 유사한 문제를 어떻게 해결했는지 예시를 제공해 도움을 줄 수 있다. 

이런 새로운 AI 기반 도구들은 한 단계의 진전을 의미한다. 이는 문서화되지 않은 수백만 줄의 코드를 분석하고 이해하며 (직접 검색할 필요 없이) 사용자의 필요에 맞는 스니펫을 찾는다. 사용자는 그냥 앉아서 코딩하고 AI의 제안을 검토하기만 하면 된다. ciokr@idg.co.kr


 

X