목록 보기
요기요 채널링 서비스 런칭 회고
기타

요기요 채널링 서비스 런칭 회고

요기요
요기요
2024년 5월 12일

안녕하세요. 요기요 R&D Center에서 Backend Developer로 일하고 있는 이해만입니다. 저는 Discovery & User Squad에서 요기요 채널링 서비스를 담당하고있습니다. 요기요 채널링서비스란? 요기요 앱 외에 다른 플랫폼을 통해 요기요 주문을 해보신 적있나요? 아마 많은 분들이 카카오톡, Gmarket, 또는 비플페이를 통해 요기요 서비스를 이용해 보셨을것입니다. 이를 채널링 사업이라고 하는데요. 요기요 앱이 아닌 다른 채널을 통해 요기요 주문을 할 수 있는 기능입니다. 요기요는 다양한 플랫폼과의 협업을 통해 더 많은 소비자에게 요기요만의 특별한 주문 경험을 제공하는 것을 목표로 하고있습니다. 출처: 지마켓 ([G마켓] G마켓배달) 기존 레거시 시스템을 확장하여 더 많은 주문 채널을 용이하게 추가하기 위해 2023년에 요기요 채널링 서비스라는 새로운 마이크로서비스 프로젝트를시작하였습니다. 1년 동안 공을 들인 프로젝트인 만큼 많은 lesson & learn이 있었습니다. 신규 마이크로서비스의 설계에서 초점을 맞춘 부분과 시행착오에 대해 공유하고자합니다. 요기요 채널링 서비스의 아키텍처의특징 API GatewayPattern 요기요 채널링 서비스는 아래 도식화된 그림처럼 API Gateway Pattern을 채택하여 구축된 마이크로서비스입니다. 이 구조에서 API Gateway역할을 하는 채널링 서비스는 모든 클라이언트 요청의 단일 진입점 역할을 수행합니다. 이 Gateway는 내부 마이크로서비스(MS)로의 요청을 조정하고, 응답을 필터링하여 필요한 정보만을 취사 선택하여 반환합니다. 이러한 방식은 각 파트너사의 요구에 따라 필요한 정보만을 제공하는 파트너별 맞춤형 서비스 제공을 가능하게합니다. 요기요 채널링 서비스는 3가지로 요약할 수있습니다. 첫째, 인증 및 보안을담당합니다. 인증: 요기요 채널링 서비스를 통해 Partner A에게 서비스를 제공할 때, 해당 파트너를 시스템에 등록하고 API Key를 발급하여 인증 관리를합니다. 보안: 모든 외부 트래픽은 채널링 서비스를 통해 수신되며, 요기요 내부 인프라(요기요 채널링 ↔︎ 요기요 MS)를 통해서만 데이터가 통신됩니다. 이 접근 방식은 시스템의 보안을강화합니다. 둘째, 요기요 내부 MS는 각자의 역할에 충실할 수있습니다. 외부 트래픽 관리와 파트너사 관련 로직을 채널링 서비스에 집중시켜, 요기요 내부 MS는 각자의 주요 기능에만 집중할 수 있도록 합니다. 이를 통해 내부 시스템의 복잡성과 다른 서비스들과의 결합도를 줄일 수있습니다. 셋째, 캐싱 및 장애관리 역할도 가지고있습니다. 캐싱: 특정 파트너사의 트래픽이 급증할 경우, 이로 인한 부하를 최소화 하기 위해 요기요 앱에 영향을 주지 않도록 채널링 서비스는 Redis를 활용하여 필요한 데이터를캐싱합니다. 장애 관리: 요기요 내부 MS에서 장애가 발생할 경우, 이를 파트너사 서비스로 확산되지 않도록 상시 모니터링과 함께 킬 스위치(Kill Switch) 기능을 적용하여대응합니다. 이렇게 채널링 서비스는 단순한 인증 및 보안 관리를 넘어서, 내부 시스템과의 결합을 최소화하고, 캐싱 및 장애 대응 기능을 통해 시스템의 안정성을 높이며 확장성을 제공합니다. MVP 버전 배포 후 추가 기능 개발에 필요한 리소스를 줄이는 등, 내부적으로도 우수한 설계 사례로 인정받고있습니다. 파트너사별 기능 제어역할 파트너사들과의 협의 과정에서 다양한 특정 요구사항이 제기되었습니다. 예를들면: Partner A: “저희는 요기요 결제 대신, 자체 플랫폼 XX 페이로 결제를 진행하고싶습니다.” Partner B: “저희는 특정 쿠폰만 사용할 수 있도록 하고싶습니다.” 이러한 요구에 응답하기 위해, 파트너사별로 요기요 기능(Feature)의 구성(Configuration)을 맞춤 설정할 필요가 있었습니다. 이를 통해 파트너사가 허용하는 기능만을 선택적으로 제공하는 방식으로 채널링 서비스 API가구현되었습니다. 아래는 파트너사별 전시, 혜택 및 결제 방식, 요기요 주문, 결제 기능 관리하는 기능 종류를 리스트 업 한예시입니다. // Partner A : 저희는 요기요 결제말고 자체 플랫폼 XX페이로 결제되게 하고 싶어요. ( "partner_id" : "partner_A", "feature_configuration" : ( "coupon": false, "point": false, "gift": false, "yogipass": false, "yogipassx": false, ), "payment_configuration" : ( "type": "EXTERNAL", #### HERE "external": ( "creditCard": true, "checkCard": true, "giftCard": true, "bank": true, "mobile": true, "channelCash": true, ) ) ) Partner A는 저장된 정보를 기반으로 외부 결제 서비스에 대한 로직을 분기 처리합니다. 이를 통해 외부 결제와 관련된 주문 정보를 수집하고, 주문, 결제, 정산을 위한 마이크로서비스 호출 코드를 구현합니다. 이 과정은 Partner A의 특정 요구사항을 만족시키기 위해설계되었습니다. // Partner B : 저희는 특정 쿠폰만 사용하게 하고 싶어요. ( "partner_id" : "partner_b", "feature_configuration" : ( "coupon": true, #### HERE "point": false, "gift": false, "yogipass": false, "yogipassx": false, ), "payment_configuration" : ( "type": "INTERNAL", "internal": ( "creditCard": true, "kakaopay": true, "naverpay": true, "smilepay": true, "tosspay": true, "payco": true, ) ) ) Partner B는 저장된 정보를 기반으로 feature_configuration.coupon 서비스 로직으로 분기하며, partner_id에 해당하는 쿠폰 발급 요청 메시지를 처리하는 쿠폰 마이크로서비스 호출 코드를 구현하여 요구사항을 충족합니다. 요기요 주문 서비스의 혜택 및 결제 기능을 파트너사별로 Switch on/off 설정할 수 있도록 제공함으로써, 특히 "단계적 기능 배포"에 있어 이러한 접근 방식이 효과적으로 활용되었습니다. 예를 들어, 파트너사의 여건에 따라 배달 기능은 on, 포장 기능은 off 하여 배달 기능만 선 배포 후, 추가 일정을 통해 포장 기능을 배포하고 활성화할 수있었습니다. 이와 같은 유연한 기능 제어를 통해 다양한 파트너사의 요구사항을 효과적으로 충족하였고, 현재도 이 기능을 활용하여 요기요 채널링 비즈니스를 지속적으로 확장하고있습니다. 가독성과 응집도를 높이기 위한 Package 구조설계 “프로그래머 1명은 1년 동안에 1개의 소프트웨어를 만들 수 있고, 2명은 2년이 걸린다. 3명은 3년이 걸리고, 4명은 4년이 걸린다. 5명은 절대로 끝나지않는다.” Frederick P. Brooks, Jr., “The Mythical Man-Month: Essays on Software Engineering” “더 많은 개발 인원이 더 나은 성능을 보장한다”라는 관점은 항상 만족하지 않습니다. 개발 인원을 늘릴 때도 조직 문화, 팀의 협업 능력, 프로젝트 관리, 시스템 설계, 최적화 등 다양한 요소를 고려해야 하고, 개발 인원 증가로 인한 퍼포먼스 향상을 단순하게 기대하기어렵습니다. 특히 채널링 서비스 개발 기간이 짧았기 때문에, 많은 개발자가 협업하는 과정에서 발생할 수 있는 문제들을 효과적으로 관리하기 위해 패키지 구조 설계에 특별히 주의를기울였습니다. 패키지는, 작은 애플리케이션을 조직화한다면 클래스가 아주 편리한 단위이지만, 커다란 애플리케이션에서 사용하기에는 너무작다. 큰 애플리케이션을 조직화할 때는 클래스보다 더 큰 무엇이 필요한데, 이것을 패키지(package)라고 한다. 로버트 C 마틴, “클린아키텍처” 채널링 서비스 개발에서 가장 중점을 둔 부분은 “패키지(package) 조직화”와 “패키지 내부의 높은 응집도”였습니다. 대규모 애플리케이션을 효율적으로 조직화하는 것이 필수적이었습니다. 채널링 서비스는 다음과 같은 주요 기능을제공합니다: 회원 관리: 인증, 마이요기요, 구독관리 전시: 가게 및 메뉴 정보제공 주문 처리: 장바구니, 주문, 결제기능 검색: 상품 또는 서비스검색 패키지 조직화는 크게 두 가지 방향으로 진행될 수있었습니다. 1안과 2안은 모두 패키지 조직화에 대한 다른 접근 방식을 제시하고 있으며, 각각의 장단점이있습니다. 결론적으로, 2안을 채택하여 진행하였습니다. 이 접근 방식은 패키지 간 의존성을 명확하게 관리하며 코드의 결합도를 낮추는 데 큰 도움이 되었습니다. 결과적으로, 유지 보수성과 시스템의 확장성이 크게향상되었습니다. 특히, 팀원들로부터 가장 긍정적인 피드백을 받은 부분은 코드의 가독성이었습니다. 채널링 서비스 개발 후 진행된 회고 자리에서, 개발 후반부에 합류한 팀원들은 패키지 구조의 가독성 덕분에 온보딩 과정에서 어려움이 없었다고 피드백 주셨습니다. “패키지 구조가 잘 짜여 있어 클래스의 위치가 예측 가능했고, 이로 인해 코드의 가독성이 뛰어났다”는 등의 긍정적인 피드백을받았습니다. 아쉬운 점도 있었지만, 팀원들과의 노력과 적절한 아키텍처 설계 결정(Architecture Decision)으로 요기요의 비즈니스 역량(Business Capabilities)을 강화할 수 있었으며, 채널링 서비스를 신속하게 출시할 수있었습니다. “주문하기 by 요기요” 채널링서비스 카카오톡 “주문하기 by 요기요” 와 비플페이 “요기요주문하기” 결론적으로 “요기요 채널링 서비스”를 통해 2023년 7월 비플페이 요기요 주문하기 출시, 2023년 11월 카카오톡 주문하기 by 요기요를론칭했습니다. 마치며.. 요기요에 합류하면서 채널링 프로젝트를 맡게 된 것은 개인적인 성장에도 큰 도움이 되었습니다. 그리고 더 많은 다양한 파트너사와의 협력을 통해 요기요 주문하기 서비스를 제공할 예정입니다. 앞으로 생각지도 못한(?) 요구사항이 도출될 수 있지만, 엔지니어로서 이런 도전적인 상황은 조금 걱정되기도 설레기도 합니다. 끝으로 채널링 서비스에 참여하신 Discovery & User Squad TL 님 포함 팀원님들에게 모두 감사하고 수고하셨다고 말씀드리며 글을마치겠습니다. 요기요 채널링 서비스 런칭 회고 was originally published in YOGIYO Tech Blog - 요기요 기술블로그 on Medium, where people are continuing the conversation by highlighting and responding to this story.

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...