Spark 8편: Rest API를 통한 데이터 수집

안녕하세요 오늘은 BESPIN GLOBAL DATA실 한제호님이 작성해주신 ‘Spark 8편: Rest API를 통한 데이터 수집’ 에 대해 소개해드리도록 하겠습니다.

목차
1. 개요
2. 테스트 개요
3. Case 1
4. Case 2
5. 결론

1. 개요

  • 고객사 프로젝트를 수행하다보면 내부 시스템의 데이터뿐만 아니라 외부 시스템을 통해 반 정형 데이터를 수집하는 경우가 종종 있습니다. 외부 데이터는 파일 형태로 제공하는 경우도 있지만 대부분 Rest API 형태로 제공하는 경우가 많으며 Spark은 다양한 커넥터를 제공하지만 직접적으로 Rest API 형태의 데이터를 수집하기 위한 기능을 제공하고 있지 않기 때문에 데이터 엔지니어들은 Spark의 장점인 병렬처리를 활용하지 않더라도 외부 라이브러리를 활용하여 단순처리를 통해 데이터를 수집하도록 구현하는 경우가 많습니다.
  • 물론 매번 수집하는 데이터가 많지 않다면 해당 방법으로 수집하는것도 나쁘지 않다. 그러나 대량의 데이터를 수집하는 경우에는 성능 저하 또는 OOM으로 인해 문제가 발생될 수 있습니다. 이번 시간에는 Spark의 병렬성을 최대한 활용하면서 Rest API를 통해 데이터를 수집하는 방법에 대해 알아보도록 하겠습니다.

2. 테스트 개요

  • 사이트: https://jsonplaceholder.typicode.com/
    • jsonplaceholder 사이트는 rest api 테스트용으로 활용되는 사이트로 다양한 http 메소드와 데이터를 제공한다.
  • 활용 데이터

3. Case 1

  • python requests 라이브러리를 활용하는 방법
  • 장점
    • 단순 python 프로그래밍을 통해 데이터 수집 가능하기 때문에 쉽게 개발 가능
  • 단점
    • 해당 코드는 Spark Driver에서만 구동되기 때문에 병렬처리가 불가하며 단일 스레드로 동작함
    • 초기 테스트용으로 활용은 가능하나 수집되는 데이터량이 많아지면 성능 저하 발생

4. Case2

  • Spark UDF를 활용하는 방법
  • 장점
    • 수집데이터 파티션 수에 따라 병렬 처리 가능
    • 대량 데이터 수집이 유리함
  • 단점
    • 단순 Python 로직에 비해 코드 복잡도가 높음

5. 결론

  • 두 가지 코드에 대해 장단점을 Sample 코드로 알아 보았습니다. 웹 개발과 비교를 하자면 우리가 보통 웹 개발을 할때 꼭 Spring 프레임워크를 써야 하는건 아니다. JAVA의 기본 서블릿을 활용하면 어떻게는 개발할 수 있습니다.
  • 다만 프레임웍에서 제공하는 기능 활용시 여러가지 이점이 있다. 개발자가 관리해야할 포인트(객체에 대한 관리)도 줄어들 뿐만 아니라 프레임웍에서 제공하는 다양한 기능을 활용하므로 인해 성능과 개발 시간을 단축할 수 있는 장점도 있기 때문에 공신력있는 프레임웍을 활용하는 것을 권장하는 것입니다.
  • 약간 다른 의미이지만 굳이 비교하자면 Spark도 프레임웍의 일종입니다. Spark의 기능들을 최대한 활용하지 않고 개발을 수행하게 되면 위의 예시와 같이 Spark의 장점들을 최대한 활용하지 못합니다.
  • 즉, 대량의 데이터를 병렬 처리(고성능과 확장성)의 장점이 있는 Spark으로 개발을 한다는 의미는 개발 시에 파티션에 대한 고려와 그에 따른 성능을 생각하면서 코딩해야 한다는점을 명심해야 합니다. 또한 Spark은 다양한 커넥터와 추가 기능을 통해 방대한 솔루션들과 연동 기능을 제공하고 있기 때문에 데이터 수집 시 리서치 또는 다양한 커뮤니티를 통해 모범사례를 꼭 찾아보기를 권장합니다.

여기까지 ‘Spark 8편: Rest API를 통한 데이터 수집’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

Written by 한 제호/ DATA실

BESPIN GLOBAL