[Buzzvil Career] 좋은 소프트웨어 엔지니어는 어떤 사람일까?
[Buzzvil News] 버즈빌, 모바일 잠금화면 넘어 인앱 인벤토리에 노출형 리워드 광고 띄운다
1월 24, 2019
[Buzzvil Culture] 열심히 일한다는 의미에 대하여
2월 1, 2019

[Buzzvil Career] 좋은 소프트웨어 엔지니어는 어떤 사람일까?

모바일 잠금화면 미디어 플랫폼 사업자 버즈빌은 어떠한 인재를 찾는지 지원자에게 잘 알리려고 노력합니다. 그럼 지원자도 버즈빌이 자신에게 맞는 기업인지 알 수 있을 테니까요. Buzzvil Career에서는 각 직무에 대해 더욱 심도 있는 정보를 제공합니다. 현재 채용 중인 소프트웨어 엔지니어 포지션에 대한 자세한 내용은 여기에서도 확인 가능합니다. 이번 글은 글로벌 모바일 플랫폼 서비스를 만들어가는 CTO Zune의 직무 인터뷰입니다. 그가 생각하는 ‘좋은 프로덕트 매니저’란 누구인지 함께 이야기해 보았는데요. 개발자로 성장하고 싶은 분이라면 이 글에 주목해 주세요.

소프트웨어 엔지니어의 업무에 대해 설명해주세요.

버즈빌에서는 허니스크린처럼 유저와 직접 맞닿아 있는 서비스와 버즈스크린과 같은 B2B 플랫폼 서비스까지 매우 넓은 영역을 다루고 있습니다. 제가 속해있는 팀은 광고를 다루는 버즈애드(BuzzAd)이기 때문에 이를 중심으로 소프트웨어 엔지니어의 업무 영역을 다뤄보겠습니다.

# 광고 서빙 엔진
광고 서빙 엔진은 여러 큰 기업에서 핵심적인 분야입니다. 구글, 페이스북에서는 광고가 회사 매출의 아주 큰 부분을 책임지고 있습니다. 버즈빌에서는 이러한 광고를 자체 앱인 허니스크린 뿐만 아니라 다양한 파트너(매체)들에게 서빙하고 있습니다. 가지고 있는 수많은 광고를 각각 어떤 유저에게 보여주느냐에 따라 광고의 효율이 크게 바뀔 수 있습니다. 광고의 효율은 회사 매출과 직결됩니다. 따라서 광고 타게팅을 정밀하게 잘 하는 것이 매우 중요합니다. 단순한 나이/지역/성별 타겟팅에서부터 머신러닝을 활용한 고도화된 타겟팅까지 광고 서빙 엔진을 잘 만들기 위해서 할 수 있는 일들이 아주 많습니다.

# 애드네트워크와의 연동
버즈빌에서 직접 수급한 광고를 우리의 플랫폼을 통해서 송출하는 것도 가능하지만 모바일 광고 영역에서는 이미 수많은 플레이어가 생태계를 구축해나가고 있습니다. 따라서 우리 광고뿐만 아니라 다른 플랫폼의 광고를 프로그래매틱하게 가져와 우리의 플랫폼에 송출하거나 반대로 우리의 광고를 다른 플랫폼에 전달해 송출하는 것도 가능합니다. 마치 주식시장에서 주식을 사고팔듯이 광고를 사고팔게 되는 것입니다. 이를 위해서는 기존에 존재하는 수많은 애드네트워크들과의 연동을 필요하게 됩니다. 국내뿐만 아니라 전 세계에 존재하는 애드네트워크를 연동하는 과정에서 세계 각국 개발자들과 협업을 해야 합니다. 이렇게 연동해놓은 많은 애드네트워크들의 효율은 상황에 따라 계속해서 변동하기 때문에 매출을 극대화할 수 있는 기술 또한 개발이 필요합니다. 각 애드네트워크의 효율을 예측하는 것에서부터 시작해서 어떤 애드네트워크의 광고를 먼저 송출할지 정하는 미디에이션 로직을 개발하는 등의 최적화를 수행하게 됩니다.

