Untitled

https://youtu.be/HVaqtnORDq4

https://youtu.be/fkrnqfAiR4g

AMNotify Korea | Powered by Whop

AMNotify Korea - Get Access

직무 설명, 한국 분산 크롤러 메인 개발자

  1. 특정 마켓플레이스의 신규상품 데이터 수집을 위해, 분산 크롤러 개발 (python)
  2. 해당 데이터를 다양한 메시지 플랫폼으로 웹훅 메시징 시스템 개발
  3. 메시지 보장을 위해 mongodb sharding, message que 구축 (kafka cluster)
  4. (1), (2), (3) 의 process control admin Front-end, Back-end, infra 솔루션 구축

본인이 기여한 점

  1. 기존 시스템 보다 200% 이상 빠른 크롤러 구축
    1. 기존 시스템을 대체하는 신규 솔루션으로 아래 4가지 원칙을 세운 뒤, 처음엔 퍼포먼스 향상에만 몰두했습니다.

      1. 브라우저를 하나도 띄우지 않는다. (셀레니움과 같은 방식은 X)
      2. 모든 프로세스는 독립적으로 (서로 영향을 주지않고, 의존성이 없고) 수행된다.
      3. 외부 (또는 브라우저)에 의해 의도하지 않은 쿠키 / 새션값이 들어가지 않는다.
      4. restAPI 반복 call(request)하는 것과 동일하게, 정해진 요청은 정해진 응답만 오게 한다.
      
    2. 3대의 서버에서 타겟 사이트를 프록시 설정과 멀티프로세싱을 활용하여, 필요할 때 만 빠르게 정보를 가져오게 했습니다.

  2. client가 제공받는 데이터 유실 0% 달성
    1. 3대의 mongodb 를 dubplicat set (PSS set) 으로 설정
    2. client에게 전달 될 메시지 kafka 를 활용해 producer - consumer 를 만들어, consuming 할 떄 메시지 전달 (hooking), 특히 429에 의한 데이터 유실 완벽보장
  3. client가 제공받을 수 있는, 신규 사이트 20곳 이상 확장, 개발 확장성 증대
    1. selenium 스케쥴러, cookie parsing 를 활용하여 대기열 등의 특수 상황에 있는 타겟 데이터까지 신규로 얻을 수 있도록 하여 많은 신규 사이트 데이터까지 얻을 수 있게 확장했습니다.

    2. 신규 크롤러를 확장성있고 빠르게 개발하기 위해 아래와 같은 형태로 구조화 했습니다. (UML, 추상화) 그리고 전용 Framwork를 만들었습니다.

      Untitled

      1. 최상위 Crawlerinterface 역할을 하고, MainCralwer 등으로 구현 후, 실제 상속은 사이트마다 Main, Restock 등을 상속받아서 사용합니다.
      2. exec_monitoring 에서 url 단위의 멀티프로세싱을 하며, 재정의가 많이 필요할 것 같은 부분은 perform_*으로 함수화해서 overriding 합니다.
      3. db_connection 에 관련된 관리는 Repository 라는 class로 분리해서 사용 및 접근합니다.