AI가 강해질수록, 개발자의 깊이가 결과를 가른다
AI 시대, 같은 도구로 만든 서비스의 결과가 갈리는 이유에 대한 생각
"개발자? 이제 코드 잘 짜는 게 무슨 의미가 있냐, AI가 다 해주는데." 요즘 자주 듣는 말입니다.
솔직히 저도 한때는 비슷한 생각에 흔들렸던 적이 있어요. AI를 본격적으로 공부하고 실제 프로젝트에 적용해 보면서, 이게 어디까지 가능할까 싶을 때마다 잠깐씩 마음이 흐려지곤 했거든요.
지금은 그렇게 보지 않습니다. 오히려 AI가 강해질수록 개발자가 더 필요하다고 느끼고 있어요. 특히 경험과 안목을 갖춘 개발자라면 더욱 그렇고요.
20년 가까이 코드를 짜오고 있지만, 지난 3년만큼 많이 공부했던 시기는 없었던 것 같습니다. AI만 들여다본 것도 아니에요. 기본적인 개발 역량과 도구, 방법론도 처음부터 다시 들춰보고 있습니다. 도구가 강력해진 만큼, 그 도구를 제대로 다루려면 저 또한 그만큼 단단해져야 한다고 느끼기 때문이에요.
같은 도구, 다른 결과
이제는 개발 경험이 없는 사람도 혼자서 머릿속에 있는 서비스를 어렵지 않게 만들 수 있는 시대가 되었습니다. 분 단위로 쏟아지는 신규 서비스들을 가만히 들여다보면 한 가지가 눈에 들어와요.
같은 LLM API, 같은 모델, 같은 단가로 만들었는데도 결과는 극단적으로 갈립니다. 어떤 건 사용자를 끌어모으고 매출까지 만드는 반면, 어떤 건 등장한 속도만큼이나 빠르게 사라지거나 형편없는 사용자 경험으로 외면받죠.
왜 이런 차이가 생기는 걸까요. 같은 AI로 만든 서비스들인데도 말이에요.
차이는 그 사이에서 만들어집니다. 어떤 문제를 풀 것인가, 어떤 데이터로 컨텍스트를 구성할 것인가, 어떤 흐름으로 사용자를 안내할 것인가, 실패했을 때 어떻게 회복할 것인가, 응답 품질은 어떻게 평가할 것인가.
이 질문들에 대한 답을 LLM이 알아서 주지는 않습니다. 결국 만드는 사람이 정해야 하고, AI가 그 길에서 벗어나지 않도록 명확한 지침과 가이드라인을 제시해야 해요.
LLM API 호출 한 줄로 돌아가는 데모와, 한 달을 운영해도 흔들리지 않는 서비스 사이에는 크고 깊은 골이 있습니다. 그 골을 메우는 건 도구가 아니에요. 만드는 사람이 내린 결정들이 차곡차곡 쌓여 서비스의 운명을 가릅니다.
AI는 강력한 동료, 다만 동료일 뿐
요즘 작은 사이드 프로젝트를 하나 진행하고 있어요. 도메인별로 특화된 에이전트들을 만들고, 그것을 오케스트레이터 에이전트가 통제하는 구조입니다. 각 에이전트는 팀원이 한 명씩 전담해 개발하고, 그 과정에 AI도 적극적으로 활용하고 있고요.
격주마다 모여 진척 상황을 공유하고 서로의 에이전트 성능을 점검하는데, 같은 프로젝트 안의 에이전트들임에도 결과물 차이가 꽤 컸습니다. 이유는 의외로 단순했어요.
어떤 팀원은 AI에 "이런 기능 만들어줘"라고 짧게 던져 놓고 결과물을 받았습니다. 그렇게 만들어진 에이전트는 솔직히 에이전트라고 부르기 민망한 수준이었어요. 내부 코드와 프롬프트가 정돈되어 있지 않은 것도 당연한 결과였고요.
반면 결과물이 일관되게 좋은 팀원은 달랐습니다. 사용자 시나리오, 지켜야 할 제약, 따라야 할 패턴, 도구 정의, 서비스 흐름까지 자기 머릿속에서 충분히 그려본 다음, 그것을 가이드로 정리해서 AI에 넘기더라고요. AI는 그가 그려둔 길 위에서만 일했습니다.
같은 모델, 비슷한 시간, 오히려 더 짧은 토큰. 그런데 결과물의 성능 차이는 분명했어요.
결국 중요한 건 내가 무엇을 알고 있느냐, 그리고 무엇을 요구할 수 있느냐입니다. 이 두 가지는 만드는 사람의 경험과 안목에서 나오고요.
AI는 능력이 뛰어난 동료입니다. 다만 동료가 아무리 뛰어나도, 같이 일하는 내가 무엇을 만들고 싶은지, 어디로 가야 하는지를 모르면 그 능력은 흩어져 버려요.
좋은 동료들을 곁에 둔 평범한 팀장과, 똑같은 동료들을 곁에 둔 뛰어난 팀장. 두 팀이 내놓는 결과물은 다를 수밖에 없습니다.
그래서 더 필요한 단단한 역량
알파고와 이세돌 9단의 대국을 보고 처음 AI에 흥미가 생겼습니다. 그렇게 머신러닝 공부를 시작한 뒤로 컴퓨터 비전 모델, few-shot 음성 합성 솔루션을 거쳐 지금은 LLM 기반 서비스 개발에 무게중심을 두고 있어요.
그 시간 동안 매번 비슷한 결론에 도달하게 됩니다. 새로운 도구가 나올 때마다, 그 도구를 잘 쓰는 사람과 그렇지 못한 사람을 가르는 것은 결국 그 사람이 쌓아온 경험의 깊이라는 거예요.
LLM은 평균 이상의 답을 빠르게 만들어 줍니다. 하지만 평균을 넘어서는 답을 원한다면, 만드는 사람이 먼저 평균 위에 있어야 해요. 도구가 평균 자체를 끌어올린 만큼, 그 위에서 살아남기 위한 노력은 오히려 더 커진 셈입니다.
코드 한 줄을 더 짜는 능력보다, 어떤 코드가 좋은 코드인지 가려내는 안목이 더 중요해졌다는 뜻이기도 해요. 예를 들어 LLM이 이런 코드를 내놓았다고 해볼게요.
const result = await fetch(url).then(r => r.json());짧고, 잘 동작합니다. 하지만 비슷한 코드를 실제 프로덕션에서 다뤄 본 사람이라면 빠진 것들이 바로 보일 거예요. 에러 처리, 타임아웃, 재시도, 응답 스키마 검증, 캐시 정책 같은 것들 말이죠. LLM이 이런 것들을 못하는 게 아닙니다. 단지 사용한 사람이 거기까지 요구하지 않았을 뿐이에요.
LLM이 내놓은 결과물에서 무엇을 받아들이고 무엇을 버릴지, 그 판단의 근거는 결국 본인의 경험과 안목입니다.
안주하지 않으려고
블로그 자기소개 페이지에 이런 줄을 적어 두었습니다. "안주하지 말고, 계속 배우자."
십여 년 전, 온라인 커뮤니티에서 쓸 닉네임을 고를 때 함께 떠올렸던 다짐이에요. 계속 배우는 사람이라는 의미를 담고 싶었거든요. 사실 그때는 그리 절박한 마음으로 적은 건 아니었고, 십여 년이라는 시간 동안 한참 게을렀던 시기도 있었습니다. 그래도 돌아보면 좋은 기회가 찾아오고 좋은 결과를 얻었던 순간마다 든든한 버팀목이 되어 준 것은 그 사이 조금씩 쌓아 온 경험이었어요.
지금은 그 다짐이 한층 더 무겁게 다가옵니다. 도구가 너무 빠르게 바뀌고, 어제의 답이 오늘은 더 이상 답이 아닐 때가 잦거든요. 역설적이지만 그래서 이런 시기일수록 깊이 있는 경험을 가진 사람이 더 잘 버팁니다. 표면을 빨리 따라가는 사람과 본질을 깊이 이해한 사람 사이의 거리는 시간이 지날수록 더 벌어지더라고요.
AI가 모든 것을 해 주는 시대라고들 하죠. 적어도 제 경험에서는, 그래서 더 많이 공부해야 하는 시대입니다.