# 마이크로서비스 아키텍처
버즈빌의 모든 플랫폼은 AWS 위에서 구현되어 있습니다. 버즈빌 코드의 70% 이상을 차지하고 있는 Python(파이썬)부터 시작하여 Golang(고), Java(자바), Node.js (노드js) 등 여러 언어로된 10개 이상의 마이크로 서비스들이 운영되고 있습니다. 하지만 여전히 지금의 서비스들의 크기가 크다고 생각합니다. 앞으로 이 서비스들을 20, 30개 이상의 더 작은 서비스들로 분리해나가는 것이 우리의 목표입니다. 이를 위해서 작은 서비스를 지금보다 더 쉽게 만들고 운영하기 위한 작업을 진행 중에 있습니다. Docker(도커)를 사용하고 Kubernetes(쿠버네티스)를 도입하고 Spinnaker(스피나커)를 이용해 CI/CD를 구현하는 등 큰 변화의 갈림길에 있는 상태입니다. 이를 위해 어떤 구조가 좋은 구조이며 어떻게 서비스를 분리해나가는 것이 좋은지에 대한 고민을 지속해서 해나가고 있습니다.

# 콘텐츠 플랫폼
버즈스크린의 잠금화면에는 광고뿐만 아니라 콘텐츠를 함께 보여주고 있습니다. 지금은 잠금화면에서도 페이스북과 비슷한 피드 형태로 콘텐츠를 노출하여 콘텐츠를 조금 더 쉽게 소비할 수 있도록 하는 프로젝트를 진행 중에 있습니다. 이를 위해서 전 세계의 다양한 콘텐츠를 자동으로 수집하는 것 부터 시작해 이를 각 유저의 성향에 맞춰서 추천해주는 시스템까지의 개발이 필요합니다. 페이스북이나 네이버, 다음을 가기 전에 먼저 지나야 하는 곳이 잠금화면입니다. 여기에 좋은 콘텐츠를 보여줘서 유저의 이목을 끌 수 있다면 가장 강력한 콘텐츠 플랫폼이 될 수 있을 거라 생각합니다.

# 허니스크린 & 슬라이드조이
허니스크린과 슬라이드조이는 버즈빌이 직접 운영하는 B2C 잠금화면 애플리케이션입니다. 먼저 설명해 드렸던 플랫폼 서비스가 B2B인 것과는 달리 B2C인 허니스크린과 슬라이드조이에서는 조금 더 창의적이고 과감한 시도를 해볼 수 있습니다. 이를 위해 필요한 모든 개발부터 나아가서는 다양한 A/B 테스트를 통해서 더 나은 방향을 찾아가고 서비스를 개선해나가는 역할을 담당하게 됩니다.

왜 버즈빌을 선택 했나요?

버즈빌의 공동대표인 Young과 고등학교에서 인연이 닿아서 같은 대학교까지 다니게 됐습니다. 학생 때부터 IT 사업을 하고 싶어 했던 Young과 함께 사업을 시작하게 됐습니다. 아마도 Young에게 개발자 친구는 저뿐이었던 것 같습니다. (웃음) 그렇게 저는 co-founder로 버즈빌을 시작하게 됐습니다.

저는 항상 버즈빌에 감사한 마음을 가지고 있습니다. 버즈빌과 함께 저도 성장할 수 있었기 때문입니다. 제가 AWS에 쓴 돈이 얼마인지 아시면 다들 놀라실 거에요. 물론 회사 인프라를 운영하기 위한 비용이긴 했지만. AWS부터 시작해 개발, 회사 문화, 조직 구조, 위기관리 등 값진 경험을 지금도 계속해서 쌓아나가고 있습니다. 이런 것들이 지금도 제가 멈추지 않고 버즈빌에서 달릴 수 있게 하는 이유 중 하나가 되고 있습니다.

