스타트업 병특 개발자의 삶 (2)

개발자: 67·2023년 3월 31일
14

Cimple Life

목록 보기
2/3
post-thumbnail

지난 이야기

비범한 피지컬의 한 남자는 운 좋게 어느 한 스타트업에 취직하고,
얼떨결에 🐕쩌는 미국인 펌웨어 개발자들과의 접선에도 성공한다.
이제 그에게 행복한 스타트업 라이프를 즐길 일만 남은 줄 알았는데...😬

🪖 논산행

여름이었다.

병무청에서 문자 하나가 왔다.

귀하께서는 2019년 7월 25일(목) 14시 육군훈련소로 입영하시는 군사교육소집 대상이십니다.

그렇다. 병특도 훈련은 받는다. 나도 빡빡이 아저씨가 되어야 했다.
겨우 4주 정도의 기간이지만, 4주가 정말 긴 시간이라는 걸 그때 절실히 깨달았다.
막판에 가선 너무 할 게 없어서 직접 편지지를 접어서 만든 트럼프 카드로 포커치고 놀았다.

사실 훈련소 생활은 꽤 재밌었다. 우리 분대에는 전부 개발자들만 있어서 말이 좀 통하기도 했고, 내가 나름 잘 살아온건지 주변인들에게 인터넷 편지도 꽤 많이 받았다.

물론 회사 사람들에게도 편지를 받았는데, 가장 많이 써주신 건 한국인 시니어 펌웨어 개발자 김선호님(가명)이다. 선호님을 통해서 팀원들 근황도 듣고, 회사에 뭔가 심상치 않은 일이 벌어지고 있음도 조금씩 깨달았다.

“이젠 조금 충격적인 이야기들로 시작할까요…“

그가 전한 충격적인 이야기들 중 하나는 예전에 펌웨어 팀과의 접선을 도와주신 소프트웨어 엔지니어링 팀 매니저의 퇴사 소식이었다. 사실 그 사건 이후로는 이분과 대화할 기회가 별로 없었고, 그래서 솔직히 말하면 여기에 큰 감흥은 없었다. 조금 중요한 사실은 이분이 내 매니저의 상사였다는 것 정도?

...

퇴소까지 일주일 정도 남았을 때쯤, 미국에 있는 내 매니저 잡스(가명)에게서도 편지가 왔다. 훈련소에서 외국인 동료에게 편지를 받는 경험은 흔치 않을 것 같아서 '내가 좋은 회사에 다니고 있구나'하며 내심 뿌듯해했다.

“You lost all your hair!”

잡스는 두 명의 펌웨어 개발자가 더 조인하며 팀이 커진다는 소식을 전해주었다. 나는 퇴소하면 새로운 팀원들을 만나서 또 새로운 것들을 배우며 일하게 되리라는 희망에 부풀었다.

...

2019년 8월 22일.
드디어 퇴소날, 수료식을 마치고 가족들과 함께 차를 타고 서울로 올라가고 있었다.

주변 사람들에게 훈련소를 나왔음을 정신없이 신고하던 도중, 내게 편지를 많이 써주셨던 선호님에게서 갑자기 슬랙 메시지가 왔다.

좋은소식과 나쁜 소식이 있어요. 무엇을 먼저 듣고 싶은가요?

뭐 일주일 전에 편지로 전해 들은 것도 있었으니, 좋은 소식은 잡스가 말해준 팀 차원의 변화 정도겠지 싶었다. 나쁜 소식은 뭐, 나빠 봤자 또 나랑은 상관없는 누군가의 퇴사나 팀원 간의 불화 정도겠지 싶었지만... 그 정도가 아니었다.

잡스가… 회사를 그만뒀다.

😨 정리해고

대체 무슨 일이 벌어진거지?

잡스는 갑자기 이렇게 나갈 사람이 아니었다. 내가 훈련소에 들어가기 불과 몇주 전까지 열정적으로 리팩토링 계획을 팀과 논의하던 그가 왜? 내게 "이제 우리 큰 팀이 될 거야!"라며 기대감을 전해주던 그가 왜? 그의 상사가 퇴사한게 설마 그렇게 큰 충격이었던 걸까?

예상대로 회사는 대혼란 상태였다. 잡스 말고도 몇 명 더 나갔다고 하는데, 그로 인해 조직의 개편이 좀 이루어진 것 같았다. 예를 들어, 잡스를 주축으로 해서 만들어진 "임베디드 소프트웨어 팀"은 다시 옛날의 이름인 "펌웨어 팀"으로 돌아가 있었고, 모종의 이유로 R&D팀으로 강등(?)됐었던 시니어 개발자 한 명이 다시 펌웨어 팀으로 복귀했다.

