✅ 빅데이터의 정의
빅데이터를 이론으로 공부하면 주로 3V(Volume, Velocity, Variety)라 정의한다. 이는 각각 규모의 증가, 다양성, 처리 속도를 뜻한다.
- 규모의 증가(Volume): 기존 데이터 수집, 관리, 처리 소프트웨어의 한계를 넘어선다.
- 처리 속도(Velocity): 데이터의 양과 내용이 끊임없이 변화(실시간성 정보가 증가)함에 따라 대규모 데이터의 빠른 처리, 분석이 요구된다.
- 다양성(Variety): 비정형 데이터의 종류가 다양해진다.
여기서 규모의 증가에 집중해서, '기존 소프트웨어의 한계를 넘어섰다'의 기존 소프트웨어는 MySQL, Orcale과 같은 관계형데이터베이스를 의마한다. 이러한 소프트웨어는 대부분 분산환경이 아닌 서버 한 대만을 염두에 두고 만들어졌다. 이러한 경우 데이터 처리 용량을 늘리려면 CPU, memory 등 서버의 리소스를 추가해야 하고, 이러한 방식을 스케일 업이라고 한다.
기존 소프트웨어가 서버 한 대를 염두에 두고 만들어졌으니, 기존 소프트웨어의 한계를 넘어섰다는 말은 서버 한 대로 처리할 수 없는 규모로 데이터가 증가했다는 말과 같다.
✅ 크롤링
구글, 네이버 등 포탈은 콘텐츠를 크롤링해서 검색 엔진에 인덱싱해 검색 서비스를 제공한다. 검색 엔진은 불특정 다수를 대상으로 하기 때문에 고려해봐야 하는 문제가 많다. 대표적인 문제로는 (1) 웹 페이지가 규칙을 잘 지키지 않고 만들어진 경우, (2) 자바스크립트를 많이 사용한 경우, (3) 속도가 있다.
위와 같은 이유로 크롤링을 하는 것도 어렵지만, 웹 페이지는 계속해서 변화하기 때문에 이를 크롤러는 계속해서 다시 크롤링하고 인덱싱해야한다. 따라서 저장하고 인덱싱하는 것도 만만찮게 어려운 일이다.
검색엔진은 이러한 작업을 실시간으로 해내야 하기 때문에 분산파일시스템과 분산처리시스템 없이는 구현이 상당히 힘들다.
✅ 데이터 수집
위의 크롤링은 데이터 수집 기술 중 하나다.
1. 데이터 유형에 따른 데이터 수집
- 정형 데이터: RDB(ODBC), 스프레드시트
- 반정형 데이터: XML, HTML, JSON etc.
- 비정형 데이터: API, Crawling, RSS etc.
2. 데이터 수집 기술에 따른 데이터 수집
- 정형 데이터: Sqoop(SQL to Hadoop) etc.
- 로그 데이터: Flume, Chukwa, FTP, Scribe etc.
- 웹 크롤링: Crawler, Scrap, Nuth etc.
✅ 데이터 저장
데이터 유형에 따른 데이터 저장
- 정형 데이터: RDB
- 반정형 데이터: RDB, NoSQL
- 비정형 데이터: NoSQL, HDFS, GFS
NoSQL(대표적으로 MongoDB)은 RDBMS보다 상대적으로 제한이 적어 RDBMS의 한계를 극복하고 유연하고 확장성 있는 데이터 모델 설계을 설계할 수 있다.
HDFS(Hadoop Distributed File System), GFS(Google File System)으로 대표되는 분산파일시스템은 데이터를 확장 가능한 분산 파일 형태로 저장한다. 고성능의 Fault-tolerance 환경을 제공한다.
✅ 인덱싱
인덱스는 데이터베이스에서 고속검색을 위해 활용하는 구조다. 과거에 텍스트 파일에서 원하는 단어를 찾기 위해 ctrl+f를 눌러 찾기 버튼을 눌렀다가, 렉이 걸려서 노트북이 멈췄던 기억이 난다. 이러한 찾기 방식은 선형 검색으로 문서의 크기에 비례하는 시간이 걸린다.
데이터의 수가 적다면 괜찮지만, 데이터의 수가 많다면 빠른 검색을 위해 새로운 방법이 필요하다. 그래서 사용하는 방법이 인덱스 구조다. 인덱스 구조는 책의 인덱스(찾아보기, 색인)와 같이 키워드와 위치의 구조로 되어있다.
인덱스 구조를 사용하기 위해서는 데이터가 담긴 파일 외에도 인덱스 파일(사용자 ID에 따른 파일 시작 위치)이 필요하다.
액세스가 2단계로 필요하다는 단점이 있지만 인덱스 파일, 데이터가 담긴 파일 모두에서 지정 위치에 곧바로 접근할 수 있기 때문에 빠른 검색이 가능하다. 인덱스는 데이터와 별도로 관리하기 때문에 데이터를 업데이트할 때마다 인덱스도 업데이트 해야 해서, 업데이트 비용은 증가하지만 검색 속도도 빨라진다.
실제로 데이터베이스에서는 범용성을 추구해 키 값을 해시 함수에 대입해 해시 값과 값의 쌍을 갖는 구조인 해시 인덱스를 주로 사용하고 있다. 해시 값은 문자열 길이에 관계없는 동일한 크기고, 해시 계산 비용은 데이터의 양에 의존하지 않기 때문에 검색 속도에 영향을 주지 않는다. 해시 충돌 여부를 확인하는 기능은 당연히 필요하다. 이러한 기능을 구현해도 선형검색보다 속도는 월등하다.
✅ 페이지랭크
웹 페이지들 간의 링크 관계를 따져 중요도를 계산하는 알고리즘이다. 정의부터 재귀적인 구성을 가지고 있어, 각 페이지들의 중요도가 크게 변하지 않을 때까지 반복 실행이 필요하다(페이지간 페이지 랭크 값을 주고 받는 것을 반복하다보면, 전체 웹 페이지가 특정한 페이지 랭크 값을 수렴한다는 사실을 통해 각 페이지의 최종 페이지 랭크를 계산).
페이지랭크(PageRank)는 월드 와이드 웹과 같은 하이퍼링크 구조를 가지는 문서에 상대적 중요도에 따라 가중치를 부여하는 방법으로, 웹사이트 페이지의 중요도를 측정하기 위해 구글 검색에 쓰이는 알고리즘이다. 이 알고리즘은 서로간에 인용과 참조로 연결된 임의의 묶음에 적용할 수 있다.
- 위키피디아 페이지랭크(https://ko.wikipedia.org/wiki/페이지랭크))
'Data' 카테고리의 다른 글
데이터 기반 의사 결정(data driven decision making) (0) | 2021.04.19 |
---|---|
이상 탐지 기법 (0) | 2021.04.12 |
이미지 데이터가 부족할 때 생기는 문제(과적합; Over-fitting) 완화 방안 (0) | 2021.04.04 |
[자연어처리]파이썬으로 데이터전처리하기 (0) | 2021.03.30 |
[피처엔지니어링]Word2Vec (0) | 2021.03.28 |