버즈빌은 어떤 곳인가요?

#실력과 열정이 있는 곳
성장에는 환경과 주변 사람이 중요한 것 같습니다. 시속 140km로 던지는 투수밖에 없는 리그의 타자가 160km로 날아오는 공을 받아치기는 쉽지 않습니다. 버즈빌에는 160km로 공을 던지시는 분이 참 많은 것 같습니다. 나와 함께 일하는 사람이 뛰어나다면 나의 기준도 높아지고 더욱 성장하기 위해 노력하는 건 자연스러운 일이라고 생각해요. 게다가 버즈빌에서는 개발자를 비롯해 각 개인이 성장할 수 있는 환경을 만들어줍니다. 결국 사람이 가장 중요하니까요. 개인의 성장은 곧 회사에 긍정적인 영향을 미치리라 생각합니다.

#열려있는 문화를 가진 곳
개발팀은 더욱 효과적으로 일하기 위해서 다양한 대안을 제안하고 있습니다. Docker, Kubernetes, Go 등은 모두 개발자들이 스스로 제안해서 사용하게 된 기술들입니다. 사람이나 회사는 언제나 발전할 수 있습니다. 버즈빌에서는 부족한 부분을 각 개인이 주도적으로 채우고 변화시키는 경험을 할 수 있는 것 같습니다. 버즈빌은 성장하기 좋은 곳입니다. 변화를 잘 수용하는 문화를 만들기 위해 노력하니까요.

저는 원래 누군가 이끌어주면 좋겠다고 생각했던 사람이었습니다. 버즈빌에 오기 전에 큰 책임을 맡아본 적이 없습니다. 대학교 복싱 동아리에서 부주장을 해본 경험이 전부였는데요. 하지만 이제는 성장과 발전을 독려하는 버즈빌의 기업 문화에 힘입어 저도 변해가고 있네요. 이제는 싫은 소리도 해야 하고, 평가도 해야 하고 진지한 이야기도 나눠야 하고. 잘하는지는 모르겠지만요. 아 정말 진지한 사람이 절대 아니었는데… (웃음) 이제 버즈빌에서 리더가 되면서 능동적으로 변할 수 있어 긍정적으로 생각하고 있습니다.

팀 분위기는 어떤가요?

버즈빌은 그동안 사업을 성장시켜 오면서 다양한 Product Suite(제품군)를 가지게 되었는데요. 엔지니어는 소속된 미션팀이 각자 있습니다. (참고로 각 미션팀은 제품/미션에 필요한 여러 스킬셋을 가진 팀원들이 모여 만들어집니다) 각 미션팀은 하나의 미션이 있고, 다른 팀에 의존하지 않고 독립적으로 업무를 수행합니다.

미션팀과는 다른 차원을 가지는 펑션팀이 존재합니다. 예를 들어 각 미션팀에 있는 서버 개발자들은 서버팀이라는 펑션팀에도 속해있습니다. 여기서는 기술적으로 깊이 있는 교류를 통해서 각 미션팀에서 진행 중인 과제들이 훌륭한 퀄리티로 구현될 수 있도록 돕는 역할을 하고 있습니다. 또한 각자의 시간 중 30%는 펑션팀에 할당하여 미션을 수행하느라 챙기지 못했던 메인터넌스 작업을 진행하게 됩니다. 설계 변경, 리팩토링, 유닛테스트 작성, 문서화 등이 이 범주에 들어가게 됩니다.

기본적으로 미션팀을 중심으로 일이 진행되다 보니 다른 회사보다 개발자들과 다른 영역의 사람들과의 교류가 더욱 활발한 것 같습니다. 또 미션팀 외에도 회사에서는 각종 동호회와 스터디 모임이 있어 다양한 사람과 어울릴 수 있습니다. 대기업이라면 주로 자기가 소속한 팀원들만 알고 지내는데, 버즈빌은 좀 다른 것 같습니다.

