데이터 (컴퓨팅)

섬네일|컴퓨터 장치를 통해 시각화할 수 있는 다양한 종류의 자료.
컴퓨터 과학에서 **데이터**(data) 또는 **자료**는 하나 이상의 상징들의 모든 시퀀스이며, **데이텀**(datum)은 단일 상징의 자료이다. 자료는 해석되어야 정보가 된다. 디지털 데이터는 아날로그 표현 대신 1과 0의 이진법을 사용하여 표현되는 자료이다. 현대(1960년 이후) 컴퓨터 시스템에서는 모든 자료가 디지털이다.

자료는 저장된 데이터, 전송 중 데이터, 사용 중 데이터의 세 가지 상태로 존재한다. 컴퓨터 내부의 자료는 대부분의 경우 병렬 자료로 이동한다. 컴퓨터로 또는 컴퓨터에서 이동하는 자료는 대부분의 경우 직렬 자료로 이동한다. 온도 센서와 같은 아날로그 장치에서 얻은 자료는 아날로그-디지털 변환회로를 사용하여 디지털로 변환될 수 있다. 양, 문자 또는 상징을 나타내는 자료는 컴퓨터에 의해 연산이 수행되며, 저장되고 기록되며, 자기, 광학, 전자 또는 기계 기록 매체에 저장되고 디지털 전기 또는 광학 신호의 형태로 전송된다. 자료는 주변 장치를 통해 컴퓨터로 들어오고 나간다.

물리적 주기억장치 요소는 주소와 자료 저장 공간인 바이트/워드로 구성된다. 디지털 자료는 종종 관계형 데이터베이스, 예를 들어 테이블 또는 SQL 데이터베이스에 저장되며, 일반적으로 추상적인 키/값 쌍으로 표현될 수 있다. 자료는 배열, 그래프, 객체를 포함한 다양한 종류의 자료 구조로 구성될 수 있다. 자료 구조는 숫자, 문자열 및 심지어 다른 자료 구조를 포함한 다양한 자료형의 자료를 저장할 수 있다.

## 특성
메타데이터는 자료를 정보로 변환하는 데 도움을 준다. 메타데이터는 자료에 대한 자료이다. 메타데이터는 암시되거나, 명시되거나, 주어질 수 있다.

물리적 사건이나 과정과 관련된 자료는 시간적 구성 요소를 가질 것이다. 이 시간적 구성 요소는 암시될 수 있다. 이는 온도 로거와 같은 장치가 온도 센서로부터 자료를 수신하는 경우이다. 온도가 수신될 때, 자료는 현재의 시간적 참조를 가진다고 가정한다. 따라서 장치는 날짜, 시간 및 온도를 함께 기록한다. 자료 로거가 온도를 통신할 때, 각 온도 판독값에 대한 날짜와 시간을 메타데이터로 함께 보고해야 한다.

기본적으로 컴퓨터는 자료 형태로 주어진 일련의 지침을 따른다. 주어진 작업(또는 작업들)을 수행하기 위한 지침 집합을 프로그램이라고 한다. 프로그램은 컴퓨터 또는 다른 기계의 작동을 제어하기 위한 코드화된 지침 형태의 자료이다. 일반적으로 컴퓨터에 의해 실행되는 프로그램은 기계어로 구성될 것이다. 프로그램에 의해 조작되지만 중앙 처리 장치 (CPU)에 의해 실제로 실행되지 않는 저장 요소도 자료이다. 가장 본질적으로 단일 자료는 특정 위치에 저장된 값이다. 따라서 컴퓨터 프로그램은 프로그래밍 자료를 조작하여 다른 컴퓨터 프로그램에서 작동할 수 있다.

바이트 자료를 파일에 저장하려면 직렬화되어 파일 형식으로 만들어져야 한다. 일반적으로 프로그램은 다른 자료에 사용되는 파일 유형과 다른 특별한 파일 유형에 저장된다. 실행 파일은 프로그램을 포함하며, 다른 모든 파일도 데이터 파일이다. 그러나 실행 파일에는 프로그램에 내장된 프로그램에서 사용되는 자료도 포함될 수 있다. 특히 일부 실행 파일에는 상수와 변수의 초기 값을 포함하는 데이터 세그먼트가 있으며, 이 둘 모두 자료로 간주될 수 있다.

프로그램과 자료의 경계는 모호해질 수 있다. 예를 들어, 인터프리터는 프로그램이다. 인터프리터의 입력 자료는 그 자체로 프로그램이지만, 기본 기계어로 표현된 것은 아니다. 많은 경우, 해석된 프로그램은 사람이 읽을 수 있는 텍스트 파일이며, 문서 편집기 프로그램으로 조작된다. 메타프로그래밍도 마찬가지로 프로그램을 자료로 조작하는 것을 포함한다. 컴파일러, 링커, 디버거, 프로그램 업데이트 프로그램, 바이러스 스캐너 등은 다른 프로그램을 자료로 사용한다.

