데이터 포맷
세상에는 무수한 데이터가 쏟아지고 있다.
이러한 데이터를 컴퓨터에 저장을 할 때 다양한 형태로 저장된다.
그냥 text에 저장하면 안돼?
저장 해도 된다. 다만 데이터의 특성과 사용 목적에 맞게 저장을 해야한다.
고려 사항들
- 대용량 데이터
- 텍스트 파일 형식은 처리 및 읽기가 느릴 수 있다.
- 이러한 경우 binary 형식이나 데이터베이스, 빅데이터 시스템 등의 다른 형식을 고려해야 한다.
- 구조화 된 데이터
- JSON, CSV, XML과 같이 특정 형식이 있는지 확인한다.
- 보안
- 민감한 정보의 경우, 데이터베이스의 암호화 기술을 사용하는 것이 안전할 수 있다.
- 검색과 효율
- 데이터를 효율적으로 관리하고 검색해야 하는 경우 데이터베이스가 더 나은 선택일 수 있다.
- 이진 데이터
- 이미지, 오디오, 비디오는 텍스트 파일에 저장하기 어려워 데이터 타입에 맞게 저장해야 한다.
- 가용성과 확장성
여러가지 데이터 포맷
XML
- Extensible Markup Language의 약어이다.
- 다목적 마크업 언어로, 데이터를 저장하고 전송하는 데 사용되는 텍스트 기반의 언어이다.
- 태그를 통해 데이터를 표시하는 형태이다.
- HTML에서는 태그를 통해 데이터의 모양과 느낌을 정의한다.
- 단순 게임 옵션, 직접 데이터 수정이 잦은 부분에서 사용한다.
<person>
<name>John Doe</name>
<age>30</age>
<city>New York</city>
</person>
JSON
- JavaScript Objet Notation의 약어이다.
- JavaScript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다.
- 서버에서 클라이언트로 데이터를 보낼 때 사용하는 양식이다.
- 기본 데이터 타입인 문자열, 숫자, 배열, 불리언, 객체 등을 포함할 수 있다.
- 서버 통신 등 데이터 이동에 관한 부분에서 사용한다.
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance", "Turning tiny", "Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
}
]
}
CSV
- Comma Separated Values는 몇 가지 필드를 쉼표로 구분한 텍스트 데이터 및 텍스트 파일이다.
- 간단한 테이블 또는 읽는 속도가 주요한 부분에서 사용한다.
parquet
- 하둡에서 컬럼 방식으로 저장하는 저장 포맷을 말한다.
- spark에 최적화된 형식이다.
- 컬럼 단위로 구성하면 데이터가 더 균일하여 압축률이 높다.
- 필요한 컬럼만 로드하기 때문에 디스크 I/O가 적다.
avro
- 대량의 데이터를 효율적으로 저장하고 전송하기 위한 개방형 데이터 직렬화 프레임워크이다.
- JSON과 비슷한 형식이지만 스키마가 존재한다.
- 직렬화 되어 있어 디버깅이 힘들다.
- 스키마 관리가 필요하다.
ORC
- parquet과 비슷한 형태로 column 기반으로 저장한다.
- hive에 최적화 되어 있다.