(주)우아한형제들

직무인터뷰 > 시스템개발

우아한형제들 백엔드 개발자

2021-02-25 09:50 조회수 3,567 Tag #우아한형제들 #배달의민족 #백엔드개발자

우아한형제들

송정훈 / 백엔드 개발자

 

 

우아한형제들에서 정훈님의 주요 역할과 일에 대해 소개해 주세요.

배민주문서비스팀의 백엔드 개발자로서 주문시스템의 개발과 운영 전반을 담당하고 있는 송정훈입니다. 먼저 제가 담당하고 있는 주문시스템에 대해서 좀 더 자세하게 설명해 드릴게요.

배달의민족에서 주문은 장바구니에서 “주문하기”를 누르셨을 때부터 시작됩니다. 사용자 입장에서 주문서를 작성하는 과정부터 결제 이후 보시게 되는 주문 완료 화면까지가 배달의민족 주문 서비스에 해당됩니다.

주문시스템은 이러한 서비스를 제공하고 체결된 주문을 다른 시스템에 전달하여 “좋은 음식을 먹고 싶은 곳에서” 받아보실 수 있도록 도와주는 시스템입니다. 우아한형제들이 성장하면서 주문이라는 도메인의 성격도 다양해지고 복잡해지고 있어요. 이렇게 복잡해진 주문을 시스템에 잘 녹여내고 안정적으로 운영될 수 있도록 설계하고 개발하며, 나아가 사용자들이 더 나은 주문 경험을 할 수 있도록 개선하는 역할을 하고 있습니다.

Interview 01

담당업무 소개

 

 

정훈님은 일하며 언제 보람을 느끼시나요?

저희 팀은 기획자와 백엔드, 프론트엔드 개발자가 모여서 함께 일하는 목적 조직입니다. 다양한 직군이 공통된 업무 목표와 방향성을 가지고 일을 할 수 있다는 장점을 가지고 있죠. 팀에서 맡은 과제는 1년 또는 반기, 분기 단위로 주문 서비스의 기능 개선을 위해 선정하고 기획에서 과제에 대한 구체적인 목표와 요구 사항을 정리하면 개발자들이 업무별로 개발 과제를 세분화하여 개발을 진행하게 됩니다.

그리고 코드 공유 문화를 실천하고 있어서 개발 단계에서 나오는 설계와 코드들은 반드시 팀 동료들과 함께 리뷰하는 과정을 거치게 되는데요. 이 과정에서 오류를 사전에 발견할 수 있는 효과도 있지만, 그보다 제가 더 긍정적으로 바라보는 것은 조직에서 함께 짠 코드에 대해 모두 책임감을 가지고 관리한다는 점입니다.

주문 서비스 과제 외에도 배달의민족은 하루에 수백만 건의 주문이 시스템으로 처리되기 때문에 주문시스템 개선 과제 역시 팀의 업무와 역할에 상당 비중을 차지하고 있습니다. 잠깐의 장애 상황에도 많은 배민 서비스 사용자와 사장님들이 큰 불편을 겪게 되는 만큼, 무엇보다 시스템의 안정성을 높이기 위한 과제들이 많은 편이고 시스템 개선과제는 개발파트를 중심으로 진행되고 있어 개발자들간에 많은 아이디어를 제안하면서 주도적으로 시스템을 개선해 나가고 있습니다.

사실, 배달의민족 서비스에서 주문은 민감하고 주요한 서비스이기 때문에 최대한의 영역에서 조금이라도 더 면밀하게 시스템을 모니터링하고 장애를 사전에 감지하여 예방하고자 하고 있는데요. 그럼에도 불구하고 장애가 발생했을 때는 같은 장애가 재발하지 않도록 반드시 원인을 분석하고 수정해나가는 과정을 거치고 있습니다.

실제로 작년에는 주기적으로 감지되는 시스템 이상 증상을 몇 주에 걸쳐 다른 팀과 협업해 원인을 분석하고 해결한 경험도 있었어요. 이러한 모든 경험들이 제 성장의 밑거름이 되고 있고, 나아가 서비스와 시스템을 더 단단하게 만든다는 점에서 큰 보람을 느끼고 있습니다.

Interview 02

기술에 관한 의견

 

 

우아한형제들에서 주로 사용하시는 백엔드 기술 스택과 개인적으로 선호하시는 기술에 대해 말씀 부탁드립니다.

