메뉴
HN
Hacker News • 56일 전

AI가 완성된 제품을 만들어주지는 않는다

IMP
8/10
핵심 요약

AI가 코드 작성과 프로토타입 제작의 속도를 혁신적으로 단축시켰지만, 실제 서비스가 가능한 프로덕션 수준의 시스템을 완성하는 것은 여전히 개발자의 몫입니다. AI가 남발하는 코드 속에서 보안, 확장성, 아키텍처 등의 본질적인 문제를 파악하고 판단하기 위해서는 여전히 탄탄한 컴퓨터 공학적 지식과 개발자의 통찰력이 필수적입니다.

번역된 본문

소프트웨어를 개발하는 것이 이렇게 쉽게 느껴졌던 적은 없었습니다. 평범한 언어로 아이디어를 설명하면 몇 분 안에 화면에 작동하는 프로토타입이 나타납니다. UI도 있고, 데이터베이스와도 연결됩니다. 상상했던 대로 작동합니다. 한 줄의 코드도 작성해 본 적 없는 사람에게 그 순간은 마법 같습니다. 수년간 컴파일러와 스택 트레이스와 씨름해 온 사람에게도 정말 놀라운 일입니다. 하지만 그 프로토타입은 노트북에서 겨우 돌아갈 뿐, 부하가 걸리면 쉽게 망가집니다. 에러 처리도 없습니다. 자칫 API 토큰이 유출될 수도 있다는 것을 알게 됩니다. 데이터 모델은 데모용으로는 그럴듯했지만, 사용자가 한 명 더 추가되는 순간 엉망이 됩니다. 인증(Authentication)은 단순한 가정에 의존해 억지로 짜맞춰져 있습니다. 과연 이 모든 게 안전할지 찝찝한 걱정이 듭니다. 이를 배포하려 하면, '작동은 하는 것'과 '서비스할 준비가 된 것' 사이의 깊은 골짜기를 마주하게 됩니다.

프로토타입을 만드는 것은 결코 어려운 일이 아니었습니다. 소프트웨어 엔지니어는 항상 무언가를 빠르게 작동시킬 수 있었습니다. 시간이 오래 걸렸던 부분은 다른 모든 것들이었습니다. 대규모 환경에서도 버티는 시스템 설계, 사용자가 겪지 말아야 할 상황이지만 결국 반드시 겪게 되는 예외 케이스 처리, 문제가 생겼을 때 이를 파악하기 위한 관측 가능성(Observability) 구축, 3년 뒤에 덜 후회하기 위한 데이터 아키텍처에 대한 신중한 결정 등 말입니다. 이러한 상황은 전혀 변하지 않았습니다. AI는 첫 번째 작동하는 버전을 만들기까지의 과정을 극적으로 앞당겼습니다. 하지만 첫 버전부터 실제 서비스가 가능한 프로덕션 수준의 제품이 되기까지의 거리를 단축시키지는 못했습니다. 이러한 혼란은 여정의 초반부 피드백 루프가 너무 빠르고 보람차기 때문에 발생합니다. 요청하고, 결과를 받고, 즉시 확인하는 사이클은 정말 흥미진진하며, 소프트웨어 개발의 나머지 과정 역시 이와 비슷하게 단축될 것이라는 착각을 만들어냅니다. 하지만 절대 그렇지 않습니다. 소프트웨어를 구축하는 데 따르는 어려운 문제들은 결코 문법(syntax)을 작성하는 것 자체가 아니었습니다. 그것은 '판단력'에 관한 것이었습니다. 무엇을 만들지, 어떻게 구조를 잡을지, 무엇을 나중으로 미룰지, 언제 안 된다고 거절할지 등 말입니다. 이러한 판단력이야말로 단순한 코더를 조각가이자 장인으로 만들어주며, 프로토타입과 프로덕션 수준의 시스템을 구별하는 핵심 요소입니다.

컴퓨터 공학을 배우지 말아야 한다는 잘못된 주장 AI가 생성한 코드의 접근성이 높아지면서, 자연스럽게 컴퓨터 공학을 배우는 것이 여전히 의미가 있는지 의문을 제기하는 신규 진입자들이 업계에 쏟아졌습니다. 설명만으로 작동하는 애플리케이션을 만들 수 있다면, 왜 수년 동안 알고리즘, 데이터 구조, 운영체제, 이론을 공부해야 할까요? 컴퓨터 공학 교육의 가치는 결코 순수하게 코드를 생산하는 능력에 있지 않았습니다. 그것은 시스템이 어떻게 작동하고, 어떻게 실패하며, 왜 그런지에 대한 멘탈 모델을 개발하는 데 있습니다. 이 멘탈 모델이 있어야 AI가 생성한 코드를 보고, 그 쿼리가 5천만 행이 있는 테이블에서 풀 테이블 스캔을 유발한다는 것을 인식할 수 있습니다. AI가 제안한 캐싱 전략이 동시 부하 상황에서 레이스 컨디션(Race Condition)을 유발할 것이라는 점을 알아챌 수 있습니다. AI가 제안한 아키텍처가 현재 문제는 해결하지만, 향후 다음 문제를 훨씬 더 어렵게 만들 것이라는 사실을 알려주는 것도 바로 이 기본기입니다. 이러한 기초가 없다면 여러분은 철저히 AI 모델의 판단에 의존하게 됩니다. 그런데 모델에게는 판단력이 없습니다. 그들은 패턴 매칭 기술을 가지고 있을 뿐이며, 사용자의 의도에 맞을 것이라고 믿는 코드를 열성적으로 만들어냅니다. AI는 겉보기엔 올바르고 관례를 따르는 것처럼 보이는 코드를 자신만만하게 생성하지만, 무엇을 찾아야 할지 모른다면 원인 파석에 며칠이 걸릴 방식으로 실제 프로덕션 환경에서 실패를 겪게 됩니다. 지금은 역사상 컴퓨터 공학을 배우기에 가장 좋은 시기라고 할 수 있습니다. 왜냐하면 이해와 산출물 사이의 격차가 완전히 무너졌기 때문입니다. 분산 시스템이 어떻게 작동하는지 진정으로 이해하는 학생은 이제 10년 전에 필요했던 시간의 극히 일부만으로 그것을 구축할 수 있습니다.

