테슬라 인턴 10주차

물회를 먹으면

by 지오

일요일이 되면 반복하는 루틴이 하나 있다. 아침 10시 반쯤 시내버스를 타고 나가면 한인 마트가 있다. 상가 1층을 완전히 차지한 홈플러스의 두 배 정도되는 크기다. 대학교 근처에서 이 정도 규모의 마트를 본 적은 없다. 동네 슈퍼 마켓 크기의 마트만 세 군데 있다. 역시 캘리포니아다.


샌프란시스코, 실리콘밸리, 그리고 회사가 있는 프리몬트 지역을 일컫어 'Bay Area'라고 부른다. 말 그대로 서쪽 바닷가 끝이기 때문이다. 그래서 그런지 해산물이 신선하다. 횟감, 초밥, 건조 오징어, 심지어는 참치 대가리까지 파는 해산물 코너가 있다. 미국에서 처음 본 물회가 있더라. 프리몬트산 물회의 특징으론 다진 마늘이 정말 많이 들어간다는 것이다. 진짜 생선 반 마늘 반이다. 살다 살다 마늘 때문에 매워서 샤워한 건 처음이다. 중독성이 때문에 한 입, 한 입 먹다 보니 바닥을 드러낸다. 하지만 다음 날이 고비다.


다음 날 출근을 하면 무조건 배가 아프다. 그래도 어쩌겠나, 먹고 싶었는데. 맛있게 먹었잖아 한 잔해.



이번 주부터 다른 팀 프로젝트에도 참여한다. 그 팀 프로젝트 배포 직전 보안 이슈가 생겨 여유가 된다면 도와달라는 매니저의 요청이 있었다. 반복되어 가는 자바스크립트 업무들에 지쳐가던 찰나, 파이썬으로 풀스택 앱을 만질 수 있다니. 정말 흥미진진한 상황이 아닐 수가 없다.


코드 베이스를 처음 까보니 가히 충격적이지 아니할 수가 없다. 테슬라라는 기술을 선도하는 기업에 먼지가 훌훌 날리는 구식의 코드가 남아있다니. 6년 전, 비즈니스 팀의 비개발자가 급하게 만든 웹 앱이다. 어떻게 서비스가 지금까지 되고 있는지 신기할 따름이다. 파이썬 3.7 '이하' 버전만이 (2018년에 출시됐다) 이 녀석을 감당할 수 있다. 그보다 더 주의를 끄는 것은 어디에서도 사용되지 않을 것만 같은 '버려진' 코드들이다.


애플리케이션은 첫 배포가 이루어진 뒤 수많은 업데이트들이 이루어진다. 버그를 수정하고, 새로운 feature를 추가한다. 그에 따라 과거의 코드들을 사라지고, 수정되고, 깃허브 데이터베이스 깊은 구석에 남겨진다. 신세대의 코드들이 그 빈자리를 채워간다. 그런데 여긴, 6년 전의 코드들이 거뜬히 자리를 지키고 있다.


V1, V2, V3... 더 이상 사용되지 않는 버전의 코드들 옆에 "Backward Compatibility"라는 변명이 남겨져있다. 애초에 이 함수들을 호출하는 코드가 없을 텐데 이걸 왜 남겨뒀는가. 그렇다고 막 지우기엔 무슨 일이 벌어질지 몰라 막막하다. 더군다나 내 프로젝트가 아니니 너무 많이 관여하면 탈이 날지도 모른다.


"Backward Compatibility"는 꽤나 흔히 볼 수 있는 콘셉트이다. 새로운 feature를 출시했을 때 코드가 기존 서비스에 영향을 주지 않도록 하는 조치이다. 마치 요즘 스마트폰이 USB-C 충전 포트를 쓰지만, 예전 8핀 충전기 포트도 남겨두는 것과 같다. 대부분 아무도 쓰지 않지만, ‘혹시 모르니’ 남겨둔다.


