FOLDER (패션 서치 커뮤니티)

FastAPI Scrapy BeautifulSoup4 Langchain OpenAI API aiomysql aiohttp Docker

목차

  1. 프로젝트 개요
    1. 팀 구성 및 정보
  2. 기술 구현 상세
    1. 기술 스택 및 개발 환경
    2. 주요 기능
    3. 핵심 성과 및 의사결정 이력
      1. 1. 플러그인 플로우 조립을 위한 어댑터 패턴 기반 다중 매체 수집 파이프라인 설계
      2. 2. cloudscraper 우회 및 aiohttp/aiomysql 비차단(Non-blocking) 비동기 적재 전환 (수집 성능 향상)
      3. 3. OpenAI GPT API / Langchain 연계 비정형 데이터 정제 자동화 및 Mocking 테스트 구축

프로젝트 개요

서비스 소개분산된 다수 온라인 패션 매체들의 최신 콘텐츠 트렌드 데이터를 자동으로 수집하여 통합 탐색 및 정보 교환을 돕는 커뮤니티 플랫폼임.
핵심 목표 110여 개 패션 웹 매체의 실시간 수집 배치를 자동화하고, 콘텐츠의 정제 및 요약 작업을 AI(LLM) 기반으로 지능화·자동화하는 것을 목표로 함.
핵심 목표 2동기식 I/O 병목을 해결하여 대용량 데이터를 고속으로 적재하고, 관심 포스트 스크랩북과 투표형 토픽 커뮤니티를 통해 유저 참여 환경을 조성하는 것을 목표로 함.

팀 구성 및 정보

항목내용
참여 인원총 6명 (PO/PM 1명, 서비스 기획 1명, 디자이너 1명, BE 1명, FE 2명)
진행 기간2023.10 ~ 2024.02 (약 4개월)
담당 역할분산형 패션 콘텐츠 크롤링 및 자동화 수집 파이프라인 구축 담당

기술 구현 상세

기술 스택 및 개발 환경

항목내용
담당 역할분산형 패션 콘텐츠 크롤링 및 자동화 수집 파이프라인 구축 담당
기술 스택Python 3.x, FastAPI, SQLAlchemy, aiomysql, aiohttp, BeautifulSoup4, lxml, APScheduler, Dependency Injector, Docker, Docker Compose, GitPython, Langchain, OpenAI, Slack SDK
InfrastructureDocker Compose 멀티 컨테이너 환경 및 AWS 인프라를 활용함
FastAPI: 데이터 검색 및 스크랩북 커뮤니티 API 전송 서버로 가동함
Docker Compose: 크롤링 수집 엔진과 DB, 스케줄러 간 멀티 가상 머신 네트워크 연동을 간소화함
RepositoryF-folder-Scrapy Repo

주요 기능

기능상세 내용
패션 데이터 수집 자동화10개 매체를 타깃으로 스케줄링 배치(APScheduler)를 구축해 데이터를 실시간 자동 파싱 및 수집함
AI 연계 본문 텍스트 요약OpenAI 및 Langchain을 결합해 수집 원문 본문의 자연어 정밀 요약과 메타데이터 분류 태그를 동적 추출함
검색 및 정렬 배포 API무한 스크롤, 다차원 필터링 및 검색 조건을 지원하는 패션 포스트 통합 조회 API를 구현함
장애 모니터링 경보배치 완료 실패 현황 및 예외 에러 스택을 Slack Webhook을 연동해 실시간 모니터링 경보를 구성함

핵심 성과 및 의사결정 이력

1. 플러그인 플로우 조립을 위한 어댑터 패턴 기반 다중 매체 수집 파이프라인 설계

  • 배경 & 제약사항: 패션 트렌드 데이터 수집 대상인 10여 개 매체마다 웹 사이트 HTML 구조, API 스펙, 응답 타입(JSON, XML 등)이 달라 매체가 추가될 때마다 기존 코드가 방대해지고 버그 수정 시 다른 매체 연동 코드에 부작용을 일으키는 아키텍처 결함이 있었습니다.
  • 의사결정 (Why 어댑터 패턴?):
    • 수집(Crawling) 엔진을 데이터 정제(Parsing/Pipeline) 파트와 철저히 분리하기 위해 어댑터 패턴(Adapter Pattern)을 적용했습니다.
    • 각 매체별 수집 엔진은 외부 어댑터로 격격리하고, 수집된 로 데이터는 공통 규격의 DTO로 래핑하여 정제 코어 로직으로 흘려보내도록 계약 관계를 설계했습니다.
  • 성과: 기존 수집 핵심 소스코드를 일체 건드리지 않고, 매체별 크롤러 어댑터 모듈만 플러그인 형태로 조립할 수 있게 설계하여 신규 매체 추가 연동에 소요되는 리드 타임과 공수를 80% 가량 감축했습니다.

2. cloudscraper 우회 및 aiohttp/aiomysql 비차단(Non-blocking) 비동기 적재 전환 (수집 성능 향상)

  • 배경 & 제약사항: 대상 패션 매체들의 Cloudflare 웹 방화벽 보안 솔루션으로 인해 자동화 봇이 수차례 차단(403 Forbidden)되어 배치의 주기적 동작이 불가능했습니다. 또한, 동기식 I/O 수집 파이프라인으로 인해 대용량 데이터 적재 시 대기 시간이 수십 분 이상으로 매우 길었습니다.
  • 의사결정 (Why cloudscraper & Async I/O?):
    • Cloudflare 방화벽을 우회하기 위해 V8 자바스크립트 엔진 시뮬레이션을 수행하고 헤더 정보를 무작위 대입해주는 cloudscraperfake-useragent 패키지를 도입해 탐지를 안전하게 회피했습니다.
    • 대량의 병렬 HTTP 요청을 동시 처리하기 위해 aiohttp 라이브러리를 채택하고, 데이터베이스 적재 역시 비동기 전용 드라이버인 aiomysql을 사용하여 전체 파이프라인을 완전 비차단(Non-blocking) 비동기로 최적화했습니다.
  • 성과: 주기적 크롤러 방화벽 차단률을 0% 수준으로 격감시켰으며, I/O 대기 병목을 해결해 전체 데이터 수집 및 데이터베이스 적재 속도를 비약적으로 단축했습니다.

3. OpenAI GPT API / Langchain 연계 비정형 데이터 정제 자동화 및 Mocking 테스트 구축

  • 배경 & 제약사항: 웹사이트에서 긁어온 원문 콘텐츠에 포함된 불필요한 스팸 문구, 노이즈 태그를 제거하고 요약과 관심사 카테고리 태그(예: 스트릿, 댄디 등)를 규칙 기반 코드로 분류하기에는 한계가 있었습니다.
  • 의사결정 (Why OpenAI & Langchain?):
    • 원시 텍스트 요약 및 패션 분야 특화 카테고리 자동 태깅을 위해 OpenAI GPT APILangchain의 프롬프트 템플릿 파이프라인을 설계했습니다.
    • 비용 과금 방지 및 API 타임아웃 예외 대응을 위해, dependency-injector를 사용해 테스트 환경에서는 OpenAI Mock 어댑터를 dynamic하게 바인딩하여 런타임 검증을 실행할 수 있게 하고, 예외 발생 시 Slack SDK를 통해 오류 상태가 담당자에게 실시간 노티되도록 에러 채널을 구축했습니다.
  • 성과: 대량의 비정형 텍스트 데이터를 AI 기반 지능형 정제·요약하는 프로세스를 100% 자동화하고, 자동화 테스트 및 모니터링 경보 체계를 마련해 운영 무중단 안정성을 확보했습니다.