딜리셔스 개발팀 연대기

안녕하세요, 패션 도소매 거래 No.1 플랫폼 신상마켓을 만드는 딜리셔스입니다.

매일 약 7만 명의 패션 사업자가 접속하는 신상마켓. 보이지 않는 뒷단에서부터 국내 1위의 패션 도소매 거래 플랫폼을 만들어가는 딜리셔스의 개발팀은 어떻게 일하고 있을까요? 연구개발센터를 총괄하는 이용화 CTO가 딜리셔스의 개발팀 연대기를 정리해주었는데요. 급속도로 성장 중인 딜리셔스 연구개발센터의 생생한 이야기를 공개합니다.


2019년 8월, 딜리셔스에 합류하기로 결심하고 처음 사무실을 찾았을 때 두 가지 점에서 놀라움을 느꼈습니다. 하나는 넓고 쾌적한 라운지 분위기였고(스타트업 경험이 없었던 저는 좁아터진 공유 오피스의 열악한 환경을 각오하고 있었습니다), 또 하나는 딜리셔스의 핵심 서비스 ‘신상마켓’의 규모가 생각보다 방대하단 것이었습니다.

‘신상마켓’은 동대문의 도매와 소매 사업자를 연결하는 커머스 플랫폼으로 대한민국 도매의 90%와 소매의 절반 이상이 사용하고 있습니다. 소매 사업자가 사용하는 마켓플레이스와 도매 사업자의 판매자 센터를 각각 안드로이드와 아이폰, 그리고 웹까지 클라이언트로 제공합니다. 올해 5월 기준 패션/의류 부문 앱 사용 시간에서 내로라하는 B2C 서비스에 이어 5위를 기록 하고 있으며, B2B이지만 웬만한 B2C 패션 앱에 비해 많이 사용되고 있는 압도적인 플랫폼입니다. 전통적인 오프라인 시장이었던 동대문은 ‘신상마켓’으로 인해 온라인화되고 있으며, 특히 최근 코로나로 인해 그 속도가 더욱 빨라지고 있습니다.

동대문을 중심으로 하는 패션 커머스를 플랫폼화 하기 위해 딜리셔스의 개발팀은 새로운 기능을 개발하고 기존의 구조를 고도화시키고 있으며, 이 과정에서 합류 당시 단지 17명이었던 개발팀은 전문적인 역할로 나누어진 60명 규모의 조직으로 성장했습니다. 이 포스트에서는 지금까지 딜리셔스 개발팀이 성장해 온 길을 간단히 소개하도록 하겠습니다.

레거시에서 관리 가능한 서비스로

기존의 ‘신상마켓’은 2013년 정도부터 (개발자 출신) 대표님의 손길을 거친 레거시 PHP 어플리케이션으로 구성되어 있었습니다. 백엔드 API와 뷰가 같은 프로젝트에 들어가 있었고, 특별한 히스토리가 있어 복잡해진 비즈니스 로직이 다수 들어가 있는 매우 관리하기 어려운 플랫폼이었습니다. 로직 하나 수정하려면 PHP 코드를 꼼꼼히 다 뜯어봐야 했었고, 이 과정에서 예상치 못한 사이드이펙트로 문제가 발생한 적도 있습니다.

운이 좋게도 딜리셔스는 경험 많은 백엔드 개발자들을 여럿 영입할 수 있었습니다. 이들을 중심으로 레거시에서 루비 온 레일즈(Ruby On Rails)로 API 서비스를 분리하는 프로젝트를 진행했습니다. 짧은 시간 내에 집중적으로 리소스를 투여하여 큰 장애 없이 성공적으로 API 컨버팅을 마무리 하였으며, 이후 기존보다 높은 생산성으로 API 서버를 개발/관리할 수 있게 되었습니다.

(참고 : 레거시 코드 및 시스템 리팩토링 – ABARA)

API 서버 개편과 발맞춰 웹 역시 PHP 뷰에서 SPA(Single Page Application)로 변환 작업을 시작하였습니다. 기존 JavaScript를 재활용하기 쉬운 Vue.js를 프레임워크로 선택하였으며, 현재는 마켓플레이스 및 판매자 센터 전부를 SPA로 변환하여 운영 중입니다. 이후 신규 프로젝트는 Vue.js와 React.js 중에 상황에 맞는 프레임워크를 선택하는 것을 원칙으로 하고 있습니다.

