'고냥/개발이야기'에 해당되는 글 8건

  1. 2008/03/24 Daum Vs Naver (1)
  2. 2008/03/13 폴트 톨러런트 컴퓨터 (fault tolerant computer)
  3. 2008/02/22 [펌] 투명한 모니터.
  4. 2008/02/19 볼 글.
  5. 2008/01/24 잡다한 이야기.
  6. 2007/07/05 [컴퓨터 용어] 인터프리터
  7. 2007/01/22 [펌] 개발자, 구글 신드롬에 빠지다
  8. 2007/01/12 [펌] Safetu-Critical 시스템 설계를 위한 형식기법 이용
2008/03/24 09:57

Daum Vs Naver

DaumNaver


Daum Vs Naver 의 <검색>

어느 순간 네이버에서 지식인 홍보를 통해 많은 지식(?)들이 네이버에 몰리기 시작했다.
사람들 역시 그 홍보를 통해서 네이버에서 많은 지식들을 얻었다.
하지만, 시간이 지나면 지날 수록 네이버의 지식인은 온갖 홍보를 가득차 있다.
지식은 글들을 몇개 클릭하면 똑같은 답변이 몇번씩 보는 그런 경험을 할 수 있다.
정작 필요한 지식은 리플이 하나도 없던가, 있어도 별로 쓸모없는 지식들!!!
어느 순간부터 네이버의 지식은 우물안의 개구리가 되었다.

그렇다면 다음의 지식은 어떤가!!!
다음의 지식도 맨 처음은 그렇게 유용하지가 않았다.
이제 슬슬 발전해 나가고 있다.
다음의 지식에서 가장 좋은 점은 구글과 연동했다는 것이다.
(나는 구글의 검색을 좋아한다. 네이버에 없는 글들이 잔뜩 있으니깐!! 그리고 네이버는 잘 안사용한다;;)
또한 티스토리와 연동을 해서 더 많은 지식들을 얻을 수 있다는 것이다!!
(의외로 티스토리에서 얻은 정보가 상당하다!!)

더군다나 이번에 다음은 <카페검색>의 기능을 업그레이드 했다.
오!!! 놀라워라 ♪

뭐 좋은 기능들이야 이미 소개가 되었으니
(위의 '<카페검색>의 기능을 업그레이드'를 클릭하면 기능 소개가 나온다)



나의 Daum 검색 기능에 대한 생각을 적어보도록 하겠다. 두둥!!!



1. 카페검색시 비즈사이트와 카페이름의 정보가 너무 많다.

키워드를 '데이트코스'로 해본 결과이다.

사용자 삽입 이미지

그래.. 안다 !!
비즈사이트를 걸어 놓아야 돈을 받는 다는 것!!!
하지만, 비즈사이트가 차지하는 공간과 더군다나 카페이름이 차지하는 공간이
딱 눈에 보이는 공간의 3/4를 차지한다.
유용한 정보는(?) 드래그를 열심히 해서 내려야만!!! 볼 수 있는 것이다!!

카페이름은 맽 밑으로 보내는 것이 좋을것 같다.
카페이름을 검색할려고 하지 않았으니깐;;



2. 카페검색시 사진이 별로 없다.

키워드를 '데이트코스'로 검색한 결과
카페글에 첫번째로 뜨는 '대구 데이트 코스 ^^'를 클릭해 봤다.
설명도 기가막히며, 사진까지 첨부!!! 너무 감사하다!!
난 이런 정보를 원했다.

하지만, 카페검색시 사진이 안뜨는 검색 결과가 수도 없다.
'사진'이란 너무 유용한 정보이다.
'사진'이라는 정보가 보임으로서 나의 마우스와 나의 눈이 그쪽을 향해 가고 있으니깐!!

검색시 사진도 많이 보여줬으면 한다.

사용자 삽입 이미지


3. 통합검색 Daum vs Naver

똑같이 '드라이브코스'로 통합 검색을 해본 결과이다.

사용자 삽입 이미지
사용자 삽입 이미지


사실.. 난 검색을 할때,
먼저 통합검색으로 검색을 한다.
그 후 필요한 정보를 '블로그 & 카페검색'을 통해 찾아낸다.

하지만 Naver를 봐라!!!
이래서 난 Naver의 통합검색이 싫다. 윈도우 화면 전체를 캡쳐해본 결과
스폰서 링크, 파워링크, 플러스프로, 사이트,  ....
도대체 필요한 정보는 어디에서 나오는 거야!!!

역시나 한참 드래그를 통해서 원하는 정보를 얻을 수 있다.
그래서 난 Naver의 통합검색을 하지 않고, 즉시 블로그 검색 또는 카페검색 또는 지식in 검색을 클릭한다.
통합검색은.. 필요없다!!!

그에 반해 Daum의 통합검색 결과이다.
먼저 스폰서 링크, 스페셜링크, 비즈사이트, 카페글...
오우!!! GOOD!!!
먼저 스폰서 링크와 스페셜 링크, 비즈사이트로 윈도우 한 페이지의 낭비가 적어서 좋다.
또한 한페이지 안에 카페글이 1/2을 차지해서 유용한 정보를 즉시 클릭할 수 있는 아주주주주 좋은 결과이다.

물론 특정키워드에 대해서는 네이버 못지 않게 첫 페이지에 쓰레기 정보가 너무 많다.
하지만 그 쓰레기 정보가 Naver에 비해서 적다!!
네이버는 온통 스폰서 링크, 파워링크, 플러스프로, 사이트로 도배를 해놓으니깐..



사용자 삽입 이미지
그래서 난 다음 좋다.  ♬
특히 구글과 연동한 다음이 좋다.
또한 티스토리와 연동한 다음이 좋다.
또한 동영상 검색이 너무 좋다. (원하는 동영상을 손쉽게 검색 가능해서 좋다.)



Daum 기대하며!!
Trackback 0 Comment 1
2008/03/13 09:35

폴트 톨러런트 컴퓨터 (fault tolerant computer)



폴트 톨러런트 컴퓨터 (fault tolerant computer)란 시스템을 구성하고 있는 한 요소에 고장이 발생해도 시스템 전체로는 중단 없이 주어진 기능을 계속 실행하도록 내고장성 (fault tolerance)을 갖춘 컴퓨터를 말하며 고신뢰성 컴퓨터라고도 한다.

폴트 톨러런트 컴퓨터는 고장에 강해, 단 한 순간의 시스템 다운도 허용될 수 없는 온라인 시스템 등에 사용되고 특히 높은 신뢰성이 요구되는 환경, 즉 은행이나 e-Commerce, 좌석예약시스템 등 실시간 프로세스 제어시스템, 병원이나 우주 항해 시스템과 같이 컴퓨터의 고장이 인명 손실에 관계되는 시스템, 년중 보수작업이 거의 불가능한 상황에서 사용되는 시스템, 고장에 의해 막대한 경제적 손실을 야기하는 업무 환경 등에 사용되는 컴퓨터를 말한다.

폴트 톨러런트 컴퓨터의 내 고장성의 유효한 구성으로는 어떤 기능을 실현하는데 필요한 최소한의 장치 이외에 예비장치를 준비하는 구성, 회로나 보드 또는 CPU 등을 각 레벨에서 2중화, 3중화하고 데이터 버스도 둘 이상의 경로사용이 가능하도록 하는 구성 등이 있다.

즉 시스템을 구성하는 요소에 고장이 발생해도 데이터에 오류 정정 부호를 사용하거나 시스템의 요소를 다중화해 고장의 영향을 최소화하며, 고장을 적극적으로 검출해 그것을 제거함으로써 고장의 영향을 극소화하고, 즉각적인 복구를 수행하는 시스템을 말한다.

Trackback 0 Comment 0
2008/02/22 14:18

[펌] 투명한 모니터.

투명한 모니터.





사용자 삽입 이미지

Trackback 0 Comment 0
2008/02/19 23:43

볼 글.

컴파일러.

http://blog.empas.com/ohbosco/list.html?c=1420487
Trackback 0 Comment 0
2008/01/24 19:57

잡다한 이야기.

http://minjang.egloos.com/1217990
Trackback 0 Comment 0
2007/07/05 21:48

[컴퓨터 용어] 인터프리터

인터프리터는 고급언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램이다.