미션팀 체계로 일을 시작한 지 얼마 안 됐습니다. 미션팀의 근간은 각 팀이 마치 하나의 작은 스타트업처럼 자율적이고 효율적으로 움직이는 것입니다. 가끔 초기 버즈빌에서 나의 모습은 어땠는지 돌이켜봅니다. 만약 지금의 내가 그때와 다른 행동을 하고 있다면, 우리 팀의 분위기가 처음의 버즈빌 같지 않다고 느껴지면 어떻게 개선할 수 있을까 계속해서 고민하는 과정을 반복하게 됩니다. 벌써 80명이 넘는 회사이지만 팀의 분위기는 여전히 작은 스타트업이라고 생각합니다.

좋은 소프트웨어 엔지니어는 어떤 사람일까요?

#설계를 잘하는 개발자
어떤 설계가 좋은 설계일까요? 이야기할 것이 많은데 또 제가 생각하는 설계가 정답이라고 말하기도 힘듭니다. 하지만 분명한 것이 하나가 있습니다. 비즈니스 요구사항은 내가 상상했던 것보다 더 자주 바뀌고 있고, 좋은 설계를 했다면 이렇게 자주 바뀌는 비즈니스 요구사항을 따라가면서도 개발 속도를 유지할 수 있다는 것입니다. 특히 연구 분야가 아닌 우리와 같이 운영 중인 서비스를 개발하는 데 있어서 좋은 설계는 필수입니다. 좋은 설계를 하기 위해서는 끊임없이 어떤 설계가 좋은 설계인지 고민하고 마음에 들지 않는 부분을 찾아내서 리팩토링해야 합니다. 설계를 잘하는 개발자들을 보면 특정한 디자인 패턴에 연연하지 않고 본능적으로 상황에 맞는 구조를 찾아냅니다. 디자인 패턴을 이론으로만 알고 있는 것이 아니라 마치 당연한 것처럼 자연스럽게 실제 상황에 잘 적용합니다. 손에 익을 때까지 계속해서 훈련한 결과가 아닐까 생각합니다.

#논리적인 개발자
개발자 시간의 75%가 디버깅에 쓰인다는 말이 있습니다. 단순한 코드상의 버그뿐만 아니라 성능 문제를 고치는 것 등도 디버깅의 범주에 넣는다면 틀린 말도 아닌 것 같습니다. 이러한 문제를 해결하는 데 있어서 논리력은 필수라고 생각합니다. 가끔 이런 경우를 겪을 때가 있습니다. 갑자기 성능 문제가 발생했는데 하필 같은 날 매우 관련이 있어 보이는 변경 사항이 배포되었습니다. 하지만 이 변경사항이 원인이 아닌 경우가 있습니다. 이럴 때 논리력이 부족한 개발자는 해당 변경사항을 원인으로 단정 지어버리고 며칠을 낭비하고 난 뒤에야 뒤늦게 또 다른 원인이 있었다는 것을 알게 되는 경우가 있습니다. 무슨 일이 있더라도 자신의 논리로 명확하게 이해되지 않는 것들이 있다면 모든 가능성을 열어놓고 문제를 검토해야 합니다. 여기에 문제 해결을 위한 집요함과 끈기까지 가지고 있다면 금상첨화일 것 같네요.

