5개월 전, “AI시대의 도래” 글에서 AI가 발전하는 요즘 우리가 뭘 해야할지 고민을 한 적이 있다.
그 사이 참 많은 일들이 있었다. 우테코를 준비했고, 우테코에 합격했고, 우테코 레벨 1을 마쳤다. 그 사이 5개월 간은 AI를 거의 활용하지 않았다. 우테코 최종 코딩테스트에서는 AI를 사용하지 못하고, 우테코 과제의 목적이 ‘학습’ 그 자체이기 때문에 AI를 사용하지 않는 것이 옳다고 생각했다.
지난 1주일 간 우테코 과제로부터 벗어난 시간을 살았다. 기대고 살았던 과제가 없어지니 처음에는 상당히 방황을 많이 했다. 특히 AI에 대해 많은 고민을 하고 방황을 했던 한 주 였다. ‘AI를 활용해야하나, 안해야하나?’,’AI를 어디까지 활용해야하나?’,’어떻게 해야 AI를 잘 활용하지?’
AI는 거스를 수 없는 시대의 흐름이고 사용하지 않는 개발자는 도태되고 말 것이다. 이것은 확실하다.
회사가 개발자를 고용하는 이유는 서비스를 만들기 위함이다. 서비스를 잘 꿰뚫고 있으면 더 잘 만들 수 있다. 버그를 덜 만들 수 있고, 새로운 기능을 더 빠르게 개발할 수 있다. 그럼에도 개발자의 본질적인 숙제는 ‘서비스를 만드는 것’이다.
AI를 활용하면 개발자보다 몇 배 더 빠른 속도로, 더 높은 퀄리티로 서비스를 만들 수 있다. Cursor로 단 한 번만 명령을 해보면 이를 체감할 수 있을 것이다. Cursor AI를 활용해서 빠르게 기능을 만드는 개발자와, 직접 일일이 기능을 만드는 개발자. 나라면 전자와 함께 일하고 싶다.
“AI시대의 도래” 글에서 우리가 AI에 의해 대체되지 않기 위해 집중할 수 있는 것에 대해 생각해보았다. 당시 생각한 집중할 수 있는 것은 다음과 같다 : 사용자 경험, 전문 지식, 다양한 기술에 대한 익힘, 창의성
지난 며칠 간 AI와 함께 개발을 하며 이 4가지에 대한 생각이 완전히 바뀌었다. 적어도 내가 해오던 수준에서는 이 4가지 모두 AI가 더 잘한다. AI가 사용자 경험을 더 잘 고려하고, 전문 지식을 더 잘 알고 있고, 다양한 기술의 습득도 AI가 더 빠르고, 창의성도 AI가 더 좋다. 가장 대체되지 않을 것이라 생각하던 창의성을 짚어보면, 인간이 할 수 있는 창의성에는 한계가 있다. 결국 이미 인간이 이전에 했던 고민이거나, 솔루션들을 짜집기한 것에 불과하다. 하지만 AI는 존재하지만 실현하지 않은 저 구석에 있던 자료를 가져다가, 혹은 기존 솔루션들을 합쳐서, 혹은 성공한 솔루션들로 획기적인 솔루션을 만들어낼 수도 있다. AI에게 질문을 하나만 해보아도 체감할 수 있을 것이다. ‘창의적인 음식을 추천해줘’
그럼 우리는 AI시대에 발맞춰 무엇을 해야할까?
-
AI를 잘 활용해야한다.
Claude Code, Cursor Agent 등 AI가 알아서 사고해서 개발하는 AI Agent가 등장했고, 얼마 전에는 구글이 AI끼리 통신하는 프로토콜인 A2A 프로토콜을 발표했다. 곧 멀지 않아 Agent를 병렬로 관리하는 에이전트 클러스터, AI 매니저가 하위 에이전트를 감독하는 에이전트 플릿이 등장할 것이다. 이러한 시대의 흐름을 우리가 거스를 수는 없다. 만약 거스른다면, 도태될 것이다.
-
거시적으로 서비스를 바라봐야한다.
백엔드 개발을 한 번도 해보지 못한 내가 AI를 활용해서 백엔드 서버를 어찌어찌해서 로컬에 띄울 수 있다. 하지만 이를 배포까지는 하지 못한다. 어제 실제로 했던 고민들이다. ‘Database는 어떻게 연결시키지?’’백엔드 서버는 어떻게 띄우지?’. 물론 AI에게 물어보면 하나씩 다 알려주긴 할 것이다. 그럼에도 이러한 백엔드 서버의 구축과 배포, 프론트엔드 서버와의 통신같은 거시적인 흐름을 알지 못한다면 이는 모래성과 다름 없다. 에러라는 파도가 한 번 치면 무너지고 말 것이다. 잠재되어있는 에러를 발견하고 해결하지 못할 것이다.
-
그럼에도 우리는 여전히 한 분야의 전문가가 되어야한다.
2번에서 마지막에 ‘에러’와 관련된 이야기를 했다. 서비스를 운영하는데 있어서 가장 중요한 것은 ‘에러가 발생하지 않는 것’이다. 사용자는 에러를 보면 절대 ‘아, 에러구나. 그럴 수 있지.’하지않는다. 당장 서비스를 이탈하고 말 것이다.
AI를 활용해서 서비스를 어떻게든 만들 수는 있다. 하지만 ‘에러 없는 서비스’를 AI를 활용해서 만드는 것은 불가능에 가깝다. 서비스에 에러가 없으려면 프로젝트의 전반적인 구조를 알아야하고, 각 폴더와 파일의 역할을 알아야하고, 각 파일 내에서 코드를 완전히 이해하고 분석할 줄 알아야한다. 그래야 에러가 발생했을 때 단순히 에러의 ‘근본적인 원인’을 해결할 수 있다. AI에게 맡기면 에러를 해결해주기는 할 것이다. 하지만 안정적으로 서비스를 운영하기 위해서는 에러를 잠깐 덮어쓰기가 아니라, 에러의 근본적인 원인을 해결할 수 있어야한다.
-
좋은 코드에 대해 알고 있어야한다.
AI가 코드를 짤 수는 있다. 그런데 지금까지 사용해본 결과 현재 AI는 좋은 코드를 짜지는 못한다. 그저 기능을 구현하기 위한 코드를 짠다. 코드 컨벤션을 컨텍스트로 제공을 해도 여전히 좋은 코드를 짜지 못한다. 리팩토링을 하더라도 지멋대로 수정을 하거나, 수정을 하다가 멈춘다. AI가 더 발전해서 좋은 코드를 짤 수 있게되었다고 해보자. 그 때 AI가 짠 코드가 정말로 좋은 코드인지를 확인하는 것은 결국 사람이 하게 될 것이다.
그렇기 때문에 우리는 AI가 발전하지 않든, 발전하든 좋은 코드에 대해 잘 알고 있어야 한다.
기술은 궁극적으로 문제를 해결하기 위해 등장한 것이다. 웹은 전 세계의 정보를 더 쉽게 접근하기 위해, 브라우저는 웹을 더 편리하게 사용하기 위해, React.js는 복잡한 UI를 효율적으로 구축하기 위해, Next.js는 React.js 기반 앱의 구축과 배포를 더 쉽게 만들기 위해 등장했다.
Cursor AI 또한 개발자들이 더 효율적으로 코드를 작성하고 문제를 해결할 수 있도록 돕기 위해 등장한 것이다. Cursor AI는 웹, 브라우저, React.js, Next.js 처럼 특정 문제를 해결하기 위해 등장한 하나의 기술에 불과하며 우리는 이를 적극적으로 활용해서 현실의 문제를 해결하는데에 집중을 해야한다.