고급언어로 작성된 프로그램들을 실행하는 데에는 두 가지 방법이 있다.
가장 일반적인 방법은 프로그램을 컴파일 하는 것이고, 다른 하나는 프로그램을 인터프리터에 통과시키는 방법이다.
인터프리터는 고급 명령어들을 중간 형태로 번역한 다음, 그것을 실행한다.
이와는 대조적으로,
컴파일러는 고급 명령어들을 직접 기계어로 번역한다.

컴파일된 프로그램들은 일반적으로 인터프리터를 이용해 실행시키는 것보다 더 빠르게 실행된다. 그러나 인터프리터의 장점은 기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다는데 있다. 컴파일 과정은 만약 원시 프로그램의 크기가 크다면, 상당한 시간이 걸릴 수 있다. 이와는 달리 인터프리터는 고급 프로그램을 즉시 실행시킬 수 있다. 이런 이유 때문에, 인터프리터는 종종 프로그램의 개발단계에서 사용되는데, 그것은 프로그래머가 한번에 적은 량의 내용을 추가하고 그것을 빠르게 테스트 해보길 원하기 때문이다. 이 외에도 인터프리터를 이용하면 프로그래밍을 대화식으로 할 수 있기 때문에, 학생들의 교육용으로 사용되는 경우도 많다.

인터프리터와 컴파일러는 둘다, 대부분의 고급언어에 적용이 가능하지만, BASIC 이나 LISP과 같은 일부 언어들은 특별히 인터프리터에 의해서만 실행되도록 설계되었다. 그 외에도, 포스트스크립과 같은 페이지 기술 언어 들도 인터프리터를 사용한다. 모든 포스트스크립 프린터는 포스트스크립 명령문을 실행할 수 있도록 인터프리터가 내장되어 있다.

 

Trackback 0 Comment 0
2007/01/22 17:02

[펌] 개발자, 구글 신드롬에 빠지다

 



박재호
요즘 들어 IT 전문 매체는 물론 일반 대중 매체에서도 ‘구글’이라는 이름이 심심치 않게 등장하고 있다. 이미 구글에 익숙한 개발자를 중심으로 구글의 실용성과 편리함이 입소문으로 서서히 퍼져나가면서 일반 사용자까지 영향을 미치기 시작한 것이다. 그러나 과거 국내 대형 포탈 사이트에 눌려 꼼짝하지 못하던 구글이 자고 일어나보니 갑자기 유명해졌을 리는 만무하다. 그렇다면 현재의 ‘구글 신드롬’은 어떻게 해석해야 할까.
1970년대 초 유닉스 운영체제가 처음 등장한지 벌써 30년이 지났지만 여전히 수많은 개발자가 유닉스(또는 유닉스와 비슷한) 운영체제를 사용해서 필요한 작업을 처리하고 있다. 큰 이변이 없는 이상 이런 추세는 구식 유닉스의 시간 측정 단위에 사용하는 32비트 값을 다 채우는 2038년 1월 19일까지(여기에 대한 세부적인 설명은 en.wikipedia.org /wiki/Unix_epoch를 참조하기 바란다) 계속 이어질 것이다. 지금까지 어떤 운영체제도 달성하지 못했던 어마어마한 기록을 유닉스는 계속해서 갱신하고 있다. 이렇게 유닉스에 대해 충성심을 보이는 개발자가 많은 이유를 여러 가지 측면에서 분석할 수 있겠지만 작고 간결한 유틸리티를 묶어서 복잡한 작업을 수행할 수 있게 만드는 이른바 ‘작은 것이 아름답다(small is beautiful)’와 ‘각 프로그램마다 제대로 된 임무를 하나씩 맡겨라(Make each program do one thing well)’는 철학(유닉스 철학은 en.wikipedia.org/wiki/ Unix_philosophy 참조)이 밑바닥에 깔려있다.
 
현재의 구글의 이면에도 이와 비슷한 원칙이 자리잡고 있다. 구글이 1990년대 말 처음 등장했을 때 온갖 화려함과 다양한 기능을 무기로 일반 대중을 휘어잡고 있었던 여러 포탈 사이트를 능가하리라고는 상상조차 하지 못했을 것이다. 하지만 구글은 독립적이면서도 제대로 동작하는 기능을 차츰차츰 늘여가면서 세력을 넓혔으며 시간이 지남에 따라 모든 내용을 통합해나가던 기존 포탈 사이트와는 달리 오히려 정반대의 전략, 즉 더 단순해야 한다는 초심을 잊지 않고 있다. 이런 자신감을 바탕으로 개발자는 물론이고 일반 사용자조차 가장 좋아하는 검색엔진으로 확실하게 자리매김했다. 즉 유닉스를 지금까지 버티도록 만들어 놓은 기본 철학을 구글이 검색엔진 부문에서 그대로 계승하는 방식으로 새로운 ‘블루오션’을 창출한 셈이다.
 
그렇다고 구글이 검색엔진 한 분야에만 집중적으로 우물을 판다는 이야기는 아니다. 구글이 나오기 훨씬 전부터 검색엔진 부문에서 한 시대를 풍미했던 알타비스타, 라이코스의 경우에는 기술적인, 상업적인 관점에서 직접 수익으로 연결할 수 있는 성장 모멘텀을 찾지 못하고 주저앉아 버렸지만 구글은 실험적인 다양한 프로젝트를 지속적으로 주류 서비스에 편입시키면서 끊임없는 성장 동력을 얻고 있다. 물론 이런 성장 동력 이면에서는 애드워즈(AdWords)와 애드센스(AdSense)라는 강력한 캐시 카우(cash cow)가 버티고 있음은 물론이다.
 
지난 구글의 성장 역사는 그 자체로도 매우 흥미롭지만 창고에서 시작한 이후 나스닥 상장까지 쾌속 순항을 마친 다음에도 고삐를 늦추지 않고 계속해서 검색 서비스를 개선하고 색인 숫자를 늘이고 수익 창출을 위한 애드워즈와 애드센스 시스템을 개선해 온 점이 더욱 특징적이다. 구글 Quick Profile(www.google.com/intl/en/cor porate/tech.html)과 ZDNet UK(insight.zdnet.co.uk/hardware/ servers/0,39020445,39175560,00.htm)에는 구글과 관련된 재미있는 숫자들이 공개돼 있다.
 
◆ 이 글을 쓰는 현재 구글은 웹 페이지 81억 6,868만 4,336개를 색인했다.
◆ 구글은 HTML, PDF(PDF), PS(포스트스크립트), 로터스 1-2-3, 맥 라이트, XLS(엑셀), PPT(파워포인트), DOC(워드), WRI(마이크로소프트 라이트), RTF(RTF), SWF(플래시), TXT(일반 텍스트) 방식을 인식해서 색인할 수 있다.
◆ 현재 구글 이미지는 20억 개를 색인하고 있다.
◆ 유즈넷 메시지는 10억 개를 색인하고 있다.
◆ 100여 개 언어 검색을 지원하며 35개 나라말로 시작과 결과 홈페이지를 보여준다.
◆ 구글 트래픽의 50% 이상이 미국 이외 지역에서 일어난다.
◆ 구글은 2005년 6월 30일 기준으로 직원이 4183명으로 (놀랍게도) 대다수가 기술/공학 부문 종사자이다.
◆ 2004년 기준으로 구글은 클러스터당 PC 2000대를 할당하고 있으며 이런 클러스터가 모두 30개 존재한다.
◆ 2004년에 비해 2005년 색인 숫자가 두 배로 늘어났기에 클러스터 숫자도 거의 두 배 가까이 늘어났을 가능성이 높다.
◆ 클러스터당 1페타바이트(2의 50승이나 근사 값으로 10의 15승, en.wikipedia. org/wiki/Petabyte) 용량을 사용하므로 표준 하드디스크 오류 발생률인 10의 15승이 실제로 심각한 영향을 끼치기 시작한다. 또한 일반 조립 PC를 사용하고 있기에 각 클러스터마다 매일 PC 두 대 가량이 하드웨어에 문제를 일으킨다. 그럼에도 불구하고 2000년 2월 이후에 한번도 전체 시스템 장애를 겪지 않았다. 특정 시스템이 붕괴되더라도 근접 시스템이 백업으로 동작할 수 있도록 되어 있기 때문이다.
◆ 구글 색인 클러스터는 지구상에 현존하는 가장 강력한 병렬 컴퓨팅 프로젝트로 2004년 기준으로 박사급 인력 200여 명과 기타 인력 600여 명이 이 프로젝트에만 매달려 있다.
◆ 구글 색인 크기는 웹 페이지당 평균 10KB를 차지하므로 80억 페이지를 유지하기 위해서는 색인에만 80TB가 필요하다.
◆ 이 모든 기술적인 복잡성에도 불구하고 최종 사용자는 단어를 입력한 다음에 ‘운 좋은 예감’ 버튼을 누르면 대부분 원하는 페이지로 이동한다.
 