#완벽함을 추구하는 개발자
여기서 말하는 ‘완벽함‘은 완벽한 스펙을 말하는 것이 아닙니다. 완벽한 스펙이라고 해도 구현하는 데 1년이 걸린다고 하면 그만한 가치가 있는지 생각을 해 봐야 할 것 같습니다. 하지만 스펙이 정해지고 나면 그 스펙을 완벽하게 구현하기 위해 노력해야 합니다. ‘에이 설마 그 정도까지 해야겠어’라고 생각하고 생략했던 구현 섬세함과 관련된 사항이 실제로 일어나고 문제가 되는 경우를 많이 겪었습니다. 간단한 변경이라고 테스트도 안 해보고 배포했다가 패치를 만드는 경우도 있었습니다. 완벽함이 프로그래밍 실력과는 별개라고 생각하는 분이 있을지도 모르겠습니다. 아주 복잡한 알고리즘을 만들 줄 알고 유연한 설계를 할 줄 안다고 해서 가끔 덤벙대도 괜찮냐고 하면 저는 아닌 것 같습니다. 올림픽 나가서 금메달을 딴 양궁선수를 생각해봅시다. 이미 그 선수만큼의 비등한 스킬을 갖춘 선수는 더 있을지도 모릅니다. 하지만 세계 최고가 되는 사람은 훌륭한 스킬과 함께 그 스킬을 마지막까지 실수 없이 발휘하는 사람이 아닌가 생각합니다. 우리는 양궁선수에 비하면 참 좋은 환경에 있는 것 같습니다. 4년 동안 기다렸다가 한 번의 실수로 탈락하는 경우는 없으니까요. 사실 실수 몇 번 해도 괜찮습니다. 하지만 마음만은 완벽한 개발자가 되기 위해 노력하는 것이 중요한 것 같습니다. 더불어 내가 작성한 코드 한줄 한줄이 명확한 의미를 가지게 하고 이것들이 모여서 완벽하고 아름다운 코드가 되는 것을 추구한다면 정말 좋을 것 같습니다.

#무엇이든 깊게 파고들고 스스로 공부하는 개발자
두 개발자가 처음으로 MySQL을 사용하기 시작했습니다. 그중 한 명은 쿼리만 짤 줄 알면 되니까 SQL만 딱 공부해서 필요한 서버 기능을 구현했습니다. 아마 서비스가 엄청나게 잘 안 되는 이상 큰 문제는 없을 것입니다. 다른 한 명은 조금 더 깊게 파고 들어봅니다. SQL을 익혀서 기능은 다 만들었는데 만약에 유저가 늘면 어떻게 될지에 대해 고민하기 시작합니다. 당장 필요하진 않지만, 최적화하는 방법을 찾아보다 보니 인덱스에 대해서 알게 됩니다. 그리고 transaction isolation level을 바꾸면 성능이 좋아진다는 글을 어디선가 읽고 transaction isolation level에 대해서 공부하면서 transaction에 대해서 좀 더 깊이 있게 이해하게 됩니다. 성능은 NoSQL이 좋다는 이야기를 듣고 어떤 NoSQL을 쓰면 좋을지 찾아보다 보니 CAP 이론에 대해서도 알게 됩니다. 이런 식으로 이것저것 공부하다 보니 어느새 MySQL뿐만 아니라 전반적인 데이터베이스 이론에 대해 빠삭한 개발자가 되었습니다. 두 개발자의 큰 차이점은 성장 속도입니다. 첫 번째 개발자는 누군가 가르쳐주지 않는 이상 성장이 더딥니다. 문제가 생기면 그때야 부족한 부분을 인지하고 공부합니다. 하지만 두 번째 개발자는 누가 가르쳐주지 않아도 스스로 빠르게 성장합니다.

#마지막으로
제가 좋은 개발자의 조건을 모두 갖췄냐라고 하면 아직 아닌 것 같습니다. 저도 저런 개발자가 되고 싶은 것이고 또 저런 개발자라면 좋은 개발자라고 인정할 수 있을거라 생각해서 써봤습니다. 쓰면서 반성하고 있습니다. 앞으로 잘할께요~^^

현재 어떤 포지션을 뽑고 있나요? (2019년 2월 기준)

현재 버즈빌에서는 안드로이드 개발자, 서버 개발자, 웹 프론트엔드 개발자, 머신러닝 개발자 등을 채용 중입니다.  

 

*버즈빌은 현재 채용 중입니다. (전문연구 요원 포함) 자세한 내용은 아래 버튼을 눌러주세요!