Subject Matter Expert가 되어라

비전공자 딱지 떼기

정장입고 팔짱낀 이미지

How I Broke into UX with No Design Background
디자인 백그라운드 없이 UX 디자이너 되기

어느 날 동료 개발자들과 함께 알고리즘 & 데이터 구조 등에 대해서 가볍게 이야기할 수 있는 기회가 있었다. 평소 스타트업/대기업 등 면접을 볼 때 기본적인 Computer Science 질문 내용으로 동료들도 당연히 알고 있을 것이라고 생각했다.

하지만 웬걸, 다들 데이터 구조에 대한 이해가 생각보다 탄탄하지 못한 것을 발견했다. 전공자는 물론 비전공자들도 굉장히 생소해했다. 예를 들어, 알고리즘에 대해서는 코딩 문제를 많이 풀어봐야 한다는 건 알고 있으면서도 시간 복잡도 (Big O Notation)를 계산하고 표현하는 방식은 모르고 있었고, Stack, Queue, Linked List, Binary Tree 등과 같은 가장 기본적이면서도 중요한 데이터 구조들의 특성과 사용처에 대해서는 깊게 고민하지 않는 것 같아 보였다.

아무리 그래도 이건 잘못되었다 싶었다. 물론, 비즈니스 로직을 짜내는 업무 자체도 중요하지만 컴퓨터 공학적인 탄탄한 기초를 두고 접근하는 것이 필요하지 않나 싶었다. 어떤 근본적인 질문과 접근이 아닌 Code 들도 그저 대량생산되고 있는 게 현실이라는 생각이 들었고 나는 그와 역행하기로 마음먹었다.

이번 글에서는 어떻게 비전공자로서 한 분야의 전문성을 갖추려고 노력하였고 그것이 어떻게 커리어 형성에 도움이 되었는지 이야기해보고자 한다.

우선 흔히 말하는 개발자 혹은 Software Engineer 로서 전문가가 된다는 것은 Subject Matter 에 대한 이해부터가 필요하다. 알아야 할 분야가 무엇을 의미하고 어떤 것을 다뤄야 하는지를 모른 채 전문가가 된다는 것은 있을 수 없는 일이다.

그렇다면 Software Engineering 이란 무엇인가? 세계적인 공학 전문가 집단인 전기전자기술협회(IEEE)의 정의에 따르면 다음과 같다.

"Software engineering is defined as the application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software."

소프트웨어 엔지니어링은 소프트웨어의 개발, 운영 및 유지 관리에 대한 체계적이고 규율적이며 수량화 가능한 접근 방식을 적용하는 것으로 정의됩니다.

즉, 다시 해석하자면 흔히 말하는 "코딩" 은 Software Engineering이라고 하는 전문 분야에서 일부에 지나지 않는다는 것이다. "코딩"을 하는 것과 엄격한 규칙 아래에서 체계적으로 설계와 개발하여 확장성이 있고 재사용성이 높으며, 테스트하기 쉽고 가독성이 좋은 소프트웨어를 개발하는 것은 완전히 다른 이야기인 것이다. 다시 말해 우리가 갖춰야 할 전문가적 능력은 전자가 아니라 후자에 해당된다는 점이다.

더불어, Software Engineering이라는 개념은 후자 개념에 더하여 더 많은 요소들을 포함한다. 예를 들어 다음과 같은 질문들을 고민하고 답을 할 줄 알아야 한다.

✔ 개발하고자 하는 소프트웨어가 지원해야 할 비즈니스 로직들은 어떤 것이 있는가?

✔ 시스템을 구성하는 요소들은 어떤 것이 있으며 어떻게 서로 상호작용하는가?

✔ 어떤 기술들을 사용해서 각 구성요소들을 구현할 것인가?

✔ 고객이 원하는 기대치를 만족시키기 위해서 어떤 방식으로 테스트할 수 있는가?

✔ 부하가 늘어났을 때 시스템의 성능에 어떤 영향을 미치고, 추후 시스템의 확장성에 대해서는 어떤 계획을 가지고 있는가?

하지만 대부분의 사람들은 Software Engineer 가 아니라 Coder로서 역할 수행이 전부인 것으로 착각하는 경우가 많은 것을 옆에서 지켜보았고 안타깝게 생각하였다. 그리고 국내 서적으로는 양질의 Software Engineering에 관한 기술서적을 쉽게 찾을 수 없는 것도 현실이다. 때문에 항상 "영어"를 강조하는 것이다.