개발자는 왜 구글에 열광하는가
1999년에 처음 필자가 구글 검색엔진을 접하고 나서 느낀 감정은 바로 ‘이거다’라는 한 마디로 압축할 수 있다. 실제로 개발이나 저술 활동 과정에서 어려움이 발생할 경우 구글에서 검색하면 정밀 유도 폭탄처럼 원하는 자료를 첫 몇 페이지 이내 범위에 정확하게 찾을 수 있었기 때문이다. 알타비스타처럼 똑같은 문서를 순위와 무관하게 장황하게 제시하지도 않았고(단 요즘 서비스 중인 알타비스타 우선순위 기법은 상당히 정확해졌다) 야후처럼 디렉토리 위주로 유명한 사이트만을 제시하지도 않았으며 찾은 페이지 범위와 속력이 타의 추종을 불허하는 구글에 끌리지 않으면 오히려 이상하지 않은가.
 
물론 일반 사용자라면 포탈에서 수작업으로 골라 놓은 뉴스 헤드라인이나 사용자 참여와 같은 방법을 동원해서 구축해놓은 지식검색, 카페, 블로그 검색에 눈길이 갈지도 모르겠다. 하지만 일반적으로 널리 알려진 자료가 아니라 자신만의 특수한 관심사나 복잡한 문제 해결을 위한 자료 검색 과정에서는 일반 상식에서 벗어난 자료 검색이 필수적이므로 구글과 같은 강력한 검색엔진을 쓸 수밖에 없는 상황이 종종 생기기 마련이다. 이런 상황에서 주변에 있는 개발자에게 포탈 사이트 이외에 사용할 수 있는 검색엔진을 추천해달라고 하면 어떤 대답이 나올까. 이미 구글에 맛을 들인 개발자라면 열이면 열 모두 ‘구글’이라고 합창할 것이다.
 
그렇다면 개발자들이 구글을 좋아할만한 요소에는 무엇이 있을까. 구글 소프트웨어 개발 철학부터 시작해서 구글 개발자 문화에 이르기까지 다양한 개발자 지원 프로그램을 살펴봄으로써 개발자가 구글에 대해 열광하는 이유를 하나씩 벗겨 보자.
 
매력적인 구글 소프트웨어 원칙
개발자도 결국에는 구글이 개발한 소프트웨어를 사용하는 최종 사용자다. 따라서 구글의 소프트웨어 개발 철학에서 논의를 시작해 보자. 구글이 밝히는 설치형 구글 소프트웨어 원칙(www.google.com/cor porate/software_principles.html)은 다음과 같다.
 
◆ 설치 : 사용자를 속이면서 소프트웨어를 설치하지 않아야 한다. 소프트웨어를 컴퓨터에 설치하는 과정에서 거부할 수 있어야 하며 다른 소프트웨어 설치 과정에서 끼어들어서도 안 된다.
◆ 솔직한 소개 : 소프트웨어를 설치하거나 활성화할 경우에 주된 기능을 알려줘야 하며 광고를 통해 돈을 벌어들일 경우 이런 사실을 설명해야 한다. 스크롤바를 한참 돌려야 나오는 숨겨진 곳에 이런 사실을 밝히지 말고 가장 눈에 잘 띄는 곳에 보여줘야 한다.
◆ 단순한 제거 : 소프트웨어를 비활성화하거나 삭제할 경우에 손쉬운 방법을 제시해야 한다. 응용 프로그램의 모든 기능을 제거해야 하며 삭제된 이후에 다른 응용 프로그램을 동작시킬 경우 동작해서는 안 된다.
◆ 명확한 동작 방식 : 사용자 환경 설정을 변경할 경우에 이런 변경을 가하는 이유에 대해 명확하게 설명해야 한다. 일례로 응용 프로그램이 윈도우를 열 경우에 어떤 응용 프로그램이 열었는지 확실하게 알려줘야 하며 광고를 보여줄 때도 주체가 누구인지 알려줘야 한다. 또한 사용자 환경 설정을 변경할 경우에는 반드시 명시적으로 이런 사실을 사용자에게 통보해야 한다.
◆ 훔쳐보기 : 응용 프로그램이 개인 주소와 같은 정보를 수집해서 전송할 경우 사용자에게 알려야 한다. 정보를 수집해서 전송한다는 사실을 명시적으로 알리고 동의를 구해야 한다.
◆ 좋은 회사 만들기 : 응용 프로그램 제공자는 상기 가이드라인을 어기는 소프트웨어를 함께 포함시켜 배포하지 않아야 한다. 여러 가지 응용 프로그램이 동시에 설치될 경우에 사용자에게 각 소프트웨어가 무엇인지 알려줘야 한다.
 
이것은 구글이 제작한 구글 툴바나 구글 데스크탑 검색엔진과 같이 배포형 소프트웨어뿐만 아니라 구글 툴바 팝업 제거 기능(www. google.com/corporate/nopopupads.html)이나 구글 페이지 랭크와 같은 기능에도 모두 동일하게 적용되고 있다. 개발자를 짜증나게 하는 엉터리 소프트웨어나 한 술 더 떠서 해를 끼치는 악성 소프트웨어를 퇴치하려는 이런 시도 때문에 개발자는 구글에 높은 점수를 주지 않을까.
 
다양한 API 지원
웹 관련 프로그램을 개발하다보면 다른 웹 사이트가 동적으로 생성한 결과를 이용해야 하는 경우가 생긴다. 보통 스크래핑이라고 부르는 기법을 사용해서 해당 사이트에서 읽어온 HTML 코드의 특정 패턴을 인식한 다음에 필요한 부분만 간추려오는데 여기에는 두 가지 문제점이 있다. 하나는 저작권 침해이며 다른 하나는 URL 규칙이나 생성된 페이지가 변동될 때마다 프로그램을 뜯어 고쳐야 한다는 것이다. 이럴 때 외부로 API를 공개해서 스크래핑보다 강력한 개발 환경을 제공해주면 개발자 입장에서 얼마나 즐겁고 행복할까. 놀랍게도 구글은 구글 코드(code.google.com/index.html) 사이트를 통해 이 일, 즉 API를 지원하고 있다. 현재 구글에서 지원하는 API는 애드워즈, 블로거, 데스크탑 검색, 데스크 바, 프루갈, gmail, 구글 그룹, 구글 어스, 맵(지도), 뉴스, 구글 토크, 구글 비디오, 웹 검색 등이 있다.
 
『구글 해킹』을 보면 구글 웹 검색 API를 이용해 여러 가지 흥미로운 프로그램을 개발하고 있음을 알 수 있다. 물론 API 자체가 가치중립적이므로 흥미를 넘어 오용은 물론이고 악용까지 할 수 있지만 구글은 이런 악용을 방지하기 위해 개발자 등록 절차를 거쳐 키를 발급하고 현재까지는 하루에 질의를 1000번만 가능하도록 만들어 놓았다. 이 가운데 대표적인 API를 간추리면 다음과 같다.
 
◆ 구글 웹 검색 API : 대표적인 구글 API로 표준 XML 기반의 SOAP 기술을 사용한 검색용 웹 서비스이다. 구글로 넘기는 옵션만 올바르게 이해하고 있다면 쉽게 응용 프로그램이 구글에 질의를 던지고 결과를 받을 수 있다.
◆ 구글 데스크탑 API : 구글 데스크탑 응용 프로그램이 기본 파일과 전자편지 형식 이외에 다른 파일 형식도 검색할 수 있는 플러그인을 만들도록 도와주는 API 집합이다. 시중에 존재하는 파일 형식이 워낙 많기 때문에 자발적인 개발자 지원을 이끌어 낼 수 있도록 구글에서는 플러그인을 작성해서 제출하는 개발자에게 티셔츠를 기념품으로 주고 있다.
◆ 구글 애드워즈 API : 구글 애드워즈 서버와 직접 통신할 수 있게 해주는 API 집합이다. 자동 키워드, 광고 문구, URL을 생성하거나, 애드워즈를 독자적인 데이터베이스 시스템과 연동할 수 있게 만들어서 광고 시스템을 자동화할 수 있게 만들어준다.
 
