ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [18일차] 데이터 파이프라인
    교육/코드스테이츠 2022. 12. 21. 18:52

     

    데이터 파이프라인

    • 다양한 데이터 소스로부터 원시 데이터를 수집하여 분석을 위해 데이터 웨어하우스와 같은 별도의 데이터 저장소로 이전하는 과정을 의미한다.
    • 다양한 경로로부터 수집되는 데이터를 웨어하우스에 적재한 후, 적재한 데이터를 바탕으로 효과적으로 분석하기 용이하게 만들기 위해 이용된다

     

    • OLTP(Online Transaction Processing)
      • 데이터베이스는 그 목적이 트랜잭션(기본적인 CRUD 작업)에 포커스가 맞추어져 있는 데이터베이스이며, OLAP(Online Analytical Processing) 데이터베이스는 적재된 데이터를 다양한 방법으로 분석하는 데 포커스가 맞춰져 있다.
      • OLTP 역시 분석이 불가능한 것은 아니지만, 여러 개의 테이블을 함께 묶어 조회하려면 그만큼 복잡도가 늘어나며, 복잡한 조회로 인해 기본적인 트랜잭션에도 성능 상의 지장을 줄 수 있다.

     

    • OLAP 
      • 데이터 기반의 의사결정을 위한 도구로, 다양한 관점의 분석을 하는데 적합하다 
      • 다양한 데이터소스로부터 수집되는 데이터를 통합하는데 그 목적이 있다
      • 성능 상의 한계를 극복하기 위해 OLTP가 지원하는 몇 가지 기능을 포기함으로서, 빠른 분석 성능을 달성할 수 있었다

     

    • 정형 데이터
      • 정해진 규칙에 따라 구조화된 데이터로, 날짜, 이름, 주소, 신용 카드 숫자 등과 같이 해당 컬럼에 들어갈 값이 예측 가능하고 의미 파악이 쉬운 데이터를 의미한다
      • 사용자들이 사용하기 쉽고, 머신러닝 알고리즘이 가공/분석하기에 용이하지만, 이미 적재한 데이터가 많은 상황에서 구조 그 자체가 바뀌는 경우, 모든 정형 데이터를 업데이트해야 하므로 많은 시간과 자원이 소모될 수 있다.

     

    • 비정형 데이터
      • 문서(JSON, 텍스트)의 형태를 띄거나, 아예 음성이나 영상과 같은 바이너리 형식의 데이터일 수 있다.
      • 있는 그대로 저장하기에 유용하나, 가공하거나 분석하기에는 어려울 수 있지만 최근에는 모든 데이터를 있는 그대로 저장하고 고도화된 빅데이터 도구를 이용해 보다 쉽게 가공/분석할 수 있게 만드는 것이 추세이다. 비즈니스 인사이트는 데이터를 어떻게 분석하느냐에 따라서 발견될 수 있기 때문이다

     

    • 보통 데이터 파이프라인은 ETL, ELT와 같은 용어로 표현다. 각 알파벳은 추출(Extract), 적재(Load), 변환(Transform)의 약자이다.

     

    • ELT와 ETL의 차이점은 순서의 차이이다.
      • ETL(추출→변환→적재)은 적재하는 과정에서 변환이 이루어진다 (Schema-on-Write)
      • ELT(추출→적재→변환)는 적재하고 나서 분석을 시작할 때 변환 작업이 일어난다. (Schema-on-Read)

     

    •  ETL로 적재된 데이터는 이미 정형화되어 있기 때문에, 비즈니스 분석이나 시각화에 용이하다.

     

    • 비정형 데이터를 분석할 경우 ELT 작업이 진행되는데, 상대적으로 정형화된 데이터 분석보다는 훨씬 느린 비정형 데이터 분석이지만, 최근에는 클라우드의 발전 덕분에 ELT도 빈번하게 사용된다.

     

    • 데이터가 쌓이는 규모가 테라바이트(TB), 페타바이트(PB)인 현대의 빅데이터 시대에는, 적재하기 전 변환 과정이 오히려 병목이 될 수 있으므로, 이러한 한계를 극복하기 위해 ELT를 사용하기도 한다.

     

     

    • nginx 웹 서버의 로그로부터 접속 기록을 추출하여, PostgreSQL에 적재할 것. PostgreSQL은 관계형 데이터베이스,  OLTP의 용도로 주로 쓰이지만, OLAP로서의 성능도 준수하여, 작은 규모의 데이터 웨어하우스가 필요할 경우엔 괜찮은 선택입니다. 무엇보다 표준 SQL 문법을 그대로 사용할 수 있다는 점이 가장 큰 장점

     

     

    실습 순서

    1. 깃 허브를 통해 실습 레퍼지토리 fork, clone

     - cat sample.log 확인

     - 10.0.210.17 - - [28/Nov/2022:11:33:28 +0900] "GET /hello HTTP/1.1" 200 615 "-" "curl/7.84.0" "-"

    2. 파서(parser) 작성

     - cat sample.log | ./parser.js 파서로 샘플파일 확인

    ● 파싱

    특정문서(XML 따위)를 읽어 들여서 이를 다른 프로그램이나 서브루틴이 사용할 수 있는 내부 의 표현 방식으로 변환시켜 주는 것이다. XML 문서를 보시면 HTML처럼 <>태그가 보일 것이다. 사용자가 이렇게 입력하지만 컴퓨터가 알아 볼 수 있도록 바꿔주는 과정을 의미한다.

     

    ● 컴파일러의 일부로써 원시 프로그램의 명령문이나 온라인 명령문, HTML 문서등에서 마크업태그등을 입력으로 받아들여서 구문을 해석 할수 있는 단위로 여러부분으로 분할해 주는 역할을 한다.

     

    ● 파서(parser)

    컴파일러의 일부로서 원시 프로그램즉, 컴퍼일러나 인터프리터에서 원시 프로그램을 읽어 들여, 그문장의 구조를 알아내는 구문 분석(parsing)을 행하는 프로그램을 말한다.

     

    3. PostgreSQL 데이터베이스 만들기 ElephantSQL사용

     

    4. sql-runner.js - SQL문을 실행시켜서 결과를 콘솔에 출력한다.

     - sql-runnersql 파일에 기록된 쿼리를 PostgreSQL에 전달해서 실행하는 역할을 한다

     

    5. “ .env ” 파일을 통해 연결을 위해 필요한 정보들을 전달한다

     - .env 파일은 " 환경 변수 파일 " 을 의미한다.

     - 이 파일은, 애플리케이션이 실행될 때 넘기고 싶은 특정 값을 담고 있는 변수가 기록되어 있다.

     - 미리 정의된 값을 애플리케이션에서 활용하고 싶을 때 이 .env 파일을 활용한다.

     

    6. ./sql-runner.js < sql/3_display_table_data.sql - 테이블을 조회하는 SQL 쿼리문

    7. collector.js는 웹 서버 로그를 nginx 테이블에 기록하는 데에 초점이 맞춰져 있는 프로그램
     - 이 프로그램은 프로세스가 바로 종료되지 않고 계속 실행되며, 표준 입력(stdin)을 스트림으로 받아, 들어오는 모든 로그를 즉시 데이터베이스로 보냅니다. , 로그를 스트리밍한다

    - cat sample.json | ./collector.js

    8. 새로운 출력만 로그로 쌓을 수 있도록 명령어 입력

    - tail f 0 /var/log/nginx/acces.log | ./parser.js | ./collector.js 

Designed by Tistory.