우아한형제들에서 사용되는 기술 스택은 시스템별로 조금씩 차이가 있는데요. 팀원들이 함께 생산성, 신뢰성, 유지 보수성 등 다양한 관점에서 검토하여 결정하고 있습니다. 기본적으로 주문시스템을 비롯한 배달의민족을 구성하는 많은 시스템은 Java와 Spring + JPA를 사용하여 개발되고 있습니다. 따라서 배달의민족 백엔드 개발자 지원을 생각하고 계신다면 위 기술 스택에 대해서는 꼭 학습하시기를 추천해 드립니다.

데이터베이스는 MySQL과 같은 RDBMS를 사용합니다. 하지만 보통 하나의 저장소만을 사용하지는 않고 여러 형태의 폴리글랏 저장소를 사용하게 됩니다. 주문시스템도 더 빠르고 안정적인 서비스 제공을 위하여 Redis와 Elasticsearch를 사용하고 있으며 그 외에 다른 NoSQL 데이터베이스의 도입도 적극적으로 검토하고 있어요.

서비스가 급격히 성장하고 데이터 규모가 커짐에 따라 데이터를 적절한 형태로 설계하고 분산처리하는 데 많은 노력을 기울이고 있습니다. 여러 시스템 간 통신에는 HTTP API와 비동기 메시지 큐가 주로 사용되고 있습니다.

비동기 메시지를 주고받는 과정에서는 주로 AWS에서 제공하고 있는 SNS와 SQS를 많이 사용하는데요. 최근에는 SRE 조직에서 구축 중인 Kafka 클러스터를 사용하는 팀들도 늘어나고 있습니다. Java 외에도 Kotlin을 사용하는 팀들도 늘어나고 있고, 주문시스템도 API Gateway 구축에 Kotlin과 Coroutine을 활용한 논블로킹 모델을 사용하여 높은 트래픽을 안정적으로 처리하고 있습니다. 시스템을 운영하는 과정에서 로그 수집과 모니터링이 필수적으로 필요한데요.

전사적으로 Elastic Stack을 사용한 로그 수집과 Cloudwatch, Grafana, Slack을 사용한 모니터링 시스템이 구축되어 있어 편리하게 사용이 가능합니다. 덕분에 개발자는 시스템에 대한 문제를 사전에 감지하고 해결하는 방법을 찾는데 역량을 집중할 수 있습니다.

Interview 03

역량에 대한 생각

 

 

백엔드 개발자로서 좋은 성과를 만들기 위해서는 어떤 역량과 자질이 필요하다고 생각하시나요?

좋은 코드, 좋은 아키텍처를 만드는 능력과 함께 좋은 커뮤니케이션 능력이 중요합니다. 좋은 코드를 만든다는 건 개발자들에게는 꼭 필요한 능력입니다. 좋은 코드라는 건 상황마다 다르지만, 일반적으로 좋은 설계를 바탕으로 간결하고 가독성이 좋으며 유지 보수성이 좋게 작성된 코드를 이야기합니다.

한국에서도 유명한 엉클밥의 클린코드와 같은 도서들은 코드 품질에 대한 좋은 인사이트를 줍니다. 만약 읽어보지 않으셨다면, 꼭 한번 읽어보시기를 추천드립니다. 사실 코드에 관해 이야기하는 많은 책은 좋은 코드를 만들기 위한 양분이 되어줄 수 있지만, 거기에서만 그치면 소용이 없을 거예요. 가능한 많은 코드를 읽어보고 꾸준히 연습하는 자세가 뒷받침되어야 좋은 개발자로 성장할 수 있다고 생각합니다.

어느 정도 성장한 개발자들에게는 시스템이나 아키텍처 설계에 대한 능력이 중요해집니다. 좋은 아키텍처는 시스템에 높은 신뢰성과 가용성을 보장하며 확장과 변경을 용이하게 합니다. 이러한 능력은 개발자의 충분한 경험과 깊은 통찰을 통해서 성장하는 경우가 많고, 시스템에 대한 깊은 이해가 필요하기 때문에 개인의 학습과 연습의 과정이 뒷받침되어야 합니다.

