나의 개발 여행

5 minute read

나의 개발 여행

여행전

저는 대학교 졸업 후에 취업 대신에 대학원 진학을 선택했습니다. 일단 석사를 목표로요. 4학년 때부터 연구실 생활을 해보다보니 논문을 읽는 것도 재밌어 보였고 연구 주제도 괜찮아 보였습니다. 저의 연구 주제는 GPGPU를 통한 공간데이터 인덱싱 관련 연구 였습니다. 제가 완전히 생각해낸 것이라기 보다는 연구실에서 진행하던 연구의 가지 중에 하나 였다고 볼 수 있을 것 같습니다. 원래는 나름 재밌어서 박사까지 할 예정이었지만 현실적인 생각에 교수님께 말씀드리고 석사까지만 하고 취업을 결정했습니다.

배웠던 것: CUDA, OpenCL, SIMD

여행의 시작

처음에 선택한 회사는 티맥스 오에스였습니다. 저는 사실 제가 오에스를 개발하게 될거라고 생각하지 않았습니다. 티맥스 소프트에서 일할 거라고 생각했기 때문이죠. 처음에 제가 개발한 것은 오에스에 들어가는 오피스 프로그램 이었습니다. 처음에는 오피스 프로그램에 들어가는 표 기능을 설계하고 구현했습니다. C++로 개발했고 어플리케이션 개발이었습니다. C++은 사실 대충 사용할 줄만 알았지 객체지향의 의미를 제대로 이해하고 사용한 적은 없었습니다. 그러다가 객체지향에 관한 책을 몇가지 읽고 적용하면서 OOP에 대한 재미를 깨달았고 한동안 그 재미에 빠져서 살았던 것 같습니다. 단순히 배우는데서 끝나지 않고 여러가지 패턴 적용에 성공하고 실패도 해보면서 많이 배웠던 시간이었습니다. C++ 언어 자체가 쉬운 언어가 아니다보니 언어 자체에 대한 흥미도 많았습니다. 개인적으로 C++언어의 꽃은 템플릿 프로그래밍이다고 여겨서 여러가지 특이한 패턴들을 사용해 가면서 구현했었습니다. 언어적인 것뿐만 아니라 여러가지 도메인 지식도 알게 되었습니다.

글씨체 기능을 담당하다보니 로케일, 유니코드 같은 기본적인 지식부터 실제 폰트에 적용되는 글리프 같은 개념 또한 익히다보니 관련 책도 읽고 흥미로운 시간이었습니다. 그러다보니 팀을 워드팀에서 프레임워크 팀으로 옮겨서 직접적인 기능을 구현하기보다는 기능 구현하는 분들께 여러가지 툴이나 클래스를 제공하는 게 너무나도 흥미로운 작업이었습니다. 이때 경험해본 것들이 지금까지 영향을 끼치는 것 같습니다. 나중에는 오피스팀을 떠나서 유저레벨에서 오에스를 기본적으로 구성하는 요소에 대한 개발도 진행하였습니다. 바탕화면이나 파일매니저 같은 앱 이었습니다. 대부분 분들이 그렇겠지만 생각보다 어려운 작업이었습니다. 아무래도 파일시스템을 다루다보니 이때부터 리눅스에 대한 좀 더 관심이 생겼었습니다. 보통 쉽게 생각하지만 세상에 쉬운 프로그래밍은 하나도 없구나라는 생각이 들었습니다. 이때 리눅스 파일시스템을 윈도우 파일 시스템처럼 매핑하는 라이브러리를 제작하는 일이 개인적으론 재미있었습니다.

저의 티맥스에서 마지막 팀은 디스플레이 서버를 만드는 팀이었습니다. 좀 더 커널에 가깝고 저수준 개발을 해보고 싶은 생각에 팀을 옮겼던 것 같습니다만 회사의 근본적인 한계에 부딪혀서 개인적인 어려움을 많이 겪었던 것 같습니다. 디스플레이 서버 개발에 집중하기 보다는 다른 프로젝트성 일에 많이 투입되었던 것 같습니다. 대신에 실제 우리가 보통 GUI 프로그래밍을 하면 어떤 과정에 의해서 우리의 모니터에 그려지는 지를 자세하게 알 수 있었습니다. 사실 그냥 캔버스에 선을 그리면 알아서 화면에 그려지겠지 라는 생각에서 좀 더 깊이 들어가는 체험을 했습니다.

