2014년 12월 30일 화요일

HTML, CSS, JavaScript, Ajax, jQuery 구분하기

인터넷 검색하면 다 나오는 내용인데 짧은 시간에 쉽고 빠르게 이해하라고 적은 글이다. 웹을 가르치는 학원 강사들도 잘 구분을 못 한다.



1. HTML(Hyper Text Markup Language)


ML(마크업 랭귀지)은 표시 언어란 뜻으로 사람과 기계가 동시에 문서를 읽을 수 있도록 단어, 구, 문장 등에 괄호 형태로 묶어 꼬리표(Tag)를 다는 것을 말한다. 이렇게 할 경우 컴퓨터는 문장의 뜻을 몰라도 그 문장에서 주어, 목적어, 술어, 인명, 지명 등을 구분할 수 있게 된다. 하이퍼 텍스트란 기존 텍스트를 초월한다고 붙인 이름 같다.

과연 친일독재잔당은 친일파후손과 군부독재잔당의 결합일까?

위와 같은 문장은 사람은 이해하지만 기계는 이해하지 못 한다. 이 문장에 꼬리표를 달면 컴퓨터도 문장 성분을 구분할 수 있을 것이다.

p{과연 n{친일독재잔당}은 n{친일파후손}과 n{군부독재잔당}의 결합일까?}

괄호를 치고 그 괄호 앞에 Tag를 단 형태이다. 이건 수학 함수 표기법과 비슷하다. 그런데 헛갈리니까 표기법을 다음과 같은 식으로 바꿀 수 있을 것이다. HTML 언어의 괄호 형태가 수학 함수와 본질적으로 같다는 것을 보이기 위해서 일부러 위와 같이 나타내었다.

<p>과연 <n>친일독재잔당</n>은 <n>친일파후손</n>과 <n>군부독재잔당</n>의 결합일까?</p>

괄호를 표현하면서도 괄호의 짝을 맞추었다. <p> ~ </p> 형태로 시작 괄호와 끝 괄호에 같은 Tag p를 달며 시작과 끝(/)을 표기했다. 이렇게 하면 괄호의 시작과 끝이 일치하는지 검사하기 쉽다. 예를 들어 p는 문장이란 의미고, n은 이름이란 의미가 있다고 하면 컴퓨터가 인식하여 뽑아낼 수 있을 것이다. 이와 같은 괄호 형태는 우리들도 마음대로 만들 수 있을 것이다. 예를 들어 다음과 같은 식으로 말이다.

<p:과연 <n:친일독재잔당:n>은 <n:친일파후손:n>과 <n:군부독재잔당:n>의 결합일까?:p>

그런데 이미 사용하고 있는 ML 언어들이 모두 <p> ~ </p>와 같은 형태의 괄호를 사용한다. 괄호 표기법도 다시 정의해서 바꿀 수 있다고 하는데 문법이 그만큼 복잡해진다.

SML → SGML → XML + HTML → XHTML

처음엔 미국에서 SML이란 언어를 만들었다. 이것이 SGML로 발전하여 공문서, 인쇄, 출판에서 사용하다가 좀 더 간단한 XML, HTML을 개발한다. XML은 Tag를 마음대로 만들어 붙일 수 있는데 HTML은 Tag 이름들이 정해져 있다. 그러니까 HTML이 좀 삐딱한 언어가 된다. 그래서 HTML Tag와 XML 문법을 결합하여 XHTML이란 것을 만든다. 그래서 XML에서 Tag 이름을 HTML처럼 정한 형태, XML의 부분집합이 될 수 있는 형태로 다시 HTML을 정의한 것이 XHTML이다. 그러니까 XHTML은 겉모습이 XML과 같아서 XML을 처리하는 프로그램으로 다룰 수가 있다.

간단한 문법 차이를 보자. HTML에선 괄호 쌍이 되지 않는 단독 Tag에 <br>이 있다. 의미는 다음 행으로 가라는 뜻이다. XHTML에선 XML문법에 따라 <br/>이라고 표기한다. 이건 시작과 동시에 끝이란 의미다. 그러니까 수학 함수에서 괄호는 시작과 끝이 일치하는 표기고 콤마는 끝이면서 동시에 시작인 구분자이다. 이 구분자와 같은 것이 <br/>이 된다. 예를 들어 sum(a, b, c) 같은 경우에서 콤마에 해당한다. 개인적 생각으론 HTML을 없애고 대신 XML을 쓰는 것이 더 바람직할 것 같다. 그런데 XHTML이 결국 없어지고 HTML 5가 나올 거 같다.

※ HTML 4, XHTML 1까지가 표준이다. HTML 5는 진행 중이다.



2. CSS(Cascading style sheet)


여하튼 이 ML언어들은 문서의 내용을 구분하는 목적으로 사용된다. 고로 어떻게 화면에 표시하라는 정보가 없다. 예를 들어 인명이나 지명은 굵게 표시하라는 정보가 없다. 그런 표시, 디자인에 관한 정보는 CSS라는 언어로 나타낸다. 예를 들어 다음과 같은 형식이다.
  • n{글꼴:고딕; 크기:11포인트; 색상:빨강}
  • p{글꼴:명조; 크기:10포인트; 색상:검정}
Tag n이 붙은 것은 이런 식으로 표현하라는 뜻이다. 이렇게 문서(데이터)와 디자인을 구분하면 문서에 Tag를 붙이는 자와 디자인을 담당한 자의 작업이 분리 된다. 만약 디자인과 문서를 섞어 표시하면 양쪽의 작업이 모두 힘들어진다. 고로 HTML 문서와 CSS 문서를 따로 만들고 연결시키는 링크만 HTML에 포함시킨다.

Cascading/케스케이딩은 겹친다는 의미다. 꼬리표 n은 꼬리표 p의 안에 있기 때문에 p의 명령과 겹친다. 이 경우 가장 안쪽의 n는 자기 CSS 명령에 따르고, 자기 명령이 없으면 자기 밖의 p의 CSS 명령에 따른다. 그래서 처리가 좀 복잡하다. 별도의 지정이 없다면 디폴트(기본값)에 따르겠지만 만약 괄호의 층수가 10개라고 하면 10층을 순서대로 따라가며 무엇이 적용되었는지 판단해야 한다. 이건 기계가 아니면 할 수 없는 일이다.

※ CSS 2까지가 표준이다. CSS 3는 진행 중이다.




3. JavaScript


자바스크립트는 C와 비슷한 문법인 객체지향 인터프리터 언어이다. Java도 C와 문법이 비슷하고 이름이 비슷하지만 약간 다르다. 웹브라우저에서 동작하는 언어인데 HTML 문서를 마치 프로그램처럼 보이게 할 수 있다. 그러까 웹브라우저만 있으면 실행시킬 수 있는 소규모 프로그램이나 게임을 만들 수 있는 것이다. 이것과 경쟁자가 바로 Flash Action Script이다. HTML 5와 CSS 3의 등장으로 Flash가 위협받고 있다.

HTML + JavaScript = DHTML

HTML과 자바스크립트를 결합시켜 DHTML(동적 HTML)을 만들 수 있다. DHTML은 무슨 기술 명칭이 아니라 기술을 묶은 이름이다. HTML이 문서의 내용을 담당하는 것이고 CSS가 디자인을 담당하는 것이라면 JavaScript가 문서의 내용과 디자인을 동적으로 바꿀 수가 있다. HTML은 컴퓨터가 문서의 내용을 파악하게 만든 것이고, CSS는 이 문서를 화면에 예쁘게 보여주는 것이고 여기까지는 정적이다. 프로그래머의 코드가 더해져서 드디어 동적이게 되었다는 것이다. 그래서 역할 분담이 다음과 같다. 모든 문서는 따로 제작하여 HTML 문서에 링크만 걸어 둔다. 
  • HTML 문서(*.html) : 문자열 데이터 담당
  • CSS 문서(*.css) : 디자이너
  • JavaScript 문서(*.js) : 프로그래머
※ JavaScript 1.5까지가 표준이다. 그 이상은 브라우저마다 다르다.




4. DOM(Document Object Model)


문서 객체 모델의 약자인데 HTML, XML 문서는 괄호 형태가 겹쳐져 있기 때문에 나무 가지 모양의 계층 구조를 가지게 된다. 이것을 분석해서 메모리에 올려놓기 때문에 문서가 매우 길 경우 메모리 용량에 부담이 되지만 문서의 내용을 자바스크립트가 빨리 찾아 바꿀 수 있다는 장점이 있다. 고로 작은 문서에는 이게 적합하다. 여기에 반해서 큰 문서를 좀 더 단순하게 처리하는 방식이 XML의 SAX(Simple API for XML)이다. 아마도 처음부터 문서를 해석하는 방식 같다.
  • <A><B></B><C><D>친일독재잔당좆까!</D></C></A>
  • DOM : A → C → D
  • 단순 검색 : A → B → C → D
위와 같은 계층 구조에서 D tag 속의 문장을 바꾸려고 한다면 DOM의 나무 구조에서 3단계 순서만 따라 가면 된다. 그런데 문서의 처음부터 훑어서 D tag를 찾는 방법도 있을 수 있다.

자바스크립트가 문서의 내용을 바꾸거나 디자인을 바꾸려면 그것을 해 주는 클래스나 함수가 있어야 할 것이다. 이 클래스와 함수들이 DOM에 해당 된다. 보통 어떤 데이터 구조(클래스)와 그것을 다루는 함수를 묶어서 라이브러리로 제공 하면서 기술 이름을 붙인다. 그러니까 C언어의 표준 문법과 C에서 제공하는 표준 함수 외의 다른 함수들은 누군가 추가로 만들어서 기술 이름을 붙여 제공하는 것이다. 예를 들면 DirectX 같은 것 말이다.




5. Ajax(Asynchronous JavaScript and XML, 에이잭스)


화면 표시 내용은 HTML + CSS를 사용하고, 동적인 효과는 DOM + JavaScript를 사용한다. 여기까진 기존과 같다. 그런데 이 문서의 내용 일부를 바꾸고 싶을 때 웹 페이지를 새로 받는 것이 아니라 그 일부 내용을 서버와 XML, HTML, Text, JSON 등으로 통신하여 받아 그것만 살짝 바꾸는 기술 조합을 Ajax라고 부른다. 약간의 내용이 바뀌었다고 해서 전체 문서를 다시 다운 받을 필요 없이 일부 데이터만 받아 바꾸기 때문에 효율적이다. JSON(제이슨, JavaScript Object Notation)은 XML처럼 데이터를 나열하는 문서 형식이다. 서버와 통신할 때는 서로 알아먹을 수 있는 형식이 필요하기 때문이다. 

Ajax가 동작하려면 Ajax가 필요로 하는 기능들이 모두 담긴 브라우저가 필요하다. HTML + CSS, DOM + JavaScript까지는 기본으로 다 있겠고 웹서버와 XML, HTML, Text, JSON 통신 기능이 추가로 필요하겠지? 이런 기능들 조합해서 데이터의 일부만 받는다는 아이디어를 실현한 것을 Ajax라고 부른다. Ajax는 기술 이름이 아니다. 자바스크립트를 이용한 프로그램 방식 정도 의미가 되나? 




6. jQuery(제이쿼리)


자바스크립트로 만든 라이브러리다. 다시 말해서 HTML, CSS 문서와 함께 전송되는 JS(자바스크립트) 문서라고 보면 된다. 당연히 다운로드 속도를 저하시킬 것이다. 허나 여러 브라우저에서 동작이 되도록 만들었고, 묘하게 만들어져 jQuery라는 별도의 언어처럼 보인다. 그러니까 자바스크립트를 사용하지 않고 jQuery 문법에 따라 간편하게 코딩하는 장점이 있다. 프로그래머가 코딩을 간편하게 하는 대신 웹 페이지를 보는 사람은 jQuery 라이브러리를 매번 다운 받아야 하는 단점이 있고, 라이브러리가 jQuery 문법을 해석하는 시간 소모가 발생한다. 이 문제는 브라우저가 아주 자바스크립트 내부에 jQuery 문법을 표준으로 넣어 버리면 해결 된다. 언제 그게 되겠는가?

이런 종류의 자바스크립트 라이브러리가 많다. 예를 들어 2D를 조합해서 3D 표현을 가능하게 해 주는 라이브러리 같은 것이다. 아니면 물리 시뮬레이션을 해 주는 라이브러리 같은 것. 당연히 표준 라이브러리가 아니고 외부에서 제작하여 추가한 라이브러리다. 단지 인터프리터 언어라서 그 내용을 누구나 볼 수 있어 자동으로 오픈 소스라는 것이다.



만약 불법 도청을 통해 살인 증거를 녹음한 경우 살인자를 처벌해야 할까 아니면 불법 도청자를 처벌해야 할까? 당연히 살인자를 처벌해야 한다. 그런데 한국에선 불법 도청자를 처벌한다. 이게 사생활 보호법이 아니라 범죄자 보호법이다. 그러니까 국세충, 경찰이 황당하게 국민을 도청하고 검열하겠다고 언론에 떠벌리는 나라에서 막상 친일독재잔당의 범죄를 도청하거나 증거 자료를 유출하면 도청자와 유출자를 잡아 족친다. 그래서 친일독재잔당이 한국 최고 조폭 또는 불법단체라고 하는 것이다.

2014년 12월 29일 월요일

OSI 7계층, 인터넷, 해킹 이해

그 놈의 가을 외로움, 술, 친일독재잔당 검열 때문에 공부해서 정리한 내용을 다 날렸다. 간신히 기억에 의지해서 몇 글자 적어 본다. 인터넷을 검색하면 인터넷, 네트워크에 대해 나오겠지만 수준이 맞지 않으면 이해하긴 어려울 것이다. 이 글은 컴퓨터와 관계없는 이공계, 인문계, 일반인을 위해 정리하는 것이다. 이를 이해하면 친일독재잔당의 선동을 간파할 수 있을 것이다.

컴퓨터 전공하는 사람들은 OSI 7계층을 처음에 읽을 때는 무척 어렵게 느꼈을 것이다. 그런데 이런 추상적인 표현을 이해하려면 오히려 반대로 구체적인 것을 먼저 읽는 것이 좋다. OSI 7계층이란 서로 다른 업체에서 설계한 서로 다른 종류의 네트워크를 연결하기 위해서 서로가 지켜야 할 추상적인 권장 사항이라서 구체적인 네트워크를 모르면 이해하기 힘들다. 우리가 흔히 보는 네트워크로 OSI 7계층을 설명하겠다.

※ OSI = 개방형 시스템 간 상호 접속
(Open Systems Interconnection Reference Model = 열린 체계 상호 연결 참고 모델) 



0. 계층이란?


