brunch

You can make anything
by writing

C.S.Lewis

by youngstone Apr 11. 2023

넓고 깊게, 깊고 넓게

Generalist && Specialist

이 글은 비전공자를 위한 IT 커리어 바이블 2 시리즈의 1번째 이야기입니다.

스타트업에서 일할 때입니다. 

새로운 경력자 분이 들어오실 때마다 그분을 평가하는 동료들의 의견을 종종 듣곤 합니다. 

그중 만연했던 것은 


"저분은 Java 개발을 15년 동안 했다더라... "

"이번에 새로 오신 분은 데이터베이스만 10 몇 년을 했다더라..."

"해외파 출신에 요즘 핫한 데이터 사이언티스트라더라..."

라고 하면서 뒤에 이어지는 말은

"다른 것은 잘 모르신다..."

라는 평이 많았습니다. 


즉, Specialist 인 것은 알겠으나 그 이외에 다른 것은 전혀 도움이 안 된다는 경우에 대해서 

불편하게 생각하는 분들이 많았습니다.

이와 관련하여서 저의 개인적인 에피소드를 바탕으로 이야기를 해보고자 합니다. 


며칠 전 먼 타국에서 반가운 전화 한 통이 왔습니다. 

마지막으로 뵌 지는 2년 이상 된 것 같습니다. 

다른 분이 아니고 예전에 다녔던 회사의 직속상관이자 

지금은 "형"님이 된 인생선배님입니다. 


한참 선배님이지만

항상 겸손하시고 친근하게 대하셨던

유일한 분이라 아직도 연락을 하며 지내고 있습니다. 


오랜만에 안부전화를 하고 나니 옛 생각이 났습니다. 

당시 개발자로서의 역할보다는 PM격의 역할을 많이 했던 저로서는 

커리어에 대한 고민이 많았고 

당시 프로젝트의 총괄 PM 이셨던 이 선배님과 

자주 이야기를 하곤 했습니다. 


생각해 보면 저에게 한 가지 강하게 심긴 

조언이 있었다는 것을 최근 들어 다시 기억하게 되었습니다. 

그것은 바로 

Generalist 이면서 Specialist 가 되어야 한다.

였습니다.

그때 당시에는 거친 목소리로 의견에 동조하지 못했고

공감하지 못했었습니다. 


아니 한 가지를 잘하기도 어려운데
어떻게 여러 가지를 잘할 수 있죠?

당시 저의 반응이었습니다. 

하지만 지금 돌아보면 선배의 말은 정확했습니다.


동료들이 좋게 평가하는 사람은

물론 자신의 전문성을 잘 보여주는 사람이지만

그것을 넘어서서 익숙한 것에 한계를 두지 않고

벽을 넘어서 두루두루 역할을 해내면서 전문성을 키워가는 사람을 

회사에서 시장에서 원한다는 것을 알게 되었습니다. 


실제로 지금 다니고 있는 회사에서도 

그 원칙을 지킴으로써 

첫 인사고과를 좋게 받을 수 있었고 

근무년수가 1년을 다 채우지 않았음에도 

업무성과가 좋다며 연봉상승과 성과급을 받을 수 있었습니다. 


그리고 매니저의 말이 기억납니다. 

내가 너를 채용하기로 결정한
그 이유를 네가 증명해 냈다

라며 저에게 감사의 표시를 전했습니다. 

물론, 좋은 매니저를 만난 인복도 있는 것 같습니다. 

저를 채용한 이유 중에 가장 큰 이유는

바로 다양한 프로젝트 경험을 통해서 역량을 쌓았다는 점이고 

그것을 실제 성과와 연결시켜서 보여주었다는 것이 

그의 말이었습니다.


지금 회사에서 처음 맡은 프로젝트는 

Golang으로 고객의 이벤트 데이터를 

Kafka라는 Message Broker 서비스를 통해서 

실시간으로 가져와 프로세싱하여 

클라우드 환경의 Azure Event Hub으로 

저장하는 일이었습니다. 

그리고 그것은 Docker 컨테이너 이미지화 하고

고객의 배포환경인 쿠버네티스에 설치할 수 있도록

Helm Charts를 구성하고

이후 지표와 로그 운영 모니터링을 할 수 있도록

Prometheus 지표 데이터 수집과 Grafana 대시보드 구현을 해야 하며

Fluentd로 로그를 수집하여 Elasticsearch & Kibana로 모니터링할 수 있도록

설정을 해야 했습니다. 


매니저는 당시 처음 저에게 의사를 물어보았습니다. 

이런 프로젝트가 있는데 관심이 있느냐?

만약 당시 "저는 Golang 은 해본 적도 없고, Kafka는 다뤄본 적도 없고, Azure Event Hub도 잘 모른다."

라고 선을 그었으면 그냥 편하게 다른 기술스택에 맞는 프로젝트를 했을지도 모릅니다. 


하지만 저의 대답은 언제나 그랬듯이 "Of course."였습니다. 

물론 두려움도 있었습니다. 

잘 못하면 어쩌지? 실패하면 어쩌지?

하지만 그 생각은 얼마 뒤 바뀌었습니다. 


실패하더라도 내가 얻는 경험을 생각하면 두려움은 아무것도 아니었습니다. 

Generalist 이면서 Specialist가 될 수 있는 

