/ Linux

개발자(?) 3년 생활 돌아보기

Comments

필자는 2017.2 ~ 2019.3 까지 3년동안 Tmax 에서 개발자(사내에서는 연구원이라고 칭한다.) 생활을 하였다. 본 포스트는 3년간의 생활에 대한 소회이다. 일기 형식이니 그냥 읽고 싶은 사람만 읽어라. 기술적인 내용은 차차 하나하나 포스트하고자 한다. (예고 내용은 마지막에 있다.)


1. 입사 과정

--
내 소개 페이지에도 써있지만 나는 2014년 부터 연대 전기전자 컴퓨터구조 연구실 에서 대학원 생활을 했다. 미필이었기 때문에 전문연구요원 복무를 희망하였으나 TEPS 점수가 모자르기도 했고, 대학원 생활이 만족스럽지 못했기 때문에 연구실 선배들이 전문연구요원으로 복무중인 Tmax 라는 회사에 추천을 받아 입사하였다. 입사 당시에 Tmax를 찾아보니 온라인 상에서는 엄청나게 욕을 먹는 회사였다. 내부자가 추천을 했기에 이는 딱히 신경이 쓰이지는 않았다.

본래의 전공이 컴퓨터구조(하드웨어) 이기도 했고, 딱히 코딩을 제대로 해본적이 없기에 Tmax라는 회사는 사실 알지도 못 했다. 당시에는 gpu전공이다 보니 딥러닝에 관심이 있기도 했고, 나름 first mover 여서 지식도 있는 상태였는데, NC soft 연구직에 떨어졌다. Tmax 에서 연봉도 잘 준다고하고, 연구실선배가 적극 추천하기도 했고, 집이랑도 가까워서 Tmax로 가기로 했다.

연구원이라는 직책으로 입사가 예정되어있었는데, 여기저기 물어보니 개발자랑 크게 다르지 않다고 했다. (실제 입사해보니 연구원이라는 말이 틀린말은 아니었...) 당시에 코딩이라고는 대학교때 배우는 자료구조, OS 수업정도를 들어본게 다 였고, cpu/gpu simulator 코드를 좀 수정해보기는 했지만, 접해만 본 정도 였다. 그래서 전공을 바꾼다는게 조금 두렵기는 했다. (지금보기에는 아주 잘했다!)

제일 아쉬웠던 것은 박사학위를 가정하고 삼성전자에 입사하기로 되어있었고, 장학금을 지원 받고 있었는데 이때까지 받은 장학금을 내뱉는 것이었다.... 아쉽지만 뭐 어쩔 수 없었다.


2. 입사 초기

--

  • 업무 관련 이야기

입사를 하고서는 악명높은 TmaxOS 제품을 맡게 되었다. 제품에 대한 내용은 나무위키 같은 곳에 내용이 많지만, 내부자가 확인하기에 근거도 없는 틀린 내용들이 많다. (꺼무위키 나라) 자세한 것들을 알릴수는 없지만, 어쨌든 제품에 대한 내용은 따로 작성하고자 한다.

TmaxOS 중에서도 처음에는 2D 그래픽 엔진 파트를 맡게 되었다. Font/Text 부터 Printer, 2D Rendering 까지 다 경험해보았는데, 코딩에 있어서 많은 깨달음을 얻었다. 운이 좋게도 사수가 고오오오오오수 였고, 특정 파트를 통째로 조사부터 설계, 구현을 직접 해보면서 언어적인 지식과 OOP 철학에 대해 진정을 깨달을 수 있었다.

이때부터 설계 & 구현에 대한 자신감이 붙어서 뭐든 다 만들 수 있겠다는 생각이 든 것 같다. 가장 도움이 되었던 것은 하나의 프로젝트의 틀을 처음부터 구현까지 다 해보는 것이었고, 양질의 코드을 참조하는 것이었다. 나는 구글성님들의 코드와 wine 코드를 많이 참고 하였는데, 구글 성님들에게 많이 배웠다.

2D 그래픽 팀에 있으면서 자랑할만한 것이 하나 있다. windows 에서 제공하는 compound array 라는 기능을 직접 구현하였다. 쉽게 얘기하면 겹선 기능인데, 다른 어떤 오픈소스 라이브러리에서도 제대로된 구현체를 찾지 못하여 직접 다 구현하였다. 단순한 도형에서야 겹선이 어렵지 않아 보이지만, 자유선이 되면 매우 복잡하다. 실제로 windows 에서도 ppt 등에서 해보면 선이 깨지는 경우가 많다. 이에 대한 자세한 내용은 따로 포스팅 하고자 한다. 아주 소소한 부분이지만, 나름 우리 제품의 자랑거리이니 코드 공개가 아닌 알고리즘은 자랑해도 되겠지.

  • 회사 생활 이야기