회사에서 사장, 이사, 부장, 과장, 대리, 사원, 노동자가 있는 것처럼 역할을 분담하는 프로그램(소프트웨어)과 하드웨어 계급이 있다. 상위 계층은 하위 계층을 이용해서 일을 처리한다. 예를 들어 이몽룡이 성춘향과 대화하기 위해서 종놈을 시켜 편지를 전달하는 경우를 상상하면 된다. 종놈이 종년을 만나 편지를 전달하면 종년은 편지를 성춘향에게 올리는 것이다. 종놈과 종년은 내용을 모르고 전달만 하고, 내용을 알고 대화하는 것은 성춘향과 이몽룡이다. 만약 중간에 잃어버릴 경우를 대비해서 편지를 암호화하기로 작정했다면 암호 전문가를 고용해서 중간에 암호문을 만들어 보낼 것이다. 그럼 이 일은 3계층의 협력 작업이 된다.



일단 설명을 이해하려면 위의 그림을 잘 기억하고 있어야 한다. 그림의 각 부분을 비유적으로 설명할 것이다. 그럼 전문적 이해는 못 해도 어떻게 동작하는지 알 수 있기 때문에 친일독재잔당과 국정원의 선동을 간파할 수 있다.

인터넷은 6각형의 그물망으로 표현했다. 복잡한 네트워크 연결을 단순화시킨 것이다. 보통 다른 그림에선 두루뭉술한 구름으로 표현한다. 마름모는 컴퓨터에 해당한다. 사각형은 허브라는 교환기다. 네트워크의 동그란 원은 라우터라는 교환기다.

허브란 바퀴의 중앙 부분을 말하는 것이고 정보가 여기 모였다가 흩어지기 때문에 붙은 이름이다. 라우터란 루트(길)을 찾아 준다고 해서 붙은 이름이다. 또는 발송담당, 경주마의 의미가 있다. 역참 제도에선 말이 달려 우편물을 전한다. 즉, 네트워크에서 어느 방향으로 데이터를 보낼 것인지 결정한다는 말이다. 게이트웨이(대문)는 지역(건물)의 LAN(지역 네트워크)에서 인터넷에 접속하는 지점을 말한다. 말 그대로 대문이다.

컴퓨터 A에서 서버 B까지의 이동 과정에서 거치는 사건들을 아래에서 대충 추적할 것이다.




1. 물리 계층(1층)


이 층은 노동자에 해당하는 층이다. 노동자는 바로 옆 건물까지 데이터(0과 1의 나열)를 연결하는 역할만 한다. 다시 말해서 하드웨어 연결 규약을 말한다. 0과 1의 데이터는 유선 신호, 무선 신호, 광 신호로 전달할 수 있으니 하드웨어적인 규약이 필요함을 알 것이다. 직렬, 병렬, 아날로그, 디지털 등 통신 방식이 다양하니 서로 맞추어야 할 필요가 있다. 좀 더 구체적으로 말해서 PC에 꼽는 LAN Card와 연결 Cable의 규약을 말한다.

1층포장(내용이 뭔지 몰라도)

예를 들어 여기 신호는 단순한 숫자 0과 1을 대신하는 전기 신호이다. 고로 신호의 시작 지점을 찾는 것이 중요하다. 예고 없이 신호가 발신하기 때문에 항상 하드웨어는 귀를 열고 있어야 한다. 처음엔 0과 1의 반복 나열이 들어온다. 이건 뚜/삐~하는 예비신호이다. 이 신호를 통해 통신 속도를 맞춘다. 즉 상대의 말하는 속도를 파악하는 것이다. 그 다음에 내용의 처음을 알리는 특수한 패턴(예:꼴까닥)이 나온다. 그 이후부터가 데이터란 의미다. 이런 규칙을 프로토콜이라고 한다.

0과 1을 나타내는 신호는 전압(유선), 전파(무선), 빛(광섬유), 구멍, 기계적 요철 등 여러 가지 통로와 방법으로 전달된다. 0과 1을 나타내는 표현도 장단(길고 짧게, 모스 부호), 고저(높고 낮게, FM방식?), 강약(세고 약하게, AM방식?)으로 나타낼 수 있다. 예를 들어 뚜~는 1이고 뚜뚜는 0일 수 있다. 여기선 숫자 0과 1을 표현하고 전달/저장하는 것이 목적이다.

보통 보안이 중요한 국정원, 국가 기관, 은행, 대기업 등에선 인터넷과 내부 네트워크(LAN)를 물리적으로 구분한다. 다시 말해서 외부에서 해킹하려고 해도 네트워크 자체가 분리 되어 있으면 불가능하다. 간첩이 침투해서 직접 해킹하거나 내부 배신자가 없다면 불가능하다. 고로 이런 기관이 해킹 당했다고 할 경우 그건 내부 배신자일 가능성이 크다.



2. 데이터 링크 계층(2층)


물리 계층은 말 그대로 전기적으로 연결된 옆 기계까지 직접 전송을 담당한 것이니까 송신자 수신자 구분이 없다. 종놈과 종년에 해당하는 기능이다. 여러 컴퓨터가 연결 되었을 때 송신자와 수신자 구분을 해서 보내는 기능을 이 계층에서 담당한다. 성춘향과 이몽룡에 해당한다. 바로 중간에서 교환기, 중개소, 뚜쟁이 역할을 하는 것이 허브이다. 그래서 허브도 2계층까지 기능이 구현되어 있다. 이런 허브를 스위칭 허브라고 부르고 전화 교환기와 비슷하다. 주소를 보고 신호를 보낼 통로를 결정한다.

1계층의 0과 1의 나열을 일정한 단위로 나누게 된다. 예를 들어 8비트(바이트)라고 하면 0~255까지 숫자를 표현하게 된다. 이제 0과 1의 나열이 아닌 0~255의 숫자를 전달하게 되는 것이다. 그래서 디지털(숫자의) 세계라고 부른다. 여기에 오류가 발생했을 때를 대비해서 몇 비트를 더 붙여 오류 정정을 하도록 만든다. 이런 바이트 단위를 몇 개 단위로 전송하도록 약속한다. 비유하면 비트는 획이고, 바이트는 원고지 한 칸의 숫자이고, 200자 원고 단위로 전송하고 저장한다는 것이다. 이런 개념을 두고 페이지, 섹터, 블록, 클러스터 등 여러 이름으로 부른다. 전송이 끝나면 종료 신호(예:꿀꺽)를 보낸다.

송신자, 수신자 구분은 MAC 주소라는 하드웨어 주소로 구분한다. 이것은 LAN Card에 박혀 있다. 만약 이 주소가 동일한 LAN Card가 같은 LAN 안에 있다면 충돌이 나서 통신(교통)이 꼬이게 된다. 1계층에서 보내는 숫자의 나열 중에서 앞부분에 송신자와 수신자 주소를 넣는다. 이 신호를 허브가 받아 주소를 해석하고 그 주소의 컴퓨터가 연결된 쪽으로 신호를 그대로 보낸다. 그럼 허브는 어떻게 주소를 다 외우고 있을까? 컴퓨터가 허브에 연결되면 자기 주소를 허브에 알려준다. 

1층포장(2층포장<내용이 뭔지 몰라도>)

허브를 이용한 도청(해킹)이 가능하다. 2계층 허브는 교환기 역할을 하지만 1계층 허브는 방송기 역할을 한다. 즉, 한 곳에서 받은 내용을 모든 방향으로 방송하는 것이다. 1계층 허브가 원래 허브 기능이다. 그래서 네트워크 카드는 항상 귀를 열고 있다가 자신에게 온 것만 받아 위로 보낸다. 고로 2계층 허브 기능을 마비시키면 1계층 허브로 동작하게 된다. 그럼 도청이 가능해진다. 엉터리 MAC 주소를 무수히 허브로 보내면 허브가 뻗어 버리고 방송 장비가 된다. 또 다른 방법으로는 직접적으로 허브 포트에 신호 복사 장치를 꼽는 것이다.

비슷한 원리로 저장 장치인 하드디스크, CD, DVD 등에서도 1계층처럼 0과 1을 표현하고 저장하는 기능이 있고, 이를 숫자(0~255)로 바꾸고 이를 모아 덩어리(페이지/블록/클러스터/섹터)로 관리하며 그 위치(주소)를 관리하는 2계층 같은 기능이 있다. 이 2개 계층은 하드웨어적으로 구현되어 있고 7계층을 단순하게 3계층(상중하)으로 보면 1+2계층은 하위 계층에 속한다.



3. 네트워크 계층(3층)


데이터 링크 계층만으로 지역 네트워크(LAN)가 된다. 이것들을 모아서 인터넷을 만들 수도 있겠으나 서로 설계가 다른 다양한 네트워크가 있어 직접 연결이 불가능하다. 그래서 하나의 계층이 더 추가 되었는데 그게 3계층이다. 여기선 송신자, 수신자 구분을 위해 IP 주소라는 것을 추가로 사용한다. MAC주소와 다를 것은 없다. 단지 소프트웨어적으로 붙인 주소라는 것이다. 비유를 하면 MAC 주소는 전화기에 박힌 번호이고, IP 주소는 전화번호에 해당한다. 전화기를 바꾸어도 같은 전화번호를 가지고 다니듯이 IP 주소도 그렇게 할당한 번호이다.

이제 인터넷으로 접속을 하기 때문에 LAN을 벗어나게 된다. 그래서 게이트웨이(대문)을 통과하게 된다. 이것을 통과하면 전혀 다른 네트워크 세계로 가게 된다. 고로 하드웨어적, 소프트웨어적인 번역이 필요하게 된다. 예를 들어 전기 신호에서 광 신호로 바꾸거나 통신 규칙을 적절하게 번역하는 것이다. 그 이후부터는 인터넷의 라우터를 거쳐 목표지점에 도달하게 된다. 라우터는 IP주소를 이해하기 때문에 3계층까지 구현되어 있다. 1계층 정보의 앞부분에 송신 수신 MAC 주소를 붙였듯이, 2계층이 전달하는 내용의 앞에 송신 수신 IP 주소가 붙어 있다.

비유하면 1계층에선 무조건 옆 건물로 편지 배달을 한 것이고, 2계층에서 봉투 겉을 보니 MAC 주소로 송수신자가 적혀 있는 것이다. 3계층에서 봉투를 뜯어 내용을 보니 거기 IP 주소로 송수신자가 적혀 있는 것이다. 허브와 달리 라우터는 여러 길로 편지를 배달할 수 있기 때문에 적절한 길을 선택해야 한다. 교통 상황이 좋은 쪽이거나 목표지점에 가장 빨리 도달할 수 있는 길을 선택하기 때문에 라우터는 전체 지도와 교통 상황을 알고 있어야 한다. 그래서 허브보다 복잡하다. 또한 편지가 도달하지 못 하고 인터넷을 방황하는 경우를 대비해서 수명을 정해 놓는다. 인접 라우터로 건너가면 수명이 1씩 줄어든다.

1층포장(2층포장<3층포장[내용이 뭔지 몰라도]>)

전화 보이스 피싱 사기처럼 인터넷의 IP 주소도 가짜로 기입할 수가 있다. 경찰이 보이스 피싱 사기범을 잡기 힘든 이유는 전화번호가 가짜이기 때문이다. 마찬가지로 자기 IP로 해킹하는 바보는 없기 때문에 북한으로 추정되는 IP라는 헛소리가 뉴스에 나오면 친일독재잔당과 국정원의 선동 뉴스라는 것을 알아야 한다. 이건 주로 노인, 주부, 하층민, 장사꾼 등 무식한 사람들을 속이기 위해 하는 짓이다.

※ 비슷한 것으로 전화 번호 도용하는 스미싱이란 것이 있다. 남의 전화 번호로 광고 문자나 악성 문자를 보내는 것이다. (나도 당해 봤지) 전화 번호도 이렇게 속일 수 있는데 IP 주소를 못 속이겠는가?

IP주소도 전화번호처럼 앞자리는 지역번호(네트워크 번호)이고 뒷자리는 개인번호(PC 할당 번호)이다. 네트워크 번호로 지역을 추정할 수는 있는데 문제는 지역 네트워크 안에서 개인번호는 고정이 아니다. 우리가 PC 연결할 때마다 공유기가 IP주소를 할당해 주기 때문에 항상 같은 번호가 아니라는 것이다. 고정번호로 할 수도 있으나 관리가 힘들어서 보통 임의로 할당한다. IP주소가 부족하기 때문에 편법을 쓰기도 한다. 외부에서 보면 모든 PC가 같은 IP 주소로 보인다. 단지 포트 번호로 PC를 구분한다. 이 공유 IP + Port 번호를 지역 내부 IP로 번역한다.

휴대전화, IP주소, 일반전화 모두 경찰이 마음만 먹으면 즉석에서 위치 추적이 가능하다. 단지 IP주소는 그 지역 네트워크까지만 의미가 있고, 휴대전화는 중개타워 몇 백 미터 범위까지만 의미가 있다. 고로 정확한 위치 추적은 안 된다. 해킹을 하는 놈이나 보이스 피싱 하는 놈이 자기 번호로 할 리는 절대 없기 때문에 이건 뉴스를 보자마자 가짜임을 아는 것이다. 친일독재잔당과 국정원의 선동을 잘 기억하고 있다가 나중에 복수해야 한다. 복수를 하지 않고 성인군자처럼 계속 당하면 악당이 승승장구할 것이다.

보통 우리가 전화번호와 사람 이름을 연결하듯이 도메인 네임과 IP주소를 묶을 수 있다. 이 도메인 네임(www.zoto-korea.com)과 IP주소 사이의 번역을 해 주는 것이 DNS이다. 말하자면 114나 전화번호부 같은 역할을 하는 것이다. 이 DNS에 이름을 물어 보면 IP주소를 알려준다. 이 번역은 웹 브라우저가 알아서 해 주기 때문에 우린 신경 쓰지 않는다.



4. 전송 계층(4층)


앞의 계층만 있어도 충분한 것 아니냐고 생각할 수 있을 것이다. 이 계층은 말 그대로 전송을 책임진다. 무슨 말인고 하면 구체적인 예를 들어 TCP 같은 규약은 큰 데이터를 여러 조각으로 나누어 전송하기 때문에 상대가 받았는지 안 받았는지 확인도 하고 순서대로 다시 조립하는 역할도 한다. 일단 분해된 조각들은 인터넷으로 들어가면 여러 경로로 흩어져 전송되기 때문에 도달하는 순서가 뒤바뀔 수도 있고 일부 전송 실패가 될 수도 있다. 또한 PC에서 A, B, C 3개 프로그램이 각자의 데이터를 전송한다고 할 경우 이 프로그램들을 포트 번호로 구분한다. 고로 포트 번호, 패킷(꾸러미) 순서 등을 고려해서 조립해야 하는 것이다. IP주소가 건물 전체 전화번호라면 포트 번호는 그 속의 호실의 내선 번호라고 보면 된다. 

1층포장(2층포장<3층포장[4층포장{내용이 뭔지 몰라도}]>)

또 다른 프로토콜(통신 규약 = 대화법)로 UDP가 있다. 이것 외에도 네트워크에 따라 다양한 프로토콜이 있는데 우리가 흔히 보는 예로 TCP/UDP를 든 것이다. UDP 경우는 방송용이다. 상대가 받았는지 안 받았는지 확인하지 않는다. 일방적으로 보내기만 한다. 고로 UDP를 사용해서 통신을 할 때는 프로그래머가 제대로 도달했는지 확인하는 기능을 추가해야 한다.