구글과 흡사하게 웹 서비스를 공개하는 있는 다른 업체도 있다. 바로 아마존닷컴이다. 아마존닷컴은 자사 데이터베이스를 외부에서 등록하고 검색할 수 있도록 SOAP 기반 AWS(Amazon Web Service, www.amazon.com/gp/browse.html/ref=smm_sn_aws/102-3808645-3805716?%5Fencoding=UTF8&node=3435361)를 제공하고 있다. 아마존 전자상거래 서비스(E-Commerce Service)를 통해 제품을 웹 사이트에 올리고 관리할 수도 있고 일반 응용 프로그램을 통해 아마존닷컴에 접속하도록 만들 수도 있다. 맥 OS X용 서적 관리 시스템인 Books는 <화면 3>과 같이 AWS 인터페이스를 사용해서 아마존닷컴에 접속한 다음 ISBN으로 정보를 물고 온다.
 

사용자 삽입 이미지

한편 구글이 개발자를 위한 지원을 아끼지 않고 있는 상황에서 최근 마이크로소프트(이하 MS)가 견제구를 슬쩍 던져봤다. 씨넷에 따르면 향후 MS는 MSN 검색 서비스를 위한 SOAP 기반 API를 제공해서 외부 개발자가 이와 연동해서 프로그래밍할 수 있도록 할 것이라고 한다. 구글 웹 API와 마찬가지로 하루에 던질 수 있는 질의 숫자는 제한이 있으며 비상용 고객일 경우에 1만개를 예상하고 있다.
 
구글의 오픈소스 지원정책
요즘 기업마다 오픈소스를 지원하느라 정신 없는 상황이다. 애플과 같은 회사조차도 맥 OS X 코어인 다윈을 오픈소스 프로젝트로 공개하는 상황이니 다른 회사는 두말할 필요도 없다. 구글 역시 API 공개를 통해 외부 응용 프로그램 개발을 장려하는 한편 오픈소스 프로젝트를 직/간접으로 지원함으로써 개발자를 포섭하고 있다.
 
앞서 API와 마찬가지로 구글 코드(code.google.com/index.html) 사이트에서 오픈소스 프로젝트(code.google.com/projects.html)를 소개하고 있다. 구글과 직접적으로 관련 있는 프로젝트는 물론이고 구글 관련 소프트웨어를 개발하면서 갈라져 나온 프로젝트도 올라와 있으니 관심있는 독자들은 방문해보기 바란다. 현재 구글에서 지원하고 있는 오픈소스 프로젝트는 애드워즈 API 클라이언트 라이브러리, AjaxSLT, Coredumper, 구글 mMAIM, 스파스 해시 테이블, 사이트맵 생성기, Kongulo, Goopy/Functional, Perftools 등이 있다.
 
◆ 애드워즈 API 클라이언트 라이브러리 : 구글 광고 서비스인 애드워즈 계정에 쉽게 접근할 수 있도록 자바 클라이언트를 작성하는 데 필요한 라이브러리 집합이다. BSD 라이선스 모델을 따르고 있다.
◆ AjaXSLT : AjaXSLT는 자바스크립트로 구현한 XSLT이며 gmail과 같은 화려한 AJAX 응용 프로그램을 개발하는 데 사용한다. 역시 BSD 라이선스 모델을 따르고 있다.
◆ Coredumper : Coredumper는 프로그램이 돌아가는 가운데 다중 쓰레드 프로그램에서 GDB가 읽을 수 있는 코어덤프를 생성하는 산뜻한 프로그램이다. C/C++로 만들어져 있으며 포직스 시스템에서 동작하며 BSD 라이선스 모델을 따르고 있다.
◆ 구글 mMAIM : mMAIM(MySQL Monitoring And Investigation Module)은 MySQL 서버를 감시하고 분석하는 작업을 쉽게 만들어주는 파이썬 기반의 라이브러리이다. 라이선스 모델은 LGPL을 따르고 있다.
◆ 스파스 해시 테이블 : 스파스 해시 테이블은 구글에서 사용하는 다양한 해시 맵 구현을 포함하고 있다. SGI에서 만든 hash_map 클래스와 비슷하지만 성능이나 공간 최적화 측면에서 더 효율적인 성능을 보여준다. C++로 만들어져 있으며 BSD 라이선스 모델을 따르고 있다.
◆ 사이트맵 생성기 : 파이썬으로 만든 이 스크립트는 웹 서버를 분석해 사이트맵 파일을 생성한다. 이 파일은 운영 중인 웹 서버의 내용을 XML 목록으로 만들어서 구글에 제출할 수 있게 해준다. 라이선스는 BSD이다.
◆ Kongulo : 구글 데스크탑 검색을 위한 간단한 플러그인으로 만들어진 이 소프트웨어는 간단한 웹 스파이더이다. 지정한 인트라넷 웹 사이트를 돌아다니며 지역 데스크탑 검색에서 사용할 수 있게 색인을 걸어준다. 파이썬으로 만들어졌으며 라이선스는 BSD이다.
◆ Perftools : 어마어마하게 빠른 malloc 구현이며 쓰레드와 STL과도 잘 붙는다. 사용자 편의성을 높인 힙 점검 장치와 프로파일러를 탑재하고 있다. C와 C++로 만들어져 있으며 포직스 시스템에서 동작하며 BSD 라이선스를 따르고 있다.
 
이와 같은 오픈소스 이외에도 구글은 다음과 같은 몇몇 오픈소스 관련 프로젝트를 지원하고 있다.
 
◆ 파이어폭스 지원 : 대표적인 오픈소스 프로젝트인 파이어폭스 사용자를 위해 구글이 선물 보따리를 준비했다. 바로 파이어폭스용 확장(toolbar.google.com/firefox /extensions/)이다. 현재 구글 툴바, 구글 SMS(안타깝게도 미국에서만 쓸 수 있다), 구글 서제스트(suggest)를 제공하고 있으며 앞으로 숫자가 늘어날 것으로 보인다. 또한 파이어폭스 초기 화면(www.google.com/firefox?client=firefox-a&rls=org.mozilla:ko-KR:official)도 예쁘게 만들어서 제공함으로써 파이어폭스를 간접적으로 지원한다.
◆ 위키피디아 호스팅 : 요즘 신문 뉴스 기사보다 인기가 좋다고 알려진 오픈소스 개념의 백과사전인 위키피디아 호스팅을 구글에서 지원하겠다는 제의가 있었다(meta.wikimedia.org/wiki/Google_hosting). 기존 지원 업체와 맞물려 미묘한 문제가 걸려 있어 아직 확정되지는 않았지만 만일 구글에서 위키피디아를 본격적으로 지원해줄 경우에 기존 아마추어 위주로 운영되고 있는 지식 검색에 일대 변혁을 일으킬 것으로 보인다.
◆ 구글 특수 분야 검색 : 구글에서는 리눅스, BSD, 매킨토시, MS 윈도우와 같은 개발자를 위해 특수 분야만 검색할 수 있는 인터페이스(www.google.com/options /specialsearches.html)도 제공하고 있다. 특히 리눅스와 BSD를 별도 항목으로 분리시켜 놓은 정책은 오픈소스 위상을 높여주기에 무척 고무적이라고 할 수 있다. 참고로 주류에 속하는 MS 윈도우 분야 검색은 오히려 최근에 들어왔다.
 
구글 개발자 문화
과거에는 소프트웨어 개발자라면 누구나 한번쯤 MS에서 근무하는 꿈을 꾸곤 했었다. 부족함이 없는 멋진 환경에서 뭔가 쿨한 일을 한다는 느낌도 좋았고 잘하면 백만장자가 될지도 모른다는 꿈도 꾸면서 말이다. 하지만 이제는 MS도 구글에 왕관을 넘겨줘야 할 때가 다가온 느낌이다.
 
