정보에 바다라는 표현에 걸맞게 자료들은 인터넷 세계와 우리들의 컴퓨터에 오늘도 유영중이다. 그런데 정보가 어떻게 표현되고 있길래  정확하게 어떻게 컴퓨터에 저장될 수 있는지 그러니까 그 "정보"라는 게 어떻게 표현되고 처리되는지 궁금하지 않은가? 이를 이해하면 우리의 컴퓨터와 죄 금 더 친해질 수 있을 것이다.

 

지난 씹정세 시간에 우리는 컴퓨터의 발전과 컴퓨터가 어떻게 구성되어 있는지를 알아보았다. 이번 포스팅을 통해서는 컴퓨터에 자료가 저장되는 구조와 그 원리를 알아보도록 하자. 


 

대리님 자료 이메일로 보냈어요! 자료 저장해 주세요!

* [붙임]자료_최종_진짜_최종_긴박_급함_견적서.docx

 

이진법

우리는 사람들과 이야기를 할 때 한국말을 쓰고, 숫자를 표현하기 위해 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 조합을 이용해서 이야기를 한다.(예를 들면 삼백칠십구는 3, 7, 9이다. 이-지하다.) 이를 10개의 문자로 표현하는 "십진법"이라고 한다.

 

그런데 우리 컴퓨터는 이 10개의 문자를 받아들일 수 있는 감수성을 가지고 있지 않다. 무뚝뚝한 우리 컴퓨터는 오로지 전기가 들어오면 1, 들어오지 않으면 0만을 감지한다. 숫자를 두 가지만 쓰기에 이를 "이진법"이라고 한다.

아쉽게도 우리의 컴퓨터는 똑똑한 척을 하는 장비가 맞는 표현 같다. 

 

이진법을 사용하는 방법을 간단하게 알아보자 우선 십진법의 계산을 조금 파고 들 필요가 있어 보인다.(알고 10을 2로 바꾸어 주면 되니까)

위의 식은 우리가 자주 아는 십진수인 379를 분해한 것이다. 일의 자리인 9부터 백의 자리인 3까지 가중치(십)가 제곱으로 증가하며 더해진다. 위처럼 이 진수인 101110을 표현해보자

십진수와 같은 원리로 계산하면 46이다. 쉽지 않은가

 

 

이진수 압축 

위의 379와 101110의 예시를 바라보면 어떤 생각이 드는가? 맞다 이진수는 사람이 읽기에 직관적이지 못하고, 수의 표현이 엄청 길어진다는 특징이 있다. (십진수 123456789는 이진수로 111010110111100110100010101이다.) 

그래서 컴퓨터를 이해할 때 이진수를 사람이 읽기보다 쉽게 2의 제곱수로 압축해서 표현한다.(ex : 4, 8, 16 등 실제로 4진수는 잘 안쓰의고, 32진수도 안 쓰인다. 이유는 뒤에서) 다음은 수의 예시이다.

이진수(binary) : 10('0b1010'), 50('0b110010'), 100('0b1100100'), 표현 가능한 문자가 0과 1밖에 없다.(2 미만)

팔 진수(octet) : 10('0o12'), 50('0o62'), 100('0o144') 표현 가능한 문자는 0~7이다.(8 미만)

십육 진수(hex) : 10('0xa'), 50('0x32'), 100('0x64') 표현 가능한 문자는 0~9 10개와 A(10), B(11), C(12), D(13), E(14), F(15) 

 

진수들 앞에 붙은 0b, 0o, 0x는 뒤에 수가 각각 이진수, 팔 진수, 십육진수임을 표현한다. 십진수로 0d(decimal)이 있긴 한데, 생략한다. 32진수를 안쓰는 이유는 31개의 문자를 배정하면 그게 오히려 직관적이지 못하기 때문이다. 뭐 자료들이 엄청 방대해지면 안쓸건 또 뭐겠냐만은...)

 

위에를 보고 바로 알기는 어렵겠지만, 비트를 3개씩 묶어서 읽으면 팔진수, 4개씩 묶어서 읽으면 십육 진수가 된다.

 

 

자료의 표현

봉화를 알고 있는가? 꺼져있는 상태와 켜져 있는 상태를 보고 불이 켜진 수준에 따라 먼 거리에 정보를 전달하던 아주 오래된 통신방식이다. 봉화도 이진법으로 표현이 가능하다. 아래의 사진을 보자

위의 상황은 봉화가 꺼짐을(0), 봉화가 켜짐을(1)이라고 할 때 010110을 보고 퇴근시간을 파악하는 시나리오이다. 

실제 컴퓨터에 저장되는 자료도 위와 동일한 방법이다. 엄청 많은 0과 1을 나열하고 이를 기억하는 게 컴퓨터에 자료가 저장되는 원리이다. 이해를 위해서 아래의 주소에서 HxD를 다운로드하자