포트 번호는 프로그램을 구분하는 번호이다. 예를 들어 웹 브라우저가 사용하는 포트 번호가 정해져 있다. 인터넷에서 포트들의 의미를 검색할 수 있다. 이처럼 유명한 프로그램들은 지들이 장악한 포트번호가 있다. 그 외의 포트 번호는 임시로 사용하는 번호로 바이러스 같은 프로그램들이 이용할 수가 있다. 주인 허락도 없이 비밀 포트를 열어서 해커의 명령을 기다리고 있을 수 있다.

진정한 도청(해킹)을 하려면 이 계층에서 한다. 어떤 IP 주소에 어떤 Port 번호인지 나오기 때문에 여러 프로그램들의 마구 섞인 대화가 아닌 두 프로그램 사이의 대화를 도청할 수가 있다. 이 도청은 좀 어렵다. 남의 대화에 몰래 끼어들어서 엿들어야 하는데 쉽지 않다. 예를 들어 A가 B에게 보내는 내용을 내가 중간에 가로채서 대신 B에게 보내야 한다. 반대로 B의 응답도 중간에 가로채서 대신 A에게 보내야 한다. 이 때 끼어드는 타이밍이 중요하다. 이런 간첩을 프락시(프락치)라고 한다.

※프락치는 러시아어 발음

TCP의 대화 내용이란 것이 이런 식이다. (정확한 내용은 기억이 나지 않는다.)

A: “여보세요?”
B: “네!”
A: “자료 보내요?”
B: “네!”
A: 자료전송...
A: “전송 완료!”
B: “수신 완료!”
A: “끊어요?”
B: “네!”

그러니까 이런 대화 사이에 끼어들어야 한다. 운이 좋아야 한다.



5. 세션 계층(5층)


세션이란 모임이란 뜻이 있다. 이것은 전화 연결처럼 상대와의 연결을 유지하는 것을 담당한다. 그런데 이 연결 유지 기능이 TCP에 있기 때문에 4계층과 5계층의 역할 구분이 모호하다. 4계층이 한 번에 한 사람만 말을 할 수 있는 일방통행 같다면, 5계층이 마치 양자가 동시 통화하는 것처럼 보이게 만들어 줄 수 있다. 2개의 포트를 열어서 하나는 듣기, 다른 하나는 말하기에 사용할 수도 있다. 세션 층이 여러 개의 포트를 동시에 사용하면 여러 사람의 대화도 가능할 것이다. 뭐 대충 그런 의미로 보이는데 이 계층을 대표하는 두드러진 특징이 없다. 대화방 만들 때 사용하나?

이렇게 3+4+5계층을 묶어 중간 계층이라고 하며, O/S 차원에서 소프트웨어적으로 기능을 제공한다. 비슷하게 하드디스크, CD, DVD 저장 장치에서 보면 O/S 차원에서 제공하는 파일 시스템과 유사하다. 파일의 목록(이름)을 관리하고, 여기엔 파일이 시작하는 페이지(블록/섹터/클러스터 등) 위치(주소)가 기록 되어 있다. 파일이 커서 여러 페이지에 기록 된다면 다음 페이지로 가라는 주소 연결이 쇠사슬처럼 이어진다. 여러 프로그램(고객)이 동시에 여러 파일을 쓰고 읽기 때문에 이를 구분해야 한다. 허나 여기까지도 송신/저장하는 내용은 여전히 숫자에 불과하다. 고객의 우편물 내용은 관심사항이 아닌 것이다.



6. 표현 계층(6층)


예를 들어 우리 사장이 다른 사장에게 편지를 보낸다고 하자. 그럼 이사가 이 편지의 내용을 받아 암호화 하거나 압축을 할 수 있을 것이다. 다른 사람이 보지 못 하도록 말이다. 그런 후에 아래층으로 내려 보낼 것이다. 5층에선 여러 대화 통로를 만들어 대화를 시도할 것이다. 그럼 그 내용을 받은 4층에선 여러 조각으로 분해해서 전송할 것이다. 3층에선 그 조각을 목표지점에 배달 의뢰할 것이다. 2층과 1층은 직접 옆 기계(라우터/허브)로 배달을 담당한다.

표현 계층은 말 그대로 내용의 표현을 담당하기 때문에 문자 코드, 암호화, 압축을 담당한다. 예를 들어 문자 코드는 ASCII나 한글 코드(완성형)나 유니코드(utf-8, utf-16) 중에 어느 것인지, 암호 방법은 뭔지, 압축을 할 것인지 등이다. 이건 직접적으로 통신과 관련 있는 기능은 아니다. 마치 군대에서 통신 도청에 대비해서 암호를 사용하는 것과 비슷하다.

여기서부터는 단순히 숫자가 아닌 어떤 의미(문자/음악/사진 등)를 가지게 된다. 컴퓨터 속의 숫자(디지트)와 의미를 연결시키는 것이다. 암호책이라고 해야 할까? 숫자 99를 문자로 해석할 것인지, 음표로 해석할 것인지, 한 점의 색상과 명암으로 해석할 것인지는 여기서 결정한다.



7. 응용 계층(7층)


가장 높은 층으로 대화를 하는 당사자라고 보면 된다. 예를 들어 웹 프로그램(브라우저)에서 문서를 서로 전달한다고 해 보자. 그럼 서로 대화하는 방법(프로토콜)이 있을 것이다. 그게 HTTP이다. 예를 들어 서버에 “이런 문서 원합니다.”라고 메시지를 보내면 서버가 “여기 있습니다. 받으세요.”라고 대답할 것이다. 그런 대화법을 프로토콜이라고 하는데 웹에선 HTTP를 사용하는 것이다. 이 대화 내용은 6층으로 가서 부분적으로 암호화 되어 전송 된다. 보통 이 계층의 대화 내용(명령어)은 ASCII 문자 코드로 되어 있어서 사람이 읽어도 이해가 된다. 그러니까 7계층의 대화는 거의 사람의 대화와 비슷하다.

이렇게 6+7계층을 상위 계층이라고 부르고 보통 응용 프로그램에서 제공한다. 네트워크 통신, 하드디스크, CD/DVD의 저장 내용이 뭔지 알고 해석하는 것은 이 상위 계층에서 하는 것이다. 여기선 더 이상 숫자가 아닌 의미 있는 자료가 되는 것이다. 여기선 저장/전송 되는 파일을 하나의 연결된 내용물로 이해한다. 여기 상위 계층에선 한 권의 책으로 보이는 것이 중간 계층에선 분책이 되고 여러 경로로 전달 요청 한다. 하위 계층에선 직접 우편물을 들고 배달하는 것이다.



8. 해킹 vs 보안


대충 이런 식으로 7계층으로 역할 구분을 해서 동작을 하지만 4계층보다 높은 계층에선 계층 사이 경계가 명확한 것은 아니다. 해킹을 할 때는 4계층 아래쪽의 프로그램을 조작한다. 보통 해킹이라고 하면 도청처럼 정보를 훔치는 것을 말한다. 흔적을 남기지 않고 훔치기 때문에 해킹을 고급 기술로 본다. 반대로 시스템을 망가뜨리거나 방해하는 것은 테러에 속한다. 이건 해킹보단 쉽다. 


8-1. DDos


DDos(Denial of Service attack = 서비스 거부 공격)는 과부하가 걸린 컴퓨터가 서비스 거부하는 기능을 이용한 공격이다. 그러니까 고의적으로 특정 서버에 무수히 많은 컴퓨터가 접속을 하면 그 컴퓨터가 제대로 응답을 할 수 없게 된다. 고로 서비스 거부가 발생한다. 이 무수한 컴퓨터를 좀비 컴퓨터라고 부른다. 바이러스 프로그램이 숨어 있다가 특정 시점에 동시에 특정 서버에 접속을 시도하는 것이다. 원리는 간단하다. 모두가 추석, 설에 자동차 끌고 도로로 나오는 것과 비슷하다. 도로가 마비된다. 입시 시험 후에 모두가 전화기를 들고 합격 여부를 확인하는 것도 마찬가지다. 그럼 전화망이 먹통된다. 여름에 모두가 동시에 에어컨을 키게 되면 그 순간 정전 사태가 벌어진다. 모두가 한 날에 은행 예금을 찾으러 가면 그 은행은 파산하게 된다. 이런 식의 공격은 정상적인 과정을 통해 일어나기 때문에 방어하기 힘들다. 당해도 누가 범인인지 알기 어렵다. 이 공격은 아이들이 문만 두드리고 도망가는 전법이라서 누가 두드렸는지 흔적도 남지 않는다. 문을 열면 아무도 없으니까.


8-2. Filewall


Firewall/파이어월/방화벽이라고 부르는 장치 또는 기능은 4계층에서 동작하는 방어막이다. 이건 게이트웨이(대문) 근처에 배치하는데 TCP/UDP의 Port 번호를 보고 차단하는 기능이 있다. 특정 프로그램들은 자기가 사용하는 포트 번호가 정해져 있다. 고로 그 포트 번호를 차단하면 그 프로그램은 외부와 통신이 불가능하다. 유명한 소프트웨어의 포트 번호는 이미 알려져 있다. 고로 바이러스는 이것을 피해 다른 포트를 사용할 것이다. 그런 포트들을 차단하면 바이러스는 주인의 명령을 받을 수 없다. 자기 PC의 방화벽 외에 웹브라우저로 게이트웨이 IP 주소를 접속하면 게이트웨이의 방화벽을 조절할 수 있다. 만약 서버를 외부에 노출시키려고 한다면 당연히 서버의 포트 번호를 열어야 한다. 서버 자신과 문지기 모두 말이다. 그래야 외부에서 접속할 수 있다.


8-3. Gateway


보통 게이트웨이에 암호를 걸지 않기 때문에 프로그램이 게이트웨이를 해킹해서 DNS 주소를 엉뚱한 곳으로 바꿀 수 있다. 그러면 원하는 곳으로 못 가고 이상한 사이트에 접속하게 되는데 거기서 뭐라 속이면서 버튼을 누르라고 하여 바이러스를 다운로드 받아 심게 된다. 그럼 게이트웨이를 해킹하는 프로그램은 처음에 어떻게 설치할까? 어떤 웹사이트와 비슷한 이름의 사이트를 만들어 오타로 유인한 후에 뭐라 속여서 버튼을 누르게 만든다. 그렇게 설치 된 바이러스가 게이트웨이에 암호가 없으면 설정을 조작하는 것이다. 고로 정체를 알 수 없는 사이트에서 버튼 눌러 뭔가 다운로드 받을 때는 주의해야 한다.


8-4. Proxy


Proxy/프락시/대리인Agent/에이전트/요원과 같은 말이다. 그러니까 간첩(프락치)이란 말이다. 얘는 A와 B라는 컴퓨터 사이에서 대리인 역할을 한다. 그러니까 A에겐 B처럼 보이고 B에겐 A처럼 보이는 것이다. 그래서 간첩이라고 부르는 것이다. A가 B에게 자기 정체를 숨기고 싶을 때 C라는 간첩을 이용할 수 있다. 또는 외부와 접속하지 않고 바로 같은 정보를 얻을 수 있어 속도 향상에 이용하기도 한다. C가 최근의 내용을 바로 알려 주기 때문이다. 또는 내용 검열에 이용한다. C가 내용을 보고 차단하는 것이다. 주로 7계층에서 동작한다. 7계층에서 봐야 모든 내용이 조립된 완전한 상태를 알 수 있기 때문이다.



9. 무선 보안


무선 LAN은 블루투스, 휴대폰, 라디오, 무전기와 같은 무선 통신이기 때문에 공중파 방송과 같은 것이라서 도청이 가능하다. 그래서 내용 전송에 암호화 기술을 사용한다. 내부 유선 LAN과 무선 LAN이 연결 되어 있을 때는 무선 LAN을 통해 내부 유선 LAN에 침투할 수가 있다. 고로 무선 LAN에 암호를 걸어 두어야 한다. 황당하게도 PC나 휴대폰이나 암호를 걸라고 경고를 하지 않는다. 디폴트가 암호 없음이다. 그러니까 무지한 사용자가 암호를 걸지 않으면 무선으로 바로 옆에서 해킹할 수 있다.

자세한 내용은 모두 까먹었는데 이 정도만 알아도 대충 어떻게 동작하는지 이해할 것이다. 인터넷은 우편배달과 흡사한 방식으로 데이터를 전송한다. 고로 전송이 필요할 때만 연결하고 끊는다. 그런데 전화망은 실시간 전송이 필요하기 때문에 물리적 연결 상태를 유지한다. 다시 말해서 두 사람 사이의 도로는 대화 내용이 없어도 비워두는 식이다. 요즘 나오는 휴대폰의 LTE란 것은 사용하지 않는 도로를 다른 데이터 통신에 빌려 주는 방식이다. 그래서 데이터 통신 속도가 빠르다고 하는 것이다. 새벽에 빈 도로를 질주하는 것과 비슷하다. 인터넷과 전화망의 잡종이라고 해야 할까?




원전 해킹에 대해선 여러 가지 가능성이 있다. 정말 외국의 반핵 단체가 해킹했을 수도 있고, 아니면 국내 반핵 여론을 죽이기 위해서 국세충이 자작극을 벌인 것일 수도 있다. 북한 입장에서 이 시점에 남한 원전을 해킹하는 것이 무슨 이득이 있을까? 만약 이득이 있다면 남한 친일독재잔당이 북한 김씨세습독재에 협력 요청을 했을 수도 있다. 돈 줄 테니까 해킹 좀 해 달라고 말이다. 옛날에 친일독재잔당이 실제로 북풍 요청을 한 적이 있지 않나? 그러니까 남한 독재 잔당과 북한 세습 독재는 공생관계란 말이지. 둘 다 우리의 적이다. 흔히 알려진 죄수의 딜레마를 적용하면 다음과 같은 4가지 경우가 가능하다.

  1. 서로 적대적 → 양자 1당 독재 유지 (박정희가 원했던 구도이다.)
  2. 서로 협력적 → 통일 → 양자 권력 포기 (남북 국민이 원하는 구도이다.)
  3. 남한 퍼주기 + 북한 받기 → 남한 정권 교체
  4. 북한 퍼주기 + 남한 받기 → 북한 정권 몰락

고로 서로 암묵적으로 협력하여 적대적 관계를 유지하는 것이 서로(김씨세습독재, 친일독재잔당)에게 이익이다. 남북이 민주화 되지 않으면 통일은 없다.


2014년 12월 28일 일요일

베지에 곡선의 원리

상관계수→인공신경망, 푸리에변환 → DFT → FFT
베지에 곡선의 원리
간단한 보간법, 내삽법, 보외법, 외삽법 이해