마지막으로 대부분의 업무는 협업을 통해서 진행되니만큼 원활한 커뮤니케이션 능력 역시 매우 중요합니다. 백엔드 개발자의 커뮤니케이션은 같은 직군에서만 이뤄지는 게 아니며 프론트엔드, 인프라, 기획, QA 등 다양한 직군들과도 이루어지게 되니만큼 커뮤니케이션 대상에 따라 다양한 맥락에서 효율적인 의사소통을 할 수 있어야 합니다.

특히 많은 개발자가 기술 영역을 벗어난 부분에 대해서는 소홀히 여기는 경우도 많은데요. 서비스 개발자들은 기획자와의 협업이 중요하고 그 과정에서 원활한 의사소통을 위해 자신이 담당하고 있는 도메인에 대해 학습하고 이해하려는 자세가 필요합니다.

Interview 04

우아한 형제들의 개발문화

 

 

우아한형제들의 개발 문화와 배민주문서비스팀만의 매력은 무엇인가요?

입사하면서 느낀 가장 큰 장점이자 복지는 훌륭한 개발자 동료분들이었습니다. 저희 팀을 비롯하여 우아한형제들에는 앞에서 말씀드렸던 좋은 코드, 좋은 아키텍처, 좋은 커뮤니케이션 능력을 갖춘 개발자들이 많이 있어요.

단순히 좋은 개발자들이 많다는 것뿐만 아니라 자신과 팀의 경험, 노하우를 공유하는 문화를 같이 만들어 나가고 있습니다. 이렇게 좋은 멘토와 동료들과 함께 일한다는 것은 개발자로서 성장해 나가는데 매우 좋은 환경을 가지고 있는거라 생각합니다.

저희는 작년부터 코로나19로 인해서 전사 구성원이 재택근무를 하고 있는데요. 처음에는 어색하기도 하였고 불편한 부분도 많았지만, 지금은 모두 리모트 근무 환경에 익숙해졌고 좋은 성과도 내고 있습니다. 온라인으로 코드 리뷰도 꼼꼼하게 진행하고 있고요. 논의가 필요한 부분이 있다면 망설일 필요 없이 언제든지 화상으로 미팅을 요청하고 있습니다.

얼마 전에는 회사에서 이런 재택근무를 코로나 종식 후에도 지속해서 운영한다는 발표가 있었는데요. 개인적으로 재택 기간 동안 아이들 어린이집도 보내고 여유 있게 근무를 시작하던 입장에서 이런 제도가 생긴 걸 무척이나 기쁘게 생각하고 있어요.

하지만 재택 기간이 길어지면 팀원 간에 대화도 줄어들고 서먹해질 우려도 있을 겁니다. 이러한 이유로 저희는 온라인상에서 같이 자주 이야기하는 문화를 만들어 가고 있습니다. 특히 최근에는 주기적으로 티타임을 가지고 있는데, 이 시간에는 팀 운영비를 사용하여 구매한 간식을 즐기며 특별한 주제 없이 다양한 이야기를 서로 나누고 있습니다.

과제가 종료될 때마다 회고 시간을 가지며 서로 간의 업무 수행 방식에 대해서도 논의하는 시간을 통하여 팀이 더 나은 방향으로 나아간다는 느낌을 받고 있습니다.

 

우아한형제들의 백엔드 개발자가 되고자 하는 분들에게 응원의 한 말씀 부탁드립니다.

배달의민족은 꾸준히 지속해서 성장하는 서비스입니다. 특히 주문시스템을 통하여 일어나는 거래량은 매년 두 배 가까이 성장하고 있는데요. 이러한 이유로 저희 팀에는 다른 커머스에서 만나기 힘든 대량의 트래픽과 데이터 규모를 수용하기 위한 여러 가지 도전과제들이 주어지고 있습니다.

그리고 우리는 소수의 스타 개발자에 의지하기보다는 팀원들이 주도적으로 같이 고민하고 논의하는 과정을 통해 문제를 해결해 나가고 있습니다.

“다 때가 있다”

지금 저희와 함께하신다면 좋은 동료들과 함께 개발자의 도전 의식을 불러일으키는 미션들을 끊임없이 만나보실 수 있습니다. 성장에 목말라 있는 개발자분들과 함께 할 수 있기를 기대합니다.

 

>> 우아한형제들 기업정보 보러가기

>> 지금 채용 중인 IT 직무 보러가기

잡코리아 좋은일 연구소 취재기자 이영주 lkkung11@jobkorea.co.kr

잡코리아 좋은일 연구소
취재기자 이영주