소중한 기회로 보였습니다. 


그렇다면 프로젝트를 하면 알아서 그렇게 될 수 있는 거였을 까요?

그렇지는 않은 것 같습니다. 

저만의 전략이 있었습니다. 


우선 제가 해야 하는 과제에서는 몇 가지 키워드가 있었습니다. 

Golang

Kafka

Azure Event Hub 

우선 뼈대를 이루는 시스템 구성요소 였습니다. 

그럼 Golang 언어 처음 접한 저로써는 어떻게 했을 까요?


첫 번째,  우선 선행 개발되어 있던 소스코드의 큰 줄기를 잡아서 이해하며 문법과 디자인 패턴을 파악했습니다. 그와 동시에 SOLID 디자인 패턴을 바탕으로 Golang 프로그래밍을 하는 영문으로 된 전문서적을 Ebook으로 찾아 익혔습니다. 


두 번째, Kafka와 통신하기 위한 Golang Kafka Client 라이브러리를 검색하여 비교했습니다. 2가지 정도 오픈소스 라이브러리를 찾았고 하나는 Kafka를 상업화하는 회사에서 관리하는 라이브러리였고 다른 하나는 오픈소스 커뮤니티에서 개발한 라이브러리였습니다. 그중에 하나를 선택하기 위한 기준으로는 Github Repository 이 사용자 수와 이슈의 개수로 비교하였고, 아무래도 상용화된 제품을 토대로 라이브러리를 제공하는 소스코드가 버그도 상대적으로 많이 적었기 때문에 그쪽으로 선택하게 되었습니다. 선택 이후 항상 PoC 프로젝트를 생성해서 Kafka를 컨테이너로 띄운 뒤 토픽을 생성하고 Mock 데이터를 생성하고 소비하는 실습을 했습니다. 


세 번째로, Kafka라는 메시지 중개인 서비스의 동작원리를 이해해야 하기 때문에 그와 관련된 전문서적을 보고 Kafka에서는 Producer, Broker, Consumer, Topic, Partition, Offset을 어떻게 관리하는지를 파악했습니다. 


네 번째로, Azure Event Hub과 통신하기 위한 API를 파악하고 Postman으로 간략하게 테스트한 뒤에 HTTP/HTTPS 요청을 처리하는 Golang 클라이언트 코드를 작성하여 간단한 동작 코드를 만들었습니다. 


여기에서 제가 사용한 전략은 큰 문제를 작은 문제로 쪼개서 가장 빨리 실행 가능한 방법을 사용했다는 것입니다. 이러한 전략 때문에 어떤 새로운 문제를 만나도 저에게는 벽처럼 느껴지지 않고 쉽게 느껴지는 것입니다.

이렇게 큰 문제를 작게 쪼개어서 기본을 쌓다 보면 어느 한 키워드/도메인에 대한 깊은 이해를 할 수 있고

그와 동시에 여러 개의 도메인을 다룰 수 있기 때문에 넓은 지식을 쌓을 수 있게 됩니다. 


이와 같은 방식으로 새로운 회사에서 첫 번째 프로젝트를 

새로운 언어

새로운 기술

새로운 지식

으로 성공적으로 마칠 수 있었습니다. 


지금은 Nodejs 구동환경과 Javascript 언어를 기반으로 자사의 Virtual assistant 솔루션과 미국 대형 고객사들의 콜센터 에이전트 연결 플랫폼을 연결해 주는 마이크로서비스를 설계, 개발, 배포, 운영, 모니터링하는 일을 하고 있습니다. 


Javascript 언어 자체는 프런트엔드를 같이 겸했던지라 어려운 것이 없었지만 Nodejs에서 제공하는 API는 Java, Golang과 같은 언어와는 또 태생이 다른 굉장히 비동기식 개발에 친화적인 언어이다 보니 또 다른 매력에 빠져 Specialist 가 되기 위하여 다양한 전문서적을 참고하며 비즈니스 로직을 구현해가고 있습니다. 


거기에 더불어 첫 번째 프로젝트 때 쌓았던 메트릭 모니터링을 위한 Prometheus 도구화 Grafana 차트 제작, Helm 차트 작성, 쿠버네티스 배포, Gitlab CI 파이프라인 구성들은 상당히 도움이 많이 되었습니다. 

이렇게 여러 기술들을 다루다 보면 점들이 연결되어서 하나의 그림이 완성될 때마다 성취감을 느낄 수 있고

그다음 프로젝트 때는 기존에 쌓았던 기술지식과 또 어떤 새로운 기술을 융합시켜서 좋은 소프트웨어와 관리도구를 만들 수 있을지 기대하게 됩니다. 


그때 당시 선배의 조언 덕분에 "넓고 깊게, 깊고 넓게" 배워야 함을 알게 되었고

지금까지 실천할 수 있었던 것 같습니다.


여러분들은 어떠하신가요?

혹시 자신만의 Comfort zone (안전지대)에 익숙해지신 건 아닌지요?

새로운 것을 도전하는 것이 쉽지 않을 수 있지만

작은 것부터 영역을 넓혀가실 수 있기를 

바랍니다. 

그렇게 함으로써 Generalist & Specialist 가 되기를 소망합니다.


다음글: 지식을 쌓는 습관

작가의 이전글 특별한 하루
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari