DATOR

개발자: 기계와 사람 사이의 통역

Document URL : http://www.dator.co.kr/1644210
개발 및 설계 | Posted on February 26th, 2015 at 08:02 by 밀오 | 조회수 : 6878

0. 서론


코드 자동 생성 또는 실행 가능한 모델을 실현하기 위해 필요한 것이 무엇일까요?

이를 위해 먼저 컴퓨터와 프로그래밍에 대해 생각해 보겠습니다.


만약 컴퓨터에게, 

귀엽고 예쁘지만 시크해 보이는 고양이를 한마리 그려주세요, 라고 요청한다면 어떨까요?


1. 언어와 컴퓨터


컴퓨터(정확히는 ALU) 에게 명령을 내리려면, 컴퓨터가 이해할 수 있는 언어로 명령을 내려야 합니다.


우선, 대상이 사람이라고 가정합시다.

어떤 사람에게, 귀엽고 예쁘지만 시크해 보이는 고양이를 그려달라고 했다면,

그 사람은 우선, "귀엽다", "예쁘다", "시크해 보이다", "고양이" 란 단어를 인식하고, 각각의 의미를 나름대로 해석합니다.

그 다음 "그려달라" 는 명령에 대해 어떻게 수행할 수 있을지를 고민합니다.

(실제로는 '난 못해'라거나, '하기 싫어'라고 답하거나, '그려주면 뭐 해줄건데' 라는 반문을 할 수도 있겠지만, 여기서는 생략하겠습니다.)


이제, 그 사람은, 그리기 위한 도구를 준비한 뒤, '귀엽다' '예쁘다' '시크해 보이다' 라는 요구에 최대한 부합하는 이미지를,

자신의 경험 내에서 찾게 됩니다.

최종적으로, 고양이를 그린 뒤에, 요청한 사람에게 내밉니다.


(이 과정에서 몇가지 단계는 나중에 설명하기 위해 일부러 생략했습니다.)


이제 대상이 컴퓨터라고 생각해봅시다.

어떻게 해야 컴퓨터가 이 요청을 제대로 수행할 수 있을까요?


대상이 사람일 때는, 사람이 이해할 수 있는 언어를 사용해서 요청하지만,

컴퓨터가 이해할 수 있는 언어는 이진수로 되어있는 명령어 입니다.


요청하는 쪽은 사람이라고 가정하면,

사람의 언어를 기계어로 바꾸는 과정이 필요합니다.

이 작업을 수행하는 사람이 바로 개발자 입니다.


기계어로 바꾼다면,

컴퓨터가 '귀엽다', '예쁘다', '시크해 보이다', '고양이' 라는 단어와

'그려달라' 는 명령을 수신할 수 있게 됩니다.


2. 컴퓨터가 명령(언어)를 이해하는 방식


컴퓨터는 상대적이며 비객관적인 단어를 이해할 수 없습니다.

컴퓨터에게 다짜고짜 '귀엽다'라는 단어를 입력해봤자, '이해할 수 없는 단어입니다' 와 같은 오류를 내보낼 뿐입니다.

왜냐하면, 현재의 컴퓨터는 오직 숫자로 정량화 할 수 있는 데이터만 이해할 수 있도록 만들어져 있기 때문입니다.


때문에, '귀엽다' 라는 단어를 수치화 하기 위한 방안을 마련해야 합니다.

최근에는 데이터베이스에서 집계한 데이터를 이용해 평균치를 이용하는 방안이 많이 사용됩니다.


이 방식으로 '귀여운 고양이', '예쁜 고양이', '시크해 보이는 고양이' 를 통계정보에서 찾은 뒤에,

공통 분모를 찾으면, '귀엽고 예쁘지만 시크해 보이는 고양이'를 찾을 수 있게 됩니다.

(물론, 여기서 'Cute Kitty', '얼짱 고양이', '차가운 도시 고양이' 등을 같이 찾을 수 있다면, 뛰어난 검색 알고리즘 이겠지요)


받은 명령이 '그려달라' 이기 때문에, '이미지'가 추가 검색 요건으로 들어가야 겠고요,

이미지를 찾았다면 '그리기' 명령을 내부적으로 수행해서, 프린터 용지나 화면으로 이를 출력하면 됩니다.

물론, 어떤 출력방식이 가능한지를 미리 알려주고, 어떤 방식으로 출력할 것인지를 사람에게 물어봐야 겠죠.


이제 사람이 받아볼 일만 남았는데요,

위에서 대상이 사람일 때에 일부러 빼놓은 단계가 있습니다.


사람이라면, '귀엽다' '예쁘다' '예쁘다' 라는 명령을 이행하기 위해, 피드백 단계를 거칩니다.

사람이라면, 일단 경험적(=통계) 데이터를 이용해서 귀여운 이미지를 그린 뒤에,

'이정도로 귀여우면 돼?' 라는 확인 과정을 거칩니다.

그러면 보통 '아냐 눈이 더 컸으면 좋겠고, 수염이 더 길었으면 좋겠고, 색상은 이런 색이 좋겠고...'

라는 추가 요청사항을 반복적으로 받게 됩니다.


때문에 컴퓨터 또한 이와 같은 작업을 거쳐야 합니다.

보통, 미리 다수의 출력물을 만든 뒤, 그 중에 사용자가 선호하는 출력물을 고르면,

해당 출력물과 유사한 여러 출력물을 다시 만들어 내는 방식을 사용합니다.


이런 식으로 최종 출력물이 도출되면, 사람과 동일한 과정으로 명령을 이해하고 수행한 것입니다.


3. 어플리케이션: 미리 만들어 놓은 명령


개발자가 상시 옆에 붙어서, 사람이 컴퓨터에게 이러한 명령을 내리고 싶을 때마다 매번 번역을 해줄 수도 있겠지만,

번역(프로그래밍) 자체가 시간이 꽤 걸리는 일인 데다가, 사람이 계속 붙어있어야 하는 건 매우 비효율적입니다.


때문에, 유사한 요청을 처리할 수 있도록 명령어를 미리 만들어 두는 일이 바로,

어플리케이션 프로그래밍 입니다.


예를 들어, "다양한 동물을 그리는 프로그램" 이라고 하면,

'예쁜', '무서운', '아기', '파란색' 등과 같은, 대응할 수 있는 몇가지 형용사와,

'고양이', '개', '코알라' 와 같은 사전 정의된 동물 종류,

'프린터',' 화면',' 파일'과 같은 출력 가능 매체를 입력받을 수 있고,


조정 가능한 이미지를 저장한 데이터 베이스와

단어 해석 알고리즘 및 검색 알고리즘


으로 구성된 프로그램이 될 것입니다.


4. 정리


다시 처음으로 돌아와서,

코드 자동 생성실행 가능한 모델에 대해 생각해 봅시다.


코드 자동 생성은, 결국 자동 번역기 와 동일한 의미이며

실행 가능한 모델 또한 마찬가지로, 모델과 명령어의 상호 자동 번역과 동일한 의미가 됩니다.


다음 글에서는 '자동 번역' 에 대해 생각해 보기로 하겠습니다.


Tagged :
   

Comments : 0