배웠던 것 : C++, OOP Design pattern, C++ template, linux, inotify, display server, qemu, drm, gl/glx/egl, systemd, dbus

또 다른 여행의 시작

오에스 개발에 참여하면서 자만심에 빠졌다는 것 같습니다. 회사에서 하는 개발이 한정적인 것 같고 지루하다고 생각했습니다. 개인적으로는 뭔가를 이루고자 하는 마음도 강했고 그래서 뭔가 업적을 이룬 개발자들을 생각해보면 대부분이 오픈소스 프로젝트에 의해서 업적을 이루었다고 생각을 했습니다. 그래서 리눅스 오픈소스에 컨트리뷰팅을 도전했습니다. 처음에 간단하게 튜토리얼을 따라해 가면서 간단한 컨벤션 오류를 수정하는 일부터 시작했습니다.

좀 더 깊에 들어가고 싶었지만 저의 흥미가 떨어져서 그런지 지금까지도 크게 다르지 않은 것 같습니다. btrfs에 조금 흥미를 느껴서 클라이언트 프로그램에 좀 패치를 해봤지만 깊게들어가지 못하고 지금까지도 겉핧기로 하고 있는 것 같아 아쉽습니다. 아예 오픈소스가 직업이 되었으면 좋겠다는 생각도 있지만 현실적으로 기회를 잡기가 쉽지 않아보입니다. 아직도 오픈소스 활동을 해야겠다는 생각이 있지만 마지막 컨트리뷰팅이 벌써 작년이라서 다시 할 수 있을 지 고민입니다.

배웠던 것 : Linux Kernel, filesystem, block layer, btrfs, git rebase

두번째 회사

두번째 회사는 네이버 내에서 검색 엔진 솔루션을 만들었습니다. 서버 개발을 처음 접해보기도 했고 심지어 검색에 대한 개념도 없어서 처음에는 검색에 대한 개념을 많이 배웠습니다. 개인적으로는 학문적인 느낌도 있었고 원래 계신 분들의 프라이드도 대단해보였습니다. 부족함이 있어서인지 한가지를 깊게하지 못하고 여러가지를 했었습니다. 기억나는 것은 클라이언트 프로그램을 만들 때 이전에는 컴파일러의 버전이나 런타임 libstdc++ 같은 걸 신경쓰지 않았는 데 내가 만든 코드를 다른 여러 환경에서 돌리는 것이 쉬운 것이 아니구나 라는 깨우침을 얻었습니다. 또한 분산 환경에 대한 알고리즘 같은 것에도 흥미가 있었습니다. 무엇보다도 검색 엔진을 만들면 그것을 써주시는 개발자들이 있고 그 분들과 소통한다는 것이 너무 신기했었습니다.

배웠던 것 : devtoolset, information retrieval, consensus algorithm, version compatibility, gRPC

세번째 회사

두번째 회사를 도망치듯 나와서 다시 들어온 회사는 카카오 엔터프라이즈였습니다. 그 곳에서 저의 역할은 백엔드 개발이었습니다. 이 백엔드에는 특수한 사정이 있었는 데 기존에 백엔드가 C++로 개발되어 있었는 데 개발 하시던 분이 퇴사하게 되자 급하게 C++ 개발자를 찾던 중 제가 연결되었던 것입니다. 새로 만든 서비스 답게 k8s 환경에 MSA를 지향하는 구조였습니다. 클라우드 환경에서 개발을 하다보니 배우는 것도 많았습니다. k8s에 쓰이는 파드나 서비스 등 여러가지 개념을 알았고 MSA에 보통 쓰이는 레디스나 카프카 같은 컴포넌트들과 역할을 알았습니다. 제가 별 생각 없이 쓰던 웹서비스의 백엔드가 이렇게 돌아가는 구나 정도를 이해했습니다.

