AI assisted coding?..

요새 개발한다는 사람들의 게시판에 가보면 자신의 IDE에 AI assisted extension을 붙여서 코드를 자동으로 완성하게 만든다든가 LLM과 상의해서 코드를 짜게 하는 기능들에 대해서 이야기 하는 이들이 늘었다.

그래서 나한테는 어떤 도움을 줄 수 있을지 시도해봤다.

결론부터 말하면 ChatGPT나 Copilot에게 지불하는 돈 말고도 기본적인 플러긴 - 흔히 말하는 GitHub-Copilot이 있어야 된다. 이것은 필수적인 플러그인이라 이게 없으면 아무것도 할 수 없다.

사실 인터넷 검색만 조금 해보면 Github Copilot이 어찌보면 업계 표준으로 등장해서 거의 필수적인 툴이 되어버린 것을 알 수 있다. 그러니까, 다른 툴의 사용법도 숙지해야 하지만 아니 잘 몰라도 되지만 무엇보다도 Github copilot (이것은 MS copilot과는 다르다)의 사용법도 잘 알고 있어야 한다는 말도 된다. 이게 나온지가 꽤 되고 그 동안 많은 이들이 사용해왔기 때문에 꽤 많이 다듬어져있다.

여태 나와있는 IDE들 중에 VS code라든가 JetBrains 같은 것들은 자체적으로 지원이 되고 Xcode 같은 것들은 누군가 만들어놓은 extension을 가져다 붙이는 방법으로 사용할 수가 있다. 아마도 github에서 자체적으로 지원을 하게 되는 식으로 가거나 하겠지만 apple이 자체적으로 해줄 일은 만무하겠지 한다.

이것은 공개된 코드들을 이용해서 학습을 한 뒤에 그것을 누구든 재사용이 가능하게끔 만들어놓은 툴이기 때문에 어떤 코드를 가져다가 학습했냐에 따라서 결과의 품질이 결정된다고 해도 될 것 같다. 지금처럼 python이라든가 JavaScript의 사용자층이 넓은 시절에는 당연히 양질의 코드도 이 분야에 많을 것이라 분명히 좋은 결과를 얻울 수 있을 것이다. 반면에 C++ 같은 언어는 속도는 매우 빠르지만 사용자층이 상대적으로 작아서 기대이하 수준의 코드가 생성되는 것을 눈으로 볼 수 있다.

이것은 어찌보면 좋은 것이기도 하고 어찌보면 나쁘다고 할 수 있을 것 같은데, 어쨌든 실상은 그렇다는 거다. 지원되는 언어가 꽤 다양할 것 같지만 그것들은 뭐랄까 속도에 별로 연연하지 않는 최근에 나온 언어들에 한정되고 이제는 거의 신선급의 할배들이나 쓴다는 (내가 좋아하는) perl 따위는 지원하지 않는다.

어쨌든 중요한 것은 내가 뭔가를 한다고 할 때 이게 기본 베이스를 깔아주고 시작할 수 있으니까 시간이 굉장히 절약되는 측면은 있다. 내가 가진 코드 자원 중에 자주쓰고 언제나 불러다쓸 만한 것들이 많다면야 구태여 도움을 받을 일이 없지만 그런 것들이 별로 없고 내 머리 속에 가지고 있는 코드 자원도 희박하다면 분명히 도움을 받을 수가 있다. 아무 것도 모르지만 코드를 하겠다고 뛰어들었다면 적어도 남들이 해놓은 것을 보면서 개념학습도 하면서 결과물도 낼 수 있으니까 중간은 가게 되는 거다.

그렇다면 매달 $10씩 내고 쓸만한 가치가 있을까? 여기에 대해서는 의견이 분분한 것 같다. $10의 가치를 어느 정도로 두느냐에 따라 다를텐데, 어쩌다가 인터넷 쇼핑을 실수로 해서 엉뚱한 걸 주문하더라도 $10은 그냥 날아가는 세상이다. 반품하기에도 애매한 액수이기도 하고. 그런 의미에서 가끔씩 도움을 받는 조건으로 $10 쯤 지출하는 것은 아무것도 아니라고 생각할 수 있고, 심각하게 받아들여서 과연 추천받은 코드가 나한테 $10의 도움을 줄 수 있느냐? 라고 짜게 생각하면 그 정도는 안된다고 할 수 있다. 어찌보면 최상급의 권장 코드를 받지 못할 걸 괜히 어설픈 걸 받아서 주문서를 이리 고치고 저리 고치고 또 결과물을 평가하고 불평하고 하는 것 보단 맘편히 새로 작성하는 것이 나을 수도 있으니까.

그래도 최소한 군더더기가 없는 코드로 만들어준다든가 주석을 강제로 붙여주게 한다든가 또는 취약점을 체크해달라고 할 때는 분명히 유용하다. 다만 코드가 하나의 파일이라든가 이런 저런 전역변수를 써서 여러 개의 파일을 한꺼번에 들여다봐야 한다든가 하는 식으로, 한마디로 거지같이 짜 놓은 경우면 역시나 관리하기가 불편해진다. 다들 알다시피 코드가 보기 좋게 잘 짜여지 있는 경우는 뭔지 근원을 알 수 없는 변수들이 등장하거나 그 변수들의 타입이 이랬다 저랬다 바뀌기도 하면서 그것들이 기능을 구현하는데 주요한 역할을 하게 만들어져있다거나 하는 것인데, 이런 인간들은 어딜가나 널려있어서 사실 github copiolt을 잘 써서 이런 이들이 만들어놓은 쓰레기 코드를 조금이라도 정화해서 쓸 수 있게 만든다면 사실 $10이면 감사할 지경이 될 수도 있다.

원치 않게 이렇게 코드를 더럽게 짜는 이들과 협업을 해야 한다든가, 이들이 벌려놓은 일을 (모든 프로젝트가 다 망가진 뒤에) 수습하러 들어와야 한다고 하면 최소한 Github copilot을 사용해서 정신이 극도로 피폐해지는 것은 막을 수 있다고 본다. 최소한 읽기 편한 수준으로 simplfy/refine을 하는 것이 가능하니까 (물론 이런 저런 파일에 ester egg를 숨겨두듯 하는 ㄱㅅㄲ들의 코드의 경우는 쉽지 않을 수 있다).

뒷방 늙은이처럼 옛날 방식이나 고수하고 앉아서 불평할 시간에 이런 새로운(?) 툴은 빨리 배우고 습득하는 게 장기적으로 업계에서 오래 머물게 하는 데 도움이 된다고 본다. 그렇다고 어린 애들이 이것을 잘 하느냐? 그렇게 물어보면 전혀 그렇지 않다. 어린 애들도 대부분 다들 게으르다.

아직 verilog라든가 산업계에서 사용하는 언어들에게는 아직 문이 열려있지 않지만 이 또한 멀지 않았다고 본다. 특히나 이 분야는 클리셰처럼 쓰는 스크립트가 대부분이라 10명이 하던 일을 2-3명이 여유롭게 하게 되는 시절도 머지 않았다. 물론 개념이 탑재된 2-3명이 되겠지만.

컴퓨터 언어를 잘 해왔듯 이젠 LLM과 잘 소통하고 무엇을 만들어야 하고 그걸 위에 내 역할이 뭔지 그래서 내가 뭘 만들어야 하는지 개념이 확실한 이들만 살아남는다는 데는 이견이 없다. AI도 스스로 돕는자를 돕지 AI가 모든 것을 해주길 바라는 이를 도울 수는 없는 거다.