-
[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-runner는 sql 파일에 기록된 쿼리를 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
'교육 > 코드스테이츠' 카테고리의 다른 글
[23일차] OSI 7계층과 TCP/IP (0) 2022.12.28 [19일차] 복습(데이터베이스, API) (0) 2022.12.22 [17일차_02] 데이터베이스 기초 (0) 2022.12.20 [17일차_01] 데이터베이스 기초 (0) 2022.12.20 [16일차] nginx를 이용한 정적 웹사이트 호스팅 (0) 2022.12.19