베지에 곡선은 베지에란 프랑스 사람 이름을 딴 곡선으로 컴퓨터 아트, 도면, 글꼴 등에서 곡선을 그릴 때 사용한다. 원리는 아래 그림과 같다. 직관적으로 이해할 수 있을 것이다. 이건 영문 위키백과에 나온 그림이다. 링크는 아래와 같다.

※ 아직 위키백과 한글 번역은 부실하다. 영문이 내용이 충실하니 한글 설명이 부족하면 영문을 읽을 것.

위키영문백과 베지에 곡선





이 그림을 그리는 실용적 공식은 t%와 (1-t)%의 진행도의 2제곱, 3제곱을 미리 구해서 각 좌표에 곱하는 것으로 점을 찍을 좌표를 쉽게 계산할 수 있다. 1차 베지에를 이해하면 나머지 공식은 직접 유도할 수 있을 것이다. 위키백과 링크 참고할 것. 보통 3차 곡선까지 그리면 모든 곡선을 흉내 낼 수 있기 때문에 4차 이상은 필요 없다.


개독교인의 한계(기독교인의 50% 정도가 개독교?)


가끔 기독교인 친구와 얘기를 하면 개독교를 느낄 수 있다. 이들은 평소 정상인처럼 보이지만 특정 부분에선 판단력이 흐린 부분적 광인들이다. 참고로 기독교는 예수교의 한 종파다. 이 종파는 "예수 = 기독 = 그리스도 = 메시아 = 구세주"라는 것에 집착한다. 그래서 이름이 기독교인 것이다. 또한 예수가 곧 재림하면 종말이 오고 자신들은 산 몸 그대로 구원 받는다는 것(휴거)을 믿었다. 아직도 믿고 있을까? 2천년이 지났는데? 요즘 사이비 종교의 뿌리가 초기 기독교 믿음(종말론)에서 온 것이다.

질문 : 곰이 마늘과 쑥을 먹고 여자가 된 얘기를 믿냐? (단군신화)
대답 : 천사들이 인간 여자를 강간해서 거인을 낳은 얘기를 믿냐? (창세기)

등잔 밑이 어둡고 똥 묻은 개가 겨 묻은 개 보고 뭐라 한다고, 지들 미신은 보지 못 하는가? 성경에도 그 얘기 나오지 않나? 뭐라 하더라? 지 눈에 박힌 기둥은 보지 못 한다고.

질문 : 옆구리에서 애(부처)가 태어난 얘기를 믿냐? (제왕절개술)
대답 : 처녀가 애(예수)를 낳은 얘기를 믿냐? (처녀막재생술?)

차라리 제왕절개(제왕은 배를 가르고 나온다)가 처녀막재생술보다 낫지 않을까? 제왕절개는 로마 시저(카이사르)의 탄생 신화와도 엮인다. 성경의 처녀는 숫처녀가 아니라 젊은 여자를 부르는 유대인 말인데 유럽에서 성경 번역을 잘 못 한 것이다. 성경도 인간이 쓴 책이라 오류가 있단다. 성경도 여러 버전이 있고 요즘은 각 버전의 내용을 다 기록한 성경도 나온다.

질문 : 애(부처)가 걸으며 천상천하유아독존(내가 제일 잘났다)이라고 했다며?
대답 : 어떤 양치기(예수)는 지가 신의 독생자(내가 제일 잘났다)라고 했다며?

어떤 종교든 지들 교주가 제일 잘났지? 예수 = 왕이라고 했을 때 그 왕은 동양의 천자(天子 = 하늘의 아들)와 같은 의미다. 로마의 황제도 신의 아들이라고 불렀다. 진짜 신의 아들이란 뜻이 아니다. 예수가 말 한 그 아빠가 유대교의 야훼인지도 불명확하다. 또한 신을 아빠라 불렀다 해서 그게 자신이 진짜 신의 아들이란 의미는 아니잖아? 그럼 우리는? 우린 선 오브 비치(해변의 자식)다. 바캉스 베이비 말이다.

질문 : 원숭이가 인간의 조상이란 것을 믿냐?
대답 : 진흙으로 남자를 만들고 갈비뼈로 여자를 만든 얘기를 믿냐?

진화론에 대해서 좆도 모르면서 어떻게 진화론을 비판하지? 유인원과 인간은 진짜 원숭이와 비슷한 공통 조상에서 나왔단다. 빅뱅(큰 뻥)이 원래는 비웃는 말이었는데 진짜 이론이 된 것처럼 말이다. 다시 말 해서 원숭이가 우리 조상 맞아. 학교 다시 다녀라. 야권 언론도 보지 않는 보수우익꼴통들이 야권의 주장을 알며 자신이 중도라고 지랄하는 것과 같다. 극우와 극좌를 모르면서 어떻게 중도를 논하냐?

질문 : 당신은 신을 믿습니까?
대답 : 당신은 미신을 믿습니까?

이런 질문은 서양인들(유대교/기독교/이슬람)에겐 억압의 상징이다. 가끔 개독교인들은 무례하고, 교만하며, 건방진 질문을 던진다. 거기에 대한 적절한 대답은 한 글자 더하는 것. 무식한 개독교인들이 세상 이치를 다 아는 것처럼 떠드는 것이 교만한 것이지 무엇이 교만할까? 보수우익꼴통들과 비슷한 유전자다. 익은 벼는 고개를 숙이는 법이다. 글을 좀 읽었다면 이런 교만한 질문을 하지도 않을 것이다. 또한 교묘한 개독교인들은 말을 살짝 돌려 이렇게 말한다.

개독교 : 성경은 비유(은유)다.
자유인 : 비유라면서 왜 그대로 믿냐?

비유는 비유라는 걸 알지만 은유는 비유라는 걸 모르기 때문에 글자 그대로 믿으면 곤란하다. 그게 은유인지 사실 그대로를 적은 것인지는 전문가도 판단하기 어렵다. 여러 종교 신화에 나오는 창조주란 무심한(비인격적) 자연을 비유한 것이고, 빅뱅과 진화론을 비유한 것이다. 그 이후의 인격신(화도 내고 씹질도 하는)은 우리 인간 자신, 특히 권력자를 비유한 것이다. 당신의 기도를 들어 줄 그런 인격신은 없다. 비유와 은유가 말 하려는 원래 내용을 모르면 제대로 해석할 수 없다. 드디어 개독교인의 정신 상태를 알 수 있는 극악의 대사가 나온다.

개독교 : 믿을 수 없는 것을 믿는 것이 신앙이다.
자유인 : 믿을 수 없는 것을 믿으면 사기 당한다.

아무도 자연법칙을 믿으라고 강요하지 않지만 누구나 당연히 믿는다. 종교가 달라도 굶어 죽고, 늙어 죽고, 얼어 죽고, 맞아 죽고, 병들어 죽는 것은 마찬가지다. 여러 종교가 여러 망상 체계를 가지고 있지만 그들은 결국 같은 자연법칙의 지배를 받는다. 눈앞의 멀쩡한 진리도 보지 못 하는 자들이 왜 보이지도 않는 망상을 억지로 믿으려고 하는가?

타력구원 : 절대자만 구원해 줄 수 있다. 믿음을 강조, 99% 무지렁이들의 싸구려 구원론
자력구원 : 자기 자신만 구원할 수 있다. 깨달음 강조, 상위 1%들의 비밀스러운 구원론

개독교 : 종교는 형이상학이다. 형이상학(신)을 형이하학(인간)이 절대 알 수 없다.
자유인 : 그러니 아가리 닥쳐!

자신들이 무슨 말을 하는지도 잘 모른다. 형이상학, 형이하학 정의에 따르면 우린 절대 형이상학 세계를 알 수 없다. 죽어 영혼이라도 있으면 알게 될까? 그런데 형이하학에 속하는 개독교 목사들은 신에 대해 졸라 많이 언급한다. 사기 당하기 딱 좋은 인간들이다. 우리 박씨 공주님 제발 최씨 무당집 말을 듣지 마세요.

형이상학(形而上學) = 형상 초월 학문 = 종교 → 자연법칙에 대한 비유
형이하학(形而下學) = 형상 이하 학문 = 과학 → 자연만물에 대한 비유

이 말은 동양의 도교에서 나온 말이다. 서양에서 이 말에 해당하는 것은 전철학(과학), 후철학(종교)에 해당 된단다. 그런데 형태가 없으면서 형태가 있는 것을 통제하는 것이라면 자연법칙을 말하는 것이라고 볼 수도 있겠다.

개독교 : 유불선은 종교다.
자유인 : 원래 철학이었다.

개독교 특징 중의 하나가 동양인이면서 동양에 대해 무식하다는 점이다. 제사 올리는 것을 보고 유교를 종교라고 하는 것이다. 정말 한심하다. 족보도 없는 귀신에게 제사 올리는 것보다야 자기 조상에게 제사 올리는 것이 더 낫겠다. 피의 희생 제사 받아 먹던 신이 있는 유대교 → 기독교 → 이슬람이 바로 무당 종교의 후예이다. 유불선은 원래 철학이라 믿어야 할 신 같은 것이 없다. 그런데 무지렁이들은 미신을 원하니까 나중에 종교화 된 것이다.

※ 동양의 종교(宗敎)란 단어의 뜻은 한자 그대로 으뜸(최고) 가르침을 말한다. 미신을 말하는 것이 아니다. 그래서 현대의 종교는 과학이라고 할 수도 있다. 동양에서 미신이란 원래 무당을 보고 한 말이다. 그 무당 종교의 후손이 유대교, 기독교, 이슬람이다.

2014년 12월 27일 토요일

상관계수→인공신경망, 푸리에변환 → DFT → FFT

상관계수에서 FFT까지 내용을 고등학교 말년에서 대학교 신병까지 수준에서 설명을 할 것이다. 나는 학문적인 어려운 표현을 써서 수학적 증명을 하는 것보다는 직관적, 실용적으로 이해하는 것을 더 좋아한다. 이렇게 하는 것이 이해가 더 빠르다. 인터넷 찾아보면 다 나오는 내용인데 아마도 내 설명이 더 쉬울 것이다.



1. 상관계수





통계학의 상관계수는 인공신경망이나 푸리에 변환을 이해하는 열쇠이다. 상관계수란 비유적으로 말하면 성관계 수이다. 키 큰 놈과 키 큰 년은 엉덩이 높이가 맞으니 잘 어울려서 성관계 수가 많을 것이다. 이렇게 큰 수와 작은 수가 서로 짝을 이루게 되면 상관계수가 높게 나타난다. 공식을 보면서 직관적으로 이해하자. 첫 번째 공식은 상관계수 개념을 잘 이해하게 해 준다. 평균을 빼서 비교 기준선을 정한다. 중심을 맞추는 것이다. 중심을 일치시켰다고 가정하고 모든 x, y값을 중심 대비 차이로 변환해 보자. 그럼 이제 x와 y평균은 0이 되는 것이다. 수식은 더 간단해져서 다음과 같은 형태가 된다. 

∑xy/√(∑x²∑y²)

이제 크기를 맞추어 보자. 이것을 정규화라고 한다. 표준편차인 √∑x²과 √∑y²를 나누면 폭/키가 같아진다. 만약 x와 y가 100% 같다면 계산 결과는 1이 될 것이다. 그렇지 않은 경우는 무조건 –1 ~ +1 사이의 값이 나온다. 이 간단한 형태가 인공신경망에서 사용하는 패턴 비교 공식이다.



2. 인공신경망


인공신경망 공식을 보면 그 형태가 상관계수 공식과 매우 흡사하다. 모든 수가 –1, 0, +1의 3개의 숫자로만 표현 되고 평균을 무조건 0으로 보는 특수한 경우라고 이해하면 된다. 시그마(합) 기호가 들어가면 눈이 어지러우니 쉽게 3개 데이터로 풀어 보자. A 쪽은 (a, b, c)가 되고 B 쪽은 (x, y, z)가 된다고 하자. 그럼 상관계수 공식은 이렇게 단순하게 바뀐다.


f=(ax + by + cz)/√(a²+b²+c²)(x²+y²+z²)
√(a²+b²+c²) = k
√(x²+y²+z²) = h
f=(ax + by + cz)/kh = (a/k*x + b/k*y + c/k*z)/h = (A*x + B*y + C*z)/h
f=(A*x + B*y + C*z)/h = (A*x/h + B*y/h + C*z/h) = (A*X + B*Y + C*Z)
A, B, C, X, Y, Z는 모두 -1 ~ +1가 된다.

A(a, b, c)는 신경 세포로 들어가는 3개의 입력이고, 결과 f는 출력이다. B(x, y, z)는 세포 내부의 비교 패턴이다. 여기서 분모 부분은 결론의 크기를 조절하기 위한 부분이다. 그래서 이 부분을 그냥 1로 대체하고 생략해도 된다. A 패턴이 (1, 1, 0)이고 B 패턴이 (1, 0, 1)이면 결과는 0.5로 나오게 된다. 50%만 비슷하다는 의미다. B 패턴이 (-1, -1, 0)이면 –1로 나오게 된다. 100% 일치하는데 거꾸로 뒤집혔다는 의미다. 인공신경망이 상관계수 공식과 다른 점은 이렇게 나온 상관계수 값을 어떤 기준과 비교해서 다시 –1, 0, +1의 3개의 숫자로 바꾼다는 것이다. 즉 디지털로 결론을 낸다는 말이다. 예를 들어 80% 이상은 +1로 그렇다. -80%이하는 -1로 아니다. 그 중간은 0으로 판단 불가이다. 

※ 때론 어려운 공식을 이해할 때는 구체적인 숫자로 바꿔 보는 것이 좋다. 특히 0, ±1을 넣게 되면 더욱 단순해진다.

이런 공식을 사용하는 이유는 자가 학습 기능 구현 때문이다. 예를 들어 A 패턴을 알려 주고 그 답이 1이라고 알려 주면 비교 패턴인 B를 스스로 만드는 것을 말한다. A를 B로 기억한다고 생각해도 되고, A와 비슷한 것들의 특징을 파악해서 중요한 부분을 B로 기억한다고 봐도 된다. A 패턴에서 1에 해당하는 값과 곱해지는 B 패턴의 계수는 증가시키고, -1에 곱해지는 B 패턴의 계수는 감소시킨다. 0인 경우는 뭘 곱해도 상관없으니 그대로 둔다. 이 증감 폭이 학습 속도를 결정한다. 이 보정 폭이 너무 크면 빨리 배우지만 최적 경계를 넘어가서 결국 계속 진동하는 미친 현상을 보인다. 이 폭이 너무 작으면 느리게 배우지만 최적 경계 근처에 도달하게 된다. 결국 B 패턴은 A 패턴과 비슷해질 것이다.

이건 하나의 신경 세포에서 벌어지는 일을 표현한 것인데 이런 신경 세포를 다단계로 연결할 수 있다. 이 경우 자가 학습 방법이 복잡해진다. 역전파 알고리즘이란 최종 말단의 계수 보정이 제일 앞의 계수 보정까지 영향을 주는 방식이다. 예를 들어 중간의 어떤 계수가 살짝 변하면 최종 결론에 어느 정도의 영향을 미칠 것이다. 그 민감도를 편미분으로 표현할 수 있다. 민감도가 큰 계수를 변경하면 결과 값도 크게 변할 것이다. 이론적으론 그럴 듯한데 별로 쓸 데는 없을 것 같다. 다단계 회로의 의미는 분할 점령 방식으로 문제 해결을 하겠다는 것인데 자동으로 다단계 회로를 스스로 구성하는 방법이 없다. (지금 인공 지능이 한창 유행인데...)