mh-nexus.de/en/hxd/

 

HxD - Freeware Hex Editor and Disk Editor | mh-nexus

HxD - Freeware Hex Editor and Disk Editor HxD is a carefully designed and fast hex editor which, additionally to raw disk editing and modifying of main memory (RAM), handles files of any size. The easy to use interface offers features such as searching and

mh-nexus.de

* HxD는 컴퓨터에 저장된 파일을 십육진 수로 보여주는 훌륭한 도구이다.

 

필자의 컴퓨터에 저장된 그림파일 퇴근. png를 HxD로 열어보겠다.(여러분도 자기 컴퓨터에 저장된 아무 파일이나 가져와 보자)

<퇴근.png>
<HxD로 연 퇴근.png>

위에서 십육 진수 하나는 이진수 4개로 이루어져 있다고 설명했다. 다음의 엄청나게 많은 십육 진수를 확인할 수 있다. 보이는가 컴퓨터에 "정보"는 이런 식으로 저장되어 있는 것이다.


오늘은 씹정세 2번째 시간인 비트와 컴퓨터에 어떤 방식으로 "정보"가 저장되는지 돋보기로 알아보았다.  이 비트를 이야기하더라도 소주까고 날밤으로 이야기할 수 있다. 조금 더 자세한 정보는 앞으로의 포스팅을 기다려 주기를 바라며 오늘의 씹정세는 여기서 매듭짓겠다.

정규표현식은 여러 목적으로 사용된다. 정규표현식 자체는 어렵지 않다.

 

정규식(正規式)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.

< 정규표현식의 정의 : 출처 위키백과 ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D >

이 정규표현식이 참.... 알면 편한데 문자열 파싱 하는 일이 자주 없다 보니 필자는 자주 안 쓰게 된다. 사용법이 헷갈린 것도 있고, 자주 안 보면 까먹기 일수이다. 이번 포스팅에서 내 기억도 살릴 겸 정규표현식에 대해서 정리를 해보고자 한다.

 


패턴

일단 정규 표현식은 문자열을 표현하는 "패턴"이라는 놈이 존재한다. 즉 이 "패턴"을 가지고 노는 게 정규표현식에서 자유로워야 하는데, 이 "패턴"에는 특정한 의미를 가진 "메타 문자"라는 게 존재한다.(예를 들면 정규표현식에서 점(.)은 New Line을 제외한 모든 한 문자를 의미한다.)

 

표준 표현법

아래는 POSIX의 기본/확장 문법을 정리한 표이다.

메타문자 기능 설명
. 문자 New Line을 제외한 1개의 문자
[ ] 문자 집합 대괄호에 써있는 문자중 하나를 선택한다. 
ex : [abc]d >> ab, ac, ad
[^ ] 부정 대괄호에 써있는 문자를 제외하고 선택한다.
ex : [^abc]d >> 일단 ab, ac, ad는 뺀다.
^ 처음 처음을 의미한다. 
ex : ^[asdf] >> a, s, d, f로 시작하는 문자(열)
$ 끝을 의미한다.
ex : $[asdf] >> a, s, d, f로 끝나는 문자(열)
| 선택 여러 식 중 하나를 선택한다.(파이프다)
( ) 하위식 식 여러개를 하나로 묶는다. 약간 드모르간인듯
ex : abc|acd == a(b|c)d 
\n 일치하는n번째 패턴 일치하는 패턴 중 n번째 패턴을 의미한다. (New Line이 아니다!)
* 0회 이상 0개 이상의 문자를 포함한다. 
ex : a*b >> b, ab, aab, aaab, aaaab 등등
+ 1회 이상 1개 이상의 문자를 포함한다. 
ex : a+b >> ab, aab, aaab, aaaab 등등
? 0또는 1회 ex : a?b >> b, ab
{m, n} m회 이상, n회 이하 ex : a{1,4}c >> ac, aac, aaac, aaaac 

 

또한 문자열을 지정할 때 자주 사용하는 정규표현식은 다음과 같다. 

* 아래는 POSIX 표준이 아닌 ASCII 식을 첨부한다.(더 활용성이 높다고 생각한다.)

