소프트웨어 엔지니어링은 끝났다. 테크 트위터에서 가장 목소리가 큰 사람들이 여러분에게 믿게 만들고 싶은 것이 바로 이것이다. 그들은 단 한 줄의 프롬프트로 전체 애플리케이션을 구축하는 AI 도구의 화면 녹화 영상을 공유하며, 왜 여전히 사람이 코드를 작성하는 데 비용을 지불해야 하는지 묻는다. 이러한 공포는 이해할 만하지만, 핵심을 완전히 놓치고 있다.

AI가 엔지니어를 대체하러 오는 것이 아니다. AI는 타이핑 속도를 기술적 판단력으로 착각하는 모든 이들을 겨냥하고 있다. 코딩과 엔지니어링 사이에는 거대한 간극이 있으며, 그 간극이야말로 이 직업 전체가 존재하는 지점이다.

AI 어시스턴트는 당신이 커피를 한 모금 마시기도 전에 기능을 구현하는 다섯 가지 서로 다른 방법을 제시할 수 있다. 병목 지점이 바뀌었다. 우리는 더 이상 어떻게 시작할지 고민하며 빈 파일을 멍하니 바라보지 않는다. 대신 실제 트래픽이 몰리는 순간 무너지지 않을 최선의 해결책이 무엇인지 고민하며 다섯 가지의 그럴듯한 솔루션을 바라본다. 그 결정이 바로 엔지니어링이다. 그 외의 모든 것은 단순한 구문(syntax)일 뿐이다.

데모가 곧 제품은 아니다

어떤 AI 코딩 데모를 보더라도 몇 분 만에 아름다운 인터페이스가 완성되는 것을 볼 수 있을 것이다. 하지만 당신은 부하 상황에서 데이터베이스 커넥션 풀이 고갈되는 모습은 보지 못할 것이다. API 엔드포인트의 속도 제한(rate limit) 누락, 감사 로그(audit logs)의 부재, 혹은 AI가 상태를 저장하기 편리한 곳이라고 생각해서 모든 사용자 상호작용을 오브젝트 버킷에 기록할 때 발생하는 스토리지 비용도 보지 못할 것이다.

프로덕션 시스템은 확장성, 보안, 성능 및 비용 제어를 요구한다. 이러한 특성들은 스프린트 리뷰에서는 보이지 않는다. 실제 사용자들이 예측 불가능한 행동을 하고, 엣지 케이스(edge cases)를 만들어내며, 당신이 예상한 순서대로 버튼을 클릭하지 않을 때 비로소 모습을 드러낸다. 나는 QA에서는 통과(green)된 것처럼 보였던 AI 지원 프로젝트들이 출시 일주일 만에 값비싼 교훈으로 변하는 것을 너무나 많이 보았다.

작동하는 코드는 저렴해졌다. 하지만 훌륭한 엔지니어링은 그렇지 않다.

지금 중요한 것

이러한 변화 속에서 번창하는 엔지니어들은 가장 빠르게 타이핑하는 사람들이 아니다. 그들은 단 한 줄의 코드가 생성되기 전에 어떤 질문을 던져야 할지 아는 사람들이다.

  • 문제를 명확하게 정의한다. AI 모델은 방치하면 기꺼이 잘못된 문제를 해결하려 들 것이다. 내부 분석가 6명만 사용하는 읽기 집약적인 대시보드를 위해 복잡한 캐싱 레이어를 구축할 수도 있다. 진짜 문제가 데이터베이스 인덱스 누락인지, 아니면 근본적으로 잘못된 데이터 모델인지 묻기 위해 멈춰 서지 않을 것이다. 숙련된 엔지니어는 해결책이 코드를 포함하든 아니든, 해결책이 명확해질 때까지 문제를 재정의한다.

  • 거대한 시스템을 작은 단위로 분해한다. AI는 로컬 컨텍스트(local context)에 능숙하다. 단일 함수, 단일 컴포넌트, 단일 테스트는 잘 작성할 수 있다. 하지만 전체 분산 아키텍처를 머릿속에 담아두는 데는 어려움을 겪는다. 모놀리스(monolith)를 분해하고, 서비스의 경계를 설정하며, 팀 간의 계약(contracts)을 정의할 수 있는 엔지니어들이 생성된 코드 조각들을 지속 가능한 시스템으로 탈바꿈시킨다.

  • AI의 제안에 의문을 제기한다. 모델의 자신감은 신기루와 같다. 네트워크 지연(latency)을 무시하는 아키텍처를 제안하거나, 수년 전 지원이 중단된(deprecated) 라이브러리를 추천하거나, 요구사항에 실제로 존재하지 않는 기능을 해결하려 들 수도 있다.