우리는 급변하는 기술의 시대를 살아가고 있습니다. 개발자의 역할과 의미는 시대에 따라 끊임없이 변화하고 있죠. 지금, 우리 앞에는 AI라는 거대한 물결이 다가왔습니다. 이는 피할 수 없는 흐름이자, 개발자에게 주어진 새로운 도전입니다.
AI 시대에 개발자에게 중요한 것은 속도와 문제 해결 능력입니다. 더 빠르고 효과적으로 AI 도구를 활용하여 문제를 해결할 수 있는지가 관건이 될 것입니다. 우리는 앞으로 어떤 기술의 변화가 찾아올지, 개발자의 역할이 어떻게 변화할지 정확히 예측할 수는 없습니다. 하지만 분명한 것은, 우리에게 주어진 무기를 잘 활용하여 시대의 흐름을 타고, 또 그에 맞는 개발자로서 성장해야 한다는 것입니다.
이 책을 통해 여러분이 AI 도구를 활용하여 개발자로서의 역량을 한 단계 더 높이고, 시대의 흐름을 선도하는 개발자로 성장하시기를 진심으로 바랍니다. 우리에게 주어진 AI라는 기회를 잘 활용하여, 더욱 의미 있는 문제를 해결하고 가치를 창출하는 개발자가 되시기를 응원하겠습니다.
저자_서지연(치즈)
[AI 코딩] AI 페어 프로그래밍이란?
페어 프로그래밍의 정의와 장점 그리고 한계점을 알아보겠습니다.
1. 전통적인 페어 프로그래밍
페어 프로그래밍은 두 개발자가 하나의 문제 해결을 함께 논의하며 프로그래밍하는 협업 기법입니다. 두 명이 함께 작업하면서 아이디어와 해결책을 바로바로 공유하며 실시간으로 피드백을 주고받기 때문에 실수를 줄일 수 있고, 더 나은 솔루션을 찾을 수 있습니다. 코드 품질 향상, 지식 공유와 멘토링, 협업과 의사소통 능력 강화, 복잡한 문제 해결, 프로젝트 관리 효율성, 팀워크와 동기 부여 관점에서 장점이 있습니다.
- 코드 품질 향상 : 두 개발자가 함께 코드를 작성하고 검토함으로써 버그를 초기에 발견하고 해결할 수 있습니다. 이는 코드의 신뢰성과 유지보수성을 향상시키며, 장기적으로 프로젝트의 품질을 높입니다.
- 지식 공유와 멘토링 : 경험이 많은 개발자와 적은 개발자 간, 혹은 다른 전문 지식을 가진 개발자 간의 지식과 기술이 자연스럽게 전달되는 기회를 제공합니다. 이를 통해 팀 전체의 역량이 강화됩니다.
- 협업과 의사소통 능력 강화 : 의사소통과 협업 능력을 향상시킬 수 있습니다. 이는 팀 내외부에서 다양한 이해관계자와 효과적으로 소통하는 데 필수적인 기술입니다.
- 복잡한 문제 해결 : 큰 시스템이나 복잡한 문제에 직면했을 때, 두 머리가 하나보다 낫다는 말이 있습니다. 페어 프로그래밍은 창의적인 해결책을 모색하고 다양한 관점에서 문제를 바라볼 수 있게 합니다.
- 프로젝트 관리 효율성 : 진행 상황을 더 자주 점검하고, 목표에 맞춰 지속적으로 조정할 수 있게 함으로써 프로젝트 관리의 효율성을 높일 수 있습니다.
- 팀워크와 동기 부여 : 공동의 목표를 향해 협력함으로써 팀워크가 강화되고, 개인적으로는 프로젝트에 더 책임감을 느끼게 됩니다. 이는 전반적인 동기 부여와 만족도를 높이는 데 기여합니다.
1.1 페어 프로그래밍 실천의 어려움
하지만 현실은 항상 쉽지 않습니다.
첫 번째 이유는 문화적 저항입니다. 개인 작업을 선호하거나 협업에 대한 가치를 충분히 인식하지 못할 수 있습니다. 공감대 형성에 실패한 거죠.
두 번째는 리소스의 제약입니다. 시간과 인력은 중요한 자산입니다. 페어 프로그래밍을 도입하는 초기에는 단기적으로 생산성 저하를 경험할 수 있습니다.
세 번째는 공간과 인프라 제약입니다. 효과적으로 페어 프로그래밍을 수행하려면 적절한 물리적 공간과 기술적 인프라가 필요합니다. 작업 공간이 협소하거나 장비가 부족하면 진행하기 어려울 수 있습니다.
네 번째로 구성원 간의 기술적 불일치를 들 수 있습니다. 페어 구성원 간의 기술 수준이나 경험이 크게 다르면 페어 프로그래밍이 효과적으로 진행되지 않을 수 있습니다. 이는 한쪽으로 치우치는 일방적 작업 분담 혹은 학습으로 이어질 수 있기 때문입니다.
마지막으로 성과 측정 방법과 보상 구조를 마련하기 어렵다는 겁니다. 개인의 성과를 중시하는 평가 및 보상 시스템에서 페어 프로그래밍과 같은 협업 기반 작업은 공감대를 이끌어내기 어려울 수 있습니다. 이 경우 협업을 장려하고 보상하는 문화와 시스템이 뒷받침되어야 합니다.
현실에서는 아무래도 제약조건이 많고 한정된 리소스 안에서 최대의 아웃풋을 내야 하는 경우가 많다 보니 사실 페어 프로그래밍, 멘토링 같은 것들은 꿈같은 이야기 같기도 합니다. 온보딩 문서는 있지만 차근 차근 옆에서 모든 것을 다 숙지할 때까지 도움을 받는 건 현실적으로 힘든 경우가 많습니다. 저 역시 저연차 시절, 그리고 새로운 직장 혹은 새로운 팀에 합류했을 때도 비슷한 느낌이 들었습니다.
이런 한계 속에서 우리는 어떻게 성장할 수 있을까요? 바로 AI 도구와의 페어 프로그래밍이 그 대안 혹은 보완재일 수 있습니다.
2. AI 페어 프로그래밍
왜 AI 도구를 프로그래밍에 사용해야 할까요? 이제부터 AI 도구들이 어떻게 페어 프로그래밍을 돕는지 그리고 얼마나 개발자 생산성에 도움이 되는지 알아보겠습니다.
프로그램을 돕는 대표적인 AI 도구로 깃허브 코파일럿(GitHub Copilot)을 들 수 있습니다. 깃허브 코파일럿은 깃허브와 오픈AI 기술이 결합된 AI 기반 페어 프로그래밍 도구입니다. 깃허브 코파일럿은 개발자가 코드를 더 빠르고 효율적으로 작성할 수 있도록 설계되었습니다. 프로그래머가 작성 중인 코드를 분석하고, 컨텍스트를 이해해 자동으로 코드를 제안합니다. 인터넷에 공개된 오픈 소스들로 학습했습니다.
코드를 자동으로 완성시켜주는 ‘IDE auto complete 기능과 뭐가 다르지?’라는 생각이 들 수 있습니다. 기존의 코드 완성 기능을 먼저 살펴보겠습니다. 널리 쓰이는 개발 도구인 젯브레인 인텔리제이의 코드 완성 기능은 개발자가 시작 문구를 쓰면 가장 유사한 코드 문구를 추천해 자동으로 나머지 완성 코드를 완성해줍니다.
개발 코드가 먼저 있고, 그다음 개발자의 의도, 마지막으로 자주 사용되는 패턴을 제시해 완성! 이런 단계로 코드를 작성합니다. 크게 다음과 같은 기능을 제공한다고 요약할 수 있습니다.
- 타입 매칭 완성(type matching completion)
- 문장 완성(statement completion)
- 자동 임포트(auto import)
그렇다면 깃허브 코파일럿은 어떤 기능을 할까요? 깃허브 코파일럿은 자연어 명령을 이해하고 그 기반으로 코드를 작성합니다. 심지어 그 반대도 가능합니다. 작성된 코드를 기반으로 자연어로 해석해내는 것 역시 가능하다는 뜻이죠. 또한 기본적으로 문맥(Context) 즉 컨텍스트를 이해하는 덕분에 다른 사람의 코드가 아닌 내 코드베이스를 기반으로 코드를 제안해줍니다. 그 덕분에 프로젝트에서 코드 일관성을 지킬 수 있습니다.
깃허브 코파일럿을 비롯한 AI 도구들은 정말 다양한 영역에서 활용 가능합니다. 코드 생성뿐 아니라 테스트 자동화, 코드 개선점 찾기, 잠재된 버그 찾아 수정하기, 문제 찾아내기, 에러 메시지 작성하기, 개발 문서 작성하기 등에 유용합니다. 마지막으로 개발 라이브러리나 프레임워크에 대한 질의 등을 자연어로 입력해 답변을 받을 수 있습니다. 사실 개발자의 업무 범위 모두라고 봐도 무방할 것 같습니다.
- 코드 생성: 데이터와 요구 조건을 기반으로 코드 생성. 개발 속도와 품질 향상
- 테스트 자동화: 코드 기반으로 테스트 작성. 소프트웨어 품질 향상
- 코드 개선: 더 나은 방법 혹은 잠재적인 버그나 문제를 사전에 검출
- 언어 처리: 다국어 처리,에러 메시지 생성, 문서 작성 등 텍스트 생성
- AI 기반 검색: 라이브러리, 프레임워크 등 검색
2.1 깃허브 코파일럿 동작 예시
간단한 예시를 함께 보겠습니다. VSCode에서 깃허브 코파일럿을 이용해 간단한 파이썬 스크립트를 짜보겠습니다. 먼저 제가 원하는 결과물에 대간단한 파이썬 스크립트를 짜보겠습니다. 먼저 제가 원하는 결과물에 대용해 이메일을 검증하는 함수입니다. 다음과 같이 요구사항을 적은 다음, 잠시 기다리면 코파일럿이 추천하는 로직이 뜹니다. 로직이 마음에 들면 탭을 눌러 반영하고 엔터를 칩니다. 이 과정을 반복하면 금방 코드가 완성됩니다.
정말 간단한 예시이긴 하지만 실제 서비스를 운영하다 보면 이렇게 한 번 쓰고 버리는 일회용성 스크립트도 자주 짜게 되니, 그만큼 편리하겠죠? 과거에 사용한 자동 완성 기능과 비교해 많이 다르다고 느끼셨을까요? 이처럼 코파일러를 이용하면 예를 들어 내가 파이썬을 몰라도, 요구사항만 잘 정의해 요청하면 원하는 코드를 구현할 수 있습니다!
3. 왜 AI 도구와의 페어 프로그래밍일까?
앞에서 예시로 든 이메일 검증 함수를 여러분이 손수 작성한다면 얼마나 시간이 걸리나요? 정규표현식을 나의 상황에 맞게 짜려고 하면, 간단한 요구 조건임에도 삽질을 하고, 실제 예외 케이스에 부딪혀 계속 수정하게 됩니다. 꼭 필요하지만 자주 사용하지 않는 기술이다 보니 그런 것 같습니다. 비단 정규표현식뿐 아니라 필수 기술이만 자주 사용하지 않아 까먹게 되는 기술이 많습니다.
“아는 것이 힘이다”라는 말이 있습니다. 하지만 이제 우리는 지식이 저렴한 시대에 살고 있습니다. 어떠한 사실을 안다는 것만으로는 큰 힘이 되지 못합니다. 특히 챗GPT(ChatGPT)가 세상에 나온 이후부터 단순 지식은 더욱그힘을잃고있습니다.
물론 이전부터 구글링을 통해서 지식을 찾을 수 있었지만, 파편화된 지식을 사람이 직접 찾고, 읽고, 또 내 상황에 맞는지 직접 확인해봐야, 나에게 적합한 지식인지 알 수 있었습니다. 나만의 요구사항 그 자체를 검색창에 넣을 수 없었기 때문입니다. 하지만 챗GPT 이후 많은 것이 변했습니다. 요구사항만 정확하게 전달하면 파편화되어 있던 지식을 잘 모아서, 심지어 내가 원하는 모양으로 얻을 수 있게 되었습니다.
이런 모습은 개발 쪽도 마찬가지입니다. 개발하면 절대로 빼놓을 수 없었던 스택오버플로의 트래픽이 챗GPT 공개 이후로 급락하고 있습니다.
스택오버플로에서 에러 메시지로 검색하고, 나와 같은 질문 중에서 최적의 해결법을 찾아 내 코드에 적용해 다시 디버깅하고, 다시 찾던 시대가 이제 저물고 있습니다. 그럼 이런 상황에서 우리가 갖추어야 할 무기는 무엇일까요?
3.1 AI 페어 프로그래밍 시대에 갖춰야 할 무기
개발자로서 우리는 ‘문제를 정의하고 해결하는 능력’을 가진 사람이 되어야 합니다. 몽고디비가 뭔지를 아는 게 중요한 게 아니라 내가 풀려고 하는 문제에 몽고디비가 잘 맞는 솔루션인지 판단하고, 혹은 또 다른 대안점이 있다면 어떤 솔루션이 더 우리 상황에 적합한지를 판단하는 능력이 더 중요한 시대가 되었습니다.
개발자는 코딩만 하는 사람이 아닙니다. 코딩으로도 문제를 해결하고, AI 모델을 이용해서 문제를 풀기도 하고, 프롬프트, 즉 자연어로 지시해 문제를 풀기도 하는 존재가 바로 개발자라 생각합니다.
예를 들어 테슬라의 오토파일럿을 이용하면 단순 운전은 오토파일럿이, 목적지를 정하고 가는 방법을 선택하는 일은 운전자가 합니다. 개발자가 문제를 푸는 데 있어서도 같다고 생각합니다. 단순 코딩은 AI 도구가, 내가 진정으로 도착하고자 하는 목적지를 결정하는 것은 개발자가 담당하는 시대가 왔습니다. 그렇기 때문에, 혹여나 AI가 잘못된 길을 가거나, 또 잘 가고 있는지 확인하는 일, 가장 중요한 목적지로 향하게 만드는 운전대는 개발자가 쥐고 있습니다.
3.2 개발자의 생산성
AI 도구가 개발자를 어떻게 돕는 것일까요? 개발자는 참 재밌고 신나는 직업이지만, 개발을 업무로 할 때는 즐거운 일만 있는 것은 아닌 것 같습니다. 개발 재미의 발목을 잡는 요인도 참 많습니다.
- 컨텍스트 스위칭(context switching): 여러 작업이나 프로젝트 간에 전환할 때 집중력과 생산성의 손실이 발생합니다. 자주 전환하면 작업의 흐름이 끊기고 재집중하는 데 시간이 소요됩니다. 코드 검색하러 구글링하거나 혹은 블로그 들어갔다가 다른 재미난 걸 보고 쫓아가느라 흐름을 놓친 적이 다들 있을 겁니다.
- 코드 이해: 새로운 코드베이스를 이해하거나 복잡한 로직을 분석하는 과정에 시간이 많이 소요될 수 있습니다. 코드의 의도와 구조를 파악하는 데 어려움이 발생합니다.
- 코드 검색: 필요한 정보나 기존 코드를 찾는 데 시간을 소비합니다. 적절한 문서화가 되어 있지 않거나 코드베이스가 방대하면 검색에 더 많은 시간이 걸릴 수 있습니다.
- 디버깅: 버그를 식별하고 수정하는 과정은 시간이 많이 걸리며 때로는 매우 복잡할 수 있습니다. 문제의 원인을 찾아 해결책을 구현하는 과정은 종종 예상보다 더 긴 시간을 요구합니다.
2022년 깃허브 리서치에 따르면 깃허브 코파일럿을 사용하는 사람은 55% 더 빠르게 코딩하고, 코파일럿을 사용한 개발자 코드 46%는 코파일럿이 생성한 코드라고 합니다. 이미 AI 도구를 이용한 개발자는 그렇지 않은 개발자보다 55% 더 빠르게 달려나가고 있다는 뜻인데요, 변화의 물결에 함께 타지 않으면 도태될 수도 있습니다.
이 연구에서는 개발자 95명을 두 그룹으로 나누었습니다. 한쪽은 코파일럿을 사용하고 다른 한쪽은 사용하지 않았을 때 같은 업무를 주어 완료한 비율과 업무를 끝내는 데 걸린 시간이 의미 있는 차이를 보이는 것을 확인했습니다.
속도 이외에도 개발자 생산성은 다양한 부분에서 영향을 받을 수 있는데요, 일명 짤친다는 작업들에서 발생하는 스트레스에서 벗어날 수 있게 되었습니다. 이 연구의 결론은 다음과 같습니다.
“저희는 개발자가 소프트웨어를 빌드하는 동안 더 효율적으로 작업하고 더 큰 만족감을 얻을 수 있도록 지원하기 위해 있습니다. 이번 조사에서 깃허브 코파일럿은 완료 시간을 단축하고, 개발자의 정신 에너지를 절약하며, 더 만족스러운 작업에 집중하고, 궁극적으로 코딩에 더 재미를 느끼는 데 도움이 된다는 사실을 확인했습니다.”
즉 코파일럿을 만들고 계속 서포트하는 이유는 코딩을 더 재미있게 만들어주기 위함입니다. 우리 개발자를 도와주겠다고 이렇게까지 노력하는 도구를 마다할 이유가 있을까요? 직업적 만족도와 재미를 위해 우리는 더 적극적으로 AI 도구들과 페어 프로그래밍을 해야 할 시기라 생각합니다.
마무리
- 전통적인 페어 프로그래밍은 두 개발자가 하나의 문제 해결을 함께 논의하며 프로그래밍하는 협업 기법입니다. 두 명이 함께 작업하면서 아이디어와 해결책을 바로바로 공유하며 실시간으로 피드백을 주고받기 때문에 실수를 줄일 수있고, 더 나은 솔루션을 찾을 수 있습니다. 코드 품질 향상, 지식 공유와 멘토링, 협업과 의사소통 능력 강화, 복잡한 문제 해결, 프로젝트 관리 효율성, 팀워크와 동기 부여 관점에서 장점이 있습니다.
- 깃허브 코파일럿은 깃허브와 오픈AI 기술이 결합된 AI 기반 페어 프로그래밍 도구입니다. 코파일럿은 개발자가 코드를 더 빠르고 효율적으로 작성할 수 있도록 설계되었습니다. 프로그래머가 작성 중인 코드를 분석하고, 컨텍스트를 이해해 자동으로 코드를 제안합니다. 인터넷에 공개된 오픈 소스들로 학습해 만들었습니다.
- AI 도구와 페어 프로그램을 진행하면 컨텍스트 스위칭, 코드 이해, 디버깅에서 이점이 있습니다. 궁극적으로 더 빨리 더 즐겁게 프로그램을 할 수 있는 여건을 제공해줍니다.
서지연
카카오, 네이버, 페이스북 등에서 뉴스, 커머스, AI, NFT, 엔터테이먼트 등 여러 도메인을 탐험했습니다. 세상을 더 즐겁게 할 제품 만들기를 좋아하는 개발자로서 코드 리뷰 그리고 함께 성장하는 개발 문화에 관심이 많습니다. 데뷰, 인프콘 등에서 기술 발표, 팟캐스트 〈나는프로그래머다〉 공동 MC를 진행했습니다. 개발자 수다가 있는 곳이라면 ‘치즈🧀’라는 이름으로 어디든 나타납니다.