
아키텍처
Feed-Entity: 당근 피드의 심장
두줄요약
당근은 피드 콘텐츠를 Feed-Entity로 표준화해 여러 서비스의 데이터를 한 구조로 관리했습니다. 수집·변환·검증·서빙을 모듈화하고 지역별 캐시로 읽기 성능과 확장성을 높였습니다.
문제 상황
- 당근의 여러 서비스가 각자 다른 저장소와 데이터 구조로 피드에 콘텐츠를 공급하는 분산형 운영 구조
- 서비스가 늘어날수록 통합 작업과 데이터 일관성 관리 부담이 커지는 문제
구조와 흐름
- 피드에서 노출 가능한 가장 작은 콘텐츠 단위를 Feed-Entity로 정의하고 SSOT로 활용
- 수집, 변환, 검증/DLQ, 메시지 큐 연동으로 이어지는 모듈화된 데이터 파이프라인 구성
- DB 저장, 지역별 Redis 캐시, 인덱스 기반 조회로 읽기 트래픽 중심의 서빙 최적화
선택 이유
- 서비스별 상이한 구조를 표준화해 개발 복잡도와 통합 비용을 낮추기 위한 선택
- 새로운 콘텐츠 타입 추가 시 전체 수정 없이 변환 모듈만 확장할 수 있는 유연성 확보
- 지역성 높은 피드 특성에 맞춰 캐싱과 인덱싱을 분리해 성능과 확장성을 함께 고려
성능/운영 포인트
- 멱등성 보장과 DLQ 처리로 중복 수집과 변환 실패를 안전하게 관리
- 백필로 콜드 스타트를 완화하고 초기 데이터 부족 문제를 보완
- 지역별 캐시 분리와 인덱스 기반 조회로 p99 평균 20ms 이하의 저지연 서빙 지향