제품은 조직을 닮아간다는 말이 있듯이 개발자 입장에서 일하기 좋은 회사가 십중팔구 좋은 제품을 만들어 낼 가능성이 높으므로 요즘 한창 관심의 대상으로 떠오르는 구글 내부의 개발자 문화를 살펴보는 방식으로 간접적으로 구글 열풍을 감지해보도록 하자. 잠재적인 개발자를 키우는 여름방학 코드 짜기부터 시작해서 구글이 말하는 ‘구글에서 일해야 하는 10가지 이유’를 살펴보자.
 
여름 방학 코드 짜기
앞서 구글과 오픈소스 프로젝트에 대해 설명했다. 구글은 직접 오픈소스 소프트웨어를 만들기도 하고 다른 오픈소스 프로젝트를 지원하기도 하는데 학생들로 하여금 오픈소스 개발 세계를 소개하는 프로그램인 여름 방학 코드 짜기(Summer of Code, code.google.com/ summerofcode.html) 프로그램을 후원하고 있다.
 
구글은 여름 방학이 끝날 때까지 프로젝트를 성공리에 완성한 학생에게 총 4500달러라는 거금을 제공하며 여러 오픈소스 공동체에서는 현재 진행 중인 프로젝트 가운데 학생들이 붙어서 풀만한 문제점이나 개선점을 추려내 아이디어를 제공하고 멘터링 서비스를 운영하는 방법으로 실제 오픈소스에 공헌이 가능하도록 프로젝트 진행을 도와준다.
 
이번 여름 방학 코드 짜기 프로젝트에 참가한 오픈소스 멘터링 조직을 보면 단순히 시간 때우기용 프로젝트와는 거리가 멀다는 느낌이 올 것이다. 대표적인 몇몇 단체를 예로 들어보면 아파치 재단, 페도라 코어, FreeBSD, 가임, 그놈 재단, Handhelds.org(임베디드), KDE, 모노 프로젝트, 모즈데브(모질라), 오픈오피스, 펄 재단, 파이썬 소프트웨어 재단, 삼바, 서브버전, 우분투 리눅스, 와인 프로젝트 등이 있다. 이 정도면 웬만한 핵심 오픈소스 단체가 모두 참가했다고 봐도 틀린 것이 아니다. 여름 방학이 끝날 무렵 성공했거나 실패했거나 상관없이 학생들이 오픈소스 개발 모델에 대해 어느 정도 감을 잡을 수 있기 때문에 앞으로 자라나는 개발자를 확보한다는 측면에서 이런 프로젝트 후원은 매우 의미 있다.
 
사용자 삽입 이미지
구글 신입 모집 광고

MS에 입사할 경우 치러야 하는 코딩 인터뷰는 악명이 높다. 조엘 온 소프트웨어 20장을 보면 알겠지만 구체적으로 칠판에 프로그램을 짜면서 인터뷰를 해야 한다. 하지만 구글은 한술 더 떠서 수학적인 사고방식으로 무장하지 못한 개발자라면 입사 원서조차 내지 못하도록 조치를 취했다. <화면 6>과 같이 수학 문제를 내놓은 빌보드가 등장하면서 여러 온/오프라인 매체들이 일제히 빌보드의 정체에 대해 기사를 실었으며 매스메티카로 유명한 울프람리서치에서도 MathWorld 헤드라인 뉴스로 이를 다루기도 했다. 스스로 수학을 어느 정도 잘 한다고 생각하는 개발자라면 MathWorld 웹 페이지(mathworld.wolfram.com/news/2004-10-13/google)에 접속해 도전해 보기 바란다.
 
구글이 이처럼 신입 모집 광고부터 튀는 개발자를 찾아내려고 노력하는 이유는 혁신을 위한 창의성을 발휘할 수 있는 사람을 뽑으려고 하기 때문이다. 단순히 수학이 중요하다기보다는 문제를 해결해 나가는 과정과 기발한 생각을 중요하게 생각하는 것이다. 이렇게 스스로 문제를 알아서 풀어가는 개발자가 많아야 구글 랩과 같은 프로젝트를 원활하게 유지해서 향후 성장 동력을 마련하는 초석을 닦을 수 있다.
 
구글에서 일해야 하는 10가지 이유
요즘과 같이 경쟁이 치열한 상황에서 각 회사마다 유능한 사람을 뽑기 위해 내세우는 특장점이 있다. 어려운 수학 문제까지 풀어가면서 구글에 입사하려고 애를 쓰는 개발자가 한 둘이 아니라는 사실은 구글에 무언가 특별한 것이 있다는 것이다. 그 정체를 정확하게 규명할 순 없으나 구글이 직접 제시한 10가지 이유에서 힌트를 발견할 수는 있다.
 
1. 상부상조 : 위대한 삶을 살기 위해 필요한 정보를 사람들에게 제공한다.
2. 인생은 아름다워 : 리마커블한 제품 개발
3. 감사는 최고의 동기 부여책이다 : 구글의 직원 지원 프로그램 참조
4. 놀이와 일은 별개가 아니다.
5. 종업원을 사랑하며 이런 사실을 알기를 바란다.
6. 혁신이 생명줄이다 : 정보 처리 부문에서 최고를 지향한다.
7. 어딜 보더라도 좋은 동료가 있다 : 다양한 부문에 걸쳐 온갖 경력으로 무장한 친구를 찾을 수 있다.
8. 세계를 하나로 묶는다 : 모든 국가와 모든 언어를 지원한다.
9. 아무도 간 적이 없는 신세계로 용감하게 나가자 : 풀어야 할 수많은 난제가 있다. 여기서 수많은 사람을 기쁘게 해줄 창조적인 신제품을 만들 기회를 얻을 것이다.
10. 공짜 점심과 같은 선물이 있다 : 구글 식당은 품질이 높기로 유명하다. 최근 구글 식당의 수석 요리사가 그만둔다고 해 새로운 요리사를 구하기 위해 난리가 났었다.
 
국내에서 바라보는 구글
지식 검색부터 시작해서 쇼핑까지 포탈 사이트 내에서 모든 작업을 처리하기를 원하기 때문인지 국내에서는 검색 서비스만 전문적으로 제공하는 구글의 지명도는 그다지 높지 않았다. 하지만 요즘 들어와서 갑자기 ‘구글’이라는 단어가 언론에 많이 오르내리고 있는데 구글 뉴스로 검색해봐도 이런 현상을 어렵지 않게 감지할 수 있다. 그렇다면 띄엄띄엄 나오던 구글 이야기가 최근 들어 상당히 밀도 있게 전개되고 있는 이유는 무엇일까.
 
흥미롭게도 국내에서 구글이 유명해진 이유는 기술적인 문제가 아니라 사회적인 문제로 볼 수 있다. 아무리 뛰어난 기술일지라도 결국에는 사용하는 문맥에 따라 약이 될 수도 있고 독이 될 수도 있기에 사회적인 문제를 결코 흘러 넘길 수 없다. 하지만 언론에서 너무 흥미 위주로 접근하는 과정에서 구글의 부정적인 측면을 확대 재생산할 수도 있기에 지나친 반 기술주의 움직임과 관련해 부작용을 경계해야 한다. 오해를 불러일으킨 부분에 대해서는 구글에게도 변명의 기회를 줘야 하지 않을까.
 
주민등록번호와 구글
개발자 입장에서 주민등록번호만큼 강한 유혹을 던지는 개인정보는 없을 것이다. 국가적으로 공인한 유일한 키(unique key)이자 손쉽게 다른 정보에 접근할 수 있기에 외부 키(foreign key)가 될 수도 있기 때문이다. 주민등록번호와 실명만 알고 있으면 인터넷에서 개인의 신원을 위조할 수 있으며 집/회사 주소나 전화번호를 비롯해 다른 여러 가지 신상 정보 역시 모두 주민등록번호라는 메타 정보를 활용해서 얻을 수 있기에 일단 주민등록번호가 외부에 유출되면 골치 아픈 일이 생길 가능성이 높아진다.
 