변하는 것과 변하지 않는 것 요구사항을 기계적으로 코드로 옮기고 한 줄씩 구현으로 번역하는 역할만 하는 엔지니어에 대한 수요는 확실히 감소하고 있습니다. 업무의 그 부분은 자동화되고 있습니다.

원문 보기
원문 보기 (영어)
Building software has never felt this accessible. You describe an idea in plain English, and within minutes, a working prototype appears on your screen. It has a UI. It connects to a database. It does the thing you imagined. For someone who has never written a line of code, that moment feels like magic. For someone who has spent years wrestling with compilers and stack traces, it's genuinely astonishing. The prototype runs on your laptop. It breaks under load. It has no error handling. You find out that it may be leaking your API tokens. The data model made sense for the demo but falls apart the moment you add a second user. The authentication is held together with assumptions. There's a nagging worry whether everything is secure. You want to deploy it, and suddenly you're staring at a chasm between "this works" and "this is ready." Getting to a prototype was never the hard part Software engineers have always been able to get something running quickly. What took time was everything else: designing systems that hold up at scale, handling the cases users weren't supposed to encounter but inevitably do, building in observability so you know when things break, making deliberate decisions about data architecture that you'll regret less three years from now. None of that has changed. AI has dramatically accelerated the path to a first working version. It has not shortened the distance between a first working version and something production-grade. The confusion arises because the feedback loop for the early part of the journey has become so fast and so rewarding. You ask, you receive, you see results. That cycle is genuinely exciting, and it creates the impression that the rest of software development must be similarly compressed. It isn't. The hard problems of building software were never primarily about writing syntax. They were about judgment: what to build, how to structure it, what to defer, when to say no. That judgement is what turns a vibe-coder into a sculptor, and an artisan. It is also what differentiates a prototype from a production-grade system. The misguided case against learning computer science Predictably, the accessibility of AI-generated code has sparked a wave of new entrants to the industry who are questioning whether it still makes sense to learn computer science. If you can describe your way to a working application, why spend years studying algorithms, data structures, operating systems, and theory? The value of a computer science education was never purely in the ability to produce code. It was in developing a mental model of how systems behave, how they fail, and why. That model is what allows you to look at AI-generated code and recognize that the query it wrote will cause a full table scan on a table with fifty million rows. It's what allows you to see that the caching strategy it proposed will create a race condition under concurrent load. It's what tells you that the architecture it suggested solves the problem you described but will make the next problem significantly harder. Without that foundation, you are entirely dependent on the model's judgment. And models don't have judgment. They have pattern matching, with an eagerness to produce code that it believes matches your intent. They will confidently generate code that looks right, follows convention, and fails in production in ways that take days to diagnose if you don't know what you're looking for. Now is arguably the best time in history to learn computer science, because the gap between understanding and output has collapsed. A student who genuinely grasps how a distributed system works can now build one in a fraction of the time it would have taken a decade ago. What changes, and what doesn't The demand for engineers who can only write code mechanically, and who translates requirements into implementations line by line, are genuinely declining. That part of the job is being automated. What's happening is a compression of the lower end of the productivity distribution and an expansion of the ceiling for those at the top. An experienced engineer using modern AI tools can move at a pace that would have been unimaginable five years ago. Not because the hard problems have disappeared, but because the mechanical work that consumed so much time and attention is largely handled. More hours in the day for the work that actually requires expertise. The engineers who will be left behind are not those who lack AI skills. They're the ones who use AI as a substitute for understanding, who vibe-code their way through systems they can't reason about, and then find themselves unable to fix what breaks, unable to scale what grows, unable to explain what they built to anyone who needs to maintain it. Learning to operate at a different level The shift required isn't about adopting a new set of tools. It's about operating at a higher level of abstraction while keeping your roots in the fundamentals. That combination is genuinely powerful and genuinely rare. The engineers who will leapfrog their peers in the next few years are the ones who treat AI as a force multiplier on deep knowledge rather than a replacement for it. They understand what they're asking the model to produce. They review generated code with the same critical eye they'd apply to a junior engineer's pull request. They bring architectural thinking to the conversation, not just feature descriptions. They know when to push back on what the model suggests. It's the old skill set, applied to a new context, with dramatically higher leverage. The prototype is the easy part. The difference now is that everyone can see that clearly. What comes after the prototype is still hard, still requires real engineering judgment, and still separates the builders who ship reliable software from the ones who ship demos. Learn the fundamentals. Then learn the new tools. In that order.