예를 들어, 사용자는 먼저 운영체제에 한 파일에서 워드 프로세서 프로그램을 로드하도록 지시한 다음, 실행 중인 프로그램을 사용하여 다른 파일에 저장된 문서를 열고 편집할 수 있다. 이 예에서 문서는 자료로 간주될 것이다. 워드 프로세서에 맞춤법 검사기 기능도 있다면, 맞춤법 검사기의 사전(단어 목록)도 자료로 간주될 것이다. 맞춤법 검사기가 수정 사항을 제안하는 데 사용하는 알고리즘은 기계어 자료이거나 어떤 해석 가능한 프로그래밍 언어의 텍스트일 것이다.

다른 용법으로는 이진 파일 (사람이 읽을 수 없는 파일)이 때때로 사람이 읽을 수 있는 텍스트와 구별되는 자료로 불리기도 한다.

2007년 디지털 자료의 총량은 2810억 기가바이트 (281 엑사바이트)로 추정되었다.

## 자료 키 및 값, 구조 및 지속성
자료의 키는 값에 대한 맥락을 제공한다. 자료의 구조에 관계없이 항상 키 구성 요소가 존재한다. 자료 및 자료 구조의 키는 자료 값에 의미를 부여하는 데 필수적이다. 값 또는 구조 내 값 모음과 직접 또는 간접적으로 연결된 키가 없으면 값은 의미를 잃고 자료가 아니게 된다. 즉, 자료로 간주되려면 값 구성 요소에 연결된 키 구성 요소가 있어야 한다.

자료는 다음 예시와 같이 컴퓨터에서 여러 방식으로 표현될 수 있다.

### RAM
* 랜덤 액세스 메모리 (RAM)는 CPU가 직접 접근할 수 있는 자료를 저장한다. CPU는 프로세서 레지스터 또는 메모리 내의 자료만 조작할 수 있다. 이는 CPU가 저장 장치(디스크, 테이프 등)와 메모리 간의 자료 전송을 지시해야 하는 자료 저장과는 다르다. RAM은 프로세서가 읽기 또는 쓰기 작업을 위한 주소를 제공하여 읽거나 쓸 수 있는 선형 연속 위치의 배열이다. 프로세서는 메모리의 어떤 위치든 언제든지 어떤 순서로든 작동할 수 있다. RAM에서 가장 작은 자료 요소는 이진 비트이다. RAM 접근의 기능과 제약은 프로세서에 따라 다르다. 일반적으로 주 메모리는 주소 0 (십육진법 0)에서 시작하는 위치 배열로 구성된다. 각 위치는 컴퓨터 구조에 따라 일반적으로 8비트 또는 32비트를 저장할 수 있다.

### 키
* 자료 키는 메모리의 직접적인 하드웨어 주소일 필요는 없다. 간접, 추상적, 논리적 키 코드는 자료 구조를 형성하기 위해 값과 함께 저장될 수 있다. 자료 구조에는 자료 값이 저장되는 구조의 시작 부분에서 미리 결정된 오프셋 (또는 링크 또는 경로)이 있다. 따라서 자료 키는 구조에 대한 키와 구조 내의 오프셋 (또는 링크 또는 경로)으로 구성된다. 이러한 구조가 반복되어 동일한 반복 구조 내에 자료 값과 자료 키의 변형을 저장하는 경우, 결과는 테이블과 유사하다고 간주될 수 있으며, 이 테이블에서 반복 구조의 각 요소는 열로 간주되고 구조의 각 반복은 테이블의 행으로 간주된다. 이러한 자료 구성에서 자료 키는 일반적으로 하나(또는 여러) 열의 값(또는 값들의 복합)이다.

### 정렬된 반복 자료 구조
* 반복 자료 구조의 테이블 보기는 여러 가능성 중 하나일 뿐이다. 반복 자료 구조는 계층적으로 구성될 수 있으며, 노드들이 부모-자식 관계의 연속으로 서로 연결된다. 값과 잠재적으로 더 복잡한 자료 구조가 노드에 연결된다. 따라서 노드 계층은 노드와 관련된 자료 구조를 주소 지정하기 위한 키를 제공한다. 이 표현은 역트리로 생각할 수 있다. 현대 컴퓨터 운영체제 파일 시스템은 일반적인 예이며, XML도 다른 예이다.

### 정렬되거나 순서가 있는 자료
* 자료는 키로 정렬될 때 본질적인 특징을 가진다. 키의 하위 집합에 대한 모든 값은 함께 나타난다. 동일한 키의 자료 그룹 또는 키의 하위 집합을 순차적으로 통과할 때, 이는 자료 처리 분야에서 브레이크 또는 제어 브레이크라고 불린다. 이는 특히 키의 하위 집합에 대한 자료 값의 집계를 용이하게 한다.