그런데 일부 언론에서 구글을 주민등록번호 유출의 주범으로 몰아가는 웃지 못할 상황이 벌어지고 있다. 구글 검색엔진이 너무 강력하기 때문에 지인 이름만 입력하면 주민등록번호를 필두로 전화번호부터 콘도 예약 기록까지 모두 나오기 때문에 이를 국가적인 차원에서 막아야 한다는 주장이다. 실제로 국내 유명 포탈 사이트들은 주민등록번호처럼 보이는 정보를 색인하지 않도록 자체 검열을 실시하고 있기에 상대적으로 이런 문제에서 자유롭다. 그렇지만 구글에 대한 대안으로 논의되는 것들을 보면 ‘언발에 오줌누기’라는 생각이 머리 속을 떠나지 않는다.
 
물론 보여주지 말아야 하는 정보를 보여주기 때문에 잘못됐다는 논리는 정말 단순 명쾌하다. 그러나 본질적인 문제는 업계의 관례다. 실명을 반드시 확인해야 하는 금융권이나 전자정부 사이트라면 주민등록번호라는 개인정보를 필요악으로 수집할 수밖에 없겠지만 나머지 일반 사이트에서 주민등록번호를 필수적으로 수집하고 이를 검색엔진이 물어가도록 방치해온 것 자체가 잘못된 것이다. 단순히 편의를 위해 아니면 나중에 어떻게 사용해볼 요량으로 주민등록번호를 요구하는 안이한 생각이 문제를 불러일으킨 것이다.
 
하지만 최근에는 다음이나 EBS와 같이 아예 주민등록번호를 입력 받지 않는 곳이 늘어나고 있으며 국가적인 차원에서 본인 확인을 위해 주민등록번호를 대체할 다른 수단을 강구하고 있다는 소식이다. 또한 주민등록번호를 비롯한 개인정보를 과도하게 수집해놓고도 제대로 관리하지 못하는 기업이나 단체에 대해 비판의 목소리도 커지고 있기 때문에 구글이 국내 개인정보 보호에 대해 오히려 관심을 불러일으킨 셈이 됐다.
 
구글 어스와 동해, 국가 주요 기관 사진
회사에서 구글 어스(earth.google.com)를 설치해서 동료에게 살고 있는 집 위치를 물어본 다음 검색해서 찾아주니 다들 너무나도 놀라는 표정을 지었다. 각자 자리로 돌아가서 구글 어스를 설치해놓고 평상시에 알고 있던 이런저런 장소를 탐험하는 즐거운 시간을 보냈으리라. 그런데 요즘 이런 구글 어스가 계속해서 언론 한 귀퉁이를 장식하고 있다.
 
시작은 바로 동해였다. 반크(www.prkorea.com/)에서 구글 어스에 나타나는 동해 표기가 ‘일본해(Sea of Japan)’라는 사실을 발견해 구글 쪽에 정정요청을 한 것이다. 결국 구글은 반크 손을 들어줘 일본해가 동해로 바뀌었는데 이번에는 일본 쪽에서 반크 사이트를 다운시킬 정도로 격렬하게 항의를 했고 결국 구글은 <화면 7>과 같이 동해와 일본해를 병기했다.
 
사용자 삽입 이미지
이 과정에서 구글 어스에 대한 관심이 증폭됐는데 후폭풍으로 청와대를 비롯한 국내 주요 기관 사진을 손쉽게 얻을 수 있다는 보도가 나오면서 다시 한번 정부차원 대응이 필요하다는 주장이 솔솔 피어오르고 있다. 미국의 경우에는 군사 시설이나 주요 국가 시설물에 대한 사진을 제한하고 있기 때문에 구글 어스로 검색할 경우에 결과가 나타나지 않는다. 하지만 미국을 제외한 다른 나라에서는 이런 서비스를 기대하기 어렵다는 사실이 문제가 된다. 웹 사이트인 경우에는 구글의 웹 수집기인 구글 봇에게 특정 사이트 내용을 색인하지 않도록 요청하는 방법(www.google.com/webmasters/bot.html 참조)으로 민감한 정보 노출을 막을 수 있지만 키홀 인공위성의 경우에는 위장막을 설치할 수도 없으므로 특별히 조치를 취할 수 없기 때문에 주민등록번호 노출 문제와는 성격이 조금 다르다.
 
하지만 전문가들 사이에서도 여기에 대한 의견이 분분하다. 기술발전과 더불어 고해상도 이미지를 얻을 수 있는 길이 많기 때문에 단순히 구글 어스 서비스만 제한한다고 해서 문제를 근본적으로 해결하기는 어렵다는 것이다. 또 구글 어스가 서비스하는 해상도로는 군사적인 위협 수준까지 이르기에는 역부족이라는 지적도 있다. 다시 말해 이미 군사 목적으로 사용했던 GPS도 해상도를 완화시켜 상업화된 마당에 디지털 이미지 서비스도 상업화되는 추세를 거스를 수 없다는 것이다.
 
구글 어스를 오용할 경우 생기는 문제점에 대해 걱정이 쌓여가는 와중에 구글 어스에 대한 긍정적인 면도 부각되고 있다. 바로 허리케인 카트리나가 덮친 이재민 거주 지역에 대한 피해 상황을 제공한 것이다. 네티즌 제보를 접수한 구글이 미국해양대기관리처(NOAA)에서 제공받은 실시간 사진을 사용해서 예전 사진과 비교한 다음이 피해 상태를 알려주는 서비스를 시작했다. 구글 어스를 사용해서 예전 사진과 새로운 사진을 비교할 수도 있고 <화면 8>과 같이 피해 상황을 한 눈에 조감할 수도 있다. 구글 어스의 사례는 가치중립적인 기술을 어떻게 활용하느냐가 관건이라는 점과 정보공개와 올바른 사용에 대한 더 깊은 고민이 필요하다는 문제를 제기했다.
 
사용자 삽입 이미지
구글의 한국어 서비스

마지막으로 구글의 한국어 서비스에 대해 몇 가지만 짚고 넘어가자. 아직 한국지사는 설립되지 않았지만 구글에서 일해야 하는 10가지 이유에서 밝힌 ‘세계를 하나로 묶는다 : 모든 국가와 모든 언어를 지원한다’ 정책에 따라 구글은 한국어 서비스에 대해 상당히 발 빠르게 대응하고 있다.
 
기념일마다 바뀌는 로고에 한국 버전을 제공하고 있으며 원래 구글 한글 버전 홈페이지인 www.google.co.kr에 구글 한글이라는 부제를 달았다가 네티즌들의 항의를 받고 바로 구글 한국이라고 수정했으며, 구글 툴바는 물론이고 gmail도 한글 버전을 제공하고 있다. 또한 인터넷 신문에서 자료를 수집해서 자동으로 분류한 후 제공하는 구글 한국어 뉴스 서비스와 대학교 검색 서비스도 한국 현실에 맞춰 제공해 상당한 인기를 모으고 있다. 앞서 살펴본 구글 어스에 동해 표기를 병기한 것도 구글이 한국 시장을 상당히 높게 인식하고 있다는 증거로 해석된다.
 
그러나 아쉬운 점도 많다. 우선 구글이 제공하는 각종 프로그램은 여전히 한글화가 기대에 미치지 못한다. 최근 새로 출시한 구글 토크(www.google.com/talk)도 입력 도중에 글자가 완성되지 못하고 풀어져버리는 버그가 있으며, 아직 한글 버전은 공개되지 않았다. 구글 한국어 번역은 아직 초기 단계이며 구글 서제스트도 아직 한글 서비스를 시작하지 않고 있다.
 
구글플렉스를 이룰 수 있을까
지금까지 구글의 역사와 개발자에 있어 구글의 의미, 국내에서 비춰지는 구글의 모습에 대해 개괄적으로 살펴봤다. 장황하게 설명했으나 검색엔진인 구글의 신드롬 이면에 숨겨진 비밀은 매우 단순하다. 사용자가 원하는 정보를 가장 빠르고 손쉽게 찾아준다는 사실 하나이기 때문이다. 그러나 이런 목표를 달성하기 위한 구글의 움직임은 그리 단순하지 않다. 검색 결과라는 ‘공짜 선물’을 한걸음 앞서 제공하기 위해 수많은 인력과 자금을 투입하는 일이 결코 쉽지 않기 때문이다.
 
개발자 포용 정책의 성공에서 출발해 이제 서서히 국내 일반 사용자에까지 영향을 미치고 있는 구글이 향후 구골(2의 100승, en.wikipedia.org/wiki/Googol)을 넘어서 구글플렉스(10의 구골승, en.wikipedia.org/wiki/Googolplex)으로 발전해 갈 수 있을지 필자 역시 흥미진진한 시각으로 바라보고 있다. [maso]
Trackback 0 Comment 0
2007/01/12 14:45

