🚀 2026 스타트업 컨퍼런스

딥러닝 프레임워크를 맨땅에서 다시 짜보는 바보 같은 짓에 대하여

딥러닝 프레임워크를 맨땅에서 다시 짜보는 바보 같은 짓에 대하여

김현수·2026년 1월 4일·3

주니어 시절 '바퀴를 다시 발명하지 마라'는 격언을 맹신했던 시니어가 torch.ts 프로젝트를 통해 깨달은 라이브러리 내부 원리 학습의 중요성과 엔지니어링의 본질을 공유합니다.

솔직히 고백하자면, 주니어 시절 저는 '바퀴를 다시 발명하지 마라'는 개발 격언을 맹신했습니다. 이미 잘 만들어진 라이브러리가 있는데 굳이 내부 구현을 파고들거나 비슷하게 만들어보는 건 시간 낭비라고 생각했으니까요. 우리는 늘 바빴고, 기능 구현이라는 당면 과제가 산더미처럼 쌓여 있었기 때문에 효율성이야말로 최고의 미덕이었습니다. 하지만 연차가 쌓이고 시니어라는 타이틀을 달게 되면서, 그 효율성 뒤에 숨어있던 거대한 구멍을 마주하게 되었습니다. 바로 라이브러리나 프레임워크를 '마법'처럼 여기는 태도입니다. 내부 원리를 모르고 가져다 쓰기만 하니, 조금만 복잡한 에러가 터지거나 성능 이슈가 발생하면 속수무책으로 당황하게 되더군요. 오늘 소개하고 싶은 torch.ts라는 프로젝트는 바로 그런 맥락에서 제게 신선한 충격을 주었습니다.

이 프로젝트는 이름에서 알 수 있듯이, 딥러닝 업계의 표준이나 다름없는 PyTorch를 TypeScript로 처음부터, 그것도 밑바닥부터 구현해 보려는 시도입니다. 사실 실용성만 따지자면 의문 부호가 붙을 수밖에 없습니다. Python 생태계의 방대한 라이브러리와 C++로 최적화된 연산 속도를 TypeScript가 따라잡기는 현실적으로 어렵기 때문입니다. 하지만 개발자(13point5)는 이 프로젝트의 목적을 아주 명확하게 '학습(Learning)'이라고 명시했습니다. 단순히 API를 호출하는 소비자가 아니라, 텐서(Tensor)가 메모리 상에 어떻게 올라가고 연산되는지 직접 창조자가 되어 이해해 보겠다는 엔지니어링적 야심이 엿보이는 대목입니다.

코드를 들여다보면 흥미로운 지점들이 보입니다. 특히 텐서의 핵심 속성인 shape(형태)와 strides(보폭)를 다루는 방식이 인상적입니다. 우리가 흔히 [2, 3] 형태의 행렬을 다룰 때, 컴퓨터 메모리 안에서는 이것이 [1, 2, 3, 4, 5, 6]처럼 평평한 1차원 배열(flatData)로 저장됩니다. 이때 (0, 2) 위치의 값 3을 찾아내기 위해 인덱스를 어떻게 계산해야 할까요? 바로 여기서 strides의 개념이 등장합니다. PyTorch를 쓸 때는 viewreshape 함수 한 번이면 끝날 일이지만, 이걸 직접 코드로 구현하다 보면 다차원 데이터를 1차원 메모리에 효율적으로 매핑하는 수학적 논리를 뼈저리게 이해하게 됩니다. TypeScript라는, 타입 시스템이 강력한 언어로 이를 구현함으로써 데이터의 흐름과 구조를 더욱 엄격하게 정의하고 검증하는 과정 자체가 훌륭한 공부가 되는 셈입니다.

많은 후배 개발자분들이 AI나 딥러닝을 공부할 때, 모델의 아키텍처나 최신 논문에만 집중하는 경향이 있습니다. 물론 중요하지만, 정작 현업에서 발목을 잡는 건 "왜 텐서의 차원이 안 맞지?" 혹은 "왜 여기서 메모리 누수가 발생하지?" 같은 아주 기초적이고도 로우 레벨(Low-level)인 문제들입니다. torch.ts 같은 프로젝트를 보며 제가 느끼는 건, 기술의 본질을 꿰뚫기 위해서는 가끔은 비효율적으로 보이는 '삽질'이 필요하다는 사실입니다. 리처드 파인만은 "내가 창조할 수 없는 것은 내가 이해하지 못한 것이다"라고 말했습니다. 우리가 매일 쓰는 도구인 React, Spring, 혹은 PyTorch의 핵심 기능을 아주 작게라도 직접 구현해 보는 경험은, 단순히 도구를 잘 쓰는 수준을 넘어 도구의 한계와 가능성을 정확히 파악하는 엔지니어링 역량을 길러줍니다.

당장 오늘부터 거대한 라이브러리를 통째로 베껴 쓰라는 이야기는 아닙니다. 다만, 여러분이 자주 사용하는 useEffect가 내부적으로 어떻게 상태를 비교하는지, 혹은 데이터베이스의 인덱싱이 어떤 자료구조로 되어 있는지 궁금해하고, 가능하다면 아주 간단한 코드로 흉내 내어 보시길 권합니다. torch.ts의 작성자가 TypeScript로 텐서를 구현하며 느꼈을 그 짜릿한 깨달음의 순간이, 여러분의 개발 여정에도 있기를 바랍니다. 결국 10년이 지나도 변하지 않는 실력은 화려한 프레임워크 사용법이 아니라, 그 아래에서 작동하는 원리에 대한 깊은 이해에서 나오니까요.

김현수
김현수10년 차 시니어 개발자

복잡한 기술을 누구나 이해하기 쉽게 풀어내는 것을 즐깁니다. 10년의 개발 여정에서 얻은 인사이트와 시행착오를 솔직하게 공유합니다.

김현수님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!