재미 삼아서 공부해 볼만 하겠지만 별로 쓸 데는 없겠다. 다음은 몇 개 용어 정리이다.

  • 자율 학습 : 학생(기계)이 입력 데이터를 자동으로 분류하는 것
  • 지도 학습 : 선생(사람)이 정답과 계산법을 가르쳐 주는 것, 주입식 교육
  • 강화 학습 : 결과(쾌감/점수)를 좋게 하는 행동(출력)을 찾는 것

서양에선 자율 학습을 통해 다양한 자극을 받는데, 한국에선 지도 학습을 통해 정답만 배우게 되니 시야가 좁아진다. 그건 기계에서도 마찬가지다. 지도 학습만 받은 기계는 멍청이다.

  • 퍼셉트론 : 신경 세포 하나에 해당, ∑ 입력 x 가중치, 결과는 판단 기준에 따라 ±1, 0
  • 오차역전파법 : 답이 틀리면 오차 부호에 따라 가중치를 일정 비율 증감시키는 것
  • 딥 러닝 : 그냥 인공 신경망, 다단계 신경망 조립을 이용한 다단계 중간 판단 이용
  • 서포트 벡터 머신 : 자율 학습 기계, 데이터 분류 기준을 결정한다.

위의 방법과 기계들이 엄청 많이 다른 것 같지만 사실 같은 짓을 반복하는 비슷한 것들이다. 뭔가 대상의 특징을 보고 통계적인 분류를 하는 것이다. 통계적 분류를 하려면 어차피 기계적으로 외우는 과정이 필요하다. 또한 예외는 기준에서 벗어나기 때문에 어차피 외워야 한다. 예외적 판단/행동에는 어차피 수학 공식은 안 통하고 조건문과 암기가 통한다. 규칙적인 것은 수학 공식으로 압축이 되고 불규칙적인 것은 조건문과 기억으로 대응한다.

  • 튜링 기계 : 컴퓨터 CPU의 동작 원리, 상태 변화도(표)
  • 상태 변화표(도) : 조건(외부 자극 x 현재 상태)에 따른 다음 상태(행동/판단) 변화
  • 전문가 시스템 : 조건(많은 규칙)에 따른 논리 계산 후 뭔가 도출
  • 마르코프 연쇄 : 상태 변화도(표) + 상태 변화 확률, 외부 자극 없는 시변적 변화 표현
  • 은닉 마르코프 모델 : 입력(외부 자극) → 상태 변화도(표) x 확률(은닉) → 출력(행동)

역시 위의 방법들이 엄청 많이 다른 것 같지만 사실 같은 짓을 반복하는 비슷한 것들이다. 시간 변화나 순서가 있는 처리(판단)이나 다단계 처리(판단)에 사용하는 방법들이다. 아마 이 방법이 인공 지능보다 먼저 개발 되었다고 봐야 할 것 같다. 컴퓨터 CPU도 이런 방식으로 움직이기 때문이다.



3. 삼각함수 & 복소수 & 지수함수



푸리에 변환은 본질적으로 삼각함수를 사용하여 패턴 비교하는 개념이다. 그런데 이 삼각함수 cos, sin 쌍을 복소수 형태로 표현하기 때문에 삼각함수와 복소수 사이의 변환에 대해 미리 알아야 한다. 이런 복소수 표현을 사용할 필요는 없는데 수학 공식이 깔끔하게 정리 되니까 사용하는 것이다. 수학적인 허세? 편리함이다.

공식 0과 1은 어떤 단일 주파수의 정현파는 cos, sin 성분으로 분해 가능하다는 뜻이다. 어떤 복잡한 신호는 결국 성분 분석을 하면 단일 주파수 신호의 합으로 표현 된다. 이런 단일 주파수는 다시 cos, sin으로 분해된다는 것이다. 예를 들어 Acos(y) + Bsin(y)이 합성이 된 경우 이것은 cos(x) = A/√(A²+B²), sin(x) = B/√(A²+B²) 형태가 되니 √(A²+B²){cos(x)cos(y) + sin(x)sin(y)} 형태가 되고 √(A²+B²)cos(x-y)가 되는 셈이다. 이건 피타고라스 정리다.

공식 2, 3은 복소수 합이 벡터의 합과 같다는 것을 의미하고, 공식 4, 5는 직각 좌표계에서 복소수의 곱을 나타낸다. 그런데 이 공식은 벡터의 회전 공식과 같다. 그래서 3D 게임의 벡터 회전에 복소수를 이용하는 것이다. 3차원 회전은 4원수라는 실수부 1개, 허수부 3개로 된 수를 이용한다. 복소수는 4차원적인 신비한 의미가 있는 것이 아니라 제곱을 하면 부호를 바꿔주는 편리한 연산자와 같은 용도가 있어 사용하게 된 것이다. 우리가 음수(갚아야 할 빚)를 사용하게 된 것처럼 음의 면적(빼줘야 할 면적)도 생각할 수 있다. 면적의 제곱근은 그 면적을 대변한다. 고로 허수는 음의 면적의 한 변이 되는 것이다.

공식 6, 7은 삼각함수로 표현된 복소수가 지수함수와 결합하여 극좌표계로 바뀌는 것을 의미한다. 공식 8, 9는 지수함수(극좌표) 형태로 표현된 복소수 곱셈이 벡터의 회전과 같다는 것을 보여준다. 그러니까 직각좌표는 덧셈에 유리하고, 극좌표는 곱셈에 유리하니까, 이 두 표현을 오가면서 계산하는 것이다. 직각 좌표의 덧셈이 벡터 합(이동)과 같은 꼴이고, 극 좌표의 곱셈이 벡터의 회전과 같은 꼴이다. 계산의 편리함 때문에 이런 표기를 사용한다.



4. 푸리에 변환 원리



이제 수학 기초를 다시 기억 회복했으니 푸리에 변환의 원리를 보겠다. 주파수가 같은데 크기가 3인 cos과 크기가 4인 sin을 합성하면 같은 주파수의 크기가 5인 정현파가 생긴다. 이게 앞에서 본 수식에서 어떤 정현파는 cos과 sin 성분으로 분해 가능하다는 것을 나타낸다. 여기서 4와 3과 5의 관계는 피타고라스 정리에 따른다. 이제 주파수가 서로 다른 정현파를 섞는다고 해 보자. 그럼 각 정현파는 자기 주파수의 cos, sin으로 분해 될 것이다. 이렇게 특정 주파수의 cos, sin 성분을 복소수로 나타낼 수가 있다. 즉 복소수 하나는 특정 주파수의 정현파 하나에 대응된다.

역으로 크기가 5인 정현파를 같은 주파수의 크기가 1인 cos, sin과 곱하면 어떻게 될까? 여기서 상관계수 공식을 다시 떠올린다.

∑(3cos + 4sin)*cos = ∑3cos*cos + ∑4sin*cos = ∑3cos² = 3∑cos² = 3K
∑(3cos + 4sin)*sin = ∑3cos*sin + ∑4sin*sin = ∑4sin² = 4∑sin² = 4K

간단하게 위와 같이 cos 성분과 sin 성분이 분리 된다. cos, sin의 무한 평균은 0이다. 상관계수 공식에서 평균이 0인 경우와 같다. 무한 시간에 대해서 cos² = sin²이며 이것은 상관계수에서 분모(분산)에 해당한다. 무한 시간에 대해서 cos*sin은 0이 된다. 주파수가 다른 cos, sin의 곱은 결국 주기적 파형이 되는데 무한 시간에 대해 합하면 0이 된다. 주기적 파형은 평균이 0이기 때문이다. 즉 같은 주파수의 cos*cos, sin*sin만 살아남기 때문에 cos² = sin²을 나누면 cos, sin 성분의 진폭을 알 수 있게 되는 것이다. 이게 푸리에 변환의 원리다. 오직 자신과 같은 주파수에만 반응하는 것을 공진 현상이라고 한다.



5. 푸리에 변환 공식 이해



푸리에 변환의 휘황찬란한 공식을 보자. 복소수의 지수 표현이 나온다. 이것을 너무 어렵게 생각할 필요 없이 cos, sin 형태로 다시 바꿔 이해하면 된다. 보통 f(x)는 시간 함수이고 신호이다. 그럼 x는 시간이 된다. f^(ξ) 함수는 cos, sin 성분을 표시하는 복소수 형태가 되고 ξ는 주파수가 된다. f(x)는 실수부만 있는 함수이기 때문에 그대로 cos, sin 성분에 곱해진다. 그럼 앞에서 본 바와 같이 같은 주파수의 cos, sin 성분만 분리 되어 나온다. 

f(x) = A*cos + B*sin
∑f(x)(cos - i*sin) = ∑(A*cos + B*sin)*(cos - i*sin) = A∑cos² - i*B∑sin²
K = ∑cos² = ∑sin²

위에서 cos² = sin² = K를 나누면 바로 cos, sin 성분이 나온다. 지수 표현의 음과 양의 부호는 그렇게 중요한 것은 아니다. 이렇게 주파수 별로 cos과 sin성분의 진폭이 도출되면 이것을 다시 원래 신호 f(x)로 복구하는데 이용할 수 있다. 복소수 표현에선 부호 하나만 바꾸면 역변환이 되니 공식이 깔끔해서 이렇게 표현하는데 이걸 다시 cos, sin 성분으로 풀면 의외로 간단하다. 

f^(ξ) = (A – i*B)*K
∑f^(ξ)(cos + i*sin) = ∑(A – i*B)*(cos + i*sin)*K = (∑Acos + ∑Bsin)*K + i*쓰레기

여기서 허수부는 쓰레기 정보로 버린다. 실수부를 보면 원래 f(x)와 비슷한 모양이다. 복소수를 사용했을 뿐이지 그냥 cos + sin 형태로 계산해도 무방하다. 어차피 cos, sin은 섞이지 않는다. 수학적으로 복소수로 표현할 뿐이고 컴퓨터에선 실제론 cos, sin으로 분리해서 계산한다. 수학적으로는 복소수 i² = -1이 되어 부호가 바뀌니까 형태적으로 그럴 듯하게 정리 되는 것뿐이다. 푸리에 변환은 수학적으로는 마치 다른 것처럼 표현을 했지만 상관계수의 변형에 불과하다. 실제론 복소수 계산을 하지 않고 A와 B 진폭을 가지고 직접 cos, sin 파형을 합성한다.



6. 이산 푸리에 변환(DFT)



앞의 수식은 무한 시간에 대한 신호를 무한 주파수로 분석하는 것이었다. 현실적으로 이건 불가능하기 때문에 특정 시간 구간에 대해서 특정 시간 간격으로 특정 주파수 성분만 분석한다. 예를 들어 1초 구간 안에서 n=100개의 시간 단위로 0Hz, 1Hz, 2Hz, ~, 49Hz까지 정수 주파수만 분석을 한다. 데이터가 불연속적이라고 해서 이산이라고 부른다. 공식은 적분 기호(∫)가 합산 기호(∑)로 바뀌었고 1/N을 한다는 것이 다르다. 이 1/N 대신에 cos² = sin² = K를 나누면 바로 성분이 나온다. 주파수가 정수배이기 때문에 모든 주파수의 K값이 같다. 쓸데없이 1/N을 하는 이유를 솔직히 모르겠다.

예를 들어 소리를 주파수 분석 한다고 해 보자. 그럼 20~20000Hz까지 분석을 해야 한다. 최소 1/20초 동안 소리를 들어야 20Hz를 감지할 수 있다. 그래서 1/20초 동안을 분석한다. 그럼 이 1/20초를 몇 개로 나누어 데이터를 취해야 할까? 이 구간에서 최대 주파수인 20000Hz는 1000회와 같다. 최대 주파수의 2배로 취해야 최대 주파수의 형태를 파악할 수 있다. 그래서 1/20초에 2000개의 데이터를 취한다. 그럼 주파수는 0회 ~ 999회까지 분석하게 되는 것이다. 1회 단위로 말이다. 물론 이 시간 구간에서 1회는 실제 20Hz이고 999회는 19980Hz에 해당 된다.

인간은 약 10옥타브를 감지하고, 1옥타브 안에선 12음계를 감지하며, 1음계 안에선 10% 차이도 감지한다. 그럼 가청 주파수 영역을 10 * 12 * 10 = 1200 단계로 구분한다는 뜻이다. 위에서 1/20초에 1000회를 측정하는 것과 비슷한 계산 결과다. 사람에 따라 더 낮은 저주파와 더 높은 고주파를 느끼는 자도 있을 것이니 더 긴 시간에 더 세밀한 단계로 측정한다. 저주파를 측정하려면 1/20초보다 길게 관찰, 고주파를 측정하려면 2000회보다 더 빈도 높게 관찰.

이 DFT는 문제가 있는데 일단 무한 시간, 무한 밀도로 데이터를 취할 수가 없어서 주파수 분석에 한계가 있다. 또한 주파수 분석이 1Hz 단위이기 때문에 정확하게 원본 신호를 복구할 수가 없다. 근사치란 얘기다. 허나 우리 인간도 자연에서 오는 정보 중에서 놓치는 것이 많다. 실제로는 우리 감각기의 한계로 인해서 다른 색, 다른 소리를 같은 색, 같은 소리로 오인할 수 있다.


Excel로 간단하게 푸리에 변환을 만들어 시험해 볼 수 있다. 시그마 기호가 나오니까 뭐가 뭔지 모르겠지만 Excel 계산표를 보면 (시간, 주파수) 2차원 좌표에서 f*cos, f*sin의 곱에 불과하기 때문에 별로 이해하는데 어렵지 않다. 간단하게 1초에 20개의 데이터를 취하니 0~9Hz까지 분석하게 되는 것이다. 신호는 2Hz에서 진폭 3와 4인 cos, sin을 합성했다. 분석 결과 2Hz에서 정확하게 진폭 성분이 나온다. 이것을 1/N인 1/20을 곱하는 것보다는 1/10을 하는 것이 더 낫다는 것을 알 수 있을 것이다. 이 경우 cos² = sin² = 10으로 나온다.



7. DST(이산 사인 변환), DCT(이산 코사인 변환)


DFT 중에서 cos 성분만 계산하는 경우가 DCT, sin 성분만 계산하는 경우가 DST이다. DCT는 JPEG 압축에 사용하고 있다. 정확하게 DFT를 해도 원본 이미지를 100% 복구할 수 없는데 DCT만 사용하기 때문에 우리가 보는 이미지는 원본 이미지는 아니다. DST의 경우는 단위 구간 안에서 좌우측 끝이 무조건 0이기 때문에 곤란하다.