[펌] Safetu-Critical 시스템 설계를 위한 형식기법 이용


양성현
| 광운대학교 전자공학부 부교수
황종규 | 철도신호통신연구팀 주임연구원
이종우 | 철도신호통신연구팀 책임연구원

1. 서 론

 컴퓨터 시스템은 물리적인 구성성분(하드웨어 부품/소프트웨어 모듈)에서의 결함 또는 설계 오류 등에 의한 원인으로 인해 시스템이 의도하는 임무를 수행하는 중 고장을 일으킬 수  있다. 이러한 경우 초 신뢰성과 안전성을 요구하는 응용분야에 이용되는 시스템은 최소한 위의 두 가지 원인이 시스템 고장발생의 원인이 되지 않도록 해야 한다. 물리적인 부품에서 발생 가능한 결함을 취급하는 기술로는 현재 여분(Redundancy)과 투표기(Voter)를 이용하는 기술이 대표적인 기술로 이용되고 있으며, 이러한 기술을 적용한 시스템에 대해 신뢰성 평가는 마코브 모델링 등을 일반적으로 사용하고 있다.
 설계 오류 문제는 취급하기가 더욱 복잡하며, 현재 사용하고 있는 설계오류 취급 기술에 대해 과학적으로 정당성을 확보할 수 있는 이론이 존재하지 않는다. 단지 설계오류를 취급하기 위해서 검사(Testing), 설계의 다양화(N-버전 프로그래밍, Recovery Block 등), 결함회피(Fault-Avoidance) 기법 등이 제안되고 있다.
 위의 방법들에 따른 문제점으로는 첫째 시험을 수행하는데 있어서 시험기간이 실행 불가능할 정도로 길다는 것이다. 예를 들어 1시간 동안의 시스템이 임무를 수행하는데 있어 고장확률이 10-9라는 확률을 측정하기 위해서 114,000년 이상을 시험해야 한다. 이러한 점들을  극복하기 위한 방법으로 설계의 다중화(Diversity)가 주장되고 있으며, 이 방법의 기본적인 개념은 같은 명세서(Specification)로부터 독립된 설계 및 구현팀으로 부터의 다중버전을 만들자는 것이다. 그리고 하나의 버전에서 발생하는 설계오류의 영향을 은닉(Masking)하기 위해서 임계투표기(Threshold Voter)가 이용되어지고 있다.
 이 방법은 설계상의 결함이 독립적인(Independence) 결함이라는 것이 확인될 때 가능할 것이다. 그러나 물리적 법칙에 의한 하드웨어 결함과는 달리, 소프트웨어 모듈은 주관적인  논리 의하기 때문에 각 버전의 결함이 독립적인 결함이라 확신할 수 없다. 따라서 초신뢰성을 필요로 하는 Safety-critical한 시스템을 위해서는 단지 하나의 방법을 될 수 있을 지라도 궁극적인 방법은 아니다. 따라서 유용한 시험시간 내에서 초 신뢰성을 성취할 수 있는 설계 다양화는 불가능하다. 결과적으로 설계 다양화 기법은 실제적으로 충분한 검증 없이는 초신뢰성을 만족할 수 없다.
 초신뢰성 시스템은 통상 1-10-9 신뢰도 가진 시스템을 의미하며, 이는 정량화 영역을 넘어서기 때문에, 이용 가능한 가장 엄격한 방법에 의해서 시스템을 설계하는 방법을 사용하여야 한다. 따라서 언급한 문제점으로부터 설계상의 오류 문제를 취급하기 위한 방법으로 형식기법(Formal Methods)의 사용을 들 수 있다. 형식기법은 컴퓨터 시스템의 하드웨어 또는 소프트웨어 구현에 앞서 설계하고자 하는 시스템 행위(Behavior)가 어떠한가를 계산 및 예측하는 방법을 제공하는 컴퓨터공학의 응용수학이다. 특히 시스템의 기능은 물론이고 높은 안전성 특성을 만족해야하는 Safety-critical한 시스템 설계와 구현과정에서, 형식기법을 이용하여 설계명세화(Specification), 구현모델(Implementation Model) 및 검증(Verification) 과정의 수행을 통하는 것은 높은 안전성과 신뢰성을 갖는 시스템을 설계 및 개발하는 방법이 될 것이다.
 본 고에서는 Safety-critical한 시스템 설계시 형식기법의 적용을 위한 기본지식을 설명하고자 한다. 즉, 형식기법의 개요, 형식 명세서 및 형식검증기법을 설명하고, 사용자 입장에서의 형식기법 툴의 사용시 주의점, 형식기법을 연구하는데 있어서의 문제점 등을 제시하고자 한다.

2. 형식 기법(Formal Method)

2.1. 형식기법의 개요

 일반적으로 공학분야에서는 설계에 대한 검증을 위해서 수학적인 모델과 계산에 의하고 있다. 형식기법은 컴퓨터시스템(하드웨어 및 소프트웨어) 설계에 응용 가능한 다양한 수학적 모델링 기법을 나타낸다. 즉 형식기법은 컴퓨터공학의 응용수학이며, 그것을 적절하게 컴퓨터공학에 적용할 때 컴퓨터를 기반으로 한 제어시스템 설계시 중요한 역할을 하게된다.
 형식기법은 시스템의 행위를 명세화 및 모델링하는데 사용되어진다. 또한 시스템을 설계하고 구현하는데 있어서 요구되는 시스템 기능과 안전성 특성이 만족된다는 것을 수학적으로 검증하기 위해 사용된다. 이러한 명세화, 모델링 및 검증행위는 엄격함(Rigorousness)의 등급을 갖는 다양한 기술을 이용하여 수행한다. 이러한 적용의 엄정함을 Rushby는 다음과 같이 3가지로 분류하였다. 또한 이것을 엄정함의 등급이라기 보다는 형식기법이 취해야하는 과정으로 표현하는 연구자도 있으나, 이는 모든 세 단계를 거쳐 구현된 시스템은 정확도가 그만큼 향상되기 때문에 결과적으로는 엄정함의 등급과 같은 결과로 볼 수 있다.

 ▶ Level 1 : 시스템 전체 또는 일부의 형식 명세서(Formal Specification)

 ▶ Level 2 : 구현 모델(Implementation Model) 및 검증(Verification)

 ▶ Level 3 : Mechanical Theorem Prover에 의한 형식 증명(Formal Proof) 검사

 형식기법은 일반적으로 시스템 전체에 적용하지는 않는다. 즉, 시스템의 가장 민감한 부분에 형식기법을 적용하는 것이 실제적이고 유용한 방법이다. 대규모의 복잡한 시스템에 대해서 전체적으로 형식기법의 적용은 현재로는 매우 어렵고 많은 시간을 필요로 하지만, 시스템의 핵심부에 형식기법을 이용함으로써 시스템의 신뢰성 및 안전성을 크게 향상시킬 수 있다. 형식기법의 적용과정은 먼저 설계기준을 표현하는 명세서를 작성하고, 그 다음 설계 및 제작을 위한 구현모델을 작성한다. 마지막으로 모든 경우에 대해서 구현모델이 명세서와 일치한다는 것을 형식 검증을 통해 입증해야 한다. 이러한 과정에 대한 세부적인 설명은 2-2, 2-3절에서 논한다.

2.2. 형식 명세서(Formal Specification)

 명세서는 시스템과 시스템의 정확한 특성을 나타내는 것이다. 형식명세서는 수학적으로 정의된 문법과 의미론을 갖는 언어를 사용하여 표현한다. 시스템의 특성에는 기능적 행위(Functional behavior), 타이밍 동작, 성능특성, 내부구조 등을 포함한다. 지금까지 행위적 특성에 대해서는 명세서가 가장 적절하며, 현재의 경향은 시스템의 각기 다른 형태를 취급할 수 있는 서로 다른 명세언어를 통합하는 것이다. 명세서 작성에 있어서의 또 다른 경향은 시스템의 성능, 실시간 제약조건, 보안정책, 구조적 설계와 같은 시스템의 비행위적 특성을 취급하는 것이다. 명세서 작성 과정은 시스템의 동작행위 및 특성을 엄밀하게 서술하는 과정이다. 그렇게 함으로써 시스템에 대한 충분한 이해를 하게 되고, 이로서 개발자가 발견할 수 없는 설계상의 약점, 모호성, 불완전성을 파악할 수 있게 된다. 명세서는 시스템의 최종 사용자와 설계자, 설계자와 구현자, 구현자와 평가자 사이의 유용한 전달 수단이 된다. 형식명세서는 형식논리로부터 유래한 기호를 사용하여 다음 사항을 표현한다.

 ▶시스템이 운용될 환경에 대한 가정

 ▶ 시스템이 달성해야 할 요구사항

 ▶ 요구사항에 부합하기 위한 설계