ASCII 표현식 설명
[A-Za-z0-9] 영숫자
[^A-Za-z0-9] 영숫자가 아님
[\t] 공백 혹은 탭
[\x00-\x1F\x7F] 제어문자(00은 NULL을 1F는 이스케이프 시퀀스를, 7F는 ASCII Character DEL(? 맞는지 모르겠다.)
[\x21-\x7E] 보이는 문자
[ \t\r\n\v\f] 모든 공백문자

 

POSIX란?

POSIX는 portable Operating System Interface의 약어로 서로 다른 UNIX의 공통 API를 정리해서 이식성을 향상하기 위한 IEEE의 표준규격이다. POSIX 규격은 C 언어의 시스템 콜(System Call), 압축 포맷까지 광범위한 범위를 표준 한다. Window도 POSIX 서브시스템과 비슷한 시스템(SUA)을 탑재하고 있어서 POSIX를 만족하는 응용 프로그램이 실행 가능하다.

 


정규표현식은 거의 모든 에디터나 프로그래밍 언어에서 지원한다. 자유자재로 사용할 줄 아는 게 확실하게 도움이 된다.

'정보보안-이론 > XX에 대하여' 카테고리의 다른 글

CAM Table에 대하여  (0) 2021.05.14
OLE에 대하여  (0) 2021.05.13
Cavity Virus에 대하여  (0) 2021.05.12
USBDumper에 대하여  (0) 2021.05.12
ICMPv4에 대하여  (0) 2021.05.11

반갑다 IT개나리반 친구들

 

씹 정세의 첫 시간은 우리가 자주 사용하는 이 콤퓨타(Computer)라는 놈이다. 이제는 우리 생활에 없어서는 안 되는 소중한 친구이고, 과거에 이거 없이 어떻게 살았지 라는 생각까지 하게 해주는 이 컴퓨터라는 놈을 씹어 먹어 보도록 하자

 


컴퓨터의 정의

 

컴퓨터는 전자 회로를 이용하여 프로그램과 정보를 전자적 형태(electronic form)로 저장하고 빠르게 계산하고, 입력 데이터를 정해진 프로그래밍에 따라 처리하고 정보로 출력하는 전자 기기(programmable machine)다

< 컴퓨터의 정의 : 위키백과 ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0 >

그렇다. 컴퓨터는 전자 회로를 이용한 저장, 계산, 처리, 출력을 해주는 전자 기기이다. 이 정의를 가진 요놈이 최근에는 빠지는곳이 없을 정도로 인기가 많은 그 컴퓨터다. 컴퓨터는 산업 / 예술 / 교육 등 사용되지 않는 곳을 찾아보기 힘들 정도로 대중화되어있고, 전문기관은 컴퓨터의 의존성이 높아지는 등 고도로 전문화되어있다. 그럼 이 대~단한 컴퓨터 누가 언제 만들었을까?

 

 

 

컴퓨터와 탄생

컴퓨터는 전쟁의 한복판에서 태어났다!

< 컴퓨터과학의 튜링테스트와 튜링기계를 만든 앨런튜링(1912~1954) 출처 : 위키백과 https://ko.wikipedia.org/wiki/%EC%95%A8%EB%9F%B0_%ED%8A%9C%EB%A7%81 >

 

난세에는 훌륭한 영웅이 태어나는 법, 컴퓨터는 제2차 세계대전에 중 많은 도약을 이루었다. 기본적인 계산만을 도와주는 주판부터 최초의 전자식 컴퓨터로 여겨지는 앨런 튜링의 암호해독 컴퓨터 콜로서스까지 16세기와 19세기까지 비약적인 발전을 이룬 전자계산분야는 20세기를 지나 비약적인 발전을 이루었고, 기어이 우리에게 개인용 컴퓨터가 보급이 된다.

 

* 최초의 컴퓨터가 무엇인지를 정의하기는 어렵다. 16세기 주판을 이용함으로 계산 기관이 생겨났고, 17세기에는 연산의 능력을 가진 차 분기관과 개념적으로 오늘날의 컴퓨터와 유사한 해석 기관이 등장하였다. 이 포스팅에서는 전자적인 의미의 컴퓨터의 탄생을 컴퓨터의 탄생으로 보았다)

 

컴퓨터의 구성

컴퓨터 뭘로 만들어 졌길래 그렇게 대단한지 분리해보자. 크게 컴퓨터의 구성을 HW적인 부분과 SW적인 부분으로 분리할 수 있다. 

1. HardWare(하드웨어) : 컴퓨터의 물리적인 부품
2. SoftWare(소프트웨어) : 컴퓨터에 저장된 특정한 목적의 하나 또는 다수의 컴퓨터 프로그램

 

하드웨어라 하면 사람으로 쳐서 몸이다. 다음과 같은 구성을 보통 이야기한다.

① 중앙 처리 장치(CPU, Central Processing Unit) 

< 핀이 있는 AMD 라이젠 CPU 출처 : 위키백과https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99_%EC%B2%98%EB%A6%AC_%EC%9E%A5%EC%B9%98 >

중앙 처리 장치는 컴퓨터를 통제하고 프로그램의 연산을 실행 / 처리 / 제어하는 제어장치이다. 우리가 실행하는 프로그램은 엄~청나 게 긴 명령어로 되어있다. 중앙 처리 장치는 이 명령어를 해석하고, 명령에 따라 작업을 실행한다.

 

