# [데이터 수집] 데이터 종류

## 데이터의 종류

---

앞의 ‘데이터의 정의[’](https://www.notion.so/669568b749934f1da6a05239263e1bbf?pvs=21)에서 데이터는 데이터 베이스에 저장된다고 언급했다.

데이터의 종류는 데이터가 데이터베이스에 ‘어떤 형식으로 저장’ 되는 지에 따라 ‘정형데이터’, ‘비정형 데이터’, ‘반정형 데이터’로 나뉜다. 

**정형데이터**

- 형태가 있음

- 연산이 가능

- 예) 엑셀, csv

**반정형데이터**

- **형태가 있음**

- **연산이 불가능**

- **예) HTML, XML**

**비정형데이터**

- 형태가 없음

- 연산이 불가능

- 예) 사진, 영상, 음성

## 정형 데이터 (Structured Data)

---

### 정형데이터란?

- 데이터베이스 종류 중 관계형 데이터베이스 (Relational Database; RDB), 스프레트 시트(Spread Sheet), 확장자 csv인 파일에 저장할 수 있는 테이블 형태의 데이터를 의미한다.

- 수학적 용어 “관계”는 테이블로 유지되는 형성된 데이터 세트를 지정한다.

- 즉, 행과 열로 이루어진 테이블 형태의 데이터를 의미한다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165440_u99OQLYpvivrjnpnES?q=80&s=1280x180&t=outside&f=webp)

- 정형 데이터에서 테이블의 모든 행은 동일한 열을 가진다.

- 정형 데이터는

- 데이터 테이블은 고객 번호와 같이 행마다 고유한 값을 가진 **식별키 (Prime Key, Primary Key)**가 존재한다.

- 이 식별키를 이용하여 데이터 테이블 사이의 관계를 알 수 있다.

### 스키마 (Schema)

쇼핑몰의 정형 데이터를 예시로 들어보자.

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165453_yoglJXQqtdAPkfPaRP?q=80&s=1280x180&t=outside&f=webp)

- 위의 사진과 같이 고객 정보, 상품 정보, 주문 정보를 모두 한 테이블에 넣으려고 하면 어떻게 될까?

- 열(column)이 굉장히 많은 테이블이 될 것이다.

- 그리고 이러한 테이블은 고객, 상품, 주문이 증가할 수록 관리하기 힘들어질 것이다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165500_B0qw4h26zfKoQzZCIi?q=80&s=1280x180&t=outside&f=webp)

- 따라서 여러 개의 테이블로 나눠 저장한다면, 관리가 더 쉬워질 것이다.

- 또한 테이블에 이름을 붙이면 정보를 찾는 일도 쉬울 것이다.

- 식별키는 데이터를 여러 테이블로 나눠서 관리할 때 테이블들의 상호 연결하는 역할을 한다.

- 관계형 데이터베이스에 데이터를 저장하려면 필드(열, Field)에 맞게 데이터 값이 잘 입력되어야 한다.  (주문번호에 고객ID가 들어가면 안 된다.)

- 데이터 테이블에 식별키는 무엇이고 필드마다 어떤 값이 들어가야 하는 지에 관한 조건이 정리된 데이터가 필요 → **스키마(Schema)**

### 정형데이터 정의

이제 위에서 배운 내용을 통해 정형 데이터를 여러 표현을 사용하여 정의해볼 수 있다. 

- 행과 열로 이루어진 테이블로 이루어진 데이터

- 값의 의미를 파악하기 쉽고, 규칙적인 값이 들어가 있는 데이터

- 미리 정해진 스키마 (Prefined Schema)에 따라 관계형데이터베이스에 저장될 수 있는 데이터

### SQL

그렇다면 관계형 데이터베이스에 저장된 관계 데이터 중에 필요한 데이터를 어떻게 찾을 수 있을까?

- 관계형 데이터베이스에서 필요한 데이터를 불러오거나 활용할 때 사용하는 언어가 **SQL (Structured Query Language)**이다.

- SQL이라는 언어로 찾고 싶은 데이터의 조건을 검색하고 데이터를 조회해야 한다.

- 이때 던지는 질문을 쿼리(Query)라 한다.

- 쿼리를 통해 얻은 데이터를 계산하거나, 패턴을 알아보는 등 분석을 진행할 수 있다.

- 관계형 데이터베이스를 다루는 시스템: MySQL, Oracle, PostgreSQL, Microsoft SQL Server 등

## 비정형 데이터 Unstructured Data

---

### 비정형 데이터 예시

개인적으로 비정형 데이터는 말보다 그림으로 보았을 때 더 쉽게 이해할 수 있었다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165544_Bd4XalxWCVSqRMLqM8?q=80&s=1280x180&t=outside&f=webp)

- 위의 사진은 비정형 데이터의 예시이다.

- 사람이 이 사진을 보았을 때는 자료가 자동차에 대해 이야기한다는 것을 쉽게 알 수 있다.

- 하지만 위의 사진에는 자동차 사진과 텍스트들이 규칙 없이 작성되었다.

- 따라서 컴퓨터의 입장에서는 규칙이 없는 위의 데이터를 처리하기 어렵다.

- 결국 비정형 데이터란 정해진 규칙(rule)이 없어서 값의 의미를 쉽게 파악하기 힘든 데이터를 의미한다.