모바일의 경우도 마찬가지입니다. ‘신상마켓’은 Java로 구현한 안드로이드 앱과 Objective C로 구현한 아이폰 앱을 가지고 있었는데, 클라이언트에 들어가 있는 비즈니스 로직도 많고 심지어는 이 로직이 안드로이드와 아이폰의 구현이 다른 경우도 있었습니다. 모바일 팀이 제대로 구축되기 시작하면서 로직 개편과 동시에 안드로이드는 Kotlin으로, 아이폰은 Swift로 컨버팅하는 작업을 시작했습니다.

안드로이드는 같은 Java 베이스이기 때문에 프로젝트를 진행하면서 점진적인 변환이 가능했지만, 아이폰의 경우 코드베이스가 아예 다르기 때문에 집중적으로 시간을 투여하여 컨버팅 작업을 수행하였습니다. 현재는 아이폰의 경우 모든 서비스를 Swift 앱으로 제공하고 있으며, 안드로이드는 대부분의 코드가 Kotlin으로 대체되어 머지 않아 100% 변환될 것으로 예상됩니다.

(참고 : iOS 컨버팅의 추억)

AWS 기반 클라우드 네이티브 인프라

처음에 ‘신상마켓’은 국내 업체의 클라우드 서비스에서 인프라 구성을 하였습니다. 작은 규모일 때는 큰 문제가 없었지만, 서비스가 성장하며 트래픽이 늘어나는 환경에서는 운영 안정성을 담보하기 어려운 부분이 있었습니다. 이에 사용 편의성 및 안정성 측면에서 검증된 AWS로 인프라를 이전하기로 결정했으며(이 부분은 합류 전에 결정된 부분입니다), DBMS를 시작으로 어플리케이션 서버 및 ElasticSearch, Redis 등의 서비스도 AWS로 이전하게 되었습니다.

동대문 시장은 특이하게 매년 8월 두 번째 주 정도에 1주일 간의 ‘여름 휴가’가 있습니다. 딜리셔스는 해당 기간 중에 직원들에게 ‘동대문 휴가’를 부여하고 있는데, 사용자가 거의 없는 주간이라 서비스 점검을 걸기에 좋은 시기입니다. AWS 이전 작업은 이런 기회를 효과적으로 이용해 진행했습니다. 현재는 모든 서비스가 AWS의 다양하고 편리한 기능을 사용해 적은 리소스로 효율적으로 운영되고 있으며, 신규 시스템 개발 시에는 기본적으로 AWS 기반의 클라우드 네이티브 아키텍처로 설계를 하고 있습니다.

유연하고 합리적인 광고 플랫폼

‘신상마켓’에서 가장 인기가 있는 서비스라고 한다면 의외로 광고가 상위에 꼽힐 것입니다. 상거래 목적이 확실한 사용자들이 이용하는 서비스다 보니 광고 효율이 상당히 좋으며(“평균” 3% 이상의 CTR을 보입니다), 가격 역시 그렇게 비싸지 않아 광고를 하고 싶어도 자리가 없어 못하는 경우도 생기곤 했습니다.

사실 이렇게 공급보다 수요가 넘치는 상황은 기존 광고의 형태가 거의 모두 구좌형 광고라서 그렇기도 했습니다. 정해진 구좌가 있고 선착순으로 이를 구매할 수 있는 구조에서는 광고를 하고 싶어도 할 수 없는 수요자가 나올 수밖에 없었습니다. 이에 DSP(Demand-Side Platform)와 SSP(Supply-Side Platform) 개념을 가진 애드익스체인지(Ad Exchange) 구조의 광고 플랫폼을 새로 구현하여, 실시간 입찰(RTB, RealTime Bidding)을 통해 광고가 노출될 수 있도록 하였습니다. 광고주는 입찰 전략을 세워 광고 노출을 꾀할 수 있고, 광고 슬롯이 부족하게 되면 유연하게 지면을 확장할 수 있는 기반을 만들었습니다.

새로 구현한 광고 플랫폼은 ‘신상애드’라는 이름으로 서비스되고 있으며, 머지 않아 ‘신상마켓’의 모든 광고는 ‘신상애드’로 통합 관리할 수 있도록 할 계획입니다.

