Skip to main content

Posts

카테고리 매핑 엔진과 데이터 구조 자동화

1. 개발 배경 및 문제 인식 Translator-Agent가 다국어 데이터를 안정적으로 생성하기 시작하면서, 다음 병목은 "상품 분류"였다. 약 25만 건의 상품이 번역되었지만, 카테고리 코드가 누락되거나 서로 다른 언어에서 다른 트리 노드로 매핑되는 문제가 있었다. 기존의 수동 분류는 국가별 기준이 달라 일관성을 유지하기 어려웠다. 이를 해결하기 위해, AI 기반 카테고리 자동 분류 엔진(Classifier-Agent)을 개발했다. REINDEERS 플랫폼은 한국, 태국, 말레이시아, 중국 4개국에 걸쳐 4,300개 이상의 파트너사가 등록되어 있고, 25,000건 이상의 실거래 데이터가 축적되어 있다. 공급사 1,800개 이상이 각자의 카테고리 체계로 상품을 등록하기 때문에, 동일한 "알루미늄 프로파일"이 한국에서는 "금속 가공재", 태국에서는 "건축 자재", 중국에서는 "산업용 비철금속"으로 분류되는 일이 빈번했다. 바이어 2,500개 이상이 검색과 비교를 할 때 이 불일치가 직접적으로 전환율을 떨어뜨렸다. 목표는 다음과 같았다. 상품명·설명·스펙·브랜드를 이용한 자동 카테고리 예측 언어 중립적인 벡터 임베딩 기반 분류 분류 확신도(confidence score)에 따른 승인/보류 체계 MQ 파이프라인 기반의 비동기 동작 및 자동 재매핑 2. 초기 구조 설계 Classifier-Agent는 Translator-Agent가 생성한 i18n 데이터를 입력으로 받는다. product.normalized 이벤트를 수신하면 문장 임베딩을 생성하고, 카테고리 벡터 DB에서 가장 유사한 카테고리를 탐색한다. SentenceTransfo...

Translator-Agent와 데이터 품질 관리 체계

Translator-Agent와 데이터 품질 관리 체계 1. 초기 Translator-Agent 도입 배경 7월 초, 플랫폼 내 등록된 상품 수가 20만 건을 초과하면서 다국어 데이터 품질 문제가 심각하게 드러났다. 기존에는 외부 번역 API를 호출해 결과를 저장하는 단순 구조였다. 하지만 언어별 품질 편차가 심했고, 카테고리명, 단위, 브랜드명 등이 잘못 번역되는 사례가 누적되었다. "Steel Pipe"가 태국어로 "철 담배 파이프"로 번역되거나, "12V DC Motor"의 "DC"가 "직류"가 아닌 "워싱턴 D.C."로 해석되는 사례가 실제로 발생했다. 산업 자재 분야의 전문 용어는 일반 번역 모델로는 정확도가 낮다. 수동 교정 인력을 투입하지 않으면서도 번역 품질을 확보하기 위해 "Translator-Agent"를 내부적으로 개발하기로 결정했다. Translator-Agent의 설계 목표는 다음과 같았다. 번역 품질 자동 평가 및 등급화 (MACHINE / HUMAN / APPROVED) 다국어 텍스트 캐시 및 중복 요청 제거 문장 단위가 아닌 문맥 단위 번역 처리 — 상품 카테고리, 스펙, 단위를 함께 고려 MQ 기반 병렬 번역 및 품질 피드백 루프 자동화 산업 자재 전문 용어 사전(Glossary) 적용 2. 아키텍처 설계 — AI 모델 혼합 전략 Translator-Agent는 MQ 이벤트 소비자로 동작한다. product.created 또는 i18n.missing 이벤트를 수신하면 해당 상품의 기본 언어 데이터를 조회하...

certified as a Venture Business

