2021 우아한형제들 경력 개발자 인터뷰
좋은 것을 더 좋게! 우아한형제들의 도전은 오늘도 계속됩니다.
우아한형제들의 서비스를 더 가치있게 만들기 위해
대용량 트래픽과 대규모 인프라를 관리하며 도전하는 우아한형제들의 개발자분들,
그 중 여섯분을 인재영입팀에서 만나봤습니다.
들어가기 전에
안녕하세요 인재영입팀 입니다.
이번 직무인터뷰 과정을 통해 우아한형제들의 개발자는 어떻게 일하고 있으며,
또 어떤 도전 과제들을 수행하며 성장하고 있는지
그들의 성장 과정을 엿볼 수 있었습니다.
배민 개발자로서의 생활과 면접 꿀팁은 덤!
‘좋은 음식을 먹고 싶은 곳에서’ 의 서비스 가치를 만들어가는 개발자 여섯분의 이야기를 소개합니다.
∙ 금번 직무인터뷰는 방역 수칙을 철저히 준수하여 진행되었습니다.
우태균 ∙ 송인태 / 백엔드 개발자
우아한형제들에서 맡고 있으신 주요 역할에 대해 소개해 주세요.
우태균님: 안녕하세요, B마트서비스팀에서 백엔드 개발자로 일하고 있는 우태균입니다.
B마트서비스팀은 고객분들이 직접적으로 사용하는 앱과 웹 서비스를 만들고 있는데요.
저와 같은 백엔드 개발자들은 서비스에 필요한 각종 API를 제공하고 상품, 카탈로그와 같이 노출에 필요한 데이터를 관리하고 제공합니다.
저를 포함 네 명의 백엔드 개발자들은 여러 영역을 넘나들며 함께 작업하고 있는데요. 최근 저는 다양한 상품을 고객들이 원하는 시점에 원하는 구성으로 보여주기 위해 노력하고 있어요. 개인화 추천 상품 구좌와 AB 테스트를 통한 데이터 기반의 서비스 발전을 위한 기반 작업을 하고 통계 데이터를 수집, 분석하는데 기여하고 있습니다.
송인태님: 안녕하세요, 딜리버리플랫폼팀 라이더서비스파트에서 백엔드 개발자로 일하고 있는 송인태입니다.
우선, 제가 속해 있는 파트에 대해 소개하자면 라이더분들의 생애 주기에 관련된 업무를 담당하고 있어요. 라이더분들의 가입부터 시작하여, 운행 그리고 탈퇴시까지 라이더분들에게 보험, 정산, 맞춤형 광고, 운행 통계 등을 제공하여 더 나은 환경에서 배달을 할 수 있도록 지원하고 있습니다.
저는 파트내 대부분의 업무들을 진행하면서 파트 및 팀내에 다양한 직군의 팀원들과 함께 ‘더 나은 서비스들을 제공하기 위한’ 기능 개발과 개선 업무를 맡아 진행하고 있고, 백엔드 개발자로서 서비스를 안정적으로 운영할 수 있도록 시스템 모니터링 환경 구축 및 실질적인 시스템 모니터링, 그리고 성능 개선 업무를 맡고 있습니다.
담당업무 소개
Q. 우아한형제들에서 백엔드 개발자로 일하며, 언제 성취감을 느끼시나요?
우태균님: B마트 서비스가 성장하는 과정에서 발생하는 이슈를 관리하고, 업무들을 수행할 때 성취감을 느끼고 있어요. B마트 서비스는 2019년 배민마켓으로 오픈해서 B마트로 서비스명칭이 변경되고, 마트 규모의 장보기 서비스로 발전해 왔는데요.
B마트 서비스를 제공하는 지역도 확장되고 이용하는 고객과 판매하는 상품 구색도 다양해지면서 몇몇 이슈들이 있었고, 서비스 성장을 위한 여러 시도를 하게 되었어요. 그중에서도 저는 사업의 확장과 동시에 안정적인 서비스 제공을 위해 인프라를 분리시키고 구조를 잡는 일들을 하고 있습니다. 이런 안정성과 관련된 작업들은 진행하는 당시에는 다소 과해 보이는 작업으로 보일 수도 있고 장점이 크게 보이지 않는 경우도 있어요. 하지만 시간이 지나고 보다 복잡하고 다양해진 데이터를 다루는 일에도 큰 부담 없이 확장해나가는 스스로를 발견하며 ‘과거에 내가 한 일이 현재의 나를 만들었다’는 생각과 함께 큰 성취감을 안겨줘요.
오픈 초기와 달리 서비스가 성장 궤도에 접어들면서 다양한 마케팅을 시도하게 되고, 고객 이용 패턴 분석을 통한 의사 결정 등 데이터를 기반으로 한 다양한 업무가 생겨나게 됩니다. 이때, 데이터팀과 협력하여 추천 모델을 만들기도 하고 저희 데이터를 마케팅 매체에 제공할 수 있게 가공하여 전달하는 등 다양하게 확장된 업무들을 진행하게 될 때면, 특정 업무 내에서도 여러 가지 시도를 통해 인사이트를 얻고 더 발전된 형태로 나아가게 되는데요. 다양한 방식으로 함께 고민하고 한 걸음씩 나아가 종국에 서비스 성장에 기여되는 모습을 지표로 확인할 때 성취감을 느끼고 있습니다.
송인태님: 팀에서 제공하는 배민커넥트 서비스는 제가 팀에 합류하고 지금까지 지속적으로 빠르게 성장을 하고있는데요. 이렇게 폭발적으로 성장하는 서비스를 운영하는 과정의 다양한 순간에 성취감을 느끼고 있습니다.
우선, 지속적으로 늘어나는 라이더분들(배달대행을 해주시는 라이더분들과 배민커넥트 서비스를 이용하는 일반 유저) 및 배달의민족, B마트 배달건들을 대응하면서 운영하고 있는 시스템에 예상하지 못한 여러 이슈들이 발생했고 팀에서는 이를 해결하기 위해 많은 노력을 하고 있습니다. 예를 들어, 많은 주문량을 처리하기 위해 팀원들과 함께 시스템 구조를 개선하거나 새로운 기술 스택을 익히고 학습해 적용하고, 문제를 해결해 나가면서 다양한 경험을 하고 있습니다. 문제를 해결하거나 새로운 기능을 개발할 때 이전의 내가 생각하지 못한 다양한 관점에서 고민을 하고 기능을 개발하는 매 순간마다 성취감을 느끼고 있습니다.
또한, 이런 시스템적인 부분 뿐만아니라 서비스를 사용하는 사용자가 많아지면서 다양한 기능을 제공하는데, 이를 통해 여러 도메인을 경험하고 있어요. 정산 시스템을 개발하거나, 라이더들의 보험을 보험사와 연동해 개발해 나감으로써 이전에 알지 못했던 도메인과 비즈니스 영역을 배우고 익히는 과정에서 성취감도 얻습니다.
기술 성장 과정
Q. 우아한형제들에서 어려운 과제를 극복하고 기술적으로 성장한 경험을 이야기해주세요.
우태균님: 우아한형제들은 작년부터 ‘피트스탑(Pitstop)’이라 불리는 과제와 업무 재정비 기간을 약 한달간 가지고 있는데요. *피트스탑(Pit Stop)이란, 피트(pit)라는 서킷(circuit) 안의 간이정비소에서 레이싱 경기 중, 차량을 정비보수하고 타이어 등을 교체하는 것을 말합니다.
이는 “새롭게 일을 추가하는 것 만큼이나 이미 우리가 하고 있는 일의 생산성을 높이고 안정성을 확보하는 것이 중요하다는 것을 같이 공유하고 동참을 유도하기 위한 캠페인 개념”으로 대표이신 범준님이 전사에 공유해 주셨어요.
피트스탑 기간 동안 우아한형제들의 개발자들은 약 한달 동안 각 서비스가 보완해야 할 사항들을 개선해 나가는 작업을 진행 했습니다. B마트 서비스 또한 점차 다양한 형태로 발전하며 발생한 서비스와 시스템 안정성 문제를 해결하고자 피트스탑 기간 Pub&Sub 구조로 리드모델을 구축하는 작업을 진행했어요. 관리와 노출 도메인을 분리하여 구조적으로 안정성을 가져가는 이 모델은 Entity 변경점을 Hooking 하여 Consumer를 통해 노출을 위한 비정규화 데이터로 전환하는 과정으로 구성돼요. 관리에 용이한 정규화 데이터의 장점을 유지하고, 이를 비정규화하는 과정이 노출 도메인에 그대로 적용되면서 인스턴스 리소스 사용량을 크게 감소시키는 효과를 얻을 수 있었어요.
이 과정에서 복잡하게 얽혀있던 도메인을 분리하고 레거시 코드를 대거 제거할 수 있었습니다. 또한, 다양한 서비스 레이어에 걸쳐 적용되어 있던 캐시를 비정규화된 리드모델 하나만을 캐싱하는 형태로 수정하면서 복잡도도 낮추고 구조 변경에 따라 노출에 영향을 주는 범위를 크게 줄일 수 있었어요. 광범위한 영역을 동시다발적으로 수정해 나가며 구조를 잡는 과정이었기에 함께 작업한 동료들과 역할을 적절히 나누어 진행했고, 활발한 소통을 통해 최선의 형태로 구현되도록 노력했던 경험은 앞으로 백엔드 개발자로서 바르다고 생각되는 개선 사항을 진행하는 데 망설임을 줄이고 자신감을 얻는 계기가 되었어요.
Q. 라이더서비스 백엔드 개발자로 일하시며 스스로 성장하고 있다고 느낀 경험이 있다면 말씀해 주세요.
송인태님: 백엔드 개발자로 일하며 다양한 도전적인 과제들을 수행해왔고, 그중 주문별 라이더 배치작업 성능 개선 과제를 소개하고자 합니다.
서비스가 빠르게 성장하며 주문별 라이더 배치작업 시스템의 데이터베이스에도 영향을 주기 시작했어요. 시스템 알람을 통해 장애가 발생하기 전에 로그 및 지표들을 확인하며 두 가지 문제점을 발견하게 되었습니다.
첫 번째는 데이터를 병렬로 처리하고 있는데, 데이터양이 방대해진 탓에 사용하는 스레드 개수가 증가하고 있었고 두 번째로는 각각의 스레드들이 독립적으로 작업을 수행하여 전체 배치의 성공 여부와, 배치 작업 완료 시점을 파악하기 어려운 부분이 있었습니다.
마침, 저희가 사용하는 기술 중에 스프링 배치로 문제점을 해결할 수 있는 Partitioning 기술을 제공하고 있어서 작업을 하는 스레드수를 손쉽게 제어할 수 있었고 전체 배치 성공 여부 및 완료 시점을 파악할 수 있었습니다. 또한 파트에서 이미 사용하고 있는 기술셋을 이용함으로써 다른 개발자분이 이해하기 쉬운 구조로 만들 수 있었어요.
이 경험이 인상 깊었던 것은 제가 주도적으로 모니터링을 진행하면서 장애가 발생할 수 있었던 문제를 파악해 사용하는 기술을 조금 더 깊이 있게 학습하며 현재 상황에 필요한 사항을 반영하는 경험을 할 수 있었던 점과 팀분들이 지속적으로 리뷰하고 피드백을 주셔서 문제를 잘 해결해 나가며 더 큰 보람을 느꼈기 때문입니다.
역량에 관한 생각
Q. 백엔드 개발자로서 좋은 성과를 만들기 위해서는 어떤 역량과 자질이 필요하다고 생각하시나요?
송인태님: 백엔드 개발자로서 좋은 성과를 만들기 위해 여러 역량이 필요하지만, 저는 커뮤니케이션 역량과 근거를 바탕으로 결정하는 역량이 중요하다고 생각합니다.
우선, 처음으로 커뮤니케이션 능력이 가장 중요하다고 생각합니다.
서비스를 만들고 운영해나가다 보면 개발자는 코드를 작성하는 것뿐만 아니라 다양한 직군의 팀원분들과 협업을 하게 됩니다. 과제가 주어졌을 때, 해당 과제를 어떻게 더 나은 방향으로 해결할지 정하기 위해 다양한 직군의 분들과 정말 많은 이야기를 나누게 되는데요. 이때 원활한 커뮤니케이션 역량이 있다면 더 좋은 성과를 이끌어 낼 수 있다 생각합니다. 또한, 개발자로서 개발을 진행할 때도 다른 개발자분들과 설계 및 코드 리뷰를 통해 많은 의견을 주고받게 되고, 이러한 다양한 의견을 주고받음으로써 더 나은 성과를 이끌어 낼 수 있다고 여겨집니다.
두 번째로는 근거를 바탕으로 결정하는 역량이 중요하다고 생각합니다. 개발 관련 서적을 읽으면서 “은 총알은 없다 (No Silver Bullet)”라는 글을 읽었는데, 저는 이를 ‘어떠한 문제를 해결할 때 만능 해결책은 없다’고 이해했습니다. 개발자로 일을 할 때도 이처럼 은 총알이 없기 때문에 항상 다양한 해결 방법을 두고 장단점을 고려하여 결정하는 능력이 중요하다고 생각합니다. 예를 들어, 데이터를 저장하기 위한 다양한 데이터 저장소가 존재하는데, 현재 상황과 각 저장소 간의 장단점을 파악하여 가장 최선의 선택을 해야 합니다. 또한 개발적인 부분 외에도 우리가 사용자에게 제공하는 기능의 정책, UI/UX 등의 다양한 요소를 모두 만족하는 해결책이 없을 수 있기 때문에 항상 여러 장단점을 고려하여 최선의 방향을 판단하는 역량을 증진시킨다면 좋은 성과를 만들 수 있다고 생각합니다.
Q. B마트서비스팀의 백엔드 개발자로서는 어떤 기술 역량과 자질이 요구되나요?
우태균님: 개발 영역에 관계없이 커머스 분야에 필요한 기술역량으로 소개 드릴게요.
B마트는 네이티브 앱과 웹이 적절히 결합된 형태를 취하고 있어요. 그렇기 때문에 각 환경이 갖는 특성과 JavaScript Interface를 비롯한 데이터 교환의 흐름, 서버와의 통신을 위한 데이터 처리 구조에 익숙하거나 잘 알고 있어야 해요.
저희 백엔드 기술 스택으로는 Java 8 + Spring + Redis + Mysql(Aurora,maria DB) + Queue(aws SNS + SQS)로 이루어져 있어요. 주된 작업은 대부분 이 기술 스택으로 이루어지기 때문에 기본적으로 갖추어야 할 역량이라고 볼 수 있습니다. 이 밖에도 모니터링, 로그 시스템, 추천/통계 시스템을 위해 InfluxDB, Kafka, Airflow, Athena, Grafana, Prometheus 등 다양한 기술을 상황에 맞게 선택하여 사용해요.
배포 환경 구성과 부하 테스트, 각종 스크립트 영역까지 포함하면 더 다양해질 있는데 이런 기술들을 모두 잘하는 건 어렵습니다.
그렇게 때문에 개발자는 본인이 잘할 수 있는 개발 분야는 요구받은 것 이상으로 주도적으로 수행해 성취를 이뤄내고, 부족한 분야지만 책임감이 따르는 입장에서는 빠르게 학습하고 습득해 자신의 영역을 넓혀가려는 자세가 뒷받침되어야 합니다.
그 외 앱 개발 환경도 말씀드리면 Swift, Kotlin 전환, Rx, DI 적용, 아키텍처 변환 등의 과정을 거쳐 지금의 기술 스택을 갖게 되었어요.
웹은 Vue.js, React.js 모두 활용되고 있고 디자인 시스템을 비롯한 공통 컴포넌트 확장 등을 통해 끊임없이 더 좋은 모습으로 발전하고 있어요.
B마트뿐 아니라 우아한형제들은 개발자로서 성장하는데 좋은 환경을 갖추고 있습니다. 개인의 역할을 스스로 한정 짓지 않고 주위를 둘러보며 필요한 일들을 하나하나 함께 이루어 나간다면 기술 역량은 자연스럽게 높아진다고 생각해요.
우아한형제들 개발문화
Q. 우아한형제들의 개발문화 중에 두 분이 생각하시는 좋은 문화를 알려주세요.
송인태님: 저는 개인적으로 좋은 개발문화는 자신의 경험을 공유하는 테크톡 그리고 투투(Two-Two) 문화라고 생각합니다.
첫 번째로 회사에서는 주기적으로 자신의 경험을 공유하는 ‘테크톡’이 진행됩니다. 이를 통해 다른 분들이 경험한 다양한 문제점과 이를 해결해 나가는 과정을 보고 배우며 성장해 나갈 수 있었습니다. 테크톡을 통해 회사의 공유 문화가 안착됨으로써 각 팀에서 다양하게 자신의 경험을 공유해 주는데요. 제가 속해있는 팀에서도 개발자분들이 자신의 경험에 대해 주기적으로 공유해 주셔서 업무적으로도 많은 도움이 되고 있습니다.
두 번째로는 우아한형제들의 투투(Two-Two) 문화라고 생각합니다. 제가 이해하는 투투 문화는 어떤 상황을 해결하기 위해 최소 두 명 이상 같이 확인하면서 문제를 해결하는 것으로 알고 있는데요. 이러한 문화가 자리 잡혀 팀 내에서도 다양한 방식으로 활용되고 있습니다. 개발을 할 때는 페어(Pair) 코딩을 진행하거나, 두 명 이상이 필수로 코드 리뷰를 진행하고 실제 운영에 이슈사항이 있을 때는 항상 부담 없이 주변 동료에게 도움을 청해 같이 이슈사항들을 해결하고 있습니다. 이러한 투투(Two-Two) 문화 덕분에 회사 차원에서는 더 안정적으로 서비스를 운영할 수 있고, 개인적 차원에서는 업무에 투투 방식을 적용하면서 조금 더 안정감 있게 일을 진행할 수 있고, 동료분들을 통해 다양한 경험을 공유 받을 수 있어 많은 도움을 받았습니다.
우태균님: 여러 분야의 개발자들이 함께 일하다 보면 서로의 영역에 대해 더 이해하게 되고 그만큼 배우게 되는 점도 많아요.
저의 경우에도 처음에는 앱 개발자로 이 팀에 합류했지만 백엔드 분야의 업무도 조금씩 받아 가며 직무를 전환한 경우예요.
아무리 제가 백엔드 개발을 할 수 있었다 하더라도 서로 히스토리를 모르고 업무 연계성이 떨어지는 분리된 팀 구조였다면 불가능한 일이었겠죠. 서비스에 관심이 많고 팀이 함께 같은 목표로 나아가는데 의미를 가진 분이라면 저희 팀은 단연 최고의 팀이라고 얘기할 수 있습니다.
제가 경험하고 알고 있는 우아한형제들의 개발 조직은 코드 리뷰를 의무화하고 서로 소통하며 도전적인 미션을 주도적으로 찾아내요. 각 팀의 자랑할 만한 결과물을 공유하고 축하하는 분위기가 형성되어 있어, 여러 훌륭한 개발자 동료분들의 인사이트를 지켜보며 함께 성장하는 기회를 찾기도 좋습니다.
마무리하며
Q. 우아한형제들에 입사를 희망하시는 분들에게 응원의 한 말씀 부탁드립니다.
송인태님: 백엔드 개발자 채용에 관심을 가져주셔서 감사합니다. 노력하신 만큼 좋은 성과가 있길 기원하며, 저희 함께 성장하며 재밌게 일할 수 있으면 좋을 것 같습니다. 화이팅!
우태균님: 우아한형제들은 참 특별한 회사라고 생각해요. 밖에서 보았던 우아한형제들도 구성원들이 똘똘 뭉치는 문화를 가졌다고 생각했는데 입사하고 나니 작은 행사와 문화 하나하나가 구성원들이 함께 참여할 수 있도록 이루어지더라고요.
내가 공감하는 일을 좋은 사람들과 함께 만들어가는 이곳에서 같이하게 될 분들이 기대되고 또 응원합니다.
박예준 / 프론트엔드 개발자
팀 내에서 맡으신 역할과 담당 업무를 소개해 주세요.
안녕하세요, 저는 배민서비스개발팀의 4년차 웹프론트 개발자 박예준입니다.
배민에서 서비스하고 있는 각종 웹사이트와 배민 앱 내 웹뷰를 개발하는 일을 담당합니다.
‘배민은 앱인데 웹 프론트 개발자가 왜 필요해?’라는 질문을 종종 받고, 제 소개를 보신 분들 또한 의아해하실 수 있는데요.
배민의 많은 서비스는 웹으로도 만들어 제공되고 있으며, 앞으로 더 많은 제품들을 웹으로 개발해나갈 계획도 있습니다.
담당업무 소개
최근에 일하며 보람을 느꼈던 순간과 리뷰, 공유 문화를 어떻게 실천하고 있으신지 알려주세요.
제가 소속된 배민서비스개발팀 웹프론트파트의 문화에 대해 소개 드릴게요.
저희 파트의 경우 모든 코드들에 대해 함께 리뷰를 진행하고 있는데, 이 과정에서 과반 이상의 승인을 받지 못하면 서비스를 진행할 수 없도록 하는 ‘코드 리뷰룰’을 잘 지켜나가고 있어요.
또한, 코드 리뷰봇처럼 기계적으로 보고 승인하는 코드 리뷰는 하지 않습니다.
클린 코드의 정신에 의거해서 정말 꼼꼼히 서로의 코드를 리뷰하고 의견도 공유하고 있고 이를 위해서 클린 코드 책으로 스터디도 함께 진행할 정도였어요.
바쁜 과제 일정으로 모든 리뷰에 대해서 바로 개선할 수 없을 때도 있지만 이는 추후에라도 개선하기 위한 노력을 하고 있습니다.
한 번은 저희 파트 동료가 한 이벤트 개발을 담당하셨는데요, 이벤트가 종료되었는데도 일정으로 미처 리뷰를 반영하지 못한 코드들에 대한 리뷰를 요청 주셨던 적이 있었습니다.
이런 리뷰 문화가 자리 잡히면서 ‘동료의 성장이 곧 나의 성장이 된다’라는 말의 진정한 의미를 깨닫게 되었던 것 같아요.
일하면서 보람을 느꼈던 순간은 배민은 워낙 많은 사용자가 있는 서비스다 보니 새로운 기능이나 제품이 나왔을 때 사용자들의 반응이 항상 뜨겁습니다.
때론 여론의 질타에 의기소침 해질 때도 있지만, 배민 선물하기나 가족 계정과 같은 새로운 서비스를 제공했을 때 긍정적이고 좋은 피드백들이 많아서 ‘아 고생한 보람이 있구나!’ 싶고 뿌듯하더라고요.
특히 이 과제들은 성공적인 프로젝트를 위해 동고동락한 동료들과의 업무 호흡이 너무나도 잘 맞아서 뿌듯한 마음이 배가 된 것 같았습니다.
과제 수행 과정
프론트엔드 개발자로 일하시면서 도전적인 과제를 수행하신 대표적 사례를 소개해 주실 수 있나요?
폭발하는 트래픽 감당하기
이전에 엔드게임이라는 이벤트에 프론트엔드 개발 담당자로 참여한 적이 있습니다. 최대 만 원 정도의 쿠폰을 랜덤으로 특정 시간 동안만 발급받을 수 있다 보니 정말 많은 사용자분들이 참여했어요.
이벤트 시작 시간이 다가오면 카운트다운이 진행되고 이벤트 발표 시간에 짠! 하고 참여 화면으로 넘어갈 수 있는 그런 플로우를 계획했었죠.
헌데, 너무 많은 사용자가 참여하다 보니 이벤트 시간에 짠! 하고 흰 화면이 나오더라고요. 아직도 그 순간이 기억나네요.. 그 순간에는 아마 제 얼굴도 백지가 됐을 거예요.
api 서버도 프론트엔드 리소스를 불러오는 cdn도 한 번에 몰리는 트래픽으로 인해 서비스가 불가능한 상황이 된 것이었죠. 결국 3일 동안 계획한 이벤트 기간 중 첫날은 이벤트를 진행하지 못했어요.
둘째날 이벤트를 무사히 진행하기 위해 몰리는 트래픽을 감당할 수 있도록 리소스와 웹 어플리케이션의 최적화를 밤새 진행했던 기억이 생생합니다.
동료들의 많은 아이디어와 조언 그리고 응원 덕분에 둘째날 이벤트는 성공적으로 진행할 수 있었어요. 이벤트 시간에 짠 하고 화면이 떴을 때 사무실을 꽉 채운 박수소리가 지금도 귓가에 들려오는 듯하네요.
높은 트래픽을 잘 이겨내어 좋은 사용자 경험을 제공하기 위해 보다 더 꼼꼼하게 개발을 하게 된 계기가 되었습니다.
원인 파악이 어려운 장애 극복하기
2020년 초 당시 저희 팀에서 담당하고 있던 node 서버에서 반복적인 장애가 일어났습니다. 정말 어떠한 병목도 없어 보였는데 갑자기 부하가 일어나면서 서버가 다운 되었어요.
코드를 아무리 살펴봐도 로직엔 문제가 없어 보이는데 말이죠. 이 장애로 인해 큰 스트레스를 받았어요. 배민에서 상당히 중요한 웹뷰를 제공하는 서버였기 때문이었죠.
서버를 늘려봐도 동일한 현상이 반복되었었고, SRE 담당자분들의 지원을 받아 모니터링 환경도 구성하면서 함께 정말 많은 로그들을 살펴보았던 것 같습니다.
이런 반복적인 상황이 지속되니 동료들도 저도 심적으로도 육체적으로도 정말 많이 지쳤던 것 같아요. 그래도 계속 원인을 파악하기 위해 포기하지 않고 이것저것 참 많이 시도를 해봤던 것 같아요.
결국 끈질긴 사투 끝에 메모리릭을 발생시키는 원인을 파악하게 되었고 그 지옥의 장애 게이트에서 벗어날 수 있었습니다.
지금 와서 생각해 보면, 장애는 개발자의 능력을 스텝업 시켜준다는 말이 정말 맞는 말 같습니다. 이런 트러블 슈팅들을 겪으면서 배운 것들이 제 스스로에게 너무 소중한 자산이 된 것 같습니다.
역량에 대한 생각
우아한형제들의 프론트엔드 개발자로서 익혀두면 좋은 기술을 몇 가지만 알려주세요.
웹프론트엔드 분야가 워낙 트렌드가 빠르게 바뀌어서 구체적으로 말씀드리긴 어려운 것 같아요. 그렇기 때문에 변화하는 트렌드를 이해하는 것이 제일 중요한 것 같습니다.
새로운 기술, 흐름, 트렌드가 왜 핫해진 건지 이해하는 지식의 차이가 크게 작용하는 분야가 프론트엔드 입니다.
트렌드를 무작정 따라가고 신봉하기보다는 그런 트렌드가 생긴 흐름과 원인에 집중해보면 인사이트를 키우는데 많은 도움이 되리라고 생각됩니다.
두번째로, 웹 프론트 외 분야들에 대해서도 공부를 해보시면 참 많은 도움이 되실 거예요. 백엔드, 모바일과 같은 기술 분야는 물론, UI/UX 디자인과 같은 기술 외적인 분야를 포함해서요.
프론트엔드 개발자는 참 많은 직군의 동료들과 일하게 됩니다. 함께 제품을 만들어갈 동료들의 직무에 대한 기본적인 이해는 서로의 견해를 이해하고 의견을 나누는데 정말 많은 도움이 되는 것 같습니다.
마지막으로 HTML과 CSS에 대한 공부를 게을리하지 않으셨으면 좋겠습니다. 프론트엔드 개발자를 지망하시는 분들이 마크업과 스타일 부분에 지루함을 느끼곤 하시지만, HTML과 CSS는 웹 프론트엔드 개발자의 작업의 최종 결과물이자 근본이라고 생각합니다.
이에 대한 기초 지식들은 높은 접근성과 좋은 사용자 경험을 제공해 주는 제품을 만드는 발판이 될 것입니다.
우아한형제들의 개발문화
우아한형제들의 개발 문화와 배민서비스개발팀만의 매력은 무엇인가요?
배민서비스개발팀은 파트별로 담당하는 업무 내에서 많은 권한과 자율을 부여받습니다. 담당 도메인/제품에 있어서 주도적이고 능동적인 업무가 가능하죠.
그래서 기술 스택이나 아키텍처 같은 부분에서 리더가 결정을 내리는 것이 아닌, 실무자가 직접 결정하는 것이 당연하다는 인식을 가지고 있습니다.
이런 환경에서 근무하기 때문에 새로운 기술에 대한 도전이나 다양한 시도들이 가능합니다.
또한, 팀 구성원들이 서비스의 고도화, 업무 비효율의 타파를 위해 의견을 적극적으로 내는 편입니다.
실제로 얼마 전에 저희 파트에서 담당하는 한 도메인에서 단순 반복되는 업무들이 있어, 이를 해결할 수 있는 시스템을 만들면 좋겠다는 의견을 낸 적이 있습니다.
이에 대해 구성원분들도, 팀장님도 공감을 해주시면서 실제로 하나의 프로젝트로 진행하게 되었습니다.
팀내 서버개발자 분들은 물론, 타팀의 기획, 품질 담당자분들의 지원까지 받으면서요. 이렇게 주도적으로 일하는 환경이 되다 보니 일에 대한 오너십이 강해지는 것 같아요.
저희 팀은 정말 성장하기에 좋은 환경을 가지고 있다고 생각합니다.
우선 리뷰, 가게노출, 회원과 같이 트래픽이 많은 도메인들을 담당하다 보니 다른 곳에서는 경험할 수 없는 다양한 경험을 할 수 있는 것 같습니다.
또 팀 내에서 스터디나 개인의 역량 발전을 위한 도전들을 많이 장려하는 편이에요.
개인과 조직의 성장에 관한 고민에 대해 조언을 구할 수 있는 리더가 이끄는 팀이라는 점이 특히나 매력적이라고 생각합니다.
마무리하며
프론트엔드 개발자로서의 삶을 꿈꾸는 개발자 분들에게 응원의 한 말씀 부탁드립니다.
근래 몇 년 사이에 프론트엔드 개발자에 대한 수요가 폭발적으로 성장했습니다.
이에 따라 많은 취업 준비생, 타분야 종사자분들이 프론트엔드 개발자 취업시장에 많이 뛰어들고 있습니다.
경쟁이 치열해지고 있는 상황 속에서 다른 경쟁자와 한 끗 차이의 비교우위를 만들어 내는 건 이 분야에 대한 애정이 아닐까라는 생각이 듭니다.
정말 이 분야를 사랑하시는 분이라면 분명히 멋진 프론트엔드 개발자가 되실 수 있으리라 믿습니다!
강선구 / 데이터 엔지니어
소속 조직의 구성과 선구님께서 맡고 있는 역할에 대해 소개해 주세요.
안녕하세요, 데이터플랫폼팀의 데이터 엔지니어 강선구입니다.
우아한형제들이 서비스를 만들고 개선하는데 필요한 데이터를 분석하고 활용할 수 있는 환경을 개발하고 있습니다.
데이터 엔지니어는 회사에 ‘데이터’라는 세 글자만 들려도 출동한다고 표현할 수 있을 정도로 데이터와 관련된 다양한 일을 하고 있지만,
아래의 세 가지 역할을 주로 맡고 있다고 보시면 될 것 같습니다.
첫째는 배달의민족 서비스 데이터를 수집하고 분석할 수 있는 빅데이터 인프라를 구축합니다.
둘째는 수집된 데이터를 쉽게 분석할 수 있는 환경을 개발하고 제공합니다.
마지막으로 사내의 데이터 분석가, 과학자들과 협업하여 우아한형제들에 필요한 데이터를 직접 개발합니다.
그리고 현재 데이터플랫폼팀의 리더 역할을 맡으며, 회사에 더 나은 데이터 환경을 제공하기 위한 프로젝트를 제안하고 관리하는 역할을 겸하고 있습니다.
담당업무 및 협업과정
데이터를 관리하고 활용하시는 방법과 타 부서와의 협업 과정이 궁금합니다.
우아한형제들은 서비스를 만들고 개선하는 과정에서 다양한 방법으로 데이터를 분석하고 활용하기 때문에,
데이터와 서비스의 중심에 데이터 엔지니어의 역할이 큰데요. 이전 질문에서 답변한 3가지 업무 역할을 토대로 소개 드릴게요.
가장 먼저는 데이터의 수집과 관리입니다.
데이터 엔지니어들은 분석 활용이 가능한 모든 서비스 데이터를 수집하고 관리합니다. 주문이나 음식 메뉴 정보 같은 데이터 외에도,
배민 앱에서 발생하는 버튼 클릭, 페이지 이동 등 다양한 사용자 행동 기록을 실시간으로 수집하고 활용합니다.
배민 서버들이 대용량 트래픽을 처리하는 만큼, 저희 데이터 엔지니어들은 그 이상의 대용량 데이터를 견뎌내고 분석할 수 있는 시스템을 만들어야 합니다.
매년 서비스가 성장하는 만큼 더욱 높은 수준의 기술력이 요구되고 있어요.
데이터 수집, 관리 과정에서 담당 개발팀과 소통하여 서비스 부하를 만들지 않도록 신경 쓰고 있고, 정보보안팀과 소통하여 안전한 데이터와 환경을 제공하는 노력을 하고 있습니다.
두번째로는 데이터 분석 환경을 제공하는 일인데, 저희가 제공하는 분석 환경의 사내 고객은 다양합니다.
일반적으로 데이터 분석가나 개발직으로 한정되는 회사들이 많지만 저희는 사업, 서비스기획, 영업, 디자이너 등 거의 모든 직군의 구성원들이 데이터 기반으로 업무를 진행하고 있어요.
다양한 고객과 데이터를 대상으로 하는 만큼, 손쉽게 데이터를 접근하고 분석할 수 있도록 지원합니다.
예를 들어, Hadoop 시스템에 저장된 파일들을 SQL로 조회하거나 대시보드를 직접 생성할 수 있는 다양한 툴들을 제공합니다.
개발 직군 구성원들에게는 직접 빅데이터 통계나 머신러닝 등을 개발할 수 있는 환경도 제공하고요.
오픈소스를 많이 활용하지만, 사내 니즈에 맞춰서 직접 개발하는 경우도 흔해요.
또한, 구성원들이 데이터를 잘 이해할 수 있도록 돕는 웹 어드민도 같이 개발하거나, 복잡한 시스템의 데이터 구조를 분석에 용이하게 데이터 마트를 생성하여 제공하는 역할도 하고 있어요.
세번째로 데이터를 활용한 고객의 경험 개선입니다.
배민의 데이터는 실제 고객 경험 개선을 위한 기능들로 재생산되어 서비스에 활용되고 있습니다.
배민 앱 고객에게 제공되는 배달 예상시간, 맛집 랭킹, 상품 추천 등의 기능들이 있으며, 사장님 고객들을 위한 각종 리포트와 AI 기반의 챗봇까지 정말 다양하게 활용되고 있어요.
서비스에 직접 활용되는 데이터인 만큼 기획자들과 함께 기능을 설계하며, 실제 개발 작업은 같은 데이터서비스실에 속한 데이터 분석가, 과학자 동료들과 함께 합니다.
데이터 엔지니어들은 담당 분석가, 과학자들이 설계한 로직이나 모델링 코드가 실제 서비스에서 안전하게 동작할 수준으로 구현 가능한지 검토하고,
이를 성능적으로 가장 최적화된 형태로의 데이터 파이프라인을 구현하는 역할을 맡습니다.
또한 생산된 데이터를 저희 팀에서 개발한 플랫폼을 통해 서비스 노출 시스템이 받아 가도록 안내하거나, 직접 실시간 API를 개발해서 서빙하기도 합니다.
이렇게 만들어진 기능들은 다시 저희 시스템을 통해 데이터가 수집되고 분석되며, 이후 기능 개선으로 이어지는 순환 구조를 가지게 됩니다.
성장에 관한 경험
우아한형제들에서 경험했던 것 중에서 가장 기억에 남는 에피소드를 이야기 해주세요.
‘배민장부’ 서비스에는 사장님들에게 매일 리뷰 감성분석 통계를 제공하는 기능이 있습니다.
저희 실 데이터 과학자 동료가 오랜 기간 딥러닝을 활용한 자연어처리 모델을 개발하여 사용자 리뷰의 긍정/부정 여부를 예측할 수 있게 되었고,
이를 서비스에 통계로 제공하여 바쁘신 사장님들이 고객을 더욱 잘 이해할 수 있도록 돕고자 과제를 진행하게 되었어요.
당시에는 딥러닝이란 기술을 사내에서 처음 서비스로 도입하는 사례였기 때문에 정말 많은 고민과 준비를 했습니다.
시스템 구조, 모델의 예측 속도, 시스템 확장성 등 기술적인 요소들 외에도 예측한 데이터에 대한 검증 프로세스나
불확실한 결과가 나올 경우에는 어떻게 서비스에 노출할 건지 등 다양한 고민을 함께 하며 만들었습니다.
지금 돌이켜보면 부족했던 점도 많았지만, 유사 프로젝트들이 사내에서 빠르게 진행될 수 있는 좋은 밑거름이 되었고, 무엇보다 기존에는 제공하지 못했던 유형의 가치를 고객들에게 새로 제공했다는 점에서 가장 기억에 남습니다.
역량에 대한 생각
우아한형제들의 데이터 엔지니어가 되기 위해서는 어떤 역량이 필요할까요?
데이터 엔지니어의 채용 과정에도 참여하고 있어서, 제가 고민해 본 질문인데요.
현재 데이터서비스실 내의 여러 팀이나 파트 내에서 분업화되어 운영되고 있어 맡은 업무 유형에 따라서 필요한 역량도 조금은 달라질 수 있겠지만, 공통적으로 데이터 엔지니어 직군으로써 필요한 역량들을 말씀드릴게요.
첫째로, 데이터의 특성과 흐름을 명확하게 이해할 수 있어야 합니다.
저희 서비스는 배달이라는 고유한 도메인을 가지고 있고, 모든 서버 시스템이 MSA로 구성된 만큼 복잡도가 다소 높습니다.
데이터를 잘 이해할수록 최적화된 데이터 파이프라인을 개발할 수 있고, 특히 불필요한 개발 요소를 쉽게 제거할 수 있습니다.
여기서 면접 팁을 드리면, 인터뷰 과정에서도 배달 도메인에 대한 이해보다는 기존에 다뤄오신 데이터에 대한 이해도를 검증하고 있습니다.
둘째로, 빅데이터 처리 기술에 대한 충분한 이해도가 필요합니다.
다양한 데이터와 이슈를 다루기 위해서는 저희가 활용하는 기술에 대한 이해도와 경험이 중요합니다.
기본적으로는 Hadoop, Spark 환경에 대한 이해도를 기반으로 다양한 데이터와 이슈를 다루는 업무가 많습니다.
그 외에도 Kafka, Presto, Structured Streaming, Airflow, Tensorflow 등 다양한 기술 스택이 업무에 활용되는데요.
꼭 동일한 기술이 아니더라도 유사한 방식의 데이터 인프라 및 파이프라인 개발 경험과 이해도가 요구됩니다.
AWS 클라우드를 주력으로 활용하지만, On-premises로 구축한 클러스터도 하이브리드로 운영하기 때문에 관련한 지식도 중요하게 생각하고 있습니다.
마지막으로, 커뮤니케이션 능력이 중요합니다.
어떤 업무를 맡아 진행하든 항상 여러 부서와 소통하고 함께 만들어가는 편입니다.
비개발직군과 소통하는 업무도 많고, 같은 개발직군이라도 빅데이터 처리에 대한 설명이 필요한 경우도 있습니다. 복잡한 영역을 다루는 만큼 쉽고 명확한 의사소통 역량이 필요합니다.
우아한형제들의 개발문화
우아한형제들의 개발 문화를 자랑해 주세요!
회사 내에서도 정말 다양한 개발팀이 존재하다 보니 팀마다의 고유문화도 조금은 다를 수 있습니다.
다만 제가 우아한형제들에 합류하고 항상 일관되게 느끼는 점이 있는데요. 우아한형제들의 개발자들은 항상 변화에 적극적으로 대응하고 시스템을 개선하고자 노력합니다.
그리고 이를 위한 학습과 성장에 대한 욕심도 정말 강합니다.
배달의민족은 벌써 오픈한지 10년이 지난 서비스입니다. 하지만 서비스 측면에서도, 기술 측면에서도 정말 많은 변화가 빠르게 이루어지고 있어요.
입사했던 3년 전과 비교하면 가끔 같은 회사의 시스템이 맞는지 의구심이 들 정도입니다.
데이터 조직에 소속되어 있으면 전체적으로 서비스와 시스템들이 어떻게 변하는지, 개발자들이 어떤 고민과 논의를 하는지 직접 보고 듣게 되는데요.
누가 시키지 않아도 늘 열정적으로 함께 고민하고 만들어나가는 동료들의 모습을 쉽게 볼 수 있습니다.
그리고 그 과정에서 학습한 내용들을 전체 기술 조직에 공유하는 노력도 게을리하지 않습니다.
개발자로서의 당연한 모습이라고 이야기할 수도 있겠지만, 수백 명의 개발자들이 함께하는 조직에서 이렇게 한결같은 모습을 유지하는 건 쉽지 않다고 생각합니다.
서비스의 빠른 성장도 개발자들이 이런 문화를 유지할 수 있는 큰 원동력입니다.
코로나 이전에도 저희 서비스는 역대 최고 트래픽을 자주 갱신하고 있었고, 매년 더 높은 수준의 기술력이 요구되고 있습니다.
제가 맡고 있는 시스템도 입사 당시와 비교하면 10배 이상의 처리 성능을 필요로 하는데요. 결국 서비스의 성장이 개발자들의 성장을 요구하기도 합니다.
이런 상호보완적인 관계가 우아한형제들의 개발 문화를 함께 만들어간다고 생각합니다.
마무리하며
선구님과 같은 데이터엔지니어로서의 커리어를 계획하는 분들에게 응원의 한 말씀 부탁드립니다.
제가 구직자 입장이었던 시절에도 데이터 엔지니어라는 직군은 각 회사에서 어떠한 일을 어떻게 하는지 정보를 찾기가 어려운 편이었습니다.
회사에서 채용을 하는 입장이 되어서도 채용공고나 짧은 인터뷰 시간에 충분한 설명을 드리지 못하는 점이 늘 아쉬웠는데요.
이번 기회를 통해서 지원자분들에게 조금이나마 도움이 되길 바래봅니다.
종종 업계 후배들에게 이런 질문을 받습니다.
“어느 정도 크기의 데이터를 다뤄봐야 배민에서 데이터 엔지니어로 충분할까요?”
저도 ‘빅데이터’라는 표현을 종종 사용하지만 사실 그 정의에 대해서는 논란의 여지가 많습니다.
업계에는 우아한형제들보다 더 큰 데이터를 다루는 곳도 있고, 적은 곳도 있을 텐데요.
큰 데이터를 다룰수록 자연스럽게 하는 경험이나 고민도 있지만, 데이터 크기와 상관없이 고민하고 해결해야 하는 본질적인 문제들을 다루는 게 더 중요하다고 생각합니다.
특히 우아한형제들처럼 지속적으로 서비스가 성장하는 환경에서는 더욱 그렇습니다.
혹시라도 저와 비슷한 고민을 하시는 분이라면 지원하시면 좋겠습니다.
김민영 / iOS 개발자
민영님의 하루 일과 중 iOS개발팀의 리더로서의 업무를 소개해 주세요.
배민iOS개발팀에서 배달의민족 앱과 가게 사장님들이 이용하시는 배민주문접수앱을 맡고 있는 김민영입니다.
얼마 전부터 팀 매니징 역할을 수행하게 되면서 하루 일과가 조금 달라졌는데, 간략히 소개 드릴게요.
저희 팀은 슬랙으로 스탠드업 미팅 내용을 작성하며 하루를 시작합니다.
할 일을 정리하고 난 후에는 주로 팀 업무를 확인하거나 재정립하고, 앱 업데이트 사항들을 논의하는 기획 리뷰 미팅에 참석합니다.
기획서를 확인하면서 개발을 수행하거나 중간중간 협업 부서와 온라인 미팅을 하기도 하고, QA 기간 중에는 버그 티켓이 있는지 확인하고 처리합니다.
개발 업무와 코드 리뷰도 시간 날 때마다 하려고 노력하고 있습니다.
이 외에도 메일이나 슬랙을 통해 필요한 업무들을 확인하거나 코드 리뷰를 진행하고 배포된 앱을 모니터링하는 일을 수행합니다.
담당업무 및 협업과정
iOS개발자로서 타부서와의 협업은 어떻게 이루어지고, 그 과정에서 가장 중요하게 여기시는 것은 무엇인지 궁금합니다.
협업에서 가장 중요한 건 공동의 목표 달성을 위해 서로의 눈높이를 맞추는 과정이라고 생각합니다.
그래야만 효율적으로 시간을 관리하여 목표를 정확히 설정하고 달성할 수 있어요.
iOS 개발자는 주로 안드로이드, 서버, 기획, 디자인, QA 부서와 협업하고 있습니다.
배달의민족 앱의 경우 2주에 한 번씩 정기적으로 앱 업데이트와 릴리즈를 하고 있어서, 업데이트 버전에 따른 과제 논의를 위한 ‘어싸인데이’라는 회의를 매주 진행합니다.
이 회의에서 안드로이드, 서버, 기획, QA 개발자분들과 함께 백로그에 있는 업무들을 검토하면서 업데이트 일정을 논의합니다.
이후에 팀에 신규 프로젝트를 공유하고 적합한 분에게 업무를 분배해 담당자가 정해지면, 슬랙의 프로젝트 채널에 모여 일을 시작합니다.
프로젝트별 채널에는 해당 프로젝트를 진행하는 클라이언트, 백엔드 개발자, 기획자, 디자이너, QA 등 다양한 부서가 함께 참여하고 대부분의 논의는 이 채널에서 진행이 됩니다.
여기서 기획과 디자이너 동료들과 리뷰를 진행하면서 개발 일정을 협의하기도 하고 TC 리뷰나 백엔드 개발자와 스펙 협의 등을 하면서 개발하고 있어요.
개발이 끝난 단계에서는 QA 부서의 검증 과정을 거치게 되고 해당 기능이 앱으로 출시됩니다.
출시 후 보이는 건 앱 안에 작은 기능이고 고객에게 보다 좋은 서비스 경험을 제공하는 일 중에 하나지만
그 안에는 많은 동료들이 협업하며 이슈들을 함께 고민하고 해결해 나가는 과정이 있는 것 같아요.
그렇다 보니 다른 직무 담당자들과 눈높이를 맞추기 위한 커뮤니케이션 역량도 필요합니다.
커뮤니케이션을 잘 하기 위해서는 다른 부서의 업무 내용이나 일하는 방식에 대해서도 이해하려는 노력과 마음가짐도 물론 중요하지요.
과제 수행 과정
iOS 개발자로 일하시면서 도전적인 과제를 수행하신 대표적 사례를 소개해 주실 수 있나요?
작년에 배달의민족 메뉴 지면을 개편하면서 우버에서 만든 RIBs라는 프레임워크를 도입했던 것이 가장 기억에 남는 것 같습니다.
먼저 도입 배경을 소개 드리면, 배민 앱 iOS를 개발하는 인원이 불과 2년여 만에 두 배 이상으로 늘어나게 되었어요.
회사의 코드 리뷰 문화도 있지만 배민iOS개발팀 내부에서 정한 룰 중에 하나는 ‘코드 리뷰에서 2명 이상이 승인하는 경우에만 코드를 머지 할 수 있다’라는 것인데요.
이전에는 인원수가 많지 않아서 서로의 코드를 대부분 이해한 상태에서 코드 리뷰를 할 수 있었지만, 인원이 늘어나면서 팀 구성원들의 코드를 모두 이해하기가 힘들어졌습니다.
그렇다고 과반수가 동의하도록 룰을 바꾼다면 그로 인한 비효율도 고려 사항이었어요.
통일된 관점과 방식으로 작업을 해야 할 필요성이 느껴졌고, 또 여러 명이서 작업하는데 효율적인 구조도 필요했지요.
그래서 저희 팀에서 통일된 아키텍처 도입을 고민하기 시작했습니다.
우리 앱이 가지고 있는 구조와 특성을 고려하여 여러 가지 대안을 가지고 테스트해보면서 최종적으로 RIBs를 도입하기로 결정했고 그 첫 결과물이 바로 배달의민족 메뉴 지면이었죠.
사실 기존의 레거시 코드 위에서 RIBs를 도입하는 과정이 쉽지만은 않았습니다.
볼 수 있는 자료가 풍부하지 않은 상황이었기 때문에, 개발하면서 발생했던 대부분의 문제들을 스스로 해결해야 했습니다.
이 작업은 동료 개발자와 함께 진행했는데 재택근무를 하는 상황에서 원격으로 페어 프로그래밍 하며 하나씩 해결해 나갔고,
새로운 기술을 재택 상황에서도 빠르게 적용했을 때의 뿌듯했던 기억이 가장 오래 남는 것 같아요.
물론 앞으로 남은 과제들도 많이 있습니다. 프레임워크를 빠르게 도입할 수 있도록 하기 위해서 두 명이 먼저 선 진행을 하고,
이후에 진행되는 작업들은 그 둘이 각각 또 다른 동료와 함께 하면서 점점 업무 영역을 확대하려고 하고 있고 꾸준히 조금씩 진행하고 있습니다.
이 과정이 은탄환(Silver Bullet)이 아니라는것을 알고 있기 때문에 잘 운영할 수 있도록 앞으로도 지속적으로 노력해 나갈 생각입니다.
*은탄환: 소프트웨어 개발의 복잡성을 한번에 해소할 수 있는 마법같은 솔루션
기술에 관한 의견
우아한형제들의 iOS 개발자로서 익혀두면 좋은 기술을 몇 가지만 알려주세요.
현재 자신이 사용하고 있는 기술에 대해서 잘 이해하고 개발하는 것은 꼭 필요한 역량입니다.
iOS 개발자라면 사용 중인 언어(Swift)에 대해서 잘 아는 것이 무엇보다 중요한 것 같아요.
그리고 애플에서 매년 WWDC를 개최하고 OS 버전도 업데이트하는데,
여기서 발표된 새로운 기술이나 업데이트가 필요한 부분들을 파악하고 대응을 할 수 있도록 꾸준히 관심을 기울이는 것도 필요합니다.
그 외에도 필수적인 부분은 아니지만 앱을 운영해본 경험과 테스트나 배포 자동화에 대한 이해,
Reactive Programming이나 패턴에 대한 지식, 앱 최적화 경험이나 Localization에 대한 경험 등이 있으면 좋습니다.
대부분의 앱 개발은 서버, 기획, 디자인 파트 등 다양한 부서와 밀접하게 협력하며 업무를 진행하기 때문에 네트워크에 대한 기본적인 이해나 데이터 처리와 같은 부분의 지식도 필요해요.
마지막으로 사용자에게 전달되는 최종 단계인 UI 개발을 담당하고 있다 보니 언제나 꼼꼼하게 디테일을 놓치지 않고 개발하는 습관과
사용자 경험에 대한 관심을 가지는 것도 꼭 필요한 역량 중에 하나라고 여겨집니다.
우아한형제들의 개발문화
미래의 동료들에게 회사와 팀 자랑을 해주세요!
팀 자랑을 먼저 하고 싶어요. 무엇보다도 역량이 뛰어나고 성장하기 위해 끊임없이 노력하는 좋은 동료들과 함께 일하고 있다는 것이 가장 좋은 것 같아요.
다들 비슷한 것 같으면서도 각자 다른 특징들을 가지고 있는데, 그로 인해 서로를 채워주는 점이 있습니다.
내 옆의 동료들을 보면서 많이 배우기도 하고 감탄하기도 하고 끊임없이 자극이 되는 것 같아요.
회사에서 ‘우아톤’이라고 부르는 사내 해커톤을 재작년과 작년 두 번 개최했었는데요.
배민iOS개발팀 동료들이 함께한 팀이 모두 🏅대상🏅을 차지했답니다. 역시 우리팀! (웃음)
그리고 회사에 대해서는 제가 아이를 키우고 있는 워킹맘이다 보니 관련 복지에 초점을 맞춰서 말씀드릴게요.
먼저 임신기간 중 매일 두 시간씩 단축근무를 할 수 있고, 임신 주차에 따라 정기검진 휴가가 부여됩니다.
예비아빠의 경우에도 임신한 아내의 정기검진 일자에 맞춰 병원에 함께 다녀올 수 있는 휴가가 부여되고 그 외의 시간에는 재택근무 가능하고요.
법적으로 정해진 출산 전후휴가나 육아휴직은 물론이고 본인이나 아내가 출산을 하는 경우 산후조리원비도 300만 원이 지급됩니다.
만 2년 이상 근속하고 초등학교 2학년 미만의 자녀가 있는 구성원의 경우에는 1개월의 특별 육아휴직이 주어집니다. 물론 월급도 지급되지요.
또 자녀의 입학식, 졸업식, 운동회, 학예회, 재롱잔치에 참석할 수 있도록 학부모 특별 휴가도 있고
이외에도 본인, 배우자, 양가 부모, 자녀의 단체상해보험도 가입됩니다. 여러모로 일과 가정의 양립을 위한 많은 제도들이 시행되는 점이 정말 좋은 것 같아요.
마무리하며
iOS 개발자로서의 삶을 꿈꾸는 개발자 분들에게 응원의 한 말씀 부탁드립니다.
처음 개발을 시작했을 때는 공부하면서 배우는 과정이었기 때문에 정말 재미있었고 적성에 잘 맞는다고 생각했어요.
학교를 졸업하고 취업을 했는데 실제 직장인으로서 하는 개발은 책임감의 무게가 커져 스트레스도 받았습니다. ‘왜 더 잘하지 못할까’라고 자책도 많이 하게 되고 지치더라고요.
그래서 나아질 수 있는 업무 노하우와 방법을 고민하는 동시에 균형잡힌 일과 삶을 위한 나만의 스타일을 찾으려고 노력한 것 같아요.
일이나 공부를 하다 보면 당연히 지치고 힘든 순간도 찾아오는데요.
자신만의 노하우와 스타일을 찾아가다 보면 본인이 꿈꾸는 개발자의 삶을 살며 만족할 수 있을 거라 생각됩니다.
윤효정 / 안드로이드 개발자
현재 효정님이 우아한형제들에서 맡고 있으신 역할과 프로젝트를 소개해 주세요.
안녕하세요, 배민Android개발팀에서 배달의민족 안드로이드 앱과 배민주문접수 안드로이드 앱을 개발하고 있는 윤효정입니다.
배민주문접수 앱에 대해 소개드리면 배민 서비스를 이용하시는 가게 사장님들이 주문을 접수하고 잘 관리하실 수 있도록 지원하는 서비스입니다.
최근에는 배민Android개발팀 팀장을 맡게 되어, 신규 프로젝트의 기술검토부터 안정적으로 기능을 배포할 수 있도록 챙기는 역할을 하고 있습니다.
담당업무 소개
최근에 일하며 보람을 느꼈던 순간을 이야기 해주세요.
사실 프로젝트가 생성되는 단계에서 서비스 방향과 개발 방안에 대해 논의하고,
여러 프로젝트들이 병렬로 잘 수행되도록 관리하는 순간들이 모두 의미 있는 것 같습니다.
최근에 팀장을 맡게 되면서 개발 업무와 병행하는 플레잉 코치 역할을 하고 있는데요.
팀에서 어려운 과제를 수행하며 동시에 코틀린 변환, 리팩토링, 구조 개선 등의 실행 방안을 팀원들과 논의하고는 하는데, 저희 팀원 모두 능동적이고 실행 의지가 강한 탓에 일이 순조롭게 진행되는 편입니다.
이럴 때 저희 팀이 잘 운영된다는 생각에 보람을 느끼는 것 같아요.
또한 동료 개발자와 서비스 방향과 과제를 논의하는 과정에서 제가 제시한 의견에 대한 긍정적인 반응이 있을 때도 보람을 느낍니다.
한 번은 배민플랫폼실 TF에서 진행하는 큰 프로젝트에 주문접수앱 개선 업무를 담당했는데, 함께 일 한 동료로부터 감사 인사를 받았을 때 “신뢰받는 사람이구나”라는 생각에 뿌듯하더라고요.
함께 일하는 동료들에게 긍정적인 피드백을 받을 때 보람을 느끼고 또 제가 일을 즐겁게 하는 원동력이 되는 것 같아요.
마지막으로 안드로이드 개발 일을 할 때에도 보람을 느끼는 순간들이 많은데요.
배민앱에 주문내역 웹뷰에서 원인이 불명확해 오래 묵혔던 버그를 클리어하게 해결했을 때 잔잔한 만족감이 오래갔습니다.
개발자다 보니 잘 짜인 코드와 안정적인 서비스로도 심적 힐링이 될 때가 있는 것 같아요. (웃음)
기술 성장 과정
개발자 동료들과 함께 개발하고 성장하는 과정에서 안드로이드 개발자로서의 기술 습득은 어떻게 하셨는지요?
저는 좋은 시니어 개발자와 함께 일하면서 기술을 습득하고 성장한 것 같습니다.
처음에 신입으로 입사했을 당시에는 주니어 개발자지만 크고 작은 미션을 혼자서 수행하는 일도 있어서 많은 실패를 경험했어요.
개발자는 일정 내 기능을 구현하는 것이 최우선 목표이다 보니, 일정을 맞추는 것도 빠듯한 실력이어서 버그가 많았던 것으로 기억합니다.
회사가 성장하고 새로운 시니어 개발자와 코드 리뷰를 할 수 있는 기회들을 갖게 되면서 실패를 통해 배울 수 있는 환경에서 일할 수 있게 되었고, 그 과정에서 코드의 네이밍, 가독성, 역할 분리에 대한 고민을 하고 코드를 보다 간결하게 작성할 수 있게 되었습니다.
당시에 간결한 코드를 작성하기 위해 개발 서적을 대거 탐독했고, 사내에 다른 시니어 개발자가 이끌었던 스칼라 빨간책 스터디도 재미있게 참여했어요.
또한 코드 리뷰 프로세스에 시간이 소요되는 단점을 보완하고 개발을 효율적으로 하기 위한 다양한 시도와 노력이 있었는데요.
MVP+Repository 조합 패턴 형태를 도입하는 시기에 많은 개발자가 회사에 합류해 동료들과 unitTest 스터디를 함께 하면서 실무에 적용하기도 했어요.
이 패턴을 적용하면서 비즈니스 로직이 분리되긴 했지만, Presenter가 비대해질뿐더러 비지니스 로직의 재사용성이 떨어지는 것도 문제였지요.
레거시 코드에서는 운영 개선과 병행해서 시도하기 힘들었던 점을 보완하기 위해 시니어 개발자가 Android cleanArchitecture+RxJava2 를 채택했고, 팀원들과 스터디 하면서 기술 수준을 맞춰 나갔던 기억이 있습니다.
배민앱, 주문접수앱에 그 경험들을 적용하면서 개발 역량은 꾸준히 성장한 것 같아요.
잘 짠 코드를 많이 봐야지만 저도 더 좋은 코드를 짤 수 있다고 생각해요.
저희 팀원분들 대부분이 시니어 레벨이기도 하고 신규 API를 적용하고자 하는 부분에 있어서는 각자 검토하고 제안하세요.
서로 배울 수 있는 동료들과 함께 일하고 있다는 점에서 기술 습득을 위한 최상의 환경과 조건에서 일하고 있다고 생각합니다.
역량에 대한 생각
우아한형제들의 서비스 가치를 만들기 위해 안드로이드 개발자는 어떤 역량을 갖춰야 할까요?
동료와의 소통 과정에서 즐거움을 느끼고, 안드로이드 개발 업무에 진심이면 된다고 생각합니다.
이번 인터뷰를 하면서 들었던 생각은 “나는 안드로이드 개발자이고, 어떤 개발이든 상관없이 잘할 수 있다”라는 자신감도 좋지만, 배민앱과 서비스에 대한 호기심과 관심에서 나오는 개선 의견이 있는 분이면 더 좋을 것 같아요.
사용자로서 우아한형제들 서비스에 대한 생각들 예로들면 ‘이 기능은 왜 도입을 안 하고 있지?’와 같은 관심이 있어야지만 서비스에도 새로운 가치를 만들 수 있다고 생각합니다.
협업하는 사람들과 지속적인 커뮤니케이션을 하는 것 또한 서비스 가치를 만들기 위해서는 꼭 필요하다고 믿습니다.
제가 믿는다고까지 이야기하는 이유는 하나의 과제 또는 미션을 수행할 때는 기획, 디자인, 서버, iOS, QA 직무를 맡는 동료들과도 긴밀하게 커뮤니케이션을 하면서 과제를 수행하게 되는데요.
각 담당자들의 수행 결과물 즉 현상으로 전달되는 것을 그대로 이행하는 데만 그치면 당초의 의도와 결과가 다르게 일이 진행될 확률이 경험상 높았어요.
한 프로젝트 안에서 각 파트가 가진 목표가 있지만 저변의 의도를 파악하고자 한다면 확실히 모두가 프로젝트를 바라보는 관점이나 목표가 분명해집니다.
과제 의도와 다르게 목표가 설정되는 경우에는 피드백을 통해 디벨롭해 나가야 된다고 생각하고요.
이런 일련의 조율 과정을 유연하게 커뮤니케이션하고 즐길 수 있어야 할 것 같아요.
기술 역량에 대해서도 스스로가 n개의 스킬을 보유했다는 사실도 중요하겠지만 그보다는
서비스 개발을 하면서 어떤 상황적, 개발적 고민이 있었고, 어떻게 극복하고 해결했는지 등의 반복된 훈련을 통해 얻은 판단력이 핵심인 것 같아요.
더불어 안드로이드 개발 트렌드에 대해 민감할 필요는 없지만, 추세나 흐름에 대해서도 놓치지 않으셨으면 좋겠어요.
우아한형제들의 개발문화
‘배민Android개발팀’만의 문화와 매력은 무엇인가요?
재택근무 초반에 생성한 구글 meets 채널이 있는데 저희 팀에서는 ‘티타임방’이라 불러요.
티타임방을 상시로 오픈해 팀원 간의 업무 공유를 하기 위한 목적으로 운영된다는 점에서 이점이 크다고 생각합니다.
저희는 프로젝트가 병렬로 진행되기 때문에 개발자 간에 즉각적인 논의가 필요할 때가 있는데, 이때 주저하지 않고 대화를 시작할 수 있는 효과가 있어요.
물론 여기서 일 얘기만 하는 건 아니고 사담도 나누다 보니 코로나로 인해 격리된 느낌을 해소해 주기도 하고, 한 공간에 모여서 일한다는 느낌도 들어 팀원들간 결속력을 높이는 것 같아요.
그렇다 보니 티타임방이 의무가 아닌데, 팀원들이 돌아가면서 거의 상주해 있어요. 공동카페 운영의 느낌이죠.
이렇듯 티타임방이 자연스럽게 운영되는 것만으로도 팀원들의 성향과 팀 분위기가 어떤지 아시겠죠? (웃음)
마무리하며
우아한형제들 개발자로서 얻을 수 있는 한 가지가 있다면 무엇일까요!
좋은 동료, 업무 환경, 복지, 개발문화 언급할 수 있는 것들이 많겠지만 한 가지를 꼽아보자면
나를 포함해 가족, 친구, 지인이 일상생활에서 늘 사용하는 서비스 앱을 A부터 Z까지 개발할 수 있다는 사실 그 자체가 매력적이라고 생각합니다.
타 기업의 경우 앱 개발 파트가 구분되어서 경험해 볼 수 있는 도메인이 제한적일 수도 있는데 비해, 우아한형제들의 경우는 모든 도메인에 나의 노력과 손때(?)가 묻어있다는 것이죠.
서비스 개발자로서 도전 과제들이 많은 만큼 성장폭도 크고 자연스레 서비스에 대한 오너십 또한 강해집니다.