② 기억 장치(Memory)

 

< 주기억 장치인 램 과 보조 기억 장치인 하드디스크 드라이브 출처 : 위키백과 https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%96%B5_%EC%9E%A5%EC%B9%98 >

기억장치는 컴퓨터에서 데이터를 일시적으로 혹은 영구적으로 기억하기 위한 장치로 크게 주기억장치, 보조기억장치로 나뉜다. 주기억장치는 RAM같이 빠르지만 적은 용량을 가진 기억장치를, 보조기억장치는 HDD같이 느리지만, 많은 용량을 가진 기억장치를 의미한다. 

 

③ 입출력 장치(I/O Unit) 

<대표적인 입력장치인 마우스 출처 : https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9A%B0%EC%8A%A4 >

입출력 장치는 컴퓨터에 정보를 입력하거나 컴퓨터에서 정보를 출력하기 위한 장치로 위 사진과 같은 마우스나 자주사용하는 키보드 등이 대표적인 입력장치이고, 프린터나 모니터가 대표적인 출력장치이다.

 

④ 시스템 버스(System Bus) 

버스는 데이터의 전송 통로이다. 지역과 지역을 연결하는 도로가 존재하듯 컴퓨터에서 중앙 처리 장치, 기억장치들과 연결되는 통로를 버스라고 부른다.

 

 

한편 소프트웨어는 다음과 으로 분류가 가능하다.

① 시스템 소프트웨어

 

<대표적인 시스템 소프트웨어인 Window10 출처 : 위키백과 https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_10 > 

시스템 소프트웨어는 컴퓨터를 작동하고 효율적으로 사용하기 위해서 사용자와의 대화를 도와주는 소프트웨어이다. 흔히 운영체제(OS, Operating System)나 프로그래밍 소프트웨어(C++, 베이식 등) 들이 시스템 소프트웨어로 이야기된다.

 

② 응용 소프트웨어

 

<압축목적의 대표적인 응용 소프트웨어 알집 출처 : 위키백과  https://ko.wikipedia.org/wiki/%EC%95%8C%EC%A7%91 >

 

특정한 목적을 달성하기 위한 프로그램으로 알려져 있다. 단순히 시스템 소프트웨어를 제외한 모든 소프트웨어는 응용소프트웨어라고 알아가면 좋을 거 같다.

 

컴퓨터의 사용

컴퓨터라고 생각해서 여러분 앞에 있을 법한 개인용 컴퓨터(PC, Personnal Computer)만 생각하면 큰 오산이다. 오늘날의 컴퓨터는 그 목적 / 규모 / 능력 / 운영체제에 따라 매우 상세화 되며, 당장 우리가 쥐고 있는 휴대전화도 컴퓨터의 일종이다. 


너무 많은 내용이 담기면 머리 아프니 차근차근 알아가는 걸로 하자 첫술에 배부를 수는 없는 법이니 간단하게 알아본 오늘의 지식을 점차 업그레이드한다는 느낌으로 가면 좋을 거 같다.

 

오늘 배운 것을 그림으로 정리하면 다음과 같다. 어떤가 멀게만 느껴지던 컴퓨터가 조금 가깝게 느껴지는가? 이제 다음으로는 컴퓨터의 각 장치가 어떻게 동작하는지를 알아보도록 하자 

 

 

[씹 정세]에 오신 여러분들을 환영한다.

 

필자는 우리나라의 정보보안 수준이 올라가기를 바란다. 기술의 발전과 함께 떠오르는 여러 가지 사이버 위협은 늘 우리의 곁을 지키고 있다. IT강국이라는 명성에 어울리게 우리나라 사람들은 높은 수준의 IT윤리의식과 기본적인 정보보안 지식이 함양되어야 한다고 역설한다. [씹 정세]는 우리나라의 높은 수준의 정보보안이라는 원대한 목표에 작게나마 보탬이 되었으면 하는 바람으로 연재하는 포스팅이 될 것이다.

 

 

TO WHOM

 

 

누구나! 그러나 정보보안에 관심있는 사람보다는 아예 컴퓨터를 모르는, 정보보안을 처음 아는 사람이 읽어주었으면 한다.

 

 

 

FOR WHAT

 

 적어도 우리가 사용하는 IT기기들에 높은 이해를 가질 수 있을 것이고, 나자신이 IT 환경에서 안전한 상황인지 불안전한 상황인지 알 수 있을 것이다. 적어도  더 이상 컴퓨터에 파란 화면이 들어왔다고 두려워하지 않아도 될 것이고, 네 XX에서 계정 도용이 왔다고 두려워할 필요는 없어질 것이다.

 

 

그럼 잘부탁드리겠습니다.

+ Recent posts