필자의 경우 다양한 기술 콘텐츠 플랫폼을 자주 애용했다.
첫 번째로 O'Reilly Media 플랫폼이다.

O'Reilly 홈페이지


내가 봐왔던 어느 것보다 가장 양질의 기술 저서와 교육 콘텐츠들을 구독 형식으로 언제든 들어가서 찾아볼 수 있다. 아마 동물그림이 들어간 기술책을 많이 본 적이 있을 텐데 모두 이 출판사에서 발행한 것이고 온라인 플랫폼으로도 존재한다. 컴퓨터 공학과 관련된 세계적인 전문가들이 작성한 최신 트렌드 책들을 언제든 들어가서 검색하고 공부할 수 있다.

필자의 경우 이전 회사 내에서 최초로 확장성 있는 배치 처리 시스템을 개발하고자 했을 때 Spring Batch 프레임워크를 도입하여 클라우드 비용 처리 데이터 파이프라인을 구축하는 데 필요한 기술 정보를 이곳에서 습득하였었다.

그리고 현 회사에서는 이직하자마자 얼마 안 되어 Golang으로 음성인식 솔루션에서 발생하는 실시간 이벤트 데이터를 처리하는 데이터 파이프라인 애플리케이션을 개발할 때 Hands-On Software Engineering with Golang Achilleas Anagnostopoulos 라는 책을 많이 참고했는데 아주 큰 도움이 되었다.


초당 수천 건의 이벤트 데이터를 Kafka로부터 가져와 데이터를 필요한 형태로 정제하고 여러 원격 저장소로 저장해야 했는데, 이벤트 데이터의 양이 많아질 경우 수평/수직적으로 어떻게 확장시킬 것이며 이벤트 데이터들이 제대로 처리되고 원격지에 저장되고 있는지에 대한 데이터 정합성을 모니터링하는 등 Golang이라는 새로운 언어로 개발하면서 Software Engineering을 하는 실전적인 방법론을 적용할 수 있었다. 덕분에 새로운 언어지만 Rakuten이라고 하는 일본 대형 E-commerce 기업에 짧은 기간에 안정적으로 소프트웨어를 제공할 수 있는 경험을 쌓을 수 있었다.

이렇게 잘 큐레이팅 된 기술 콘텐츠를 잘 활용하여서 Software Engineering의 Subject Matter를 잘 이해하고 현재 진행하는 자신의 업무를 통해 전문성을 쌓는 것은 가장 기본적인 방법이다.

그 이외에는 기술 자격증을 취득하는 것이 있다. 최근 기술 트렌드를 파악하고 발맞춰서 공인 자격증을 취득하는 것만큼 좋은 것은 없다. 취득하기 위해서 학습하는 과정 속에서 부족한 부분을 더욱 발견할 수 있고 결과적으로도 좀 더 매력적인 프로필을 완성시킬 수 있다.

필자의 경우 아래의 자격증을 취득했는데

 ✅정보처리기사

 ✅AWS Certified Solutions Architect – Professional

 ✅AWS Certified Solutions Architect – Associate  

 ✅AWS Certified Cloud Practitioner

 ✅Certified ScrumMaster® (CSM®)

정보처리기사는 솔직히 실제 업무에서는 큰 도움이 되지 않는 부분이 크고, 국제 노동 시장에서는 거의 의미가 없다. AWS 자격증은 클라우드와 관련된 서비스 개발을 했었기 때문에 실제 업무에도 도움이 많이 되었고, 요즘은 어딜 가나 퍼블릭 클라우드 기반의 인프라를 사용하기 때문에 AWS, GCP, Azure와 같은 3대 클라우드 서비스에 대한 자격증은 필수적으로 따두는 것이 좋다.

Certified ScumMaster는 회사에서 제공해준 교육과 시험을 이수하면 받을 수 있었는데 지금은 만료되었지만 Software Development Cycle Model과 관련해서 알 수 있는 아주 소중한 기회였다. 특히 한국에서는 아직 희소한 Agile 개발 문화를 이해하고 개발하는 사람과 아닌 사람은 극명한 퍼포먼스의 차이를 보인다. 자격증까지는 아니더라도 Scrum & Agile에 대해서는 공식 홈페이지에서도 잘 소개해주고 교육 콘텐츠도 많으니 꼭 참고하길 바란다.


