우아한형제들 / ai

3 개의 포스트

woowahan

Delivering the Future: 글로벌 해커톤 2025, 준비부터 운영까지 | 우아한형제들 기술블로그 (새 탭에서 열림)

딜리버리히어로 산하 전 세계 7개 엔티티의 기술직군 구성원들이 참여한 ‘글로벌 해커톤 2025’는 글로벌 기술 인재들을 하나로 연결하고 미래의 고객 경험을 혁신하기 위해 개최되었습니다. 우아한형제들 DR팀은 이번 행사의 오거나이저로서 한국에서의 커뮤니티 운영 노하우를 발휘해 서로 다른 시차와 환경을 가진 팀들이 기술적으로 협업할 수 있는 온·오프라인 하이브리드 환경을 구축했습니다. 이를 통해 전 세계 270여 명의 참가자는 구글 클라우드 등 최신 기술 스택을 활용하여 비즈니스 아이디어를 실현하며 글로벌 기술 시너지를 확인했습니다. **글로벌 협업을 위한 행사 기획과 소통 구조** * 전 세계 70여 개국에 퍼져 있는 구성원들의 참여를 독려하기 위해 각국의 공휴일과 휴가 시즌을 면밀히 분석하여 가장 참여도가 높을 것으로 예상되는 일정을 확정했습니다. * 물리적 거리의 한계를 극복하고자 각 엔티티 오피스를 '베이스캠프'로 지정해 오프라인의 몰입감을 유지하는 동시에, 라이브 중계와 온라인 채널을 연계해 전 세계를 실시간으로 연결했습니다. * 시간대 차이로 발생하는 소통의 병목 현상을 해결하기 위해 정기 회의 대신 엔티티별 개별 미팅을 진행하고, 표준화된 가이드 문서와 체크리스트를 배포하여 운영 효율성을 높였습니다. **규제와 실험의 자유를 고려한 기술 환경 구축** * 참가자들이 GCP, AWS, ML 모델 등 각자 익숙한 기술 스택을 자유롭게 활용하면서도, GDPR(EU 일반 개인정보 보호 규정)과 같은 엄격한 글로벌 보안 및 컴플라이언스 규정을 준수하도록 인프라를 설계했습니다. * 딜리버리히어로 중앙 조직이 직접 조율한 공통 기술 가이드를 마련하여 리소스 제공 범위와 데이터 접근 절차를 명확히 규정함으로써 기술적 파편화를 방지했습니다. * 구글 클라우드와의 파트너십을 통해 Google AI 기반 환경을 폭넓게 제공하여, 참가자들이 실제 현업 환경과 유사한 조건에서 고도화된 기술적 실험을 수행할 수 있도록 지원했습니다. **현지 운영과 글로벌 네트워크의 확장** * 근무 형태가 서로 다른 엔티티들이 같은 도시 내 오피스를 개방하고 공유하도록 독려하여, 소속에 관계없이 글로벌 구성원들이 자연스럽게 섞여 협업할 수 있는 분위기를 조성했습니다. * 각 엔티티의 CTO와 CPO가 예선 심사에 직접 참여하고, 딜리버리히어로 글로벌 CTO 및 구글 클라우드 디렉터가 최종 심사를 맡아 프로젝트의 비즈니스 가치와 기술적 완성도를 다각도로 검증했습니다. * 수상 팀에게는 상금과 함께 미국에서 열리는 'Google Cloud Next 2026' 참가 기회를 제공하여 해커톤 이후에도 기술적 성장이 이어질 수 있는 동기를 부여했습니다. 이번 글로벌 해커톤은 거대한 조직 규모와 지리적 제약 속에서도 공통의 기술 가이드와 명확한 운영 원칙이 있다면 전 세계 엔지니어들이 하나의 팀처럼 혁신을 만들어낼 수 있음을 보여주었습니다. 서로 다른 배경을 가진 개발자들이 기술로 소통하며 시너지를 내는 과정은 글로벌 기술 기업으로서의 결속력을 다지는 중요한 발판이 됩니다.

woowahan

“함께 구매하면 좋은 상품” 추천 모델 고도화 | 우아한형제들 기술블로그 (새 탭에서 열림)

배달의민족은 장보기·쇼핑 서비스에서 고객의 구매 의도를 더욱 정확하게 파악하기 위해 기존의 단순 임베딩 유사도 기반 추천에서 벗어나 구매 맥락을 반영한 2단계 추천 모델로 고도화했습니다. 기존 모델의 한계였던 대체재 편향 문제와 시퀀스 정보의 부재를 해결하기 위해 그래프 기반 임베딩과 트랜스포머(Transformer) 아키텍처를 결합한 것이 핵심입니다. 이를 통해 고객이 장바구니에 담은 상품들의 순서와 관계를 학습하여, 단순 유사 상품이 아닌 실제 함께 구매할 가능성이 높은 보완재 중심의 추천 성과를 거두었습니다. ### 기존 Item2Vec 모델의 한계와 문제점 * **대체재 편향 발생**: 기존 모델은 주문 내 동시 출현 빈도를 기반으로 임베딩을 생성하여, 비슷한 구매 패턴을 가진 상품들이 가깝게 배치되었습니다. 이로 인해 우유를 담았을 때 시리얼 같은 보완재 대신 다른 브랜드의 우유가 추천되는 등 추천의 다양성이 떨어졌습니다. * **시퀀스 맥락 소실**: 상품을 장바구니에 담는 순서에는 고객의 의도가 담겨 있지만, 기존 방식은 단순히 '함께 있었다'는 정보만 활용했습니다. 예를 들어 '라면을 담고 고기를 추가한 경우'와 '고기를 담고 라면을 추가한 경우'의 차이를 구분하지 못해 정교한 추천이 어려웠습니다. * **크로스 셀링의 어려움**: 임베딩 유사도에만 의존하다 보니 동일 카테고리 내의 상품 추천에 치중하게 되었고, 장바구니 추천의 핵심 목표인 '다른 카테고리 상품 제안(Cross-selling)'을 달성하기에 한계가 있었습니다. ### Stage 1: 그래프 기반 상품 및 카테고리 임베딩 * **Node2Vec 도입**: 주문 빈도가 낮은 롱테일 상품의 데이터 희소성 문제를 해결하기 위해 Node2Vec을 활용했습니다. 이는 그래프 구조에서 Random Walk를 통해 상품 간의 구조적 관계를 효과적으로 학습하게 해줍니다. * **그래프 구조 설계**: 상품 노드와 카테고리 노드를 함께 구성했습니다. 특히 상품 간 연결(Edge)에는 단순 빈도가 아닌 '연관 규칙(Association Rule)' 기반의 가중치를 부여하여, 인기 상품에만 편중되지 않고 실제 연관성이 높은 상품들이 강하게 연결되도록 했습니다. * **콜드 스타트 방안**: 신규 상품이나 주문 이력이 적은 상품은 카테고리 노드와의 연결을 통해 초기 임베딩을 확보할 수 있도록 설계하여 시스템의 견고함을 높였습니다. ### Stage 2: Transformer 기반 시퀀스 추천 * **맥락 이해**: Stage 1에서 생성된 고품질의 임베딩을 입력값으로 사용하여, 트랜스포머 모델이 장바구니에 담긴 상품들의 순서(Sequence)를 분석합니다. * **다음 상품 예측(Next Item Prediction)**: 고객이 현재 장바구니에 담은 일련의 상품 리스트를 바탕으로, 다음에 담을 가능성이 가장 높은 상품을 예측하는 방식으로 학습을 진행했습니다. * **동적 추천 성능**: 이 과정을 통해 고객이 요리를 위해 재료를 담는 과정인지, 혹은 간식거리를 쇼핑하는 중인지 등의 실시간 맥락을 반영한 개인화된 추천이 가능해졌습니다. 단순히 "어떤 상품과 어떤 상품이 자주 팔리는가"를 넘어 "어떤 순서로 구매 결정이 이루어지는가"를 모델링하는 것이 추천 시스템 고도화의 핵심입니다. 그래프 임베딩을 통해 상품 간의 관계를 정의하고, 트랜스포머를 통해 고객의 시퀀스 맥락을 읽어내는 2단계 구조는 데이터 희소성 극복과 추천의 정확도라는 두 마리 토끼를 잡을 수 있는 실용적인 접근법이 될 수 있습니다.

