숨고팀의 첫 번째 사내 기술 세미나 'SoomTech'
안녕하세요. 숨고 Tech Team Lead인 Paul입니다.
숨고는 2023년 한 해 혹한기인 스타트업 생태계에서 생존 뿐만 아니라 BEP 달성이라는 성장까지 이루어냈습니다. 저는 이러한 성장이 시간이 흐르면 변하는 자연 현상같은 것은 아니라고 생각합니다. 우리 안의 열정과 노력이 만들어낸 꾸준한 성장으로 준비된 기술, 그리고 우리 옆의 좋은 동료와 함께 만든 건강한 문화가 있었기 때문에 위기 상황에서도 빛나는 성장을 만들어냈다고 생각합니다.
숨고의 기술 조직은 쉼 없이 스프린트 하는 와중에도 기술 생태계에 작게나마 기여하고자 2021년과 2022년의 파이콘 한국, 2023년의 FEConf에 적극적으로 참여했었는데요. 더욱 성숙한 기술 조직이 되기 위해 2023년을 마무리하기 전, 우리가 겪는 문제와 해결을 위한 고민, 노력, 가치를 나누며 함께 성장하기 위해 사내 기술 세미나인 SoomTech를 개최하였습니다.
처음 개최한 세미나였고 준비 기간이 여유롭지 않았음에도 Tech Team의 41명의 엔지니어가 모두 적극적으로 참여하여 성공적으로 마무리 할 수 있었습니다. 그럼 2023년 12월 14일에 진행된 뜻깊고 역사적인 숨고의 첫 번째 사내 기술 세미나인 SoomTech를 함께 리뷰하겠습니다.
애자일 그 잡채
안녕하세요. Mobile Engineer Floyd입니다. 이번 SoomTech에서는 애자일이 당연한 이 시대에 애자일이 낯선 시대로 돌아가 애자일의 근본과 본질을 다시 보는 시간을 가졌습니다.
클린 아키텍처, 클린 코드 등의 저서로 유명한 로버트 C. 마틴의 애자일 서적, ‘클린 애자일: 새로운 세대를 위한 애자일 가치와 실천’ (원제: Clean Agile: Back to Basics)은 애자일이 무엇인지, 애자일이 탄생한 23년 전에 애자일은 무엇이었는지 앞으로도 영원히 무엇일지를 설명했습니다.
이 책을 읽고 작게나마 배운 것들을 우리 숨고 팀과 모두 나누고 싶었지만 세션에 주어진 시간 동안 많은 내용을 다루기 보다는 가장 중요한 것에 집중하고자 합니다. 먼저 애자일의 본질과 정수라고 할 수 있는 ‘애자일 선언문’ 그리고 ‘이면의 12 원칙’을 살펴보았습니다. 또 워터폴이 등장하고 애자일이 등장하던 당시 업계의 시대적 배경, 옛 개발자들이 어떤 문제에 고통받으며 이를 해결하고자 했는지를 함께 살펴보았습니다.
마지막으로 선언문과 12원칙을 하나씩 읽으며 짧게나마 제가 얻은 인사이트를 공유했고 제 나름대로 애자일을 간단히 실천하는 방법을 ‘조금씩 전진하고, 돌아보면서, 방향을 수정하기를 반복하는 것’ 으로 정의해보았습니다.
제목은 동기화로 동기화로 하겠습니다. 근데 이제 Kafka CDC를 곁들인
안녕하세요. Data Engineer Mark입니다. 이번 SoomTech를 통해 숨고의 DataOps Chapter에서는 datalake에 원천 데이터를 동기화할 때 어떻게 Apache Kafka를 활용하는지, 그리고 왜 숨고는 Kafka를 사용해야만 했는지에 대한 내용을 공유하고자 했습니다.
주요 내용으로는 실시간으로 지표를 구성해서 보고자 하는 요구사항이 있는 데이터, 업데이트 시점에 대한 정보가 없거나 꼬여 있어 명확하지 않은 데이터, 그리고 index가 없어 수집 대상 데이터를 조회하면 DB에 부하를 야기하는 데이터 등 Airflow를 활용한 batch 형태의 수집으로는 요구사항을 만족하기 힘든 원천 데이터의 동기화를 Kafka CDC를 활용해 datalake로 동기화하는 방법과 간략한 예시를 통해 프로세스에 대한 내용을 담았습니다.
Kafka CDC를 활용해서 read-only 형태의 복제 DB를 구축하는 사례는 많이 있지만 숨고에서처럼 datalake 구축에 활용되는 사례는 그리 많지 않았습니다. 숨고 멤버들이 참고할 만한 좋은 use-case가 될 수 있기를 바라며 발표를 마무리했습니다.
테라포밍 - 견적 도메인(Quote Service) 마이그레이션 경험기
안녕하세요. Backend Engineer Terry입니다. 저는 이번에 숨고의 견적 시스템을 새로운 MSA 환경으로 마이그레이션했습니다. 숨고의 견적 시스템은 고수가 고객에게 견적을 발송하여 거래가 시작되는 중요한 기능입니다. 또한, 결제, 캐시, 채팅과 같은 여러 도메인의 기능들이 서로 엮여 결합도가 매우 높은 상태로 복잡하게 구현되어 있었습니다.
기존 숨고의 견적 시스템은 Chain-of-responsibility pattern으로 구현되어 있어 코드를 파악하여 유지 보수하기가 어려웠기 때문에 더 좋은 구조로 같이 개선하고자 했고, 공통으로 사용되는 속성과 메서드를 Mixin pattern으로 구현하여 재사용성과 유지 보수성을 높였습니다.
중요하고 복잡한 기능인만큼 개인적으로 많은 테스트를 진행하면서 다양한 유닛 테스트를 작성하여 품질을 높이고자 했고, QA팀에서도 다양한 TC를 통해 발생할 문제점을 사전에 점검하고 수정할 수 있었습니다. 배포는 카나리 배포 전략으로 장애시 피해를 최소화 하고 최대한 안정적으로 배포 할 수 있도록 준비했습니다.
마지막으로, 배포 후에는 슬랙의 에러 알림, 뉴렐릭, 버그스낵 등의 모니터링 시스템을 통해 견적 기능에 문제가 없는지 확인했고, 문제 발생 시 신속하게 대응할 수 있었습니다.
기존에 잘 사용하고 있던 기능을 새로운 시스템으로 마이그레이션 하는 것이 쉽지 않은 작업이었지만, 복잡한 코드를 옮기고 개선하여 배포하는 경험을 통해 많이 성장할 수 있었습니다.
숨고에서 모바일 엔지니어로 함께 자라기
안녕하세요. Mobile Engineer Troy입니다. 저는 숨고에서 모바일 엔지니어로 1년간 스쿼드, 챕터, Tech팀의 OKR 업무를 진행하며 겪었던 우여곡절 성장기를 주제로 발표했습니다. 도메인과 모바일 환경에 대한 경험 부족으로 장애를 겪기도 했지만 이를 극복하기 위한 과정에서 얻은 레슨런과 고민을 멤버들에게 공유해보았습니다.
2023년 2분기에는 스쿼드 일감으로 견적 발송 화면의 AB테스트를 진행했습니다. AB테스트를 진행하면서 도메인 용어에 대한 이해가 부족해 딥링크를 통해 앱 접속시에 견적 발송이 불가능한 장애가 발생했습니다. 이 경험을 통해 도메인 이해와 딥링크의 중요성을 배울 수 있었고 빠른 장애 감지를 위한 고민으로 이어지게 되었습니다.
이어지는 3분기에는 챕터 일감으로 빠른 장애감지를 위해 에러와 예외 처리를 개선하는 작업을 진행했습니다. 기존의 시스템은 중요한 에러와 예외 처리된 에러 모두를 동일하게 취급하여, 신속한 대응에 어려움이 있었습니다. 이를 해결하기 위해, 에러 분류 기준을 재정립하고 이를 견적 발송 화면에 적용했습니다. 이 과정에서 견적 발송 화면의 API 사용을 분석하게 되었고 불필요한 중복 API 호출을 발견하게 되었습니다.
2023년의 4분기에는 Tech OKR의 일환으로 견적 발송 퍼널 개선 작업에 참여했습니다. 앞서 발견한 불필요한 API 호출을 제거하고 필요한 API를 병렬로 호출하는 방식을 채택함으로써 IOS와 Android 두 OS에서 90% 유저 기준으로 견적 발송 시간을 50% 이상 단축하는 성과를 달성할 수 있었습니다.
Elasticsearch Scoring 알고리즘에 대해 간략히 알아보기
안녕하세요. Backend Engineer Justin입니다. Elasticsearch는 Lucene 기반의 검색 엔진으로 다양한 분야에서 검색과 분석 등에 널리 사용되고 있습니다. 숨고 역시 Elasticsearch를 검색 엔진으로 채택하여 빠르고 효율적인 검색 기능을 구현하고 있습니다.
그러나 검색 기능을 기획하거나 개발하는 입장에서 종종 Elasticsearch의 검색 결과를 완전히 이해하기 어려운 경우가 있습니다. 이러한 문제에 대한 해결책으로 Elasticsearch에서 사용되는 scoring 알고리즘 중 BM25에 대해 더 깊이 이해하는 시간을 가졌습니다.
BM25는 검색 결과의 순위를 결정하는 데에 사용되는 알고리즘으로 이를 이해함으로써 검색 결과의 품질을 높이고 사용자 경험을 향상시킬 수 있습니다. BM25는 검색어의 중요성, 문서의 길이, 검색어의 등장 빈도 등을 고려하여 각 문서의 점수를 계산하는데 이는 사용자가 더 나은 검색 결과를 얻을 수 있도록 도움을 줍니다.
이번 발표를 통해 Elasticsearch의 scoring 알고리즘인 BM25에 대한 간략하게 소개해보았습니다. 앞으로 검색 기능 기획 담당자 및 개발자들이 검색 결과를 더 잘 이해하고 효과적으로 활용할 수 있기를 바랍니다.
이상적인 QA 프로세스와 숨고 QA 프로세스 적용기
안녕하세요. QA Chapter Lead Joseph입니다. 저는 빠르게 변화하는 제품 속에서 안정적인 배포를 위하여 QA가 할 수 있는 일에 대하여 공유해보았습니다.
첫 번째로 요구사항 검증입니다. 요구사항이 초기에 검증된다면 초기에 발견된 결함을 수정하여 비용을 절감할 수 있고 개발이 시작되기 전 불필요한 스위칭 코스트를 없앨 수 있습니다.
두 번째로 Confirm & Regression Test입니다. 숨고에서는 결함이 수정된 것뿐만 아니라 그 결함에 따른 영향도를 분석 및 테스트하여 높은 품질 수준과 향상된 테스트 커버리지를 확보하고 있습니다.
세 번째로 요구사항과 테스트 케이스의 추적성과 테스트 커버리지 측정입니다. 테스트 케이스의 추적성을 확보하는 이유는 테스트 케이스의 재사용 성과에 따른 유지 보수를 보다 쉽게 하고, 해당 요구사항에 어떤 케이스가 도출됐는지 그리고 도출된 케이스에서는 어떤 결함이 있었는지를 쉽게 파악할 수 있도록 하기 위함입니다.
테스트 커버리지를 측정하는 이유는 테스트의 효율성을 평가할 수 있고 품질 향상을 위한 지표를 제공할 수 있으며 더 나아가 결함을 방지하기 위해 측정하고 있습니다.
빠르게 변화하는 제품과 빠른 배포 속에서 프로세스를 갖추고 업무를 한다면 일정한 품질 수준과 품질 향상 그리고 안정적인 배포를 제공할 수 있다고 생각합니다. 숨고의 QA는 빠른 배포 주기에서 시간에 쫓기며 단순히 테스트 수행 업무만 진행하는 게 아닌 제품의 품질 향상을 위해 노력하고 있습니다.
마치며
어떠셨나요? 숨고는 이번 세미나를 시작으로 주기적으로 기술 세미나를 개최하여 지식 공유가 활발히 이루어지는 더욱 성숙한 기술 조직이 되고자 합니다. 다음 SoomTech는 올해 6월에 Tech Team 멤버들 외에 가까운 사람들과 함께 조금 더 긴 시간동안 진행될 예정인데요. 앞으로도 조금씩 발전해 나갈 예정이니 많은 기대 바랍니다.
마지막으로 행사 개최를 지원해 준 피플팀의 Glenn과 Leah, 각종 그래픽 디자인을 맡아준 마케팅팀의 Ella에게 감사하다는 말씀을 드리며 2024년 6월에 더 발전된 모습의 SoomTech로 다시 만나뵙겠습니다.
감사합니다.
- #developer relations
- #seminar
- #soomtech
- #tech
Paul Cho
Tech Team Lead