이렇게 해도 사진의 경우 별 대단한 차이를 못 느끼기 때문에 사용한다. 문제는 문자, 도형, 만화 등 선명한 그림들의 경우 선 주변에 지저분한 흔적이 남는데 이는 무한 주파수, 무한 밀도로 분석하지 못 해서 그런 것이다. 선명한 선은 사각 펄스 파형에 해당되는데 이런 것은 무한 주파수가 합성되어야 만들어진다. 그런데 무한 주파수로 분석하지 않았으니 근사치가 될 수밖에 없다.

  • 사진 = JPEG 압축
  • 만화/문서 = PNG/GIF 압축 = 선명한 선



8. FFT(고속 푸리에 변환)


DFT를 빨리 계산하는 방법을 FFT라고 한다. 이 요령은 cos, sin값 계산을 줄이는데 있다. cos, sin 값을 매번 함수 호출을 통해 계산하면 느리다. 그래서 필요한 cos, sin값을 미리 계산해 두었다가 재활용할 수 있다. 비슷하게 f*cos, f*sin이 반복 된다면 앞에서 계산한 값을 그대로 쓰면 되잖아? 앞에서 주파수는 정수배만 분석한다고 했는데 그게 요령이다. 각 주파수의 cos, sin 값을 비교해 보면 일치하는 지점이 있다. 그 지점에선 주파수가 달라도 모든 값이 같다. 그러니 f*cos, f*sin 값도 주파수가 달라도 모두 같은 것이다. 왜 그러한지는 cos, sin 함수 그래프와 표를 그려 겹쳐 잘 관찰해 보시라. 고주파에서 곱셈은 이미 저주파해서 해 놓은 게 있다. 그러니까 앞 단계 저주파에서 이미 계산한 걸 합산만 하면 되는 거지.




이걸 수식만 달랑 보여 주니 도대체 뭔 소리인지 모르지. 
수식만 보지 말고 직접 숫자를 넣어 계산을 해 보라고.
구체적 접근이 추상적인 걸 이해하는 가장 빠른 길이여.



중요한 정치적 이슈나 경제적 이슈가 있는데 뉴스에서 사건, 사고 방송만 나온다면 정부의 개입을 의심해야 한다. 살인, 강간, 교통사고 등은 매일 발생하는 사건이다. 비행기와 배의 사고는 발생하기 힘들다. 레이더, 관제소, GPS, INS, 블랙박스, 자동항해장치 등 사고 예방 장치들과 사후 분석 장치들이 있어 사고 발생률이 낮다. 그런데 요즘 배들이 박치기도 잘 하고 침몰도 잘 하고 정말 이상하다. 술 마시고 운전했다고? 자동 항법으로 움직여도 제대로 갈 것인데? 조땅콩의 항공기 빠꾸 사건 등 너무 황당한 일들이 많이 벌어져서 뉴스를 보는 것인지 판타지 영화를 보는 것인지 모르겠다. 땅콩 하나 때문에 이렇게 세상이 시끄럽다니. 정말 위대한 땅콩이다.

2014년 12월 21일 일요일

토렌트 프로그램 vs 절전 모드

토렌트/torrent/급류는 파일 공유 프로그램이다. 이것의 동작 원리는 정보 시장에서 자기가 가진 파일을 교환하는 것이다. 중개 서버가 정보 시장에 해당한다. 모든 PC가 중개 서버에 일단 접속한 후에 자신이 가진 파일이 뭔지 알려 주고, 자신이 원하는 파일이 뭔지 알려 준다. 중개 서버가 그런 수요 공급 정보를 PC에게 알려 주면, 파일의 전송은 PC들끼리 알아서 하는 것이다. 중개 서버에는 파일의 내용은 없다. 그래서 개인과 개인 사이의 파일 교환이 되는 것이다. 

파일 공유 원리는 십시일반으로 받을 때는 여러 사람으로부터 부분적으로 받기 때문에 고속으로 받지만 줄 때는 내가 가진 파일의 조금만 주는 방식이다. 만약 내가 가진 파일이 세상에 유일무이한 것이라면 전송할 때도 전력을 다하게 된다. 10명이 내 것을 원할 때 각자에게 같은 내용을 전송하는 것이 아니라 서로 다른 1/10의 내용만 전송하면 이후 10명이 서로 교환하여 나의 부담이 줄어든다. 참으로 잘 만든 프로그램이다.

이 프로그램을 사용할 때 주의사항이 있다. PC를 절전 모드로 전환하면 메모리의 내용을 하드디스크에 저장하고 종료하게 된다. 나중에 PC를 켜면 하드디스크 내용을 메모리에 복구하여 빠르게 부팅하는 장점이 있는데 토렌트와 함께 사용하면 토렌트가 잘 동작 하지 않는다. 고로 절전 모드를 사용할 때는 토렌트를 종료시키고 다시 실행시켜야 한다.



Open Source와 P2P 파일 공유 프로그램은 좋은 점도 있지만 나쁜 점도 있다. 저작권 보호 문제다. 프로그램 개발도 힘든 노동이기 때문에 보답은 받아야 한다고 생각한다. Open Source가 발생한 이유는 아마도 특정 업체가 휩쓰는 독점 때문이겠다. 경쟁력이 떨어지는 사람들끼리 Open Source로 대항하는 것 같다.

P2P 파일 공유 프로그램도 명목상으로는 개인 파일의 공유이지만 영화, 야동, 음악, 게임 등의 불법 복사에 사용된다. 정보는 정말 사고팔기 어려운 것인가? 한 번 입을 열면 더 이상 비밀이 아니듯이 모든 정보는 복사가 너무 쉽다는 것이 문제다. 반대로 생각하면 정보 공유처럼 저렴한 복지도 없다는 것이다.

만약 선 배포 후 지불 형식을 취한다면 도움이 될까? 사람들이 국가 서버에서 무료로 원하는 프로그램을 다운 받게 한 후에 그 비율과 평가에 따라서 국가에서 세금으로 개발비를 지불하는 것이다. 음악가, 영화인, 프로그램 개발자, 작가는 판매까지 신경 쓰지 않아도 된다. 만들어 올리기만 하면 된다.

왜 개발비만 지불할까? 물질적 제품 생산과 달리 정보 복사에는 추가 생산비가 거의 들어가지 않기 때문이다. 그래서 지불 금액에 한계를 정한다. 그 이상은 받을 수 없다. 이런 정보 사업에선 유통업자(장사꾼)와 생산업자(복사꾼)는 정부가 대신하고 오직 개발자만 인정 받는다. 아마도 이렇게 창조자만 대우 받는 세상이 미래의 가장 공평한 세상일지도 모르겠다.

2014년 12월 13일 토요일

컴퓨터 잔고장의 주된 원인

전자 전기 회로가 먼저 고장 날까?
아니면 기계 부품이 먼저 고장 날까?
물론 가장 약한 쪽이 먼저 고장 나겠지?

자동차 업체에선 급발진 원인을 운전자 운전 미숙으로 몰고 가거나 그렇게 할 수 없을 때는 전자 회로 쪽의 문제로 몰고 간다. 기계식은 단순하기 때문에 급발진 같은 것이 없었으니까. 지금은 운전자의 명령을 받아서 컴퓨터가 자동차를 운전하고 있다. 컴퓨터가 돌아버리면 아무리 운전을 잘 해도 급발진을 막을 수가 없다.

전자 회로는 접합 부위에서 이상한 뿌리가 자란다. 결정 성장 비슷한 것이다. 현미경으로 관찰 가능하다. 그런데 전자 회로도 잘 고장 나지 않는다. 대부분의 경우 한 번 정상 동작한 전자 회로는 10년 이상을 정상 동작 한다. 우리 집엔 30년 이상 된 선풍기도 있다. 컴퓨터의 경우 문제의 원인은 오히려 소프트웨어 쪽에 더 많다.

자동차에 블랙박스 설치를 권한다. 브레이크, 엑셀, 기어, 핸들 조작을 감시하는 장치 말이다. 급발진 원인이 운전 미숙인지 자동차 문제인지 밝혀 줄 것이다. 자동차 업체에서 설치한 것은 그들만 열어 볼 수 있다. 급발진 사고 대부분은 운전자 실수로 나온다. 진짜 급발진은 분명 발생하는 현상이고 아직 원인이 밝혀지지 않았다. 억울하게 운전 미숙으로 취급 받아 보상을 못 받고 오히려 역으로 벌을 받을 수도 있다.



1. 키보드 고장


옛날 8비트 컴퓨터 시절에 구입했던 Apple 2 컴퓨터에서 가장 먼저 고장이 났던 것이 키보드이고, 가장 많이 눌렀던 Enter 키와 Space 키가 가장 먼저 고장이 났다. 많이 사용하는 것은 가장 빨리 고장 난다. 컴퓨터 키보드에선 주로 3곳이 가장 먼저 고장 난다. 자판의 Enter, Space, 숫자패드의 0과 +와 Enter이다. 은행 직원들은 알 것이다.

분해를 해 보면 키보드 버튼을 눌렀을 때 다시 튕겨내는 스프링 부분이 고장이 났거나, 아님 이물질이 끼어서 뻑뻑해져 있거나, 금속 접촉 부분에 문제가 있어 접촉 불량이거나 3가지 중에 하나다. 분해 후에 청소를 해 보고 휜 스프링을 적당히 손보면 정상동작을 한다.


2. 마우스 고장


옛날 기계식 볼 마우스를 사용할 때는 이런 저런 먼지가 뭉쳐서 때가 되어 공의 회전을 멈추게 했다. 이걸 고장이라고 생각해서 마우스를 무작정 교체하던 때도 있었다. 그냥 때만 벗겨 내면 되는 것인데. 역시 기계적 접촉 부위가 가장 먼저 고장 났다.

요즘은 레이저로 바뀌어서 그 부분 고장은 없는데 휠이 기계적인 부분이라 여기에 먼지가 끼면 오작동을 한다. 휠과 센서 사이에 틈이 있는데 여기에 먼지가 누적된 경우 이쑤시개로 긁어 낸 후에 바람을 세게 불어 넣어 센서를 청소한다.



3. 토글스위치 고장


토글스위치는 On/Off 기능이 함께 있어 구조가 좀 복잡하다. 이게 많이 누르면 스프링의 탄력이 떨어져 변형되어 접촉 불량이 되는 경우가 있다. 고치는 방법은 간단하다. 느슨해진 스프링을 다시 탱탱하게 원래 모양으로 회복 시켜 주는 것이다. 스위치는 On, Off가 분리된 형태가 안정적이다.



4. 메모리 고장


메모리 반도체 자체의 회로 고장보다는 메인 보드와 메모리 접촉 부분을 의심해야 한다. 옛날 대구에서 구입한 PC에 싸구려 대만제 메모리를 사용했었는데 이것의 문제는 바로 소켓에 꼽는 접촉 부분의 금속 재질이 문제였다. 지우개 질도 한계가 있다.

금속을 녹여 눌러 붙이지 않는 이상 접촉 부분은 밀착된 것이 아니다. 접촉이 부적절해서 접촉 저항이란 것이 발생한단다. 전류가 흐르는 통로가 갑자기 좁아지는 병목 현상, 비유하자면 행군 중인 부대가 강을 만난 경우이다. 강을 건널 수 있는 방법은 다리와 배 뿐이다.

이 때 사용하는 것으로 WD-40 녹 제거제가 있다. 휘발성이라 윤활유는 아니다. 오히려 기름을 녹인다. 녹과 먼지를 제거해서 전류가 잘 통하게 한단다. 그런데 절연체는 아니란다. 절연체가 아닌데도 회로 고장이 발생 안 하니 이상하다. 경쟁 업체의 선동일 수도 있으니 직접 실험을 해 보시길. 불 붙어도 할 말 없음. 내 경우 전기 스위치나 컴퓨터 펜의 축에 WD-40을 뿌려도 이상 없었다. 스위치는 On/Off만 있으니 합선이 될 수가 없고, 펜의 축은 기계적인 부분이라 역시 합선 우려가 없다. 확실하게 하려면 건전지와 전구로 실험을 해 보면 된다.



5. 냉각 팬 고장




CPU 냉각 팬을 뽑거나 꼽을 때 못의 구조를 알면 도움이 된다. 나사를 반시계 방향으로 돌려 고정 못을 뽑아 올린다. 4 지점의 고정 못을 모두 올린 후에 잡아 빼면 쐐기가 오그라들면서 빠진다. 꼽을 때는 반대로 시계 방향으로 감아 찔러 넣어야 한다. 그래야 쐐기가 오그라들어 부러지지 않는다고 한다. 그걸 몰라서 돈 좀 깨졌다. 이거 설계 한 놈 총살 시키고 싶다. 쐐기가 너무 잘 부러져서 팬을 소모품처럼 갈아야 한다.

CPU, GPU, 전원공급기(파워서플라이)의 냉각 팬은 기계적 회전을 해서 열을 식힌다. 회전하는 기계는 베어링, 윤활유, 중심축이 중요한데 열로 인해 윤활유가 마르면 팬이 회전을 잘 못 한다. 그럼 윤활유만 뿌려주면 되는데 팬을 교체할 필요가 있을까? 점성이 있는 구리스나 미싱오일(또는 식용유)을 사용한다는 사람도 있다. WD-40(녹 제거)을 뿌리면 오히려 윤활유를 녹이고 WD-40은 빨리 증발한단다. 주로 청소용으로만 사용한다. 실험 결과 임시방편으로 쓸 만 하고 1년 이상 잘 돌아가고 있다.

베어링이 망가지면 마찰로 인해 쇠가 갈리는 듯한 소리가 난다. 축이 휘면 회전 중심이 정중앙이 아니기 때문에 덜덜거리는 소리가 난다. 그럼 답이 없으니 교체해야 한다. PC에 사용하는 플라스틱 팬은 힘이 약해서 보통 육중한 기계에서와 같은 이런 소리가 나지 않고 조용히 멈춘다. 고로 이 놈들이 멈추거나 느리게 도는지 먼저 확인한다. 멈춘 팬은 손으로 돌려 보면 뻑뻑한 느낌이 난다. 회전 축에 WD-40을 뿌려 주면 바로 정상 동작할 것이다.

냉각 팬이 멈추면 과열 방지를 위해서 PC 스스로가 기절을 한다. 반도체의 회로는 아주 미세하고, 섬세하기 때문에 열 받으면 어떻게 될 지 모른다. 고로 자주 재부팅하거나 부팅을 아주 거부하면 이 쪽을 의심한다. 팬이 멈추었거나 조립이 헐거워져 있을 것이다. 이사를 했다면 다시 재조립을 해야 할 것이다. 트럭에서 덜덜 거리면서 팬이 빠졌을 것이다.



6. 윈도우즈(창문들) 문제


이건 MS社 제품의 문제인지 드라이버 문제인지 모르겠다. 고장인지 의도적인지도 잘 모르겠다. 가장 큰 문제는 O/S를 새로 설치하면 다른 프로그램들까지 새로 설치해야 한다는 것이다. 이건 심각한 문제인데 설치하는 프로그램의 덩치가 커지고 수가 많아지면 더 심해질 것이다. 하루 종일 재설치하고 있어야 한다. (때론 DOS 시절이 그립다. 그냥 복사만 하면 바로 실행이 되었으니...)