Officially Certified as a Venture Business! We're excited to share that REINDEERS has been officially certified as a Venture Business (벤처기업) under the "Act on Special Measures for the Promotion of Venture Businesses" by the Korean government. Our certification falls under the Innovation Growth category, recognizing our potential for technology-driven growth and impact in the cross-border B2B and fulfillment space. This is a meaningful milestone for us, and we will continue to innovate and scale with purpose. Thank you to everyone who has supported our journey so far. What This Certification Means in Technical Terms A Venture Business certification under the Innovation Growth category is not simply an administrative badge. It requires demonstrating that a company is building products with genuine technical innovation and a credible path to scale. For REINDEERS, this validation applied to three specific areas: Cross-border trade data infrastructure —...

시스템 설정 및 관계 구조

시스템 설정 및 관계 구조 1. 초기 상태 점검 및 서비스 간 데이터 경로 정의 프로젝트는 MCP 내부 서비스가 물리적으로 분리된 시점에서 시작되었다. 서비스는 정상적으로 기동되었지만, Redis와 MQ 사이의 데이터 경로가 불완전했다. 일부 이벤트는 발행되었으나 소비자 함수가 인식하지 못했고, 캐시 무효화 시점이 불일치했다. 문제의 원인은 큐 이름 충돌이었다. 기존 구조에서는 모든 이벤트가 default 토픽에 쌓였기 때문에, 이벤트 종류별 처리 우선순위를 분리할 수 없었다. 세션 동기화 이벤트와 상품 번역 이벤트가 같은 큐에서 경쟁하면서 지연과 이벤트 유실이 발생했다. LavinMQ의 라우팅 키 구조를 다시 정의했다. 서비스 도메인별로 큐를 분리하여 이벤트 흐름을 명확히 구분했다. product.* → Translator-Agent, Classifier-Agent session.* → Auth-Service / Redis Sync cache.* → Cloud Function (Cache Invalidator) log.* → Ops-Agent order.* → Order-Service / Notification schedule.* → Logistics Scheduler 이 설정을 적용한 후, MQ 메시지 지연은 평균 80ms 수준으로 안정화되었고, 이벤트 충돌 비율이 0.2% 미만으로 감소했다. Ops-Agent가 주기적으로 큐 상태를 수집하고, 누락 이벤트가 10건 이상일 경우 자동 재전송하도록 설정했다. 2. 5개 플랫폼의 설정 관리 구조 REINDEERS는 5개의 플랫폼(Trade, Logistics, Workflow, Document AI, Delivery)을 운영한다. ...

글로벌 세션 동기화와 캐시 아키텍처 설계

글로벌 세션 동기화와 캐시 아키텍처 설계 1. 문제 정의 — 글로벌 세션의 일관성 글로벌 사용자가 늘어나면서 문제가 발생했다. 한 사용자가 홍콩 리전에서 로그인한 뒤 곧바로 한국 리전 서비스로 접근하면, 세션이 존재하지 않아 재로그인이 필요했다. Redis가 지역 단위로 분리되어 있었기 때문이다. 이 문제는 단순한 불편을 넘어 비즈니스 리스크였다. 태국 바이어가 주문을 작성하던 중 API Gateway가 서울 리전으로 라우팅되면 세션이 없어 작성 중이던 데이터가 유실될 수 있다. REINDEERS는 "어디서 로그인하든, 어디서든 세션이 유효해야 한다"는 원칙을 세웠다. 이를 위해 Redis 세션 클러스터 간 실시간 복제와, MQ 기반의 캐시 무효화 구조를 설계했다. 2. 전체 구조 개요 세션·캐시 구조는 다음 세 가지 계층으로 나뉜다. Redis Cluster: 리전별 세션/캐시 저장소 (HK Primary, KR Secondary) MQ Broker (LavinMQ): Redis 간 동기화 이벤트 전달 Cloud Function: 세션 복제 및 캐시 무효화 실행 [User Login] → [Redis HK] → MQ("session.create") ↓ [Cloud Function] ↓ [Redis KR Replica] 모든 세션·캐시 변경은 "이벤트"로 MQ에 게시되고, Cloud Function이 이를 수신해...

통합 회원 관리(SSO/OIDC)와 글로벌 인증 구조