무엇보다 내 입장에서 가장 심각하게 다가온 것은, 잡스와 더는 함께 일할 수 없다는 것이었다. 잡스는 내게 임베디드 개발의 참맛을 가르쳐준 스승이었다. 그가 만들어갈 임베디드 소프트웨어 팀에 대한 기대로 부풀어있던 나를 이렇게 버리고 나가다니!

조금 서운했지만, 그래도 인사는 해야 할 것 같아서 다음날 링크드인으로 연락했다.

(문법 좀 틀렸지만 봐주세요😅 그땐 애기였음!)

그리고, 다음날 아침 그에게 답장이 왔다.

Hey Jake,

I'm doing really good actually.
Just to be clear, I didn't quit, but I was let go as part of the layoffs.
...

그랬다. 회사 내부에서는 마치 그들이 직접 떠난 것처럼 이야기 했지만, 이것은 엄연히 정리해고의 일환이었다.

전말은 대략 이러했다:
내가 군대에 있는 사이에 회사는 대기업과의 파트너십 하나가 예상치 못하게 무산되었다. 이에 크게 의존하던 회사의 로드맵은 엉망이 됐고, 이것이 정리해고의 불씨를 지폈다. 먼저 그것의 책임 소재가 있는 경영진들이 해고되었다. 또, 내가 군대에 들어가기 몇주 전 신제품 출시가 있었는데, 출시 후 그 제품이 기능적으로 문제를 많이 일으킨 모양이었다. 잡스는 그 상황 속에서도 휴가를 가고 워라밸을 챙기는 모습을 보였는데, 이로인해 윗사람들에게 조금 밉보였던 것 같다. '이 문제 쟤가 만든 거 아니야?' 하며 그의 책임 소재가 불거졌고, 잡스도 결국 해고되었다.

나는 깊은 고민에 빠졌다.

그가 해고당한건 내가 봤을 때는 너무나 부당했다. 그가 얼마나 대단한 엔지니어인지 모르고 그를 해고한 이 회사가 미웠다. 이렇게 보는 눈이 없는 회사에 내가 과연 남아있을 필요가 있을까? 그때, 나는 병특 이직을 조금씩 알아보기 시작했다...

근데 귀찮아서 그만 알아봤다!😃

🦾 단단해지다

그렇게 조직이 개편되고, 나는 펌웨어 팀의 일원으로써 다시 일을 이어갔다. 이제 사실상 팀의 리드는 앞서 잠시 언급된 R&D팀에서 복귀한 미국인 시니어 펌웨어 개발자 팀쿡(가명)이었는데, 그 이유는 내게 편지를 많이 써주신 선호님도 안타깝게 얼마 지나지 않아 해고당하셨기 때문이다. 팀쿡은 분명 실력이 있었지만, 누군가를 관리할 능력은 부족한 것으로 판단되었고, 결국 공식적인 팀 매니저로 임명받지는 못했다.

대신 내게는 새로운 매니저가 생겼는데, 그는 한국인 백엔드 개발자 남주혁님(가명)이었다.

사실, 주혁님은 나를 이 회사에 뽑아주신 분이다. 그 페덱스 급의 채용 절차로 나를 합격시켜주신 은인이었다. 개발을 잘하시는 것은 전해 들었으나, 포지션이 다르다 보니 함께 일할 기회는 많지 않아서 어느 정도인진 몰랐었다. 근데, 이제부터 말할 일련의 사건들을 겪고 보니 약간 아래처럼 딴딴한 개발자였다는 걸 깨달았다.

물론 백엔드를 C로 하거나 VI에 미쳐있으시진 않았다.

...

2020년 2월의 어느 날.

나는 이번 스프린트에 작업으로 할당받은 MQTT Client 기능 포팅을 진행 중이었다. 포팅해야 하는 건 그 R&D하다 온 팀쿡이 짠 코드였는데, 이전에 출시하자마자 말이 많았던 신제품의 문제를 해결하는데 좋은 효과를 본 코드라고 한다. 사실 포팅 전에 코드 리뷰를 했었는데, 내 반응은 이랬다.

"엥?"

아 물론 버그가 있는 코드는 아니었다. 근데 왜 굳이 이렇게 짜야 하지? 싶었다. 예를 들면 MQTT에는 publish와 subscribe라는 분리된 동작이 있는데, 송수신하는 payload를 TX와 RX메시지로 만들어 하나의 큐에 담은 다음에, 나중에 한 스레드에서 처리했다. 설계가 뭔가... 뭔가였다. 포팅하면서 리팩터를 조금은 해야겠다 싶어서 며칠간 붙잡고 이리저리 코드를 고쳐보았는데, 쉽사리 좋은 답이 나오지 않았다.

그러고 있는데 백엔드 개발자인 주혁님이 다가왔다.

잘 돼가요?

나는 지금 상황을 설명했다. 코드 설계가 조금 이상해서 고치고 싶은데, 어떻게 해야할지 감이 잘 안잡힌다고.