하지만 이는 '임시방편'에 불과하다. 궁극적인 솔루션은 오래된 코드들을 무작정 남겨두는 것이 아니라, 새로운 코드가 이전 코드들과의 호환성을 충분히 테스트하고, 검증하고, 필요하다면 깔끔하게 대체하는 것이다. 그런데 현실은 녹록지 않다. 늘 데드라인은 코앞이고, 당장 기능을 출시해야 할 압박 속에서 그런 꼼꼼한 작업은 뒷전으로 밀리기 일쑤다. 결국 미뤄둔 숙제처럼 쌓여가는 것이 바로 *기술 부채(technical debt)*다.


우리 팀의 Jira 보드를 들여다보면 기술 부채 태그가 달린 티켓들이 눈에 띈다. 그중엔 "Remove Deprecated ~" 같은 제목의 티켓들이 몇 개씩은 꼭 있다. 한때는 분명히 필요했지만 이제는 더 이상 쓰이지 않는 함수들, 구버전 API, 예전 로직들. “언젠가는 지워야지” 하고 남겨둔 코드들이다.


하지만 그 '언젠가'는 좀처럼 오지 않는다.


하지만 기술 부채는 문제 그 자체라기보다는, 그 부채를 쌓아도 되는지 아닌지를 판단할 수 있는 기준이 있느냐가 더 중요하다. 예를 들어, 팀에서 내일까지 반드시 ship 해야 하는 기능이 있다면, 지금 당장 오래된 코드를 정리할 필요는 없을 수도 있다. 혹은 팀에 엔지니어가 나 혼자뿐이라면, 기술 부채를 없애기 위해 다른 일정을 미루는 게 과연 옳은 선택일까? 결국 중요한 건 우선순위(prioritization), 그리고 등가교환에 대한 냉정한 판단이다. 기술 부채가 존재하는 것 자체를 부정적으로만 바라볼 필요는 없다. 분명히 그 선택에는 나름의 이유가 있었고, 그 맥락을 이해하고 있다면, 그것은 ‘좋은’ 기술 부채일 수 있다.



나는 학교에서 수업 안 가기로 유명하다. 대부분의 하루를 집 앞 도서관에서 보낼 뿐, 실제로 가는 수업은 극히 드물다. 가장 심했던 저번 학기는 금요일 딱 한 시간뿐이었다. 나머지는 전부 녹화 강의로 때우고, 어떤 건 그냥 안 듣기도 한다. “비싼 학비 내고 왜 수업을 안 가냐”, “그렇게 해서 뭘 배우냐”라는 얘기를 듣곤 한다. 인정한다. 학비가 조금은 아깝게 느껴질지도 모른다.


포기한 것들이 있다. 교수님이 수업 중간에 던지는 시험에 나올 법한 중요한 얘기들, 강의실에서만 볼 수 있는 외국인 친구들, 느슨하게라도 이어지는 학과 커뮤니티 같은 것들. 학점에 더 유리했을 수도 있는 과목들을 지나치기도 했다. 어쩌면 학교라는 공간이 주는 ‘분위기’ 자체를 놓치고 있는 걸지도 모른다. 그 대신 나는 더 많은 시간을 얻었다. 그 시간 동안 프로젝트를 하고, 내가 좋아하는 사람들을 만나고, 알찬 대학생활을 즐긴다.


나는 요즘 시대의 대학교가 공부만을 위한 곳은 아니라고 믿는다. 특히 컴공과라면 유튜브 보면 웬만한 건 다 배울 수 있으니까. 오히려 좋은 사람들을 만나고, 무언가를 함께 만들고, 시행착오를 겪는 장소다. 내가 내린 저울질의 결론은 더 많은 내가 하고 싶은 프로젝트를 할 수 있는 자유시간과 친구들과 만날 수 있는 여유다. 중요한 건 스스로에게 맞는 득과 실을 판단하고, 그에 따른 책임을 지는 것이다. 그리고 그 선택이 내게 어떤 결과를 가져올지에 대해서도, 어느 정도 각오를 하고 있다.



나는 신선한 물회를 한 입 한 입 맛있게 먹은 걸 후회하지 않는다. 다음 날 배가 아플 걸 알면서도, 그 ‘한 끼의 행복’을 택한 내 선택이었다. 아침 미팅이 끝나자마자 화장실을 들락날락거리며, 충분히 책임질 테니까.

작가의 이전글테슬라 인턴 6주차 때의 기록