그 중 C++ 서버는 참 중요한 역할을 하고 있는 서버였지만 C++을 할 수 있는 분은 저와 다른 한분으로 2명 뿐이었습니다. 나머지 개발자들은 대부분 코틀린 스프링이나 엘릭서를 통해서 개발하고 있었습니다. 팀도 나눠져 있지 않다보니 작업한 내용을 공유하는 데에 어려움이 많았던 것 같습니다. 처음에는 이런 점을 좀 줄여보고자 팀내에서 C++ 스터디 같은 것도 진행해보았습니다만 사실 크게 효과는 없었던 것 같습니다. 생각해보면 제가 스터디를 좀 잘못한 부분도 있습니다. 듣는 사람들이 사실 C++에 관심이 없다보니 제가 중간부터 자세한 이야기를 하는 것을 포기해버린 면도 있습니다. 개인적인 생각으로 팀원들과 제가 하고 싶어하는 개발이 달랐던 것 같습니다.

저는 뭔가를 만들고 싶어하는 경향이 강했습니다. 예를 들면 레디스를 사용하기 보다는 그 내부구조를 이해하고 비슷한 것이라도 만들어서 적용하고 싶었습니다. 이런 이야기를 했을 때 “왜 그걸 만들어?” 라는 이야기도 많이 들었습니다. 어떻게보면 개발자로서의 욕심이었습니다. 사실 회사 사업상 만들 필요 없는 걸 저도 알고 있어요. 개인적으로 Rust를 개발하고 적용해본 것은 나름의 성과라고 생각합니다. 배운지 얼마 안되었지만 좋은 언어라고 생각합니다. 하지만 Rust로 개발할수록 C가 참 위대한 언어라고 생각이 듭니다. Zig 프로젝트도 관심있게 지켜보고 있습니다.

배웠던 것 : MSA, http, websocket, redis, kafka, database, boost asio, c++ coroutine, rust, tokio, async

지금

현재는 제가 개발하고 있는 서비스를 인원을 축소하라는 공지를 들은 상태이고 대부분의 개발자들이 퇴사를 할 것 같고 아마 저도 그럴 것 같습니다. 사실 제 자리가 남아 있을지도 모르겠지만 더 이상 추가적인 확장이 없다면 도전적인 개발도 없을 것이고 딱히 재미도 없고 좋은 평가도 받기 어려울 것 같습니다. 다른 자리를 찾아봐야 할 것 같은 데 사실 두렵습니다. 좋은 자리를 찾아봐야 할 것 같은 데 좋다는 기준마저 어떻게 세워야 할지 고민입니다. 짧게나마 웹 서비스에 개발에 참여해보니 위에서 이야기한대로 저와 안맞는 것 같기도 합니다. 사실 저수준의 개발을 하고 싶은 데 제가 갈 수 있는 곳이 있을지도 모르겠습니다.

평소에 몸이 무거워서 어딜 움직이지 못한다는 생각을 하였습니다만 막상 몸이 가벼워지려고하니 떠나는 곳이 두려워져버린 느낌입니다. 하지만 좀 더 용기를 가지고 계속 여행 해보려고 합니다.

가끔은 스스로 너무 자기비판적으로 생각하기도 합니다. 아무것도 할 수 없을 것 같고 여기저기를 전전하다가 끝날 것 같기도 하고 그렇습니다. 오픈 소스 기여를 시작할때만 해도 리누스 토발즈 영상을 보면서 언젠가 한번쯤 만날 수 있겠지 생각했지만 최근에 같은 영상을 다시보니 뭔가 너무 멀어보이고 나는 너무 늦어버린 것 같은 기분이 듭니다.

그럴때마다 저한테 좋은 이야기 해주셨던 분들을 좀 떠올려 보려고 합니다. 이 글을 읽어주실 지도 모르겠습니다. 차마 연락 드릴 용기는 없지만 잠깐만 떠올려봐도 큰 힘이되어 저를 코드 한 줄이라도 더 읽게 하는 것 같습니다.

하고 싶은 것: opensource, low level, engine

긴글 읽어주셔서 감사합니다.

Tags:

Categories:

Updated: