15년 차 시니어가 말한다 – 지금 개발판, 코드만 치면 망한다
*양해사항 : 글은 반말로 씀. 후배들한테 진짜 현실을 전하려다 보니 말투 고민하지 썼으니 내용만 봐주세요!
본론에 앞서, 나는 15년 차 개발자고, 응용/서버/웹 다 해봤고, 개발로 수십억 넘게 벌었다. 사업도 7년째 하고 있다. 나보다 훨씬 잘나가는 빅테크 출신들도 많고, 몇백억 몇천억 벌었다는 사람도 있겠지만 나름 한 가닥 했다고 생각한다. 그래서 감히 이 글을 쓴다.
요즘 개발 생태계를 보면… 정말 걱정이 된다. 학원이나 강사들이 선동하는, 유행만 따라가다가 구조도 모르고, 개념도 없이 개발하는 주니어들이 너무 많다. 이건 단순한 꼰대질이 아니다. 현실을 살아본 사람으로서, 다음 세대 개발자들이 진짜 실력을 갖추길 바라는 마음에서 쓰는 글이다.
본론만 보고 싶은 사람은 여기부터
요즘 현실은 쪼개는 게 추상화라고 착각하는 분위기가 만연하다. 컴포넌트 분리, 훅 쪼개기, 컨텍스트 나누기… 그렇게 폴더는 많아졌는데 정작 독립성은 없다. 게시판 하나 만들면서 파일은 수십 개, 상태 흐름은 중첩돼 있고, 로직은 도미노처럼 엮여 있다. 진짜 추상화는 그런 게 아니다. 기능 단위로 교체 가능하고, 독립적으로 테스트 가능하며, 다른 곳에서도 그대로 재사용 가능한 구조. 응용 개발에서라면 하나의 인터페이스로 여러 디바이스를 제어하는 식이다. 서버에서는 책임 단위가 명확한 서비스로 쪼개는 게 기본이다. 반면 웹은 그냥 나눈다. 그냥 나눠놓고, 왜 그렇게 나눴는지에 대한 설명은 없다.
프론트엔드는 더 심각하다. 업무 분배처럼 "이건 너가 하고, 이건 내가 할게" 식으로 쪼개기만 한다. 코드 분리는 분업을 위한 수단일 뿐, 그게 구조를 만든다고 착각하면 안 된다. 백엔드도 마찬가지다. 마이크로서비스랍시고 기능을 나눴는데, 결국 DB는 같이 물고 있고, 서비스 간 결합은 심한데 문서화도 안 되어 있다. 그렇게 만든 구조는 처음엔 편해 보여도, 시간이 지날수록 유지보수 지옥 된다.
비동기도 마찬가지다. async/await를 쓰면 뭔가 비동기처럼 보이긴 한다. 그런데 진짜 비동기 개념은 아니다. 자바스크립트는 싱글 스레드다. 비동기처럼 동작하는 건 이벤트 루프와 태스크 큐 덕분이지, 실제로 병렬로 처리되는 게 아니다. C++, C#, Java 같은 시스템 언어나 서버 프레임워크에서 말하는 논블로킹 I/O, 멀티스레드 환경과는 전혀 다르다. 그런데 개념 없이 그냥 '비동기니까 성능 좋겠지?'하고 남발한다. 그러다 은행앱도 터지고, API 응답 꼬이고, 사용자 UX 박살 난다. 이런 거 하나하나가 설계 미스에서 비롯된다.
요즘은 퍼블리셔 출신이 프론트 개발자가 된 케이스도 많다. 디자인과 UI 감각은 좋지만, 상태 흐름, 렌더링 타이밍, 동기/비동기 구조는 잘 모른다. 그러다보니 겉보기에 예쁜데 속은 엉망인 구조가 쌓인다. 반면 응용이나 서버 개발은 설계 실수 하나가 장애로 직결되기 때문에, 구조를 먼저 고민할 수밖에 없다. 그 차이가 점점 결과의 차이로 이어진다.
백엔드라고 다르지 않다. Node.js 쓴다고 비동기 잘 다루는 게 아니다. libuv 쓰레드풀로 내부적으로 처리되는 거고, 대부분의 DB 작업은 여전히 싱글 커넥션으로 동작한다. Nest.js건 SpringBoot건 구조를 못 짜면 그냥 CRUD 덩어리에 지나지 않는다. 마이크로서비스 구조? 제대로 짜면 좋은데, 그냥 서비스 나누고 라우팅만 다르게 해놨다고 되는 게 아니다. 컨텍스트, 권한, 트랜잭션 관리가 따로 분리 안 되면, 그건 구조가 아니라 분산된 덩어리다.
트렌드는 끝도 없다. 프론트는 Redux 썼다가 recoil 갔다가 zustand 쓰고, 이제는 signal이나 mobx로 간다. 백엔드는 GraphQL이다 gRPC다 REST다 왔다갔다 한다. 하지만 어떤 걸 써도 본질은 똑같다. "데이터의 흐름을 예측 가능하게 만들고, 문제를 디버깅하기 쉽게 유지하는 구조". 그걸 놓치면 결국 도구만 갈아끼우는 개발자가 된다. 구조는 그대로고, 겉만 바뀐다.
앞으로는 더하다. AI가 코드 짜주는 시대다. 지금도 프롬프트 몇 줄 넣으면 React 컴포넌트 뚝딱 나온다. 이런 시대에 코딩 실력 자랑은 별 의미가 없다. 구조를 설계하고, 흐름을 통제하고, 문제를 정의하고, 구현은 AI에게 시키는 사람이 진짜다. 이건 웹이든 서버든 응용이든 마찬가지다. 다 도구일 뿐이다. 설계와 구조가 본질이다.
"응용, 서버, 웹 다 경험한, 진짜 '돈 벌려고' 개발한 아저씨가 전하는 말"
단순히 코드를 잘 짠다고 돈이 벌리는 시대는 이미 끝났다. 중요한 건 무엇을 만들어야 하는지, 누구를 위한 것인지, 그리고 어떻게 만들면 가장 효율적인지를 아는 것이다. 기술을 잘 쓰는 것도 중요하지만, 언제 어떤 기술을 써야 돈이 되고 안 되는지를 판단하는 감각이 진짜 실력이다.
고객은 기능이 아니라 ‘문제 해결’을 원하고, 우리는 그걸 최대한 빠르고 싸고, 안정적으로 구현해줘야 한다. 그래서 구조가 중요하고, 비즈니스를 이해하는 개발자가 결국 오래 살아남는다. 이건 그냥 개발자 철학이 아니라, 지금 당장 돈을 버느냐 마느냐를 가르는 현실이다.