첫회사를 거진 2년간 다니고, 이직을 하게 되었다. 기억이 점점더 희미해지고, 추억보정이 들어가기 전에 한번 커리어 정리 겸 쓰려고 했는데, 귀찮기도 하고 본격적으로 정리하려고하니 뭐부터 해야 할지 감이 안와서 미루다미루다 그냥 감성으로 적어본다.
지금으로부터 약 2년전, 2020년 11월 9일, 섹발자(섹시한개발자의 줄임말: 엮은이)는 1년간의 진짜진짜 눈물나는 취준 과정을 마치고 어느 회사에 들어가게 되었다. 입사 선물로 온 대표님의 편지와 와인을 보고. '어! 이 회사 좋은회산가!?' 라는 생각을 하며 부모님과 기뻐했던 것이 기억이 난다. 하지만 ...
처음 내가 배치받은 팀은 전략기획팀이라는 팀이었다. 회사의 상황을 설명하자면, SI 사업은 이익이 안나오니까, 우리 회사가 내부적으로 솔루션을 만들어서, 솔루션 장사를 하자! 는 아주 당돌한 목표로 결성된 팀이었다. 정말 다행히 내 사수는 나와 집가는 방향도 같고, 너무 웃기고, 술담배도 즐겨하는 가히 영웅호걸이라 할만한 사람이었어서, 하는일 없이 앉아있는 근무시간을 나름 재밌게 보냈었던 기억이 난다.
그렇게 있다가, 당시 CTO 였던 C 씨와의 독대가 잦아졌다. 솔루션 사업을 뭘 할지 고민하면서 뭐 이것저것 주제를 던져줬는데, green bond, energy trading 등 여러 가지 사업을 뭐할지 외국 사람들과 줌 미팅도 하고 회의도 했다. 그러던 중, 무엇때문인지 기분이 나빠진 C 씨가 회의중에 고개를 끄덕거리는 나를 보더니, "신입사원이라고 고개만 끄덕거리지 말고, 2주쯤 됐으면 너도 의견 내라" 는 소리를 듣고 '아 이게 회사고, 난 좀 이상한 팀에 왔구나' 라는 것을 직감하게 되었다.
그렇게 매주 목요일 죽음의 회의가 이어졌고, 사람들의 들리지 않는 곡소리가 회의실을 가득 채웠다. 위의 저 말을 듣고, 나는 살기 위해 머리를 굴려가며 이런 저런 아이디어를 짜내기 시작했다. 나는 그래도 신입인지라 주어진 일을 잘 조사한 뒤에 정리해서 PPT 로 발표하면 끝이었고, 꽤나 똘똘한 넘 취급을 받고 있었다. 그러던 중 C 씨가 팀즈(협업 툴) 메시지로 보낸 '자동매매' 에 관한 영상을 보고, 회사의 역사에 길이남을 희대의 발표가 펼쳐지는데...
자동매매 관련 영상을 보고, 해당 영상에서 말하는 프로세스들을 분석한 뒤에, 내가 직접 사비를 들여 투자를 해보면서 어느 부분이 가장 귀찮고 힘든지를 파악했다. 그리고 그러한 부분을 해결해줄 수 있는 서비스를 제공하자고 발표한 내용이 주된 골자였다. C 씨는 자리에서 일어나 박수를 쳤고, 나는 뭔가 인정받은 기분이 들어 집에가서 자랑까지 했었다. 물론 '나 천잰가?'라는 생각에 들떴지만, 그것이 시작이었다.
발표 이후, 팀의 방향은 이름하야 '플랫폼 개발'을 가리키게 되었다. 이 때부터 C씨와, 당시 도메인 전문가 역할을 담당만 하던 W 씨의 의견이 갈리면서, 나는 어찌해야할지 모르는 상황에 빠지게 되었다. C씨는 팀원들에게 python 교육을 하라했고, 물론 팀원들은 신입사원의 알랑한 강의따위는 관심이 정말 1도 없었다. 뭐 진도표를 만들어서 개발환경 셋팅하고 하는데, 정말 의미없는 행위들이 반복되었다. C씨는 나한테 시스템 설계를 맡겼고, 이 회사의 야망 가득한 시스템의 설계는 입사한지 몇달 되지도 않은 신입사원에게 맡겨졌다. 그래도 막 모르는게 생기면 C씨한테 가서 물어물어 해결하려고 했고, 이때까진 이쁨을 받았다. 반면 W씨는 그것이 맘에 들지 않았다. (참고로 W씨와 내가 처음 나눈 대화는, "넌 왜 인사를 안하냐" 였다. 그런 사람이었다.) W씨는 협력사를 하나 알아와서, 그 협력사와 사업을 같이 하는게 어떠냐고 C에게 말했다. C는 수락했고, 이에 죽음의 프로젝트가 Kick-Off 를 하게 되었다.
내가 처음 맡은 일은 시세DB 구축이었다. 사실 SQL 도 다룰줄 모르고, python 도 몰랐기에 이거 뭐 되겠나 싶었다. 그러나, 그런 내가 당시 우리팀에선 개발 에이스였다. 물어볼 사람 하나 없고, W 의 폭정이 막 시작되던 찰나였기에, 이때부터 11시까지 야근이 시작되었다. 온갖 똥군기, 금연령, 꼰대소리에 스트레스를 너무 많이 받아서 자리를 비울땐 항상 자소설닷컴을 띄워놓았다. 근데 뭐 어찌저찌 시세 받는것을 성공하고, 이를 DB 에 쌓는것까지 성공했다. 이게 아마 2021년 설쯤 될것이다.
시세를 다 쌓고 있으니, 이제 이 시세로 분석을 하게끔 해야 했다. 뭐 펀드니, 바스켓이니 알기 힘든 용어들이 막 나오기 시작하고, 30~40개 정도 되는 테이블들이 나타나서 관계를 맺기 시작했다. 과거 데이터로 분석을 하게끔 하는 것은 그렇게 어렵지 않았다. 정해진 시간마다 weight 를 수신해서, 그만큼 투자금을 배분하고, 투자금을 바탕으로 수량을 정하고, 그만큼의로 투자했을때 얼만큼의 이익이 나오냐를 계산해서 DB 에 update, insert 하는 것이라 설명할 수 있겠다.
이후, 증권사 모의투자를 이용하게 되고, 모의주문을 증권사 서버로 전송 및 체결 처리 해야 하는 크나큰 과제가 떨어졌다. 이게 왜 어려웠냐면, 일단 증권사 문서가 너무 별로였고 레퍼런스가 없었다. 또한 변수 이름도 아주 제멋대로라, 증권 지식도 알아야 하고, 실제 증권사에서 어떻게 이름을 쓰는지도 알아야 접근이 되는데, 나는 하나도 몰랐기 때문이다. 그냥 울며 겨자먹기로 23시까지 야근을 하면서 했는데, 장이 15시 30분(선물은 45분) 에 마감하면 테스트를 할 수가 없었다. 그래서 23시까지 작업을 하고, 테스트는 다음날 장 열리고나면 하기를 반복했다. 그렇게 해서 증권사에 주문을 내고, 주문에 대한 처리 여부를 확인하고, 시시각각 발생하는 체결에 대한 처리까지 이벤트 기반으로 처리했다. 되게 있어보이게 말했지만, 뭐 별거 없다. 이거 하면서 thread 를 이용해 여러 개의 작업을 병렬적으로 하려고 했는데, 증권사에 전송할때 비밀번호 에러가 자꾸 났다. 지금은 대충 알것같은게, thread 는 한 프로세스 내에서 데이터를 공유하기 때문에, 값을 비우고 채우고 하는 과정에서 잘못된 값이 들어가는 것 같다. 그래서 한참 생각하다가 mulltiprocess 로 바꿔서 하니까 됐다. 근데 ㅋㅋㅋ 이게 맞는건지는 아직도 모르겠다. 아마 아닐것이다.
그렇게 서비스 로직들을 만들고 나서, 이걸 spring 에서 파이썬 코드를 읽어서 실행하게끔 할거냐 뭐 이런 고민들이 있었다. 지금생각해보면 진짜 말도 안되는게, spring 에서 python 코드를 읽어서 실행한다? 너무너무 이상하다. 그래서 나온 대안이 flask 라는 웹 프레임워크를 이용해서 spring 과 통신을 하게끔 하는 것이다. 근데 너무 당연해보이고, 그렇게 어려워보이지도 않지만, spring - flask 통신이 성공했을때 기뻐하던 W 의 모습을 보면서 이게 뭔가 싶었다. 아마 동료인 QJ 도 나와 비슷한 생각을 했을 것이다. 그렇게 어찌저찌 마무리가 되긴 했다만, 뭐 사업이 난항을 겪게 되면서 아주 지지부진하게, 세상에서 가장 불쌍하고 졸렬하게 이 프로젝트는 기억속으로 사라지게 된다...
나는 다른 프로젝트로 빠지게 되었다. 새로운 사업을 위해 뽑은 기획자분과 같이 일을 하게 된 것이다. 여기부터 김경석의 개발자 커리어 2부가 시작이다. 1부에서는 그냥 돌아가게만 하는것도 너무 벅찼었는데, 슬슬 이렇게 하면 안되겠다는 생각을 몸소 하게 됐다. 그래서 새로 합류한 GV와 QJ 에게 이것저것 맞는지 틀린지 엄청 물어가면서, '어? 나도 슬슬 개발자 비스무리한 놈이 되나?' 라는 생각을 했다. 1부에서 쌓은 경험을 통해 시뮬레이션을 웹 서비스로 만들게 됐다. 내가 맡은거는 시뮬레이션 수행 및 리포트 계산 이라 할 수 있겠다. flask 썼다가 fastapi 썼다가 막 했었고, 1부에서 개인적으로 공부를 엄청했었는데, 이런것들을 매우 활용하고 싶었다. 그래서 도입한게 SQLAlchemy 라는 python orm 이었고, 따옴표 사이에 네이티브 쿼리를 박아넣는게 아니라 save() 메서드 같은걸 써서 application 과 DB 를 연동했다. 간지났다. 그렇게 시뮬레이션 서비스를 엄청나게 열시미 개발했고, 자발적 야근을 강행하면서 시간을 준수하여 배포까지 성공했다.
이건 좀 좋은 평가를 받았는데, 이때부터 좀 그랬던게, 다음에 뭐할지 팀이 좀 많이 흔들렸다. C 씨는 몽둥이들고 바로앞 방에서 대기중이지, W씨는 할거없으면 자기거나 도우라고 하지... 진퇴 양난이었고, 이쯤부터 K가 슬슬 심기를 건드리기 시작하는데, 이는 퇴사할때까지 이어졌다. 짜증났던게, 아는것도, 하는것도 하나없는 K가 자꾸 의견을 내라고 하는데, 나는 아는게 없어서 뭐 하나 할때도 QJ 와 GV 에게 물어보고 해야만 했던, 보살핌이 필요했던 아기였다. 변명이기도 한데, 모르는걸 어쩌겠나. 이건 나중에 또 얘기하겠다. 암튼, 그때부터 침체기가 시작된다...
나는 이때부터 할게 없으니까 데이터 크롤링을 주로 담당한다. 시세데이터 쌓는 로직을 좀더 정밀하게 한달지, 전종목에 대한 시세를 쌓는달지 뭐 그런걸 했다. 근데 이게 진짜 하기싫었던게, 뭐 열심히 해도 알아주지도 않고, 당연히 되는거 취급을 당했다. 그리고 재무데이터 적재 업무도 받았는데, 재무데이터는 너무 더럽고 생겨먹은것도 어려워서 다루기가 개짜증났다. 그렇게 한참 헛짓을 하고 있었고, 팀 또한 결과를 내지 못했다. 이렇듯 결과가 나오지 않는 상황에 답답했던 C 씨는 기성 프레임워크를 분석하라는 지시를 내리기에 이른다. 이때 당시, 동료였던 GV 는 해당 지시에 주먹을 부르르 떨며 부당함을 알렸다. 난 그 모습을 보고, 고려말 이성계 장군이 사불가론을 내세우며 북벌에 반대했던 것이 떠올랐다.
그 뭐 그렇게 표류하다가, 우리팀은 docker 에 관심을 가지게 된다. docker 와 vscode- devcontainer 를 이용해서 사용자가 매수/매도 조건만 잘 생각해서 작성하면, 시세, 주문 모듈 등은 우리 프레임워크에서 제공하는것을 편하게 가져다 쓰면 되고, 사용자의 코드 내역이 HostOS 의 특정 볼륨과 마운트되어 저장되게끔 하는 뭐 그런 내용이었다. 이때부터 docker 공부를 하게 되었고, 내가 개같이 세미나까지 맡아서 했다. 세미나 하면 하는건데, 만만하니까 나 시키는거같아서 K를 극도로 증오하게 되었다. 뭐 암튼 공부 열심히하고 도커가 뭔지 컨테이너가 뭔지 좀 알게되었다.
그렇게 GV 와 함께 협업을 해서, nginx + vue, fastapi 2개의 컨테이너를 갖는 docker image를 만들어서 테스트하니까 성공했다. 이쯤 C씨가 나가고, 상사가 다른 사람 D로 바뀌게 되었던 것 같다. D 는 꽤나 후한 인심을 가진 사람으로, C 씨보다는 리더십이 있었으나, 정작 해당 사업에는 관심이 없었던 것 같다. 그리고 CI/CD 마무리 작업을 하게 되고, 나는 fastapi 어플리케이션의 ci 스크립트를 gitlab-runner 상에서 동작하게 하는 작업을 했다. 이는 동료 B 와 함께 작업했는데, 얘랑 너무 친해서 깔깔대면서 했는데 결과가 잘나와서 좋았다.
그리고나서, Spring application 에 데이터를 조회하는 API 를 추가하는 업무를 했다. 이때도 역시 전문가 QJ 의 도움을 받았고, 이때 얘한테 요구사항 명세 만들기, 다이어그램 그리기, 실제구현 등 엄청 많이 배웠다. 그리고 자바로 뭐 하니까 좋더라 ㅎㅎ.
그담에 뭐 CI/CD 작업은 중단이 되고~ 우리 서비스의 정체성은 완전히 container 기반으로 옮겨갔다. 일단 과거데이터 기반 분석을 사용자의 컨테이너 환경에서 수행할 수 있었고, 결과 화면 또한 GV 의 분전으로 아주 잘 나왔다. 그러고 나서 다음에 뭘 했는지가 잘 기억이 안나는데, 아마 시세 적재 프로세스 의 리팩토링을 넘어서, 재개발단계에 들어갔던 것 같다. 이게 아주 골때렸는데, 위에서 말했듯이 나는 시세 받는 업무는 너무 하기가 싫어서, 그 누구도 알아볼수 없는 가독성의 코드를 작성했었다. 근데 슬픈 예감은 틀리지 않는법, 뭐 로직이 바뀌어서, 이걸 리팩토링해야 하는 경우가 된 것이다. 그렇지만 나는 이전과 달리 QJ, GV 의 전폭적인 기술지원을 받을 수 있는 관계를 형성한 상태였다. 그래서 이 둘의 초하드 트레이닝을 받으며 리팩토링을 했다.
역할에 따라 객체를 나누고~ 규칙을 정하고~ 이게 너무 많은 역할을 한다 하면 또 쪼개고~ 뭐 그런 과정을 거쳤다. 근데 이게 아무리봐도 너무 어려웠던게, 증권사 API 핸들링이 들어가면 일단 코드가 더러워진다. 그래서 좀 깔끔하게 해보면 그것도 더럽다. 좋은 방법을 못찾았고, QJ 의 회초리를 많이 맞아서 종아리에 피멍이 들었다. 근데 아무리 종아리에서 피가 나더라도, 뭔가 가르침을 받으면서 하니까 계속 할 맛이 났다. 그리고 확장 가능성을 위해 Job 생성 및 등록 부분 분리 하는것 까지 끝내고 나서, 일단 작업이 일단락 되었다. GV 도 옆에서 살짝살짝 좋은 방법을 귀띔해줬는데, 한마디한마디가 큰 도움이 되었다. 고맙다, QJ, GV!
이렇게 데이터 적재 프로세스 개선이 끝나게 되었으나, 나는 극심한 슬럼프에 빠지게 된다. QJ에게 회초리를 많이 맞기도 했는데, 단순히 그거 때문이 아니라, 내가 지금 개발을 1년이 넘게 하고 있는데, 아직도 수준에 올라오지 못하고 있는 이 상태가 맘에 안들었고, 아무리 해도 QJ 와 GV 의 그늘에서 벗어나지 못하고 있음을 인지하기 시작했다. 회의를 하면 매우 위축되었고, 그것은 고스란히 스트레스로 다가왔다. 그리고 슬슬 수동적인 태도에 소중한 내동료들도 싫증이 날것임을 짐작할 수 있었다. 뭐 외적으로 내적으로 팀에 도움이 안된다는 생각이 들었고, 자그마한 월급마저도 내가 도둑질하는 인간이 되었나 라는 생각이 들었다.
뭔가 쇼부를 한번 볼때가 오지 않았나 싶었다. 그래서 회사에서 표정이 아주 죽상이 되고, 일도 열심히 안하면서 퇴사하고 부트캠프 어디갈 지를 알아봤었다. 차라리 진취적인 대학생 시절의 섹발자로 돌아가, 뭐라도 하나 기깔난 프로젝트를 하고, 그걸로 이직을 하려던 속셈이었다. 실제로 그래서 '다음날 퇴사한다고 말해야지' 라고 생각해서, 아빠한테 "아빠 나 내일 퇴사합니다~" 했는데, 아빠가 극구 말렸다. 퇴사 이후 계획이 너무 불확실하다는 것이다. 그래서 나는 잔뜩 토라진채로 방에 왔었다. 아버지, 당신은 대체 어디까지 보신겁니까... 그러고 좀 마음의 안정을 찾은뒤에 QJ, B 에게 이랬었다 얘기를 하니까 엄청 도움되는 말들을 많이 들었다. 요 이쁜 내새꾸들!
아버지의 만류로 회사에 그대로 있던 중, 나에게 새로운 업무가 떨어지는데, 그것은 사용자 로컬 환경에서 외부 데이터를 수신하고, 여러번 요청할 필요가 없도록 DB 에 적재하는것을 지원하는 모듈을 만드는 것이었다. 이 당시에는 마음이 좀 나아졌고, 뭔가 해보려는 의지가 좀 있었다. 그래서 단순한 요구사항을 좀 의욕적으로 확장해서, 수줍게 테스트코드 도입을 건의했다. 그러자 찐개발자 GV 또한 나의 의욕에 화답하듯, 이래저래 규칙들을 정했다. 여기부터 내가 그동안 문제라고 생각했던, 문서화에 대해서 좀 적극적으로 진행했다. GV 는 개발쪽으로 넘넘 뛰어나니까 내가 그것들을 문서로 남기면 서로 좋은 것이라 생각했다. 나도 많이 배우고, GV 는 귀찮은거 안해도 되고. 그렇게 우리가 하는것을 전부다 notion 으로 남겨서 공유하면서 진행했다. 요구사항, 설계 근거, 사용자 시나리오, 프로젝트 구조, 클래스 다이어그램, 객체 다이어그램, 인터페이스 다이어그램, 시퀀스 다이어그램등 수많은 UML 다이어그램을 그리고, 설계한 대로 진행하다가 문제생기면 다시 수정해서 문서화하고 뭐 그런식으로. 그리고 어려워보이는것에 도전을 해봤다. 비동기/NoSQL 부분을 내가 맡아서 하기로 했는데, 여기서 이슈가 진짜많이 생겼다. 비동기 테스트코드는 나름대로 안돌아~ 로직이 어떻게 돌아가는지도 모르겠어~ 아주 개고생을 했는데, 그때마다 마찬가지로 GV, QJ 의 조언을 들어가며 해결했다. 이렇게 테스트코드를 쓰니까, 일단 코드 리팩토링이나 병합할때 제대로 됐는지 확인하는게 너무 편했다. 그리고 문서가 다 있으니까 그걸로 결과 리뷰할때도 편하게 했다. GV 도 아마 좋았을 것이다 ㅎㅎ!
그 이후, 포워드 테스트 리팩토링 작업을 했다. 여기도 문서화가 제대로 안되어 있었고, 그냥 냅다 코드만 보고 이해를 했어야 하는 상황이어서, 착수까지 꽤 시간이 걸렸다. 문서의 중요성을 다시금 느꼈다. 그래서 내가 짠 코드도 아니었지만 그 흐름을 알 수 있게 문서화를 다시했고, 그걸 바탕으로 리팩토링을 했다. 원하는 데이터를 정의하고, 그것을 관리할 객체들을 만든 뒤, 객체들관의 의존성 주입 등을 고려해서 코드를 작성하고, 문서로 정의했다. 그것도 결과가 아주 잘 나왔고, 원하는 대로 됐다.
이후, 위에서 말한 데이터 핸들링 프레임워크 v0.2 를 하면서 또 비동기/ORM 부분을 맡았다. 이때는 신입으로 들어오신 분을 가르쳐드리면서 진행을 했는데, 나도 잘 모르는데 뭘 알려주면서 하기가 좀 힘들었다. 뭐 딴친구들은 척척 과제도 주면서 진행하는데, 나는 그런것까진 힘들단마량! 그랬는데 뭐 암튼 잘되고, 으쌰으쌰해서 잘 하고 술도 개먹고 재밌게 했다.
그리고 여기까지 끝난 뒤에, 외부 파견 등 뭐 이런저런 말하기 좀 그런 문제들로다가... 올 스톱이 되었다... 이쯤 나는 올해 연봉인상이 안될 것임을 대충 직감했고, 그때부터 이직준비를 했다. 재사용 가능한 모듈형 객체지향 자소서로 한 30군데에 난사했고, 지금 붙은 회사에 최종면접에서 떨어졌다. 그러고 심마에 빠져 허우적 대던 중, 추가면접을 보라는 전화를 받았고, 합격해서 지금 출근 3주차에 접어들게 되었다.
퇴사하는데도 말이 많았는데, 이거까지 쓰면 갑자기 울화가 치밀어오를까봐 쓰지 않겠다. 이쯤 정리하고, 회사생활 하면서 느낀점은 아래와 같다.
그 누구도, 그 어떤것도 믿지 말것. 세상에 거짓말치고 이용해먹고 아주 나쁜사람들이 많다. 확실하게 숫자나 계약서로 된 약속을 믿어야지, 말로 대충 떼우는거는 그냥 안듣는게 낫다. 이에 대한 연장선상에서 회사에 평생 있어야지~ 하면 안된다. 회사는 직원들의 커리어를 길러주는 곳이 아니라, 직원들을 이용해서 돈을 버는 곳이다. 따라서 무슨 개똥같은 일을 시키다가 팽할지 모른다. 그러므로, 너무 믿거나 의존적으로 하지 말고, 계속 발전하는 태도를 가져야 하겠다. 그렇지 않으면 내가 봤던 사람들처럼, 관리랍시고 아는건 없으면서 말만 대충대충하고 아랫사람중에 만만한 사람 쪼는것 원툴인 사람이 된다. 반성해라 진짜;
새로운 회사에 적응하는 중인데, 요새 자꾸 전학가서 텃세당하는 꿈이랑 재입대하는 꿈을 꾼다. 나이도있고, 중고신입인게 다 소문이 나서 그런가보다. 사람들이 좀 불편하는게 살짝 느껴진다. 근데 머 원래 적응이 힘들긴하니까 뭐 이겨내야겠다. 업무는 솔직히 커리어에 막 도움이 될것같진 않다. 그래도 이것도 잘 꿰면 보배가 될것이 분명이 있을것이며, 일단 타이틀이 좋으니까 참아볼만 하다. 그리구 이정도 처우면 좀 그래도 될것같다. 일단 불평불만은 전회사에서 많이 했으니까, 여기서는 좀 참아볼까 한다. 글구 업무가 엄청 어려워보이지는 않다. 이래저래 공부도 좀 여유롭게 하면서 내살길은 내가 찾아봐야지. 또 좋은것이, 한 20년 되는 분이 DB 교육을 해주겠다고 한다. 매우 까칠해보이나, 열정있는 사람같다. 실무20년차면 아무리 고리타분해도 도움 줄수있는 것이 있고, 선뜻 도움을 주려고 하니 참 감사할 따름이다.
2년 참 길었고 기술적인 부분, 도메인 지식, 사회생활 많이 배웠다. 그리고 동료들 너무 좋았다. 며칠전에 술 엄청 먹고 놀았는데, 엄청 잼썼다. 오래오래 좋은 인연 이어갔음 좋겠다. 다들 잘될거야 매니저들아! 한번 매니저는 영원한 매니저! 아듀~