### 주변 저장 장치
* 플래시와 같은 대용량 비휘발성 메모리가 등장하기 전에는, 영구적인 자료 저장은 전통적으로 외부 블록 장치, 예를 들어 자기 테이프 및 디스크 드라이브에 자료를 기록함으로써 이루어졌다. 이러한 장치들은 일반적으로 자기 매체의 한 위치를 찾은 다음 미리 결정된 크기의 자료 블록을 읽거나 쓴다. 이 경우, 매체의 탐색 위치는 자료 키이고 블록은 자료 값이다. 초기에 사용된 원시 디스크 자료 파일 시스템 또는 디스크 운영체제는 데이터 파일을 위해 디스크 드라이브에 연속된 블록을 예약했다. 이러한 시스템에서는 파일이 가득 차서 모든 자료가 기록되기 전에 자료 공간이 부족해질 수 있었다. 따라서 각 파일에 충분한 여유 공간을 확보하기 위해 많은 사용되지 않는 자료 공간이 비생산적으로 예약되었다. 나중에 파일 시스템은 파티션을 도입했다. 이들은 파티션을 위해 디스크 자료 공간의 블록을 예약하고, 필요에 따라 파티션의 블록을 파일에 동적으로 할당하여 할당된 블록을 더 경제적으로 사용했다. 이를 달성하기 위해 파일 시스템은 카탈로그 또는 파일 할당 테이블에서 자료 파일에 의해 사용되거나 사용되지 않는 블록을 추적해야 했다. 이는 디스크 자료 공간을 더 잘 활용했지만, 디스크 전체에 파일이 단편화되고 자료를 읽기 위한 추가 탐색 시간으로 인한 성능 오버헤드가 발생했다. 최신 파일 시스템은 파일 접근 시간을 최적화하기 위해 단편화된 파일을 동적으로 재구성한다. 파일 시스템의 추가 개발은 디스크 드라이브의 가상화로 이어졌다. 즉, 논리 드라이브가 여러 물리적 드라이브에서 파티션으로 정의될 수 있다.

### 인덱싱된 자료
* 훨씬 더 큰 집합에서 자료의 작은 하위 집합을 검색하는 것은 비효율적으로 자료를 순차적으로 검색하는 것을 의미할 수 있다. **[[인덱스 (데이터베이스)|인덱스]]**는 파일, 테이블 및 자료 집합의 자료 구조에서 키와 위치 주소를 복사한 다음, 역트리 구조를 사용하여 원본 자료의 하위 집합을 검색하는 데 걸리는 시간을 줄이는 방법이다. 이를 위해 검색을 시작하기 전에 검색할 자료의 하위 집합의 키를 알아야 한다. 가장 인기 있는 인덱스는 B 트리와 동적 해시 키 인덱싱 방법이다. 인덱싱은 자료를 파일링하고 검색하는 데 오버헤드이다. 인덱스를 구성하는 다른 방법도 있다. 예를 들어, 키를 정렬하고 이진 탐색 알고리즘을 사용하는 것이다.

### 추상화 및 간접화
* 객체 지향 프로그래밍은 자료와 소프트웨어를 이해하기 위한 두 가지 기본 개념을 사용한다.
# 클래스의 분류학적 계층 구조 (계층적 자료 구조의 한 예)
# 런타임에 클래스 라이브러리에서 인스턴스화된 객체의 메모리 내 자료 구조에 대한 참조 생성
클래스의 특정 객체는 인스턴스화 후에만 존재한다. 객체의 참조가 지워지면 객체도 소멸된다. 객체 자료가 저장되었던 메모리 위치는 쓰레기로 분류되어 재사용 가능한 미사용 메모리로 재분류된다.

### 데이터베이스 자료
* 데이터베이스의 출현은 영구적인 자료 저장에 대한 추상화 계층을 추가했다. 데이터베이스는 메타데이터와 클라이언트-서버 시스템 간의 구조화된 쿼리 언어 프로토콜을 사용하며, 컴퓨터 망을 통해 통신하고, 자료를 저장할 때 2단계 커밋 로깅 시스템을 사용하여 트랜잭션의 완전성을 보장한다.

### 병렬 분산 자료 처리
* 아파치 하둡과 같은 현대의 확장 가능하고 고성능 자료 지속성 기술은 고대역폭 네트워크의 많은 일반 컴퓨터에서 대규모 병렬 분산 자료 처리에 의존한다. 이러한 시스템에서 자료는 여러 컴퓨터에 분산되므로 시스템의 특정 컴퓨터는 자료의 키에 직접 또는 간접적으로 표현되어야 한다. 이는 두 개의 동일한 자료 집합을 동시에 다른 컴퓨터에서 처리할 수 있도록 구별하는 것을 가능하게 한다.

## 같이 보기
* 빅 데이터
* 자료
* 데이터 사전
* 데이터 모델링
* 데이터 스트림
* 자료 집합
* 인덱스 (데이터베이스)
* 상태 (컴퓨터 과학)
* 튜플

## 각주