내가 생각하는 AI 페어 프로그래밍
accept와 reject

요즘 AI의 등장으로 각자 자신의 환경, 위치에서 미래에 대한 걱정 불안에 대한 목소리가 많이 나오고 있다
이와 관련되서 최근에 정말 재미있게 읽은 블로그 글도 있다
kciter.so - 만약 당신이 클로드 블루 때문에 힘들다면
여기에 대해서 나의 생각을 한번 정리하고 현재 나의 방향에 대해서 이야기 해보려고 한다
나는 AI가 나보다 훨씬 잘하고 나보다 속도도 빠르며 완전무결한 존재로 보였었다
그렇다 “보였었다”
지금은 반은 맞고 반은 틀리다고 생각한다
생각이 바뀌게 된 이유는 나의 태도에 대한 변경에서부터 시작한다
이전에는 나는 AI를 “도구” 그 이상으로 바라보지 않았다
“내가 던진 질문에 알맞은 답변을 해주는 채팅 앱”
딱 이 정도였다 지금 나는 태도를 바꾸었다
“나와 함께 제품을 설계하고 같이 만들어가는 파트너”
사소한 차이가 나의 마인드를 바꾸어 주었다
도구로 사용하던 나
AI한테 “이거 만들어줘, 구현해줘” 결과물을 요구하고 일단 붙였다
그리고 빌드를 돌리고 안되면 “이거 왜 안돼? 수정해줘”
두 가지 동작의 반복이었다
무한 반복을 통해서 어떻게든 돌아가는 코드를 만들기만 하면 끝이었다
그 과정에서 내 판단은 없었고 이해도 필요하지 않았고 그냥 무지성으로 복사 붙여넣기만 했다
그리고 그때 나는 개발자를 그만둘까 고민하며 공장을 들어가야하나 심한 우울증이 들었었다
나는 개발자는 끝이라고 생각했다
파트너로서 협업하는 나
나는 AI에게 정답을 요구하는 것이 아니라 질문을 하기 시작했다
AI가 돌아가는 코드를 작성해서 나에게 Write해도 되냐고 물어봤다

나는 무엇인가 위화감을 느끼고 reject을 하고 물어봤다
“여기 에러 코드가 하드코딩되어 있잖아. 이런 걸 하드코딩해서 쓰는 게 적절해? 따로 관리하는 방법이 더 나을까?”

AI는 나의 프로젝트 환경에 맞게 나와 “대화”를 나누기 시작한다
그리고 제안을 한다
나는 그 제안을 보고 시야가 넓어졌다
그리고 고민을 하고 판단을 한다
“어떤 게 더 좋은 방향일까?”
나의 질문 하나에 나는 세 가지를 얻었다
- ErrorCode를 관리하는 enum 사용
- ErrorCode를 도메인/글로벌로 관리하는 방법에 대한 존재
- 각각의 트레이드 오프
내가 아는 만큼 질문을 할 수 있고 거기서 더 깊게 얻어갈 수 있었다
”해줘”와 “어떻게 생각해?”의 차이
AI에게 “구현해줘, 만들어줘”라고 하면 정말 잘 만들어준다
돌아가는 코드가 나온다
그런데 정말 돌아가기만 하는 코드이다
예를 들어 매개변수가 10개 필요한 메소드를 그냥 10개 그대로 받아서 쓰도록 만든다
돌아가는데 문제는 없다
그런데 그 코드를 사람이 읽는 순간 머리가 아파진다
내가 이전처럼 마냥 돌아가는 것에만 초점을 맞춘다면 문제를 느끼지 못하고 넘어갔을 것이다
하지만 나는 AI와 페어 프로그래밍을 하고 있다
“매개변수 개수가 너무 많아, 별도로 Command 객체를 사용해서 용도를 명시해주는 게 더 읽기 쉬울 것 같은데 고려해줘, 의견을 물어보는거야”

그랬더니 내가 생각하지 못한 이야기를 해주었다
“Domain 복원 팩토리에서는 노이즈가 될 수 있다”
이전과 같이 나의 시야를 넓혀주었다
더 재밌는 상황도 있었다
존재를 아는 것만으로도 질문이 가능해진다
나는 AI가 생성한 코드를 매번 읽고 있다
그러다 보니 이상한 형태들이 보이기 시작했다
내가 모르는 패턴들
그래서 문득 생각났다
이거 이펙티브 자바에서 나오는 좋은 패턴 중 하나 인가?
나는 ‘이펙티브 자바’라는 책을 알고는 있지만 읽어보지는 않았다
하지만 그 책의 존재 자체로 AI에게 질문할 내용이 생겼다

읽어 보진 않았지만 관련해서 질문을 던지고 나의 파트너는 상세한 설명과 함께 나에게 많은 정보를 주었다
이건 별개의 이야기지만 책을 읽어보고 싶다는 생각이 많이 들기 시작했다
AI 페어 프로그래밍은 이런 거 아닐까
AI 페어 프로그래밍은 “AI한테 만들어달라고 하는 것”이 아니다.
AI한테 “이거 어떻게 생각해?” 하고 묻는 것이다
AI가 제안한 코드를 보고 “이건 우리 프로젝트 원칙에 안 맞아” 하고 거부할 수 있는 것이다
트레이드오프를 듣고 내가 판단할 수 있는 것이다
그리고 AI와 페어 프로그래밍을 하려면 그만큼 나도 많이 알아야 한다
AI가 다 해준다고 해서 내가 아무것도 몰라도 된다는 뜻이 아닌 것이다
그게 내가 찾은 길이다
지식의 존재를 아는 것만으로도 질문의 방향이 달라지고
질문의 방향이 달라지면 AI가 보여주는 세계가 완전히 달라진다
이 격차는 앞으로 더 커질 것이다
다른 사람과의 격차를 말하는 것이 아니다
“AI를 이렇게 써야한다!” 라는 말은 더더욱 아니다
내 제품의 격차를 말하는 것이다
지금은 단순하게 코드를 작성하는 단계이다
아직 유저도 없고 서비스 트래픽도 없다
에러 리포트가 쏟아지고,
동시 접속 문제가 터지고,
“이거 왜 느려요?”라는 피드백이 온다
그때 동시성 제어가 뭔지 아는 사람과 모르는 사람이 AI한테 같은 질문을 해도, 받는 답의 퀄리티가 완전히 다를 것이다
그 차이를 만드는 것은
‘내가 얼마나 알고 있느냐, 내가 어떻게 AI를 대하는 가’
라고 생각한다
끝으로
이 방법이 무조건 좋다고 하는 글은 아니다
나 나름대로 AI와
“어떻게 함께 살아가면 좋을까”
“막연하게 두려운 존재로 바라보는 게 아니라 함께 공존하려면 어떻게 해야 할까?”
고민을 하며 살아가는 시대에 나의 생각을 한번 정리하고 싶었다
앞으로 내가 어떤 방향으로 바뀔지 아무도 모른다
아직 나는 많이 부족한 개발자다
좋은 개발자가 되기 위해 한 발자국씩 내딛으며 AI가 정말 좋은 파트너가 될 수 있구나… 라고 생각했다
요즘 자주 보이는 “하네스”라는 개념도 나만의 기준점을 세우는 일과 비슷하다고 생각이 든다
이것 또한 나름 나만의 하네스가 아닐까?
다른 분들도 AI를 대하는 자신만의 기준점이 생기면 정말 재밌을 것 같다