지금까지 2,3,4주차를 통하여 데이터 분석에 사용되는 기초지식 [기초통계, 머신러닝]에 대해 알아봤습니다. 이제 이 지식들을 사용하여 데이터를 분석해봐야 하는데, 우리에겐 주어진 데이터가 없습니다. 도대체 이 데이터들은 어떻게 누가 만드는 것일까요? 데이터 분석가가 분석할 수 있도록, 혹은 내/외부의 필요에 의해 데이터를 수집하고 정제하는 데이터 엔지니어들이 있습니다. 이번 5주차는 데이터 엔지니어들의 업무인 데이터 엔지니어링에 대해 학습해볼 예정입니다.
1. 크롤링(Crawling)
다양한 정보들을 활용하기 쉽도록 수집하는 행위(혹은 Scraping)
(엄청 간단하게 한 문장으로 표현했지만 크롤링은 온라인 상에 존재하는 다양한 정보들을 원하는대로(능력이 된다면) 긁어올 수 있는 꽤나 유용한 기술입니다. 크롤링에 관한 서적이 많으니 궁금하신분은 책을 하나 사서 따라해보세요.)
2. ETL(Extract, Transformation, Loading) :
내/외부의 데이터를 추출하고, 이를 필요에 맞게 변환한 후 저장하는 일련의 절차입니다.
ETL은 데이터 웨어하우스라는 데이터 저장을 위한 데이터 구조를 만드는데 매우 중요한 과정입니다.
* ETL 오픈소스 도구 : Talend, Pentaho, KNIME, Apache NIFI, StreamSets....
* ELT(Extract, Loading, Transformation)
: ELT에서 Loading과 Transformation의 순서를 바꾼 것으로
1. 데이터 크기가 너무 크거나
2. 변환 과정이 너무 오래걸리거나
3. 변환 과정이 추후 활용하는 단계에서 쓰인다.
3. 정형데이터 / 비정형데이터 / 반정형데이터
1) 정형 데이터(Structured Data)
: 열과 행을 정리하여 일목요연하게 표로 만들 수 있는 데이터
2) 비정형데이터(Unstructured Data)
: 형태를 정의할 수 없는 데이터
ex) 영상, 음성, 텍스트
3) 반정형 데이터(semi-structrued data)
: 각 의미를 구분할 수는 있지만 행과 열 형태의 표로 쉽게 정리가 어려운 데이터
ex) JSON, XML, HTML
4. Data Warehouse vs Data Lake
1) 데이터 웨어하우스 : 사용자의 의사 결정에 도움을 주기 위하여, 여러 시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서 관리하는 데이터베이스
* 형성된 데이터 웨어하우스에서 각 주제별 데이터 마트를 만들 수 있습니다. 데이터의 수집부터 정제, 인사이트 도출까지의 과정을 아래와 같이 간단히 나타낼 수 있습니다.
ETL -> EDW(Enterprised Data Warehouse) -> Mart -> BI Analytics
[ 데이터 웨어하우스의 단점 ]
1) 각기 다른 시스템에서 많은 데이터를 가져와야 하기 때문에 ETL에 많은 부하가 가중된다.
2) 각각 다른 형태의 데이터들을 합치므로 매우 복잡한 과정을 거친다.(중복 데이터 관리도 힘들다.)
3) 대량의 데이터 유지 비용이 든다.
4) 비정형데이터는 정리되어 저장되지 못하는 경우 삭제될 수 있다.
2) 데이터 레이크 : Data Warehouse의 정보 분석 한계를 개선하기 위해 생긴 데이터 저장 개념 ,
Data Warehouse → 정형데이터를 가공하여 저장
Data Lake → 정형, 비정형, 반정형데이터를 모두 원천의 형식으로 모두 저장
4. 데이터스트림 vs 배치
: 데이터는 적재 유형에 따라서도 구분이 가능합니다. 데이터의 적재 유형에 따라 데이터 처리 방법 또한 달라집니다.
* 데이터 적재 유형
1) Bounded Data
: 일단 저장되면 이후 변화가 없는 데이터, 묶어서 한번에 일괄 처리한다.
ex ) 월별매출 데이터...
2) Unbounded Data
: 지속적으로 적재되어 끝을 지정할 수 없는 데이터
→ 주기적 처리 또는 실시간 처리
ex ) 시스템 로그 데이터, 주식 가격 변동 데이터
1) 배치 처리(Batch Processing)
: 대량의 데이터를 특정 시간 단위로 끊어서 처리
(시간별, 월별 등등)
2) 스트림 처리(Stream Processing)
: 연속성 있는 데이터 처리
ex ) unbounded data 가 들어오면 실시간으로 필터링 등의 방법으로 처리하여
필요한 데이터만 생성하게 된다.
Micro Batch : 배치의 주기나 데이터 크기를 매우 작게 설정하여 실시간에 근접하게 처리하는 것
6. Data Workflow
: 데이터 처리의 작업 절차
*DAG(Directed Acyclic Graph)
: 방향성 비순환 그래프, 순환 구조가생기면 안된다.
*Apache Oozie
*Apache Airflow(파이썬 가능)
7. 컴퓨터 클러스터
: 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
- 물리적으로는 여러 대의 컴퓨터이지만 외부 사용자는 마치 한 대의 컴퓨터인 것처럼 사용 가능하다.
* 클러스터의 구성요소 :
- Node(Master + Slave)(서버)
- Network
- OS
- Middleware
*목적 : 분산 컴퓨팅 기술을 활용한 우수한 성능
* SPOF(Single Point of Failure)
: 단일 장애지점의 약자로, 시스템 구성 중에 한부분이 동작하지 않으면 전체 시스템이 중단되는 요소를 뜻한다. SPOF는 클러스터에 매우 치명적이다.
*HA(High Availability)
: 고가용성, 서버와 네트워크, 프로그램 등의 시스템이 지속적으로 운영이 가능한 성질
→ 클러스터에서는 SPOF가 없어야 하며, HA가 유지되어야 한다.
8. Scale Up & Scale Out
1) Scale Up : 서버 자체 RAM, CPU, Disk 등의 구성요소 자체를 업그레이드하여 컴퓨팅 성능을 향상시키는 방법
2) Scale Out : 네트워크 상의 컴퓨터 수나 서버 수를 늘려 컴퓨팅 성능을 향상시키는 방법
9. SQL(Structured Query Language)
: 관계형 데이터베이스의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 데이터베이스에서 정형 데이터분석을 위한 필수 요소이다.
* 관계형 데이터베이스
: 키와 값들의 간단한 관계를 테이블화시킨 매우 간단한 원칙의 전산정보 데이터베이스
*DDL (Data Definition Language)
: 관계형 데이터베이스에 테이블 구조를 정의하고 생성하거나 기존의 테이블의 구조 변경 또는 삭제하는 명령어
#데이터베이스마다 언어가 조금씩 다를 수 있으니 주의하도록 하자.
*DML(Data Manipulation Language)
: 데이터베이스의 테이블에 들어있는 데이터들을 조회하거나 변경하는 명령어
*DCL(Data Control Language)
: 데이터베이스에 있는 테이블에 대한 사용권한 부여나 회수를 위한 명령어
* TCL(Transaction Control Language)
: 트랜잭션 제어 언어
#트랜젝션 : 수행 결과에 완전성을 보장하는 단위
10. 하둡(Hadoop)
: Open Source Java Software Framework
* 구성요소 : 하둡 분산 파일 시스템(HDFS : Hadoop Distributed File System, 저장 기능), 맵리듀스(연산 기능)
1) HDFS
: 하둡의 분산형 파일 시스템
- Name Node : 파일의 메타정보를 관리
- Data Node : 실제 데이터를 저장하고 내보내는 역할
#Metadata : 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터이다. 대량의 정보 가운데에서
찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다.
2) MapReduce
: Map과 Reduce라는 두 개의 함수의 조합으로 분산/병렬 시스템에서 데이터를 처리하는 프레임워크이다.
- Map : 나누어진 단위에서 계산
- Reduce : Key 별로 병합
11. Spark
: In-Memory 기반 Open Source Cluster Computing Framework
분산환경에서 동작하는 메모리기반의 데이터처리 오픈소스
- Hadoop의 MapReduce와 유사한 역할을 하지만 Memory 활용을 극대화했기 때문에 연산속도가 월등히 빠르다.
- 최근에는 Memory 가격이 많이 저렴해졌고, H/W성능이 많이 올라가서 MapReduce보다 Spark를 선호한다.
- Scala, Python으로 개발이 가능하다.
* RDD(Resilient Distributed Datasets)
: 스파크에서 활용되는 내부 데이터 모델
- 병렬처리가 가능
- 장애가 발생할 경우에도 스스로 복구한다.
- 한번 생성되면 바뀌지 않고 다른 형태의 변환이 필요할 경우 새로운 RDD를 만들어냄
- 장애시 RDD 진행 절차를 기억했다가 그대로 수행하여 빠르게 복구한다.
12. Hive
: 하둡 기반의 데이터 웨어하우스 소프트웨어
- SQL 기반의 데이터 요약, 질의 및 분석 기능을 제공한다.
- 하이브 활용 이유 : SQL을 활용하여 쉽게 코딩 가능하다.
하이브 외에도 presto, Apache Drill 등의 다른 SQL on Hadoop 프로그램들이 있다.
13. NoSQL(Not Only SQL) :
* NoSQL DB의 등장 배경 :
- 관계형 데이터베이스의 한계점 도달
: 전통적인 관계형 데이터베이스는 테이블 간 관계를 통하여 다양한 데이터 조회가 가능했지만, 빅데이터 시대의 도래에 따라 대량의 데이터 적재에 따른 비용증가, 처리성능 한계라는 문제점 생겼다. 데이터 확장에도 많은 비용이 듦.
→ 관계형 데이터베이스의 일부 기능을 포기하더라도 확장에 유연하면서 저장/조회에 높은 성능이 요구되었다.
* 특성 :
- 고정형 Table, Schema 불필요
- 적재와 조회에 성능 최적화
- 테이블 간 관계형 설정 지양( Join 사용할 경우 성능 저하 )
- Scale Out을 통한 수평적 규모 확장이 가능
- 분산형 Database
* CAP 이론
- 분산 시스템에서 세 가지 속성을 모두 만족할 수 없다는 이론
- 일관성(Consistency) : 모든 사용자가 같은 순간에 같은 데이터를 볼 수 있다.
- 가용성(Availability) : 모든 클라이언트는 항상 읽기 / 쓰기가 가능하다.
- 분할성(Partition Tolerance) : 시스템이 물리적 네트워크로 분할된 상태에서 정상 동작한다.
* 관계형 데이터베이스의 특성 : ACID
트랜잭션이 안전하게 수행되는 것을 보장하기 위해 관계형 데이터베이스가 가져야 하는 특성
- 원자성(Atomicity) : 한 트랜잭션 안의 모든 작업은 모두 성공하거나 실패해야 한다.
- 일관성(Consistency) : 한 트랜잭션이 성공하면 모든 데이터는 동시에 일관된 상태로 유지된다.
- 고립성(Isolation) : 한 트랜잭션이 수행되는 동안 다른 트랜잭션이 수행될 수 없다.
- 지속성(Durability) : 트랜잭션이 성공하면 해당 최종 상태는 영원히 반영되어야 한다.
* No SQL의 특성 : BASE
- Basically Available : 데이터는 어떠한 경우에든 항상 활용될 수 있다.(ACID의 고립성과 대립되는 특성)
- Soft-State : 분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신
- Eventual Consistency : 일관성을 제공하되 모든 노드에서 동시에 보장되지는 않음
시간이 지나면 일관성이 보장되는 '지연된 일관성'을 보장한다.(ex : 핸드폰으로 페이스북 업데이트했는데 PC에서는 바로 보이지 않을 수 있음, 최종적으로는 일관성이 유지되나 시간차가 존재할 수 있다.)
* NoSQL의 활용
- 실시간 대용량 데이터 적재 필요시
- 테이블 간 Join 등의 처리가 거의 없는 경우
- 추후 DB 확장이 유연해야 하는 경우
* NoSQL의 주의점
- No SQL 특성에 맞는 Table 설계가 매우 중요하다. 관계형 데이터베이스와 전혀 다름.
- 테이블 간 Join을 할 경우 성능 저하 심하다.
- 유지보수에 따른 운영 인력 확인 필수
'데이터 사이언스 > 패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 7주차 : 중학교 수학으로 이해하는 통계와 데이터 분석 (0) | 2019.10.22 |
---|---|
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 6주차 : 데이터 분석가 (0) | 2019.10.20 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 4주차 : 딥러닝 (0) | 2019.10.01 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 3주차 : 머신 러닝 (0) | 2019.09.25 |
[패스트캠퍼스 학습일지] 데이터분석 올인원 패키지 _ 2주차 : 기초 통계 (0) | 2019.09.25 |