업무내용을 제외한 회사 생활 자체도 매우 만족스러웠다. 우선 1인 또는 2인 1실이었고, 같이 일하는 동료들이 다 또래였다. 회사 동료들과 사적으로도 친해지기 쉬운 환경이었고, 회식도 항상 재미있었다.
그리고, 믿기지 않을 정도로 잘하는 사람이 꽤 있다. 전문연구요원제도 때문인지, 회사에서 고학벌을 선호해서 인지, 사내 연구원중 반이상은 SKY 이상의 학벌이었다. 물론 높은 학벌에도 못하는 사람이 있고, 낮은 학벌에도 잘하는 사람이 있다. (내 주변에만 해도 둘 다 있다.) 잘 하는 사람들 덕분에 많은 것을 배울 수 있어서 좋았다.
개인적으로 운동을 좋아하는 편인데, 사내 헬스장이 있고 운동을 매우 권장해서 운동도 열심히 했다. 사내에 pt 선생님도 계셨는데 시중의 반값 가격인데다가, 선생님이 무려 미스터코리아 2등 하셨던 분 ㄷㄷㄷ.
사내 마사지실도 있다. 1시간에 1만원이고, 월에 최대 8회까지 이용가능하다. 지금도 마사지 시간을 기다리며 이 글을 작성하고 있다. 원래 살면서 마사지를 받아본 적이 거의 없었는데, 이게 이렇게 좋은 것인지 처음 알게 되었다.
단점은 야근 및 주말 출근이 잦았다. 1~2년 후에는 그렇지 않았지만, 입사 초기에는 그랬다. 그래봤자 대학원 생활에 비하면 훨씬 근무시간이 짧았기 때문에, 나는 매우 만족스러웠다. (연구실은 정말...) 동료들 중에는 이것을 매우 힘들어 하기도 했다.

  • 회사 문화 이야기

신기한 사내 문화가 하나 있었다. 바로 박대연 교수님 (회사의 창업자이자 최대주주, 현재는 CTO 이신데, 카이스트 교수 출신이라 모두 교수님이라 칭한다.) 께서 모든 연구원들을 1:1로 기술적 면담을 한다. 500명 이상의 연구원이 있는데... ㄷㄷ 대학원때 우리 지도교수보다 더 기술적인 대화를 많이 한 것 같다.
장점이자 단점이라고 할 수 있는데, 개인적으로 나는 좋았던 것 같다. 면담을 통해 많은 기술적인 결정사항들이 나오게 되는데 실질적 대표인 교수님이 좋은 기술에 대한 열망이 있다. 개인적으로는 반대하는 결정들도 있긴 하지만, 기술에 문외한인 사람이 대표를 하는 것보다야 백배 낫다. 그리고, 내가 기여한 것들을 회사의 실질적 대표에게 자랑할 수 있는 자리이기도 하다. 반대로 많은 연구원들은 면담에 대해 많은 부담을 느끼기도 한다.


3. 팀 이동 후 퇴사까지

--

  • 팀 이동 계기 및 업무

앞서 말한 2D 팀에서 잘 일하고 있었는데, system 팀으로 이동을 하게 되었다. 가게 된 팀은 회사에서 잘하는 사람들이 모여있는 팀이었고, 그만큼 어려운(?) 일을 하는 팀이었다. 이 회사를 추천한 연구실 선배가 그 팀의 팀장이었고, 업무적으로도 사람이 필요한 상황이었다. (역시 인맥빨...)
가서 하게될 일은 Linux 기반의 TmaxOS 에서 windows app 을 돌리기 위한 호환 Loader & Linker 관련 업무였다. 비슷한 오픈소스 프로젝트로는 Wine 이 있다. 간단한 설명으로부터 바로 느껴지듯이 고인물 분야라 학교에서 가르쳐주는 내용도 아니고, 지식이 사방에 널려있지도 않다. 그래서, 더더욱이 새로운 일을 하면서 많은 것을 배울 수 있겠다라는 생각이 들었다.
2D 팀에서도 windows app 호환 업무를 하긴 했지만, 2D graphics api들을 직접 우리 시스템에서 구현하는 일이었다. 바이너리 자체가 어떻게 로딩되어서 프로세스가 생성되고 라이브러리들이 linking 되는지를 모는 것은 아니었다. 그래서 더더욱이 가서 성장할 수 있겠다는 생각을 하게 되었다.

  • 팀 이동 후