### 비정형 데이터란?

- 비정형 데이터는 사전 정의된 방식으로 구성되지 않았거나 사전 정의된 데이터 모델이 없는 정보이다.

- 즉, 스키마에 따라 테이블 형식으로 데이터가 저장되는 것이 아니라, 데이터 형태와 구조가 복잡한 다이나믹한 스키마 (Dynamic Schema)에 따라 데이터가 저장된다.

- 비정형 데이터는 데이터마다 다른 스키마를 가질 수 있다.

- ex) 영상, 음성, 이미지, 바이너리(byte) 데이터 파일, 워드(Word), PDF와 같은 문서, 소셜 미디어 활동 데이터 등

### NoSQL

- 비정형 데이터는 비정형 데이터베이스 (Non-Relational Database; NoSQL)에 저장된다.

- NoSQL에는 전혀 다른 특성을 가진 데이터를 저장할 수 있다.

- 비관계형 데이터베이스 시스템: MongoDB, AWSDynamoDB, Cassandra, Redis 등

    - 관계형 데이터 베이스 → 하나의 데이터베이스 시스템을 알면 다른 것도 금방 익힘

    - 비관계형 데이터 베이스 → 데이터에 따라 저장소가 다르기 때문에 하나의 시스템을 안다고 다른 것을 사용할 수 있는 것은 아님

    - 비정형 데이터를 저장하는 다양한 데이터베이스의 형식 중에는 ‘키-밸류 저장’, ‘문서 저장’, ‘그래프 저장’, ‘와이드-칼럼 저장’이 있다.

**키-밸류 저장**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165610_M5evPPPT2IrCPrVaey?q=80&s=1280x180&t=outside&f=webp)

- 하나의 키와 하나의 값이 한 쌍으로 묶인 가장 간단한 저장 방법

- 중복된 키X

- 숫자, 문자열, 이미지, 음성 등 다양한 값 가능

- 주요 제품: AWS DynamoDB, Redis, Hbase 등

**문서 저장**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165619_iSgTQXIXZwTTJb46G3?q=80&s=1280x180&t=outside&f=webp)

- 키-밸류 저장과 비슷한 형식

- JSON(제이슨, JavaScript Object Notation, {키:밸류} 형태의 데이터), XML(eXtensible Markup Language, HTML을 개선해 만든 언어), BSON(Binary Jason)과 같은 문서 형태

- 주요 제품: MongoDB, MondgoDB Atlas, AWS DynamoDB, AWS DocumentDB, Google Cloud Fierstore, Couchbase SErver, Azure Cosmos DB, IBM Cloudant 등

**그래프 저장**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165645_y63PI8d0pOA9lHvuFO?q=80&s=1280x180&t=outside&f=webp)

- 많은 객체에서 연결 관계를 표현할 때 유용

- 관계의 수나 종류 제약 X

- 관계를 표현할 때 <시작노드>→<도착노드>와 같이 방향이 필요

- 주요 제품: Neo4j, Azure Cosmos DB, AWS Neptune 등

**와이드-칼럼 저장**

![Image](https://upload.cafenono.com/image/slashpagePost/20250201/165703_ztOJ90FBReh0YagTy4?q=80&s=1280x180&t=outside&f=webp)

- 관계형 데이터베이스와 비슷해 보이지만,

- 와이드-칼럼 저장은 하나의 행에 여러 개의 칼럼으로 되어 있다.

- 각 행마다 다른 열을 가질 수 있다. → 고정된 스키마가 없다.

- 주요제품: Cassandra, Hbase 등

## 반정형 데이터 Semi-structured Data

---

### 반정형 데이터란?

- 구조화된 데이터 (관계형 데이터베이스)로 구성되어있지 않지만 여전히 어느 정도 구조를 가지고 있는 정보

- 반정형 데이터의 예: HTML(Hypertext Matkup Language; 웹 페이지를 만드는 언어의 한 종류), 오픈 API(Open Application Programming Interface)에 사용되는 XML, JSON, 로그파일 등

```javascript
// XML 파일
<root>
    <element>
        <사용자>ABC_123</사용자>
        <이름>홍길동<이름>
    </element>
    <element>
        <사용자>ABD_234</사용자>
        <이름>김철수<이름>
    </element>
</root>
```

```javascript
// JSON 파일
[
    {
    "사용자ID": "ABC_123",
    "이름": "홍길동",
    },
    {
    "사용자ID": "ABD_234",
    "이름": "김철",
    },
]
```

- 반정형 데이터를 살펴보면 어떤 내용이 포함되었는지는 확인할 수 있지만, 테이블의 형태로 구조화되어 있지 않기 때문에 연산에는 적합하지 않다.

- 저장방법: 주로 JSON형식으로 저장, QWS DynamoDB와 같은 클라우드 서비스를 이용하기도 한다.

### 스크래핑 (Scrapping)

- 스크래핑은 웹사이트나 문서 파일을 데이터로 추출하는 작업이다.

- 스크래핑: 비정형데이터(이미지) → 반정형데이터(HTML)

- 스크래핑 후 데이터 분석 시: 반정형데이터(HTML) → 정형데이터(CSV)

For the site tree, see the [root Markdown](https://slashpage.com/yerim-devnote.md).