woowahan

AI와 함께하는 테스트 자동화: 플러그인 개발기 | 우아한형제들 기술블로그 (새 탭에서 열림)

낮은 테스트 커버리지 문제를 해결하기 위해 AI를 활용한 테스트 자동화 도구를 개발하고 적용한 과정을 담고 있습니다. 처음에는 AI에게 모든 것을 맡기는 완전 자동화를 시도했으나 높은 컴파일 오류율로 인해 실패했고, 대신 플러그인이 구조적 템플릿을 생성하고 AI가 로직을 채우는 협업 모델을 통해 30분 만에 100개의 테스트 코드를 성공적으로 생성했습니다. 결과적으로 AI의 할루시네이션(환각) 문제를 개발 도구의 맥락 파악 능력으로 보완하여 운영 안정성을 확보할 수 있었습니다. **AI 에이전트 도입과 초기 한계** * 팀의 생산성을 위해 IntelliJ와 통합이 원활하고 프로젝트 전체 컨텍스트 이해도가 높은 Amazon Q를 도입했습니다. * 단순 AI 사용 시 매번 팀 컨벤션을 설명해야 하는 번거로움과 클래스당 약 10분의 소요 시간, 그리고 15% 정도의 빌드 오류가 발생하는 한계가 있었습니다. * 반복적인 프롬프트 작성과 의존성 수집 작업을 자동화하기 위해 IntelliJ 플러그인 개발을 결정했습니다. **플러그인 첫 버전의 실패와 문제 패턴** * 플러그인이 클래스 코드를 수집해 AI API로 직접 전체 테스트 코드를 생성하는 방식을 시도했으나, 컴파일 성공률이 10%에 불과했습니다. * 주요 실패 원인은 존재하지 않는 클래스를 참조하는 할루시네이션, Import 오류, 기존 테스트 코드를 덮어씌워 삭제하는 문제 등이었습니다. * 특히 실제 운영 환경의 멀티모듈 구조에서는 동일한 이름의 클래스가 여러 패키지에 존재하여 AI가 정확한 의존성을 판단하지 못하는 복잡성이 장애물이 되었습니다. **'컴파일 보장 템플릿'을 통한 해결** * AI에게 모든 생성을 맡기는 대신, 플러그인이 PSI(Program Structure Interface) 분석을 통해 정확한 의존성과 메서드 구조가 포함된 템플릿을 먼저 생성하도록 전략을 수정했습니다. * 플러그인은 팀의 테스트 컨벤션(Kotest, MockK 등)을 반영한 골격과 정확한 Import 문을 작성하여 컴파일 오류 가능성을 원천 차단합니다. * 이렇게 생성된 안전한 기반 위에서 Amazon Q가 구체적인 테스트 로직만 채워 넣게 함으로써 생성 정확도를 획기적으로 높였습니다. AI는 복잡한 프로젝트의 구조와 의존성을 파악하는 데 한계가 있으므로, 이를 플러그인과 같은 도구로 보완하는 '하이브리드 접근법'이 실질적인 생산성 향상의 핵심입니다. 단순히 AI에게 모든 것을 요청하기보다, AI가 가장 잘할 수 있는 '로직 구현'에 집중할 수 있도록 개발자가 정확한 맥락과 구조를 먼저 설계해 주는 도구를 구축하는 것이 권장됩니다.