통합 회원 관리(SSO/OIDC)와 글로벌 인증 구조 1. 배경 — "로그인은 하나, 서비스는 전 세계" 이전까지는 각 국가별로 별도의 회원 시스템을 운영했다. 태국, 한국, 중국, 말레이시아의 서비스가 모두 다른 사용자 DB를 가졌고, 글로벌 공급사는 국가별로 중복 계정을 등록해야 했다. 로그인 토큰도 서버별로 상이해 SSO(Single Sign-On)가 불가능했다. 이 구조가 만들어낸 문제는 명확했다. 하나의 공급사가 태국과 한국에서 모두 활동하려면 두 개의 계정이 필요하고, 각각 별도로 로그인해야 하며, 프로필 정보도 따로 관리해야 한다. 5개 플랫폼(Trade, Logistics, Workflow, Document AI, Delivery)이 각자 독립된 인증 시스템을 가지고 있다면 파트너 수가 4,300개를 넘어선 시점에서 운영은 사실상 불가능하다. 6월에 이 구조를 완전히 개편하며, 단일 로그인으로 모든 국가의 모든 서비스에 접근할 수 있는 통합 인증 체계를 구축했다. 2. 왜 SSO와 OIDC인가 SSO는 한 번의 로그인으로 여러 서비스에 접근하는 것을 의미한다. OIDC(OpenID Connect)는 OAuth 2.0 위에 구축된 인증 표준으로, 사용자의 신원을 검증하고 ID Token을 발급하는 프로토콜이다. REINDEERS가 OIDC를 선택한 이유는 세 가지다. 첫째, 각 플랫폼이 독립적으로 배포되더라도 하나의 인증 서버만 바라보면 된다. 둘째, Google, LINE, WeChat, Kakao 등 소셜 로그인 제공자와의 연동이 표준화된 방식으로 가능하다. 셋째, ID Token의 서명 검증만으로 인증 상태를 확인할 수 있어 ...

데이터 품질관리, CI/CD 검증, Telegram 알림 및 Rollback 구조

데이터 품질관리, CI/CD 검증, Telegram 알림 및 Rollback 구조 1. 배경 — "데이터가 코드다" REINDEERS 플랫폼은 다국가·다통화 데이터를 실시간으로 처리한다. 그러나 시스템이 복잡해질수록 코드보다 더 위험한 것은 "데이터 불일치"였다. 6월 초, PO 테이블의 통화 코드 누락으로 결제 금액 계산 오류가 발생했다. 개발 로직에는 문제가 없었지만, 데이터 무결성이 깨져 있었다. 코드는 테스트를 통과했지만 데이터는 검증 대상에 포함되지 않았던 것이다. 이 사건을 계기로 REINDEERS는 데이터 품질관리(DQM, Data Quality Management)를 DevOps 파이프라인에 통합하기로 했다. 코드가 통과해야 하는 테스트가 있듯이, 데이터도 통과하지 못하면 배포되지 않는 구조를 만들겠다는 것이 핵심 원칙이었다. CI/CD 파이프라인에 데이터 검증 단계를 삽입하고, 실패 시 자동 차단과 Telegram 알림, 그리고 원격 Rollback까지 연결하는 전체 흐름을 설계했다. 2. 품질관리 체계의 원칙 모든 품질검증은 SQL 기반 선언형 규칙으로 정의된다. 코드를 수정할 필요 없이 규칙만 등록하면 즉시 적용된다. 검증은 CI/CD 파이프라인 단계에서 자동으로 실행된다. 수동 확인은 존재하지 않는다. 오류 발생 시 Telegram으로 실시간 보고된다. 운영자는 어디서든 모바일로 상황을 파악한다. Telegram 명령을 통해 승인·롤백을 원격 수행할 수 있다. CLI나 서버 접속이 필요 없다. 이 네 가지 원칙이 적용되면서, "사람이 직접 확인하는 검증"은 사라졌다. 시스템이 데이터의 정합성을 자동으로 감시하고, 문제...