예 1 : 형식명세서

 ▶ 명세서 : 길이 N의 배열 A는 1....N으로 색인되었다.  X값을 배열에서 찾는 과정이다. 만약 원소를 찾으면 Y는 X와 등가인 배열 원소의 색인과 같은 값이다. X와 등가인 배열 요소가 없다면 Y는 0이 된다.
 
 ▶ 형식 명세서 :
   pre_condition : N>0
   post_condition : {(X=A[Y])\land(1\leq Y\leq N)}\lor{(Y=0)\land(\forall k\(1\leq k\leq N)\aupset A[k]\leq X)}  

 ▶ 구문론적 형태의 형식 명세서 :
  .pre_condition   N>0
  .post_condition IF(\forall k\(1\leq k\leq N)\supset A[k]\neq X)THEN(Y=0)ELSE X=A[Y]AND(1\leq Y\leq N)}

2.3. 형식검증(Formal Verification)

 형식검증에 대한 확립된 방법으로는 모델 검사(Model Checking)와 정리 증명(Theorem Proving)이 있다. 형식검증은 명세서 작성 다음 단계로서, 이러한 형식 기법은 시스템의 바람직한 특성을 분석하는데 이용한다.

2.3.1. 모델검사(Model Checking)

 모델 검사는 시스템의 유한모델을 구축하고, 그 모델이 바람직한 시스템 특성을 유지하는지를 검사하는 기술이다. 모델검사에서의 기술적인 어려움은 대규모 검색공간이 가능한 데이터구조와 알고리즘에 있다. 이러한 모델검사는 기본적으로 하드웨어와 프로토콜 검증에 유용하지만, 현재는 소프트웨어의 명세서 분석 및 검증에도 방법을 적용하고 있다. 현재 실질적으로 사용되고 있는 모델검사에 대한 일반적인 방법으로는 명세서를 시간논리(Temporal Logic)로 표현하고 시스템을 유한상태천이(Finite State Transition) 시스템으로 모델링하는 시간모델 검사(Temporal Model Checking)와 명세서와 시스템 모델이 자동으로  만들어지고 모델된 시스템의 행위가 명세서의 행위와 일치하는지 결정하기 위해서 서로 비교하는 방법이 있다. 모델검사는 부분적인 명세서를 검사하는데 이용될 수 있기 때문에, 시스템이 완전하게 명세화되지 않은 경우에도 일부분에 대한 모델검사를 통해 시스템의 정확도에 관한 유용한 정보를 얻을 수 있다. 특히 모델검사 기술은 설계시 미묘한 오류를 나타내는 논리나 규칙에 대한 검사가 가능하므로 명세서의 오류를 수정하는데 유용하게 이용되어질 수 있다.

2.3.2. 정리증명(Theorem Proving)

 정리증명은 시스템과 시스템의 정확한 특성을 수학적 논리(Mathematical Logic) 내에서 공식으로 표현하고 증명하는 것이다. 수학적 논리는 공리(Axiom)와 추론규칙(Inference Rule)의 집합을 정의하는 형식시스템(Formal System)에 의해서 주어진다. 정리증명은 시스템의 특성을 공리와 규칙, 유도된 정의, 중간 이론 등을 이용하여 증명한다. 증명은 수작업에 의해서도 수행할 수 있지만, 현재 기계의 도움에 의한 정리증명에 연구의 초점이 맞추어 지고 있다. 오늘날 정리증명기(Theorem Prover)는 하드웨어와 소프트웨어 설계에 있어서의  Safety-Critical한 특성의 검증에 점차적으로 이용되고 있다. 정리증명기는 자동화한 범용 프로그램으로부터 특별한 목적을 갖는 대화형 시스템까지 광범위하게 분류될 수 있다. 자동화한 시스템은 일반적인 검색절차로서 이용가능하고 여러 가지 조합적인 문제를 해결하는데 있어 주목할만한 성과를 이루고 있다. 대화형 시스템은 체계적인 수학적 형식개발과 기계적 형식기법에 보다 알맞은 시스템이다.
 모델 검사와 대조적으로 정리 증명은 유한상태공간을 직접적으로 취급할 수 있으며, 이를 위해 유한 영역 상에서 증명하기 위해 구조적 귀납법(Structural Induction)을 사용한다. 대화형 정리 증명기라는 정의에서 알 수 있듯이 이 시스템은 인간과의 대화를 요구하며, 정리 증명 과정이 늦고, 오류를 범하기 쉽다. 대신 증명과정에서 사용자는 시스템  또는 증명된 특성을 간파할 수 있는 장점이 있다.

2.3.3  등가성 검사(Equivalence Checking)

 등가성 검사의 목적은 하드웨어 특히, 반도체 설계분야에서 게이트나 스위치 레벨 시뮬레이션을 줄이거나 제거하는데 있다. 따라서 게이트나 스위치 기능 검사가 필요로 하는 어디에서나 적용되어질 수 있다. 등가성 검사에는 조합 등가성 검사, 순서 등가성 검사, 상태 등가성 검사와 같은 3가지의 서로 다른 레벨의 기술이 있다.

3. 형식기법의 연구 및 사용

 형식기법의 사용 목적은 높은 안전성과 신뢰성이 확보되는 시스템을 설계하자는 데 있다.  형식기법의 기초는 수학을 근거로 하며, 시스템의 하드웨어 및 소프트웨어 설계시 적용되어질 수 있다. 또한 형식기법의 잠재적 사용자는 시스템공학 과정에 포함된 모든 개발자가 될 것이다. 과거 10여년 동안에 형식기법 분야에 대한 많은 연구가 있어왔다. 그 결과 보다 다루기 어렵고 규모가 큰 문제점들에 대해서도 형식기법을 적용할 수 있게 되었다. 형식기법에서의 더 많은 진전이 있기 위해서는 기초연구, 새로운 기법의 고안, 새로운 툴의 구축, 서로 다른 기법의 통합, 실제 사용자를 위한 효과적인 기술이전에 대한 연구자의 노력 등이 요구된다. 이러한 노력들을 바탕으로 형식기법의 적용에 대한 연구자와 산업계 사이의 인식차이 등이 줄여질 때 그리고 산업계에서 형식기법의 필요성을 느낄 때 이 방법이 Safety-critical한 시스템의 설계 및 개발에 있어서의 대안이 될 것이다. 본 장에서는 형식 기법을 연구하는데 필요한 언급된 사항에 대해서 논한다.

3.1 기본 개념

 형식 기법의 연구는 일반적인 컴퓨터 분야의 기본적인 개념을 근거로 한다. 기법, 명세서, 모델, 정리증명 등을 어떻게 구성할 것인가로 부터 계산적으로 요구하는 포괄적 특성을 검증이 간단한 한정된 특성으로 분할하기 위한 효과적인 방법을 개발할 필요가 있다. 또한 추상화 없이 실제 시스템을 명세화하고 검증하는 것은 어렵기 때문에 일정한 시스템이나 문제에 맞춘 모델링이 필요하고, 형식적으로(Formal) 그들을 정당화하고 검증하기 위한 방법의  개발이 필요하다.
 시스템의 설계 및 개발에 있어서는 일시적으로 사용되는 모델링이나 규칙보다는 재사용가능하고 매개변수화하는 모델과 규칙을 확보하는 것이 바람직하다. 대부분의 Safety-critical한 시스템은 디지털과 아날로그 부품으로 구성 되어있다. 이러한 하이브리드 시스템은 이산수학과 연속수학 양쪽의 추론을 요구한다. 시스템 개발자는 설계한 시스템이 현장에서 어떻게 동작할 것인가를 예측하여야 하며, 그때 정확성보다는 성능에 더 관심