윈도우즈는 자주 재설치 하기 때문에 귀찮아서 하드디스크를 3등분 한다.
  • 프로그램 설치 영역 (약 100GB이면 충분) - 보통 C 드라이브
  • 프로그램 보관 영역 (약 100GB이면 충분) - 보통 D 드라이브
  • 데이터 보관 영역 (나머지 바이트 할당) - 보통 E 드라이브
또는 2등분 하는데 2등분 할 때는 프로그램 양과 데이터 양 계산을 잘 해야 한다.

또 드라이버(하드웨어 운전 프로그램) 설치 문제가 있다. 윈도우즈나 기타 프로그램은 드라이버에 의뢰해서 하드웨어를 다룬다. 웬만하면 거의 기본 옵션이 된 옛날 하드웨어 규격은 통일했으면 좋은데, 드라이버 찾아 설치하는 것도 번거롭다. 자기 PC에 맞는 것을 다운로드 받아서 프로그램 보관 영역에 넣어 둔다.

※ 응용 프로그램(지휘관) ↔ 윈도우즈(하사관) ↔ 드라이버(운전병) ↔ 하드웨어(자동차)

중요한 일을 할 때는 Windows보다는 Mac을 사용하는 게 좋다고 한다. 갑자기 작업 데이터가 날아가면 열 받을 것이다. Mac은 하드웨어 표준을 정하고 O/S를 개발했기 때문에 안정적이다. PC의 경우는 여러 회사의 호환 부품들을 조립하기 때문에 여러 하드웨어에 맞추어 소프트웨어(드라이버)를 만들어야 하는 문제가 있다. 이 드라이버는 하드웨어 제조사에서 제공한다. 고로 PC가 갑자기 뻗을 때는 Windows만의 문제는 아니다.

보안상 이유인지 뭔지 USB 드라이버가 설치되지 않는 문제가 있는 경우 안전 모드에서 설치하면 된다. 외부인이 와서 USB 꼽아 데이터 빼지 못 하게 하려고 했는지 아니면 단순 오류인지 모르겠다. 국정원에서 구입한 해킹 프로그램은 인터넷만 연결되어도 데이터를 뽑아갈 수 있다고 하던데... 그래서 중요한 파일은 모두 암호를 걸어 두고 있다. 또는 인터넷 서버에 저장해 둔다.

밤낮 국민을 감시하느라 지친 국정원 요원들을 위해 야동을 잔뜩 저장해 두자.




7. 하드 디스크, CD/DVD 고장


하드 디스크와 메인 보드의 연결 부분이 ATA(병렬)에서 SATA(직렬)로 바뀌면서 기계적 접합 부분이 적어졌다. 도로가 16차선에서 2차선으로 줄어든 것과 같다. 좁은 통로로 같은 데이터를 전송하려면 아주 고속으로 전송해야겠지? 그런데 문제는 고정 장치가 없어 잘 빠지거나 비틀어져 접촉 불량이 생기는 현상이다. 그래서 데이터의 이동이 원활하지 못 해 하드 디스크의 성능이 떨어졌었다. (엉터리 부품으로 조립한 가게를 밝혀? 불쌍해서 참는다.)

접촉 부분은 면적이 넓고, 밀착, 고정, 절연, 방수가 되어야 한다. 결국 케이블에 집게가 있는 것으로 교체했다. 역시 기계적 결합 부분의 문제였다. 뭔가 꼽을 때는 헐렁한 것은 역시 싫어. 꽉 조이는 것이 역시 좋아.


CD/DVD가 잘 읽히다가 중간에 멈춰서 더 이상 진행을 하지 않을 때는?


이 경우 특정 부분에서 막힌 것이다. CD/DVD의 표면 상태를 본다. 분명 때가 묻어 있을 것이다. 우리가 바로 눈앞의 가까운 물체를 못 보는 것처럼 보통 먼지, 지문자국, 약간의 흠집은 문제가 없다. 광학적인 문제를 일으킬 정도(눈을 가릴 정도)의 굵고 두꺼운 오염이 있어야 한다.

CD/DVD는 레이저를 쏘아 반사 된 빛을 감지한다. 예를 들어 깊은 칼자국, 기름 때, 끈적끈적한 당분/접착제, 다른 플라스틱이나 고무 등과 접촉하여 화학작용으로 녹아 붙었을 경우 등이다. 이런 경우 빛 대부분을 가리거나 왜곡시키기 때문에 동작 불량이 된다.

이 경우 원상 복구하기 힘들 수 있으니 버릴 각오하고 유리 닦는 세정제나 비누 등을 동원해서 최대한 닦아 내고 다시 시도해 본다. 물론 그 세정제가 화학 작용을 일으켜서 CD/DVD 플라스틱을 녹일 수도 있다. 기름 제거에는 빨래 비누, 주방 세제가 최고다. 기타 아세톤이나 알콜 등도 있다.

CD/DVD의 투명한 부분은 유리처럼 표면이 평평하고 깨끗해야 한다. CD/DVD 내용이 적힌 반대쪽 부분은 얇은 박막으로 되어 있는데 여기에 손상을 줘도 망가진다. CD/DVD를 부러뜨려 보라. 금속 박막 같은 것이 사방으로 흩어진다. 바로 거기에 데이터가 담겨 있다.

CD(Compact Disc) : Red Book(규격서), 알루미늄 박막에 데이터 저장, 안쪽에서 밖으로 저장, 옛날 검정색 LP와는 반대 방향. 음악 저장용, 고로 자동 재생. 원래 음반용이라 저작권 문제로 지역별 재생 제한이 있다. 허나 뻘짓.
CD-ROM(Compact Disk-Read Only Memory) : Yellow Book(규격서),  ISO 9660 (*.iso 파일 시스템 형식), 음악이 아닌 일반 데이터 저장용, 고로 자동 재생하지 않음. 여기에 음악을 압축해 넣으면 CD 뭉치 필요 없음.
DVD(Digital Versatile Disc) : 단면, 양면, 단층(4.7GB), 복층(8.5GB), ISO/IEC 13346 UDF (대용량 파일 시스템), 영상 저장용, 고로 자동 재생. 원래 영상용이라 저작권 문제로 지역별 재생 제한이 있다. 허나 뻘짓.

CD, DVD, 하드디스크 모두 기본적으로 0과 1을 저장한다는 것은 같다. 그게 물리적으로 광학적 흠집, 자기적 흔적, 전기적 전압, 기계적 흠집의 차이이지만 내용은 결국 0과 1이다. 문제는 이 0과 1의 나열을 어떻게 해석하느냐의 차이가 있다. 어디서 (안쪽, 바깥쪽) 시작할 것이며, 어떻게 끝낼 것이며, 처음 나오는 내용은 무엇이며, 얼마 단위로 끊어 읽을 것이냐, 오류 복구 방법은 뭐냐 등이다. 이게 끝나면 드디어 0과 1이 아닌 0~N까지 숫자를 기록하게 된다. 이 숫자들을 어느 단위(페이지 등)로 저장한다. 그래서 디지털이다. 여기까지가 하드웨어적인 규격이다.

※ 디지트 = 0123456789 숫자 문자 10개. 디지털은 숫자로 표현한다는 말임.

이제 그렇게 읽은 숫자들이 내용이 되는 단위(페이지 등)를 묶어 연결하여 파일을 만들고 파일을 관리하는 방법이 필요하다. 이건 도서관의 책 관리와 비슷하다. 파일(책)의 목록을 관리하고 그 파일(책)이 있는 곳을 찾아가는 것 말이다. 이게 소프트웨어적인 파일 시스템이다. 주로 O/S 차원에서 제공한다. 도서관에선 책(파일)에 모든 페이지가 뭉쳐 있지만 컴퓨터에선 모든 페이지가 분리 되어 있다. 이것들을 찾아 엮어야 파일(책)이 된다. 이 연결 정보가 끊어지면 파일(책)은 흩어진다.

※ 디스크 & 페이지 방식이 좋은 점은 테이프 & 롤 방식과 달리 빨리 원하는 곳의 데이터를 찾아 읽을 수 있다는 것이다. 테이프 & 롤 방식은 원하는 곳으로 가려면 신나게 감아야 한다. 최악의 경우 끝까지 감아야 한다. 옛날 카세트 테이프 생각하면 된다.

이제 그 파일(여러 페이지 연결) 안의 숫자들의 의미(영상/음악/사진/문서 등)가 뭐냐는 등의 해석이 있을 수 있다. 이것도 시작을 뭐로 하고 숫자들을 어떤 단위로 묶어 읽을 것인가로 시작한다. 이게 보통 흔히들 말 하는 마지막 파일 형식(file format)이다. 주로 응용프로그램 차원에서 제공한다. 일반 프로그래머가 다루는 것도 이 파일 형식이다. 주로 파일 확장자를 보면 알 수 있는 것들이다. 파일 확장자가 형식의 차이를 알려 준다.

※ 0/1 → 숫자(0~N) → 페이지 → 파일 → 암호 해독



8. 전기 화재


이건 정말 원인을 밝히기 힘들다. 대부분 잘 사용하던 것이 어느 날 화재를 일으키기 때문이다. 잘 움직이던 자동차가 급발진 했다거나 화재가 나는 상황도 비슷하다. 재수 없게 내가 사용하던 물체가 잠복성 불량품(약골)이었던 것인가? 이건 소비자도 밝히기 힘들고 생산자도 밝히기 힘들다. 역시 화재보험은 필요하다. PC를 서버처럼 켜 놓고 외출하지 말자. 그 아이가 내 집을 말아먹을 수도 있다.

물의 침투에 의해서 단락(쇼트)이 발생하는데 (원래 끊어져 있어야 할 선이 붙은 경우) 그럼 전류가 많이 흘러 열이 발생한다. 퓨즈라는 것이 있어 불이 붙기 전에 얘가 스스로 지 허리를 끊어 차단한다. 또한 집에서 샤워하다 우연히 전원 소켓에 물을 뿌리면 차단기가 내려가는 것을 경험할 수 있을 것이다. 이렇게 과전류를 차단해서 불이 나지 않게 한다. 그럼 왜 화재가? 실제론 차단기 내려가기 전에 불이 붙게 된다는 것이다.

회로에 물이 있어 과전류가 흐르게 되어도 물이 끓어 증발하여 없어지면 다시 정상으로 동작한다. 물이 증발하면서 열을 뺏어가서 불이 붙을 온도까지 올라가지 않는다. 그래서 플라스틱 그릇에 물을 담아 끓일 수도 있다. (가끔 물을 뿌려도 회로 기판에 불이 붙기도 한다.)전선을 감고 있는 절연체는 열에 약해 불이 붙지만 고열이 방생하지 않으면 안전하다. 그런 열이 발생할 정도의 전류가 흐르기 전에 차단기가 내려가거나 퓨즈가 끊어진다. 그런데 왜 불이 나지?




불이 붙을 정도의 순간 스파크나 고열이 나야 한다. 그런 경우 터지는 소리가 난다. 가는 전선 끝에서 스파크가 잘 발생한다. (옛날에 한 번 죽는 줄 알았다.) 막 불이 붙었을 때 진압하고 관찰하면 전원 전선 피복이 불에 탄 흔적이 있다. 이건 분명 과열 때문이다. 전원선을 건드렸을 때 On/Off가 되면 선이 끊어진 것이니 단선 부위를 찾아 다시 연결해 붙여야 한다. 그렇지 않고 계속 사용하면 언젠가 거기서 스파크가 나서 불이 붙는다.

이건 실제 경험이다. 우리 집에 40년 다 되어가는 선풍기가 있는데 먼지 잘 먹고도 아직도 잘 돈다. 얘가 전원선이 끊어져 불이 붙었다. 다른 부품이 아닌 전원선에서. 다시 연결해서 정상 동작은 한다. 전원선을 이리 저리 휘어 봐도 정상 동작하면 안전한 것이다. 어딘가 끊어져 있다면 언젠가 불이 날 것이다. 전원선은 주로 심하게 당기는 경우 끊어진다.

에어컨의 경우 동관 2개에 실외기로 가는 전원선이 1개가 연결 되어 있는데 벽걸이 경우는 건드릴 일이 없지만 타워형인 경우 청소하거나 커튼을 치거나 해서 무식하게 움직이는 경우가 있다. 이런 경우 동관이 손상 되어 가스가 새거나 전원선이 끊어져 가늘고 뾰족한 구리선 끝에서 스파크가 발생해 불이 날 수 있다. 여름에 처음 선풍기나 에어컨을 켠다면 반드시 마음의 준비를 하라.

당황하지 말고 전원을 끈 후에 물을 부으면 해결 된다. 그런데 반드시 전원부터 꺼야 한다. 거꾸로 하면 좆 되는 수가 있다. (물론 차단기가 내려간다.) 이렇게 안 하고 도망가서 신고하면 그 사이 불이 커지게 된다. 그렇게 될 경우 누군가는 피해 보상을 해야 하기 때문에 눈물 흘리는 사람이 생기는데 당연히 가장 약자가 피해를 보게 된다. 즉 설치자나 소비자 말이다.화재 보험이 없다면?

미세 먼지(밀가루), 깃털/솜털처럼 생긴 물체(부싯깃/먼지뭉치)는 불이 잘 붙는다. 산소와 접촉 면이 넓기 때문이다. 스파크와 기름 먼지의 결합이 불? 가는 전선이 공기 중에 노출되었다고 해서 불이 붙지는 않는다. 고압이 걸린 가는 전선이 서로 가깝게 접근하면 스프크가 발생한다. (초소형 번개) 고로 끊어진 부분을 완전히 붙이고 땜질을 하거나 절연 테이프로 봉한다. 완전히 붙게 되면 스파크가 발생할 수 없다. 전기는 힘들게 공기를 뚫고 가기보다는 저항이 작은 쪽으로 흐르기 때문이다. 가는 선들 중에 단 하나라도 연결 되어 있다면 그리로 흐른다.

콘덴서는 전자 저수지 역할을 하기 때문에 가끔 고압으로 댐이 무너져 터진다. 또는 피식 하면서 연기가 나고 작은 불꽃이 보인다. PC에서 실제로 본 현상이다. 저항이나 코일은 스스로 타지는 않지만 전기 장판처럼 열을 발생시켜 다른 재료에 불을 붙일 수 있다. 결국 고압/고전류는 불을 붙인다. 그래서 집에선 전선으로 문어발식 확장을 하지 말라고 한다. (대기업은 문어발식 확장을 해도 되지. 정확히는 순환출자로 1%로 100% 지배하는 사기 같은 기법이다.)