잘 흘러 갑니다 – 데이터 플랫폼

딜리셔스는 예전부터 데이터를 중요하게 생각해서 ‘신상마켓’ 서비스에서도 많은 로그를 남기고 있었습니다. 하지만 이런 로그들을 파이프라인에 따라 효율적으로 처리할 수 있는 데이터 플랫폼이 없어, 기껏 수집한 데이터를 잘 활용하기가 어려웠습니다.

이에 데이터 엔지니어로 구성된 조직을 구성하고 데이터 플랫폼을 구축하기 시작했습니다. 클라이언트의 로그를 AWS Kinesis를 통해 수집하고 이를 데이터레이크(S3) 및 데이터마트(MySQL)로 보내 저장하는 기본적인 파이프라인을 구현했으며, 최근에는 OLTP와 OLAP 쿼리가 같이 가능한 Clickhouse를 이용한 실시간 데이터 플랫폼을 구축하여 ‘신상애드’ 서비스에 적용하였습니다. 이후 DW 및 데이터 분석가들이 쉽게 사용할 수 있는 분석 시스템 역시 갖춰 나가려 하고 있습니다.

(참고 : NARA(Non-Aggregation Real-time Analytics) 시스템 개발기)

우리도 AI 합니다

‘신상마켓’은 동대문에서 만들어지는 상품이 가장 많이 등록되는 플랫폼입니다. 하지만 동대문은 아직 오프라인 시장의 특성을 많이 갖고 있어 소매 사업자가 구매를 결정하기 위해 필요한 정보들이 부족하거나 정제되어 있지 않은 경우가 많습니다. 소매 사업자에게 원하는 상품을 효율적으로 전달하기 위해 알고리즘 기반의 상품 노출 및 추천 서비스를 제공할 필요가 있으며, 이를 위해 AI 기술을 연구하고 서비스화 하는 팀을 구성하였습니다.

딜리셔스에서는 자체 학습용 서버(NVIDIA RTX3090 x8)를 갖추고 있으며, AWS SageMaker를 활용하여 이미지를 통한 상품 검색 등의 서비스를 제공하고 있습니다. 향후 이미지로부터 상품 속성 자동 태깅 등의 기술을 통해 상품 정보를 풍부하게 하고 소매 사업자별 개인화 추천 등의 고도화된 서비스까지 연결하려는 계획을 가지고 있습니다.

운영은 곧 경쟁력

개인적으로 신규 개발에 못지않게 중요한 것은 운영이라고 생각하며, 오히려 신규 개발은 안정된 운영 위에서만 가능할 수 있다고 생각하는 편입니다. 합류 당시 ‘신상마켓’은 빈번한 장애를 겪고 있었는데, 특히 동대문 시장의 특성상 도매 사용자의 활동이 활발해지는 오후 10시부터 서비스 불안정성이 심해지고는 했습니다.

언제 일어날지 모르는 장애에 대비하느라 개발자가 밤새 대기하는 것은 비효율적입니다. 이에 AWS CloudWatch를 기본으로, Sentry(에러 모니터링) 및 New Relic(성능 모니터링) 등의 솔루션을 도입하고, 문제 발생 시 빠르게 파악하고 대처할 수 있는 프로세스를 함께 구축했습니다. 동시에 발생한 장애에 대해서 책임을 묻기보다 원인을 파악하고 같은 문제가 다시 발생하지 않도록 하기 위해 장애 회고 프로세스를 도입해 지금까지 효과적으로 운영해 오고 있습니다.

우리는 아직도 성장 중

최근에는 프로그래머스와 함께 썸머 인턴십 과정을 진행하였습니다. 370명 정도의 지원자들이 딜리셔스를 선택해 주셨고, 2주 간의 선발 과정을 통해 9명의 인턴이 딜리셔스 개발팀의 일원으로 함께 일하고 있습니다.

급속하게 성장하고 있는 개발팀이지만, 동대문 패션 비즈니스를 혁신하고 글로벌 시장과 연결하기 위해 아직 더 많은 분들의 힘이 필요합니다. 앞으로 더욱 성장할 딜리셔스와 개발팀에서 함께 하고 싶으신 분들은 아래 링크를 클릭해 주세요!