✔ 애자일 소프트웨어 개발 선언

✔ What is Scrum?

또 다른 방법으로는 자신만의 업무 생산성과 전문성을 높이기 위한 코드 저장소를 적극 활용하는 것이다. 필자의 경우 Kubernetes, Docker, Golang 등 업무와 관련된 재사용 가능한 코드, 명령어, 문서, 오브젝트 들을 저장소에서 다 관리하고 있다.

https://github.com/youngstone89/kubernetes-mastery

https://github.com/youngstone89/go-mastery

그리고 가장 힘들면서도 기억이 오래가는 방법은 맨땅에 헤딩을 연습하는 것이다. 이전에도 다룬 적이 있지만 모든 기술의 공식 홈페이지에서 다루는 Getting Started를 포함한 모든 내용은 실제 소프트웨어 개발에 아주 중요한 단서가 된다.

예를 들어 최근에 Golang Application을 개발하면서 Prometheus Metrics를 지원하기 위해 Instrumentation 코드를 개발하고, kube-prometheus-stack을 Kubernetes에 배포하여서 자동으로 Metric Scraping이 가능하게 한 뒤에 사전에 만들어놓은 Grafana Dashboard로 데이터가 그래프로 그려지도록 하는 미션이 있었는데 순전히 공식 홈페이지를 기본적으로 참고하여 개발을 시작했다.

공식 홈페이지 링크모음
https://prometheus.io/docs/prometheus/latest/getting_started/

https://grafana.com/docs/grafana/latest/getting-started/getting-started-prometheus/

https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack


사실 이러한 단계까지 오면 어느 순간 당신은 콘텐츠 소비자가 아니라 생산자로서의 역할도 가능하게 된다. 말인즉슨, 당신은 누가 가르쳐주지 않아도 스스로 공식 홈페이지 문서만 가지고도 정보를 흡수하고 내 것으로 만들어 구현하고 적용하여 결과를 만들어 낼 수 있다는 것이다.

필자는 생산자로서의 능력이 생기고 나서부터는 항상 사내/사외 블로그를 했다. 이전 회사에서 Confluence에 작성한 페이지 수가 200페이지 정도였고 현재 회사에서는 사내 문서 작성 플랫폼인 Confluence에서 지난 1년간 60페이지 이상 작성했다.

사내 업무 관련해서는 최대한 개인 블로그에 작성을 기피하다 보니 개인 기술 블로그보다 사내 블로그에 작성하는 비율이 상당히 높았다.

결론적으로는 현명하게 양질의 콘텐츠를 잘 소비하고 내 것으로 만드는 소비자가 되는 것도 중요하지만, '소비자'보다는 '생산자'로서의 비중을 높이다 보면 더욱더 전문성을 높이는 데는
가장 큰 도움이 될 것이다.

더불어 마지막으로 좀 더 "영어"에 자신이 있거나 자막으로도 끈질기게 미국의 선진 교육의 맛을 보고 싶은 사람이 있으면 MIT OpenCourseWare의 Computer Science 를 들어보길 바란다.

필자가 권고하는 방식은 아마도 현재까지 일반적으로 개발자들이 학습해온 방식과 많이 다를 것이다. 하지만, 다르게 생각해 보면 모두가 같은 음식을 먹으면 섭취되는 내용도 같지 않은가? 더 크게 성장하고 다르게 크고 싶다면 남들이 먹는 것과는 다른 고양질의 음식을 더욱 맛있게 먹어야 하지 않을까라고 생각한다. 한국에서 태어났고 한국에서 산다고 꼭 한국 거만 먹어야 할 필요가 없듯이 말이다. 소프트웨어로 성공하고 세상을 리드하는 곳은 미국이다. 그렇기 때문에 양질의 콘텐츠가 더 많을 수밖에 없다. 이러한 장벽을 뛰어넘지 못하면 제자리에 머무를 수밖에 없다. 이제는 남들과 다른 방식으로 전문성을 높여 보길 바란다.

  • *이 콘텐츠의 원문은 youngstone 님의 브런치입니다. 제로베이스 미디어에서 더욱 다양한 필진의 인사이트 콘텐츠를 만나보세요.

    *해당 콘텐츠의 저작권은 원문 작성자에게 있으며, 무단 전재, 복사 및 배포 등을 금지합니다.


추천 컨텐츠