전선의 문어발식 확장으로 전류의 병목현상 때문에 고속도로에 해당하는 줄기 쪽의 전선이 과열하여 불이 날 수도 있다. 고속도로가 넓어야 전류가 잘 통하기 때문에 모든 전선이 모이는 중앙 전선은 굵어야 한다. 헌데 이런 식으로 불이 나는 경우는 매우 드물 것이다. 건물 벽에 숨어 있는 선이 우리가 사용하는 선에 비해서 그렇게 굵은 선도 아니다.

전기 제품 : 냉장고, 세탁기, 에어컨, 선풍기, 환풍기, 청소기, 전기장판, 전기밥솥
전자 제품 : TV, 라디오/오디오, 컴퓨터
이거 다 돌려도 불이 안 난다.

회로 청소할 때 먼지는 진공 청소기로 빨고, 압축 공기를 쏘아 날린다. 압축 공기는 풍선을 이빠이 불어서 야매로 만들까? 맑은 공기를 압축 해 놓은 스프레이가 있단다. 회로 기판을 걸레로 닦지 말자. 미세 부품은 떨어진다. 다시 붙일 자신 있는가? 미세한 납땜질 정말 어렵다.

모든 화재는 사고가 아닌 방화일 가능성도 있을까? 혹시 국정원의 국민 선동용 작전인가? 화재 보험 타기 위한 자작극일까?



9. 바이러스? 아니면 국정원 해킹?


바이러스란 정상적인 시스템의 기능(하드웨어, O/S)을 이용해서 악성적인 동작을 하는 스파이 프로그램(소프트웨어/유전자)이다. 생물학에서 말하는 바이러스도 같은 원리로 동작하는 간첩 기생 생물(기계 생명? 유전자/프로그램? 생명이라고 하기엔 너무 단순한 기계)이다. 바이러스 혼자서는 아무것도 못 한다. 그래서 온전한 생명, 온전한 프로그램이라 하기 어렵다. 스스로 이동도 하지 못 한다. 다른 세포벽에 붙은 후에 자기 유전자를 밀어 넣는다. 세포의 하드웨어를 이용해서 자기 유전자를 무한 복제하여 세포를 죽인다. 자기 스스로 복제할 능력도 없다.

여하튼 프로그램에 해당하는 바이러스의 코드(DNA/RNA)를 세포에 주입하면 세포가 그 DNA/RNA의 명령을 실행한다. 실제 바이러스는 주로 자기 복제 명령을 넣는다. 실제로 컴퓨터 바이러스는 정상적 프로그램의 끝에 자신의 코드를 추가해서 붙는 방식이다. 주입한 명령은 주로 바이러스의 무한 복제(즉 다른 프로그램 끝에 자신을 계속 붙이는 명령)에 관한 것이다. 그 결과 정말 신기하게 좋은 일이 벌어질 수도 있지만 대부분 세포 스스로 망가진다. 제대로 일 하지 않는 암적 존재(코드)가 너무 많아졌기 때문이다.

비슷한 현상으로 정자와 난자의 결합이 있다. 정자는 바이러스를 닮았고, 난자는 감염된 세포와 비슷하다. 정자는 대가리를 난자에 박고 DNA를 난자에 주입하고 껍질은 버린다. 오직 DNA를 전달하기 위해 우주 전함 불알에서 탈출한 캡슐과 같은 것이고 생명이라 할 수 없다. 꼬리의 회전도 기계적인 것이고 방향 조절도 못 한다. 여자 쪽의 우주선 난자를 감염시켜서 남자 쪽의 기생 유전자를 퍼뜨리는 것이다. 거대한 구형 우주선(난자)으로 달려드는 미사일(정자)을 보면 영화 스타워즈가 생각난다.

바이러스에 감염된 경우 당연히 O/S 또는 CMOS에 이상이 있을 것인데 O/S를 새로 설치하기는 매우 번거롭다. 이걸 다시 하면 다른 프로그램도 다시 설치해야 한다. 고민될 것이다. O/S를 새로 설치하기 전에 한 가지 더 해 볼 일이 있다. 동전처럼 생긴 CMOS 배터리를 뽑았다가 다시 꼽으면 PC가 기억을 잃게 된다. 바이러스가 조작한 데이터도 잊어버리게 된다. 그럼 당분간 정상적으로 사용할 수 있다. 허나 O/S가 오염된 것이라면 별 수 없다. 그냥 미운 윈도우즈 밀어버리자. (그래서 독점은 좋지 않지. 대안이 없잖아?)

※ 지겨운 순서 : CMOS 리셋 → 하드 포멧 → 윈도우즈 재설치 → 기타 등등 재설치


10. 조립불량? 아니면 국정원 장난?


잘 동작하던 것이 갑자기 안 움직이는 경우 모든 부품을 분해 조립한다. 분명 결합 부위가 약간 틀어져 있을 것이다. 왜 그렇게 되었을까? 이사 하던 도중 충격으로 틀어졌나? 아님 누가 고의로 그랬을까? 혹시 독재잔당을 인터넷에서 비방한 적 있는가? 인터넷 방송에서 촬영한 동영상을 보면 국정원 직원으로 보이는 사람이 마스크를 하고 머리털도 떨어뜨리지 않으려 반도체 공장 모자를 쓰고 침투하여 CPU의 핀을 구부리거나 조립 상태를 약간 틀어 놓는다고 한다.

진짜야? 국정원이 이렇게 허술할까? 아님 고의로 들킨 것인가? 쇼 아냐?


11. Made In China


중국산 싸구려, 1회용, 소모용, 쓰레기 공산품(전자, 전기, 기계 제품)도 문제가 있다. 무지 싸다고 해서 선풍기를 샀는데 며칠 만에 목이 톡 부러지고(아우 신이여!), 충전지를 분리할 수 없어서 충전지 수명이 제품 수명이 되고, 제대로 꼽히지 않아서 충전하려다가 감전 당할 수도 있고, 여기 저기 약하게 만들어서 잘 부러지는 데 그 부러진 부위가 하필 핵심적인 부위(잠지)인 것 등 어이가 없고 웃긴 것이 많다. 오토바이가 언덕을 못 올라가는 경우도 있다. 끌고 올라가란 소리인가? 컴퓨터 부품도 모니터, CPU, GPU 빼면 거의 Made In China(타이완인가?)일 것이다. 옛날에 그랬는데 지금은 품질이 많이 좋아졌다.

앞으로 우린 일본보다 중국에 머리를 숙여야 할 수도 있다.


12. 많이 사용한 부분이 먼저 고장난다.


많이 사용하는 물체는 당연히 빨리 고장 난다. 그건 인간의 육체도 마찬가지다. (그럼 잠지를 많이 쓰면 잠지가 부러지나?) 그런데 컴퓨터에선 전기적 마모보다는 기계적 마모로 더 빨리 고장 난다. 기계적 부분이 더 약하게 설계 되었단 의미다. 그리고 접촉 부분에 말썽이 많다. 기계적 부분이 약하다는 것이 현재 컴퓨터의 약점이다. 충격에도 약하지만 고열/습기에도 약하다.

자동차의 경우는 전자 장치가 여름의 습기와 고열, 겨울의 서리와 혹한에 노출되어 있어 오히려 전자 장비 쪽이 약할 수 있다. 실제로 겨울에는 배터리가 빨리 방전된다. 기계식 자동차는 오랜 세월 사용하면서 증명이 된 부분이다. 전자 장비 쪽은 최근의 시도이다. 물론 악조건에 대한 대비가 되어 있기 때문에 사람의 실수일 가능성이 크지만 언제나 불량이 있다는 말은 100% 진리다.

급발진의 쉬운 해결 방법은 오른 발은 엑셀, 왼 발은 브레이크로 간격을 벌리는 것이다. 실수로 브레이크를 밟는다며 엑셀을 밟을 가능성이 줄어든다. 이런 실수에선 운전자가 차에서 내리면 급발진이 사라진다. 요즘 차는 모두 전자, 전기 회로가 유압장치를 통제하고 있다. 진짜 급발진의 경우는 운전자가 내려도 차가 미친 듯이 돌진한다. 엑셀을 밟지 않아도 말이다. 대부분의 경우 엑셀을 밟고 있었으면서 브레이크를 밟았다고 착각한 경우이다.

엑셀, 브레이크, 기어 변속, 엔진 끄기, 핸들 조작 모두 컴퓨터가 담당하는 시대이기 때문에 급발진이 마음먹고 발생하면 대책 없이 당한다. 기계식 급발진 억제 장치가 필요한 것 같다. 스포츠카가 아니니까 급속 출발할 이유가 없지 않나? 수동으로 연료 공급을 차단하는 뭐라도 달면 될 것인데, 목줄 쥐는 것은 유압 장치를 사용할 정도로 힘이 안 들잖아? 전원선 뽑듯이 연료 공급 차단하면 끝이다. 급발진 원인 밝히려면 브레이크, 엑셀, 기어, 핸들 조작을 감시하는 블랙박스를 달아야 한다. (이미 있는데 업체 쪽의 것이다.)



정치 경제에 문외한이었다가 인터넷 야권 방송을 보고 좀 배웠다. TV 뉴스 봐도 모르던 것을 인터넷 강의를 듣고 알게 되었으니 TV 신문이란 것이 사람들에게 친절하게 설명하는 것이 아니로다. 오히려 선동에 가깝다.

투표 방식에 따라 결과도 달라진다. 어떤 투표 방식도 불만족스러울 것이다. 정치에선 이게 기본 상식이란다. 예를 들어 우린 무조건 투표해서 1등, 2등, 3등 중에 1등이 대통령 되는데 (다수대표제) 다른 나라에선 1등이 50% 이상 득표를 하지 못 했을 경우 결선 투표라고 해서 1등과 2등을 고른 후에 재투표한단다. 3등은 빠지라는 것이지. 이런 방법이라면 굳이 힘들게 당내 경선할 필요도 없겠군. 이건 야권에 유리한 방식이다. 미국은 양당제라서 무조건 1등과 2등의 대결이다. 우리처럼 엉뚱한 3등이 나와서 망치는 경우가 없다. 30~40% 득표로 대통령이 되는 한국에서 한국인들이 대통령을 존경할까?

물론 미국 선거 제도도 민심을 왜곡하는 것은 마찬가지다. A가 전국 득표율이 높아도 B가 대통령으로 당선될 수 있는 것이 미국 대통령 선거 제도이다. 200년 전 말 타고 다니던 시절에 만든 선거 제도라서 그렇다. 어느 한 주에서 51 vs 49로 A가 이기면 그 주의 모든 사람 100이 A를 지지하는 걸로 왜곡된다. 즉 미국은 각 주의 대표가 대리 투표를 하는 것이다. 지금은 컴퓨터 통신 시대라 민심을 100% 정확하게 선거에 반영할 수 있지만 법을 쉽게 안 고친다. 힐러리가 득표를 아주 약간 더 많이 했지만 트럼프가 당선 된 이유이다. 민심은 힐러리에게 있었지만 선거 제도로 인해 원하지 않던 트럼프가 당선 된 것이다.

2014년 11월 4일 화요일

0의 존재 이유 - 컴퓨터 분야의 배열 첨자가 0부터 시작하는 이유

2024-03-28-목 수정


컴퓨터 프로그램을 공부해 보면 배열 첨자를 0부터 시작함을 알 것이다. 왜 이렇게 할까? 그건 계산이 편하기 때문이다. 위의 그림처럼 100개의 영화 좌석에 번호를 준다고 하자. 그럼 열과 행 번호에서 좌석 번호를 뽑거나, 반대로 좌석 번호를 주면 열과 행을 찾으려고 할 때 어느 쪽이 계산이 편한가?

기타 분야에서도 0이 있고 없고에 따라 계산의 편리함이 달라진다. 서양식 층수 개념에선 층의 바닥을 기준으로 삼고 지면을 0으로 잡는다. 한국식은 공간에 번호를 주는데 0이란 개념이 없다. 지하 1층은 서양이나 한국이나 같다. 지상 1층은 다르다. 서양은 우리의 2층을 1층으로 본다. 땅은 0층이다. 지상과 지하가 있기 때문에 0이 있어야 계산이 편하다. 구간과 경계 어느 것을 기준으로 삼든 음과 양이 나타나면 0을 주어야 계산이 편하다.

음과 양의 개념이 있으면서 0이 없어 계산이 불편한 대표적인 경우가 년도이다. 년도는 구간에 번호를 붙인다. AD와 BC로 넘어갈 때 0년이란 것이 없어서 ±1년 보정을 해야 한다. 그래서 0년이란 것이 필요 없을 것 같지만 층수처럼 있어야 계산이 편하다.

나이에선 음양이 없기 때문에 기준을 0으로 하든 1로 하든 문제는 없다. 여기서도 서양식 나이 개념과 한국식 나이 개념이 차이가 난다. 우린 구간에 번호를 붙이고, 서양은 경계에 붙인다. 우린 무조건 태어나면 1살이지만 서양은 개월로 따진다.

자를 생각해 보자. 우리가 사용하는 자의 눈금 표시가 바로 정상적인 것이다. 자는 경계에 숫자가 붙어 있지 구간에 숫자가 붙어 있지 않다. 마찬가지 원리로 우리가 뭔가에 번호를 붙인다고 했을 때 처음이나 기준을 0번으로 붙이는 게 효율적이다. 여기서 0번은 기준이란 의미이지 無무를 의미하지 않는다. 0은 2가지 의미가 있다. 기준, 없음.

앞에서도 말 했지만 어디에 붙이든 상관없이 0이 있어야 편하다. 우리가 10대, 20대, 30대란 말을 할 때 나이의 앞자리 숫자가 1, 2, 3인지 보고 말하는데 이건 0대가 있다는 의미다. 즉, 1~9세는 0대에 속하는 것이다. 00, 01, 02, 03, 04, 05, 06, 07, 08, 09세 말이다.



이공계 사람들은 머리는 좋은데 이공계, 외국어 지식만 있으면 노예 교육을 받은 것 외엔 아무것도 아니다. 옛날로 말하면 의사, 통역사, 공학자 등 전문가는 모두 중인 계급에 속했다. 이건 지금도 마찬가지다. 인문 사회 과학 지식도 있어야 노예 상태에서 벗어난다. 정치, 경제, 법, 역사, 병법 등은 왕족/귀족들만 공부했다. 종교, 철학 등도 알아야 사이비에 안 빠진다.

똥인지 된장인지 찍어 먹어 봐야 알 정도라면 헛똑똑이 아닌가? 어제의 악마가 오늘 천사 옷을 입고 나타나도 알아 봐야 당하지 않는다. 이 모든 것이 언론 선동과 세뇌 교육의 잘 못이다. TV와 신문(조중동)과 학교 선생들을 너무 믿지 말라. 학교 역사 교육은 일제 식민 사학이 뿌리다. 공무원, 판검사, 군인, 경찰, 교수들 모두 일제 시대 친일파 부일배 선배, 선생에게 배웠다. 남한은 친일파의 나라다. 다른 나라에선 좌파 우파가 연합하여 매국노 처벌을 했는데, 한국에선 친일파가 우파, 극우로 둔갑하여 좌파 사냥을 하고 있다. 한국 극우는 일본 극우의 노예이며 망령이다.