
솔직히 말해봅시다.
우리 컴퓨터는 10년 전보다 10배는 빨라졌습니다.
제가 다루는 NVIDIA H100 같은 괴물 같은 하드웨어가 세상에 널렸죠.
그런데 소프트웨어는 어떤가요?
오히려 더 느리고, 무겁고, 멍청해졌습니다.
앱 하나 띄우는 데 로딩이 걸리고, 텍스트 입력창 하나 띄우는데 렉이 걸립니다.
우리는 이 끔찍한 성능을 '정상'이라고 착각하고 있습니다.
이른바 'Handmade' 커뮤니티라는 곳이 있습니다.
게임 엔진부터 모든 걸 바닥부터 짜야 한다는 이 독한 사람들은 현대 소프트웨어의 비대함을 혐오합니다.
"저수준(Low-level) 프로그래밍이 답이다"라고 외치죠.
저도 한때는 비웃었습니다.
"바쁜데 언제 OS부터 만들고 있어? 라이브러리 가져다 쓰는 게 생산성이지."
하지만 그 '생산성'이라는 핑계 뒤에 숨겨진 끔찍한 TCO(총 소유 비용)를 마주하고 생각이 바뀌었습니다.
여러분, 테슬라 모델 3를 잘라서 픽업트럭으로 개조한 'Truckla'라는 차를 아십니까?
엔지니어링 관점에서 보면 대단한 성취입니다.
하지만 냉정하게 말해, 그건 형편없는 트럭입니다.
적재함은 좁고, 무거운 짐은 못 싣고, 구조적으로 비효율적입니다.
애초에 세단용 섀시(Chassis)로 설계되었으니까요.
소프트웨어도 똑같습니다.
여러분이 선택한 기술 스택(Stack)이 곧 자동차의 섀시입니다.
잘못된 스택 위에 아무리 화려한 코드를 쌓아 올려도, 결과물은 'Truckla'일 뿐입니다.
가장 적나라한 예시가 바로 Reddit입니다.
10년 전의 'Old Reddit'과 현재의 'New Reddit'을 비교해 봅시다.
기능은 똑같습니다. 댓글을 접고 펼치는 기능이죠.
논리적으로 필요한 작업은 단순합니다.
DOM 요소 몇 개 숨기고, 텍스트 업데이트하면 끝입니다.
그런데 New Reddit은 댓글 하나 접는 데 200ms(0.2초)가 걸립니다.
사용자는 분명히 끊김(Stuttering)을 느낍니다.
반면 Old Reddit은? 10ms면 끝납니다.
무려 20배의 성능 차이입니다.
도대체 최신 기술을 썼다는 New Reddit에서 무슨 일이 벌어진 걸까요?
프로파일러를 찍어보면 가관입니다.
댓글 하나 접는 이벤트가 발생하면, Redux 액션이 디스패치되고, 전역 스토어가 업데이트됩니다.
그러면 페이지에 있는 수백 개의 컴포넌트가 "나도 업데이트해야 하나?" 하고 깨어납니다.
호출 스택(Call Stack) 깊이가 끝도 없이 내려갑니다.
저도 예전 직장에서 React와 Redux로 직원 스케줄링 앱을 만들 때 똑같은 짓을 했습니다.
Backbone.js가 낡았다고 욕하며 최신 스택으로 갈아엎었죠.
결과는 처참했습니다.
앱이 커질수록 성능은 기하급수적으로 떨어졌습니다.
저는 비즈니스 로직을 짜는 게 아니라, 프레임워크와 싸우는 데 시간을 다 썼습니다.
이건 주객전도입니다.
우리가 편하려고 쓴 라이브러리가, 오히려 성능을 갉아먹고 우리의 리소스를 잡아먹는 괴물이 된 겁니다.
개발자들은 게을러서가 아니라, 잘못된 도구(Stack)를 선택했기 때문에 고통받습니다.
저수준 프로그래밍이 중요하다는 건, 무조건 C언어나 어셈블리를 짜라는 말이 아닙니다.
여러분이 가져다 쓰는 그 무거운 라이브러리 아래에서 실제로 무슨 일이 일어나는지 이해하라는 뜻입니다.
DOM 조작 한 번이면 될 일을, 가상 DOM(Virtual DOM)과 상태 관리 라이브러리를 거치며 CPU 사이클을 낭비하고 있진 않습니까?
'추상화(Abstraction)'는 공짜가 아닙니다.
반드시 Latency와 Throughput이라는 비용을 청구합니다.
고수준(High-level)의 우아한 소프트웨어를 만들고 싶다면, 역설적으로 저수준의 원리를 꿰뚫고 있어야 합니다.
화려한 최신 프레임워크 스펙만 읊는 '복사 붙여넣기형 개발자'가 되지 마십시오.
여러분의 코드가 200ms짜리 쓰레기가 되는 건 한순간입니다.
오늘 여러분의 스택은 안녕하십니까?
혹시 세단을 잘라 억지로 트럭을 만들고 계신 건 아닙니까?