그는 내가 고치던 코드를 한참 읽어보더니, 뜬금없이 내게 이렇게 물어왔다.

혹시 SOLID라고 들어봤어요?

"SOLID? 단단한? 그게 뭔데요...?"

내 대답을 듣자 그는 난데없이 화이트보드가 있는 옆방으로 나를 데려가서 조금의 설명을 덧붙이며 의사코드를 써 내려가기 시작했다.

그가 수 분만에 만들어낸 MQTT Client 기능의 설계

그의 설명은 대략 이렇다:

일단 기본적으로 iot_message라는 인터페이스가 있고, 그것을 구현하는 score_iot_message가 있다. 그리고 iot_message_publisher라는 인터페이스도 있는데, 이는 통신 방식에 따라 다른 구현체를 사용한다.

score_reporter라는 클래스가 iot_message_publisher를 사용하여 score_iot_message를 클라우드로 보내는데, 어떤 통신 방식으로 보낼지, 어떤 인코딩으로 보낼지는 이 클래스의 코드를 변경하지 않고 그저 초기화 단계에 의존성 주입이라는 방법으로 해결할 수 있다.

이날, 내 회사 생활 중 두 번째로 큰 충격을 받았다. 설계라는 게 이렇게 단순한 거였나? 나는 비효율적으로 보이는 이 코드를 고치려고 며칠을 썼는데, 그는 단 몇 분만에 단순하면서도 확장성까지 있는 설계를 내게 보여줬다. 어떻게 이런 게 머릿속에서 바로 나올 수 있는 것인지 궁금했다.

아~ 이런 거 많이 하다 보면 다 거기서 거기에요ㅎㅎ

그의 말이 믿기지 않았지만, 내 눈앞에서 벌어진 일이기에 납득할 수밖에 없었다. 혹시 백엔드에서 사용하는 객체 지향 언어에서만 가능한 설계가 아닌가 싶다가도, 곱씹어보니 내가 아는 C 문법들로 불가능하진 않을 것 같았다. 🤔… 그의 지식을 흡수하고 싶었다.

그날 이후로 주혁님은 나와 함께 펌웨어 팀의 코드 품질 향상을 위해서 시간을 투자했다. 나는 과거 내 매니저 잡스를 통해 배웠던 C로 캡슐화와 다형성을 구현하는 법을 그에게 전해주었고, 그는 자신이 아는 소프트웨어 엔지니어링 지식들을 기반으로 임베디드 C에 SOLID 원칙을 적용한 설계 사례들을 연구했다.

주혁님은 윗선의 컨펌을 받았는지 얼마 지나지 않아 새로운 임베디드 아키텍처를 위한 단기 리서치 프로젝트를 시작했고, 그와 함께 나도 잠시 펌웨어 유지보수에서 손을 떼고 C로 구현해낼 수 있는 이상적인 IoT 펌웨어의 설계를 그려 나갔다. 그로부터 많은 소프트웨어 엔지니어링 모범사례들을 배울 수 있었고, 펌웨어 팀원들에게도 그것을 전달하기 위해 코딩 스탠다드와 같은 문서도 제대로 마련해 나가기 시작했다.

그렇게 나는 SOLID와 함께 다시 코딩이 즐거워지는 나날을 보내고 있었다. 덕분에 몇 달 전 정리해고 사태에서 내 첫 매니저를 잃은 충격도 조금씩 무뎌져 갔다. 그리고 이젠 새 매니저 주혁님을 통해 배우며 나도 순식간에 멋진 설계를 만들어내는 딴딴한 펌웨어 개발자가 될 수 있을 거라는 자신감이 충만해져 갔다.

...이제부터 내게 다가올 일을 예상하지도 못한 채.

To Be Continued...

profile
어쩌다 보니 임베디드 개발자

16개의 댓글

comment-user-thumbnail
2023년 3월 31일

내용은 없지만 일단 개추~

1개의 답글
comment-user-thumbnail
2023년 4월 2일

글이 친절하고 작성자가 맛있어요~

1개의 답글
comment-user-thumbnail
2023년 4월 2일

글이 잘생겼네요 ㄱㅊ~

1개의 답글
comment-user-thumbnail
2023년 4월 5일

이 사람의 OTA 기능은 언제 추가 되는거죠?

1개의 답글
comment-user-thumbnail
2023년 4월 11일

재밌어서 개추 드립니다. 다음 화 빠르게 부탁 드립니다.

추신
벨로그 프로필 깃허브 링크가 잘못 되어 있어요.

2개의 답글
comment-user-thumbnail
2023년 4월 11일

우연히 발견해서 읽게되었는데 너무 재밌습니다 ㅠㅠ 빨리 다음 이야기 써주세요

2개의 답글