컴퓨터 구조와 파일

컴퓨터의 구조와 텍스트 파일과 인코딩, 실행 파일(프로그램)에 대해서 알아봅니다.
파일, 프로그램, 컴퓨터 구조, 인코딩


컴퓨터 구조

컴퓨터의 구조컴퓨터의 구조

  • 중앙 처리 장치
    CPU
  • 주 기억 장치
    RAM (메모리)
  • 보조 기억 장치 (주변기기)
    HHD/SSD, USB, CD-ROM 등
  • 기타 주변 기기
    카메라, 스피커, 마이크, 디스플레이, 키보드, 마우스, 터치패드, 프린터, 블루투스/와이파이 모듈, 랜카드 등

CPU는 기본적으로 메모리에 있는 명령들을 순차적으로 실행하는 역할을 담당합니다. 이 때의 명령은 단순한 산술 계산에서 부터 메모리나 보조기억장치 또는 주변 기기에 데이터를 읽고 쓰기(IO: Input Output)를 제어하기 까지 다양합니다.
CPU는 계산 능력을 가진 유일한 사람, 메모리는 사람 앞의 책상, 보조 기억 장치는 책상 옆에 책이 빼곡하게 꽂힌 책장으로 생각 할 수 있겠습니다.

파일

UNIX 기반 운영체제의 파일 시스템

기호파일의 종류
d디렉토리 (폴더)
pFIFO (IPC 용도)
s소켓 (IPC 용도)
b블록 장치 (HDD, CD-ROM, 디스켓 등)
c문자 장치 (프린터, USB, Serial 장치 등)
-일반 파일

디렉토리부터 IPC (프로세스간 통신)을 위한 FIFO, 소켓 같은 특수한 파일(이 단계에서 이러한 내용을 알 필요는 없습니다), 그리고 주변 기기까지도 파일이라는 형태로 추상화 되어있습니다. 이렇게 컴퓨터가 기억하고 입/출력 하는 모든 종류의 정보는 결국 01010101…, 이진(binary) 데이터로 이루어져 있습니다. 컴퓨터의 운영체제는 파일 시스템을 설계하여 특수한 용도의 파일들을 정의하고 일반 파일들을 계층화하여 관리하고 있습니다.

파일 포맷

우리가 접하는 일반 파일들에는 .exe, .txt, .hwp, .doc, .xls, .html, .js, .java 등 셀 수 없이 많은 확장자가 있습니다. 하지만 이러한 확장자는 단순히 파일명 뒤에 붙어 파일의 종류를 강조하는 용도일 뿐, 파일명의 일부분에 불과합니다. 때문에 확장자가 없어도 문제 없습니다. 또한 위에서 얘기한 것처럼 모든 파일은 결국 01010101…로 가득 할 뿐 그 자체로서는 의미를 갖지 못합니다. 파일에 기록된 이진 데이터가 의미를 가질 때는 관련된 소프트웨어(프로그램)이 파일을 읽고 쓸 때입니다. 이때 파일이 의미를 가지려면 이진 데이터를 특정한 약속에 맞추어 나열해야 합니다.

PDF 파일의 바이너리와 그 시그니처PDF 파일의 바이너리와 그 시그니처

이러한 특정한 약속을 파일 포맷이라고 합니다. 대표적인 파일 포맷으로는 문서, 프로그램, 영상, 사운드, 이미지, 압축 파일 등이 있겠습니다. 파일들을 열어(텍스트 편집기가 아니라 binary 편집기로 열어서) 내용물 010101…을 살펴보면 보통 맨 앞부분에 파일 시그니쳐(수십-수백 자리의 고유한 0101…)를 나열하면서 시작됩니다. 그 뒤의 데이터는 그 파일 포맷의 규칙대로 의미를 갖는 0101…이 나열 될 것입니다. 무슨 파일이든 간에 해당 파일 포맷의 구체적인 약속을 모르고서야 단순한 0101…로 보일 수 밖에 없겠습니다.

텍스트 파일과 인코딩

이때 소프트웨어들이 정하는 약속인 파일 포맷에 앞서서, 컴퓨터 초창기 때부터 0101…을 통해서 정수와 소수, 아주 큰 수 등의 수 체계를 표현하는 약속이 구현되었습니다. 나아가서 사람이 읽을 수 있는 문자를 표현하기 위해서 문자열을 표현하기 위한 ASCII라는 약속을 마련했습니다.

ASCII 표ASCII 표

… 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다. 아스키는 1967년에 표준으로 제정되어 1986년에 마지막으로 개정되었다. 아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다. … (위키백과)

위의 ASCII 처럼 정수와 문자(숫자, 공백 및 특수문자를 포함)를 1대 1로 맵핑한 것을 인코딩이라고 합니다. 기본적인 ASCII에는 0부터 127까지의 수에 128개의 문자가 각각 맵핑되어있습니다. ASCII는 이렇게 1byte 인코딩으로 그 중에서 7bit만으로 문자 128개를 표현하고 있습니다. 나아가 ANSI 인코딩은 ASCII 인코딩에서 남은 1bit를 활용해 128부터 255까지의 수를 다른 언어로 확장한 1byte 인코딩입니다. 예로 ANSI-949는 남은 128~255를 한글에 맵핑한 인코딩입니다. 나아가 전세계의 다양한 언어권의 문자를 인코딩하기 위해서 Unicode라는 표준이 자리를 잡았습니다.

유니코드(Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이며, 유니코드 협회(Unicode Consortium)가 제정한다. 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자들을 다루기 위한 알고리즘 등을 포함하고 있다. … (위키백과)

유니코드에는 여러 인코딩이 있으며 그 중 대표적인 UTF-8은 전 세계의 문자를 1byte에서 4byte까지의 가변 길이로 표현합니다. 브라우저나 텍스트 편집기에서 문자, 특히 한글이 깨지는 경우는 저장 할 때(서버에서 전송해주는 웹페이지)의 인코딩과 읽을 때(브라우저에서 다운 받은 웹페이지를 해석 할 때)의 인코딩이 서로 일치하지 않는 경우입니다. 서로 다른 약속 체계로 소통하려하니 문제가 되는 것입니다.

실행 파일

윈도우즈의 PE 파일 포맷윈도우즈의 PE 파일 포맷

프로그램 혹은 실행 파일(executable)도 일반 파일입니다. 프로그램은 운영체제에 종속되어서 실행되기 때문에 윈도우즈의 실행 파일(.exe 파일 등)은 PE라는 파일 포맷을, 유닉스 기반 운영체제들은 ELF라는 파일 포맷을 또 MacOS의 경우는 Mach-O라는 파일 포맷을 따르고 있습니다. 윈도우즈에서 실행되는 파일이 리눅스에서 실행되지 않는 이유는 이처럼 실행파일들이 운영체제에 종속적인 파일 포맷을 따르고 있기 때문입니다. 프로그램의 구조와 실행 원리에 대해서는 다음 장에서 다룹니다.

이 강의를 포함한 커리큘럼
저자

김동욱

개발 경력 약 10년, 전문 분야는 웹 및 각종 응용 소프트웨어 플랫폼입니다. Codeflow를 운영하고 있습니다.

2018년 04월 08일 업데이트

지원되지 않는 웹 브라우저거나 예기치 않은 오류가 발생했습니다.