지금와서 생각해보니 참 잘 옮겼다. 2D 팀이 안 좋았다는 것은 아니다. 2D 팀에서도 많은 것을 배웠고, 사람들도 좋았다. 그렇지만 새로운 팀에서 배운 것은 달랐고, 더 희귀한 것을 배웠다.
이 곳에는 다양한 고수들이 있었다. 당사자들이 보면 누구를 지칭하는 지 다 알 것이다. 메뉴얼을 통째로 다 익히는 정석맨, 방대한 지식으로 요리조리 다 뚫어서 해결하는 해킹맨, 구현은 찍어 내는 것일 뿐인 완벽설계맨, 무엇이든 디버깅하는 만능해결맨 등등. 나도 나름 추론 및 직관에 기반한 디버깅에는 능하다고 생각했는데, 정말 많은 것들을 배웠다. 정파와 사파의 다양한 사고방식 부터, 한글로는 존재하지 않는 수많은 low-level 지식들. 덕분에 내 실력도 늘었고, 손쉬운 도움으로 퍼포먼스도 늘었다.
지식적으로도 어디가서 쉽게 배우지 못할 것들을 배웠다.
반대로 한계도 느꼈다. 하나의 고인 분야에서 지식적으로 거의 끝까지 알게 되었고, 관련된 모든 것은 그냥 보면 다 이해할 수 있을 정도가 되었다. (자만이기도 하다) 지식이 많다고 해서 모든 것을 빠르고 완벽하게 해결할 수 있는 것은 아니더라. 누군가는 반나절만 슥슥 집중하면 microsoft 의 인증로직을 그냥 뚫어버리더라. 거기에 필요한 모든 지식을 나도 똑같이 가지고 있었지만, 나는 반나절가지고는 안되겠던데. 그리고, 새로운 지식을 습득하는 속도도 차이가 많이 나더라. 그런 사람들과는 시간이 지날수록 격차가 벌어지기만하지, 절대로 쫓아갈수가 없음을 느꼈다.

  • 퇴사

이제 전문연구요원이 끝났다. 개인적으로는 따로 해야할 일이 있기에 그만두게 되었다. 많이 아쉽기는 하다. 우선은 운이 좋았기 때문에 회사내에서 실력을 인정받을 수 있었다. 사내에서는 최고 영예라는 마에스트로 상을 수상하기도 했고, 회사 특성상 연봉을 많이 올려주기도 하기 떄문에, 금전적으로나 업무적으로나 부족함이 없었다. 3년 근무를 하면 1달 유급휴가도 주기 때문에 더더욱이 아쉽기도 하다.
개인적인 사정이 아니었더라면, 아마 최소 반년이상은 회사를 더 다녔을 것 같다. 사실 재직중에 하이닉스나 삼성전자로 이직할 기회(?)가 있어서 좀 고민을 했었는데, 지금 생각해보면 안가길 잘했다. 아직 어리고, 해보고싶은 것이 많고, 소프트웨어의 세계는 그것이 가능하다는 것을 알았다. 하드웨어의 세계에 있었다면 이런 것은 모르고 평생 살았겠지. 마치 매트릭스처럼. 우연히 빨간약을 먹게 되었지만, 후회는 없다.


4. 3년동안 개발한 내용

--
3년동안 개발한 것들의 기술적인 내용들을 차차 포스트 하고자 한다. 그 예고를 여기에 쓴다.
당연히 회사에서 개발한 것들은 회사가 소유한 자산이고, 밝힐 수 없는 것들이 많기에 자세히 모든 것을 기술할 수는 없다. 적당한 선에서 회사 제품의 홍보이자 내 자랑이라고 보면 되겟다.

  • windows 의 겹선 그리기

windows 에서는 다중 겹선을 그릴수가 있는데, 이를 compound arrary 라고 한다. 의외로 windows 제외하고는 아무도 이 기능을 제공하지 않더라. 사실 windows 에서도 조금만 복잡하면 망가진다. 이를 tmaxos 에 구현했는데, 이에 대한 내용을 기술한다.

linux 의 버그를 찾았다. 현상은 다른데서 찾아서 알아봐달라고 우리 팀에 일이 들어왔고, 팀원과 같이 분석을 해보았는데, 진짜 Linux 의 버그였다. 범인도 찾았고, 범인에게 봐달라고 하니 고쳐서 올리더라. Linux git 에 내 이름이 reporter 로 올라갔다. 뿌듯.

  • Crack 만들기

업무 특성상 리버싱을 하다보니, 크래킹이 되더라. 뭐 이제 해킹도 시간만 있으면 충분히 할 수 있겠다. 하나 예시만 간단히 들어보고자 한다.

Wine 이 이걸 한다. TmaxOS도 이걸 한다. 내 주업무였다. TmaxOS 의 자세한 내용은 당연히 밝힐 수 없고, Kernel이, OS가 어떻게 다르길래, 어떻게 해야 이게 가능한 것인지 설명하고자 한다.