Computing2011. 9. 15. 17:39

아래 내용은 서핑 중 찾은 가장 올바른 방법을 블로깅한 두 분의 내용을 펌하였습니다~


[ SynergyKM 설정 by void_main ]

좋은 프로그램이 있어서, 하나 소개 해 드립니다.
맥북을 쓰다 보니깐 Window 계열에서 불가피하게 써야할 프로그램들이 있어서
멀티부팅하기에는 귀찮기도 하고 맥북은 맥북데로 데스크탑PC는 윈도우 계열을 써서
키보드와 마우스를 하나로 제어할순 없을까 해서
USB 헤더에 스위치 회로를 제작해서 각각 두대의 컴터에 USB를 꽂아서 스위치 버튼을 눌릴때마다
맥북 or Window 왔다 갔다 하는것을 만들려고 했는데

이런!? 벌써있네요 ㅋㅋㅋ

대부분 상품으로 해서 파는 모델이 있던데, 구글 도중 프로그램도 있다는것을 알게 됐습니다.
나이스 공짜..
유로도 있고 무료도 있고 여러가지가 있더군요
역시 검색은 꾸준히..

아무튼 제가 선택한 프로그램은 SynergyKM 입니다.

리눅스,유닉스,윈도우,OSX 각종 OS를 모두다 제공하는군요

일단 각각 제어할 제어될 Server컴퓨터와 Client 컴퓨터에 각 운영체제에맞게 프로그램을 설치해줘야 합니다.
먼저 OSX 부터

 http://sourceforge.net/projects/synergykm/ 에서 Down받습니다.


Down을 받게 되면 자동으로 SenergyKM이 마운트 되고, 더블클릭해서 설치만 해주면 된다. 아주 간단하게


설치가 완료된 후 시스템 환경설정 -> 기타 목록에 SynergyKM 아이콘을 실행시키면 상태바에 아이콘이 상주 하게 될것이다.


상태바의 Synergy를 클릭해서  Open Synergy Preferences... 를 클릭하게 돼면 위와 같은 설정창이 뜬다
현재 서버가 될 MAC의 키보드와 마우스를 공유하므로 Share my keyboard and mouse 를 클릭하고
제일 중요한 모든 설정이 끝나고, Turn Synergy on 을 클릭해야 한다 . 꼭 ! (지금은 off가 되어있는데 공유가 되어있어서 그런것)

다음으로 Server Configuration 탭을 클릭하여 공유할 컴퓨터를 설정한다.

+ 를 클릭해서, 연결하게될 2대의 컴퓨터를 생성한다. 그리고 Name 부분에는 꼭 자신의 컴퓨터 이름을 등록해놔야한다.
나의 경우는 왼쪽이 MAC, 오른쪽이 Window 인데, 반드시 꼭 컴퓨터이름을 정확하게 기제해야한다. 이름이 틀리면 연결이 되지 않는다.


그리고 마지막으로,  Server Options.... 버튼을 클릭해서
Switch Delay , Double Tap Speed 부분을 각각 100ms 씩 입력하면 두컴퓨터간의 부드러운 연결이 가능할것이다.
Ok 버튼을 눌리고, 위에 말한 Turn Synergy on 을 클릭


이로서 MAC (server)에서의 모든 설정이 완료. 그리고 클라이언트가 될 Windows 로 넘어 간다.
 
Windows 용 SynergyKM을 다운 받는다.

 더블클릭해서 간단하게 설치를 해주면 된다.
그런후 트레이 아이콘에 SynergyKM아이콘이 추가되고,
더블클릭하면 아래와 같은 창이 뜬다.

Windows의 경우는  Client 가 되기에 Check 를 해주고, 
Name of the Server:
부분은 Server 즉 MAC의 IP 주소를 토시하나 틀리지 않고, 적어준다

그런후 메뉴탭에서
Edit -> Services를 클릭


Client Box 부분의 Install 버튼을 클릭해서 설치 등록해준다.

Close 해서 나온다음 마지막으로 Start부분을 클릭해주면 
MAC과 Windows 마우스가 넘나들게 되는 신기한 광경을 보게 될것이다. 

아! 그리고 마지막으로 apple사와 데스크톱 사의 키보드 인식자체가 틀려서 윈도우 계열에서는 MAC 키보드를 인식하지 못한다.
즉 아무것도 써지지 않을것이다. 이것은 바람 입력기라는 프로그램을 MAC에 설치하여 한글의 경우는 바람입력기 프로그램을 써서
윈도우에서도 키보드를 이상없이 쓰게 될것이다. 하지만 또 난관이 하나더 있는데
Windows 에서의 한/영 키 변환자체가 되지 않는다. 이것은 여러가지 방법으로 해결할수 있지만
키 맵핑이라던지 복잡한건 때려치우고

간단하게  Hankey 라는 프로그램을 써서 Shift+space 를 한/영 전환키로 등록해서 쓰면 된다.
프로그램을 쓰고 싶지 않으신분은 레지스터리를 건드려서 맵핑을 하면 된다.


Posted by void_main




[ 바람입력기 설정 by 즐거운 치과&일상사 ]

맥을 쓰기 전에는 몰랐는데 막상 써보니 가장 불편한 점은 한영전환 이네요. 윈도우에서는 키보드에도 박혀있고 하나의 키만 누르면 되는데 맥은 기본적으로 '애플+스페이스' 조합이니까요. 처음 애플기종을 만질 때는 한영변환키도 몰라서 마우스로 전환을 했어요.

그러나 뜻이 있으면 길이 있는 법, 여러 한영 전환 방법이 있지만 국내 개발자 분께서 만드신 "한글입력기 바람" 이 있습니다. ( 홈페이지 http://baram.or.kr/ )


받으시고 설치를 하기전에 먼저 

'시스템 환경설정 -> 시스템 -> 손쉬운 사용' 으로 들어 가세요 


'보조장비에 대한 접근활성화' 를 클릭해 놓으세요.


그리고 설치 하면 자동으로 로그아웃과 로그인이 이루어집니다. 그런 다음

'시스템 환경설정 -> 언어&텍스트 -> 입력소스' 에 가서 리스트중에 바람을 클릭하시면 됩니다. 

그러면 상단 상태바에 한영전환 모양이 바뀐걸 아시게 될겁니다. 거기 클릭후 환경 설정 가시면 단축키를 지정가능해요. 아마도 오른쪽 애플키가 설정되어 있을 겁니다. 아니라면 편한대로 바꾸면 됩니다.

이제부터는 쉽게 한영전환을 하실 수 있어요. 다~~ 개발자님의 노력 덕택입니다.(여유가 되신다면 페이팔로 donate ^ ^)


Posted by 즐거운치과&일상사

Posted by 버터백통
Computing2011. 7. 4. 11:10

최근 좋은 내용은 이렇게 퍼날르게 되는 안좋은 습관이;;;
아래 내용은 http://ncanis.tistory.com/247의 내용을 퍼왔습니다.

****************************************************************************************************************
Mercurial에 대한 부분이 궁금하여 자료를 정리해 보았습니다.
많은 분들에게 도움이 됬으면 하네요.

1. Mercurial 이란?
Svn의 단점을 대체할 Source Control management 를 말합니다.
아래의 특징이 있습니다.
홈페이지 : http://mercurial.selenic.com

- 분산 설계
  : 전통적인 SVN,CVS방식은 서버-클라이언트 방식으로, 해당 중앙서버가 작동하지 않으면 Commit을 비롯한 모든 작업을 할수 없습니다. 하지만 Mercurial은 각각 로컬에 모든 개발 History를 저장합니다.
즉, 각자가 모두 서버역할도 같이 하게 됩니다.

- 빠릅니다.
데이터 구조가 매우 빠르게 설계되어 있습니다. 소스 비교, 롤백등에 대한 정보를 자세히 저장하고 있기때문에 빠른 비교가 가능합니다.

- 플랫폼 상관 없음
Physon 과 성능을위한 C가 사용되어 개발되어 있습니다. 거의 모든 플랫폼에서 사용가능합니다.

- 확장성
여러 기능에 대해 확장할 수 있도록 설계되어 있습니다.
( 어딘가를 보니 웹 프로토콜을 이용해서 인증을 거치게 해놓았더군요)

- 사용이 편리하다
SVN 과 비슷하여 쉽게 적응가능합니다. (다만 몇가지는 조심해야할 부분이 있네요  )

- 오픈소스

2. Mercurial 과 Git
Mercurial 은 Google에서 지원하고 있습니다.
Git에 비해 쉽습니다.
Git:  http://www.git-scm.com/
Git 도 DVCS 방식입니다.
재미있게 설명한 글이 아래에 있으니 참고하세요.
http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/
Git: 맥가이버
Mercurial : 제임스 본드 로 비교했네요 ㅎㅎ

3. Mercurial  설정
(1) Mercurial 설치
http://mercurial.selenic.com/downloads 에서 Mercurial 다운로드 받으세요.
(2010년 7월 27일 기준 1.6, Snapshot 기준 1.7)
사용자 삽입 이미지

설치는 원하는 곳에 하면 됩니다.

(2) TortoiseHg Tool 설치하기
이제 Tool을 설치해 봅시다.
http://tortoisehg.bitbucket.org/ 에 가서
설치를 다하게 되면 마우스 우측 이벤트에 아래와 같이 등록됩니다.
(현재 1.1.1 이 나와있군요.)

이 메뉴를 통해 Repository를 관리하시면 되겠죠?
사용자 삽입 이미지

자아 아래는 Create Repository Here를 이용해 repo라는 repository를 만들어 봤습니다.

사용자 삽입 이미지

(3) Eclipse를 위한 Mercurial Plug-in 설치하기
Eclipse를 위한 Plug-in을 설치해 좀더 편하게 사용할 수 있습니다.
현재 http://javaforge.com/project/HGE 으로 1.6.0이(2010년 7월 기준) 릴리즈 되었습니다.
몇가지 문제점이 있으나 곧 해결될것이라 봅니다.

Eclipse>Help>Install new Software 를 선택해 http://cbes.javaforge.com/update 를 등록합니다.

사용자 삽입 이미지

자아 설치하고 Eclipse를 재시작하게 되면 아래와 같이 Team 카테고리에 메뉴들이 쭈욱 뜨게 됩니다.

사용자 삽입 이미지

이제 설치가 다 되었으니 이해하기 쉽게 mercurial console 명령어와
Eclipse plugin 메뉴를 이용해 각 부분을 설명해 드리겠습니다.

4. Mercurial 사용하기
여기에서의 설명은 3가지로 나누어 비교하기로 하겠습니다.
hg 콘솔 명령어: Console
Macurial 메뉴 명령 : 마우스 오른쪽 선택시 나오는 메뉴 (Tool)
Eclipse Plugin 메뉴 : Eclipse

로 분류하겠습니다. 그리고 자주 사용해야하는 기능에 대해서만 설명하겠습니다.

Repository 생성하기
Console: hg init
Tool: TortoiseHg>Create Repository Here
Eclipse: Mercurial Repositories 메뉴/new Repository 선택


Server 띄위기
특정 repository를 띄워 외부에서 이곳으로 접근하게 할 수 있습니다.
(SVN으로 치면 이곳이 서버가 되고, 상대방이 클라이언트가 되겠죠)
Console: hg serve
Tool: TortoiseHg>Web Server
Eclipse: Team>Server  (1.6 플러그인에서 Server 실행은 비추천, Stop하는게 없습니다.)
사용자 삽입 이미지
<TotoiseHg 의 메뉴 화면- Commit은 자주쓰는 메뉴라 그런지 밖으로 나와 있다>

파일 및 폴더 추가
등록한 폴더나 파일을 Mercurial에 등록합니다.
(이렇게 등록한 파일들만 Commit 할 수 있습니다.)
Console: hg add
Tool: TortoiseHg>add files
Eclipse: Team>add


Commit 하기
Commit을 하게 되면 서버가 아닌 로컬에 등록된다. 즉 History가 자기 컴퓨터에 저장된다.
Console: hg commit
Tool: Hg Commit
Eclipse: Team>Commit


Push하기
로컬 History가 아닌 지정한 원격지에 작업한 파일을 Push 합니다.
(SVN 으로 보면 Server에 Commit한게 되는 겁니다.)
즉 공동저장소에 저장하는것이기 때문에 반드시 지켜야 하는 규칙이 있습니다.
#필독
- Push를 하기전 반드시 Pull을 해서 새로운 데이터를 수신받으세요.
- Conflict가 있을경우 Merge를 이용해 정리한후 Push 해야 합니다.
  ( 같은
- Push force 를 이용해 강제로 push하시면 안됩니다.
  제대로 된 History를 쌓을 수 없습니다.


Console: hg push
Tool: TortoiseHg> Synchronize 선택 Push 선택
Eclipse: Team> Push


Update 하기
로컬 History에서 데이터를 업데이트하게 됩니다.
Console: hg update
Tool: TortoiseHg>update


Pull하기
연결된 원격 저장소로부터 최신 내용을 로컬 Repository로 가져옵니다.
(Svn의 Update가 되겠죠)
Console: hg pull
Tool: TortoiseHg> Synchronize 선택 Pull 선택
Eclipse: Team>Pull
- 이클립스에서 보면 Pull Option도 선택할 수 있습니다.
 Update after pull
 Clean update(override local changes) : 원격지 소스로 모두 덮어씌우는게 되겠군요.
 Rebase after pull
 Pull even where remote repository is unrelated
 Merge and if there are no conflicts, commit after update
 Abort pull when a timeout occurs


사용자 삽입 이미지
<Eclipse 에서의 Pull >

복구 기능
- Revert : 마지막에 Commit한 그 시점으로 해당 소스들을 되돌리는 것을 말합니다.
- Rollback :
- Backout :
- Strip :



쓸만한 기능 - Search History
툴을 이용하면 편하게 검색할 수있다.( Eclipse Plug-in에는 없다.)
Tool>Search History 를 선택한다.

사용자 삽입 이미지

소스에 test란 text가 들어가고 src 패스에 존재하는 소스 History들을 검색해서 보여줍니다.
http://tortoisehg.bitbucket.org/manual/1.1/datamine.html 에 있는 설명 문서를 참고하세요.


5. 웹서버 띄위기
  다음 아래 Doc를 참고하면 각 서버와의 연동에 따른 장단점을 비교할 수 있다.http://mercurial.selenic.com/wiki/PublishingRepositories
(예를 들면, hg serve 라는 기본 설정을 사용한다면 인증에 관한 설정을 할 수 없다는 것이다.)

Solution

Mechanism

Push?

Browsable

Advantages

Disadvantages

Public

hg serve

HTTP

off by default

yes

built-in

push has no authentication, so can only be used on trusted internal networks

static HTTP

HTTP/HTTPS

no

no

does not require hg or CGI support on the server

very slow

hgweb {*}

off by default

yes

can use existing web server (CGI, WSGI, mod_python), including authentication

web server config can be hard to debug

hgwebdir {*}

off by default

yes

can use existing web server (CGI, WSGI, mod_python), including authentication, supports multiple repositories

slightly more work to setup than hgweb

hg serve behind a proxy (Nginx)

yes

yes

multiple repos, permits authentication, no CGI

requires proxy (Nginx, HAProxy)

third-party hosting

yes

yes

minimal setup

not locally administered, may have fees

Private/internal

ssh

SSH

yes

no

no additional setup

requires Unix server, per-user accounts and repositories

SharedSSH

SSH (but with shared accounts)

yes

no

easy key management, fine-grained permissions

requires Unix server, not built in

shared disk

NFS/Samba etc.

yes

no

can use existing setup

generally restricted to intranets



6. Mercurial 에 인증시스템을 넣어보자
: 현재 Mercurial 에 인증시스템을 넣는것은 상당히 어렵습니다. 특히 Apache와 연동해 인증시스템을 구축하는것은 정말 최악입니다. 왜 Mercurial이 이런 인증 시스템을 제공하지 않는지 궁금하군요.
- DB 테이블을 통한 인증
- 계정 리스트 파일을 통한 인증

이 2개만 지원해주면 참 좋겠는데 말이죠. 물론 DVCS 시스템 하에서는 이런 인증시스템이 의미가 없을 수 있습니다. 어짜피 로컬에 모든정보가 저장되니 말이죠.

만약 이런 기능을 원하시는 분이 있다면 Http Proxy 기능을 직접 만드시길 바랍니다.
즉 중앙서버에서는 hg serve 로 서버를 열고 Proxy Server가 외부를 깜싸는 형태죠.
모든 외부 클라이언트는 Proxy 를 통해서 접근해야 합니다.
그렇다면 이때 Proxy Server에서 해당 요청 주소에 대해 Http Basic 인증시스템을 적용할 수 있습니다.

현재 저도 이렇게 구현했습니다.
구조도 간단해지고, 본인이 원하는 어떤 언어로도 가능하니 이보다 좋은게 없습니다.


* Mercurial 에 도움될만한 사이트
1. http://hginit.com : 조엘 스폴스키가 쓴 Mercurial 강좌
                          처음에 이사람도 거부하다가 여기에 빠져들었네요. svn에서 이쪽으로 전환하는 것을 강력하게 추천하고 있습니다.
2. http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/ : Git과 Mercurial 비교

Posted by 버터백통
Computing2011. 4. 22. 22:42


작년 3월경에 데이터 정밀도를 정리하다가 플래시의 Number데이터형에 대하여 뭔가 이상한 점을 발견했었다. 바로 IEEE-754라는 표준을 따른다고 하는데 정작 최대 53bit를 사용하여 정수를 표현한다는 것이다.
IEEE-754 표준의 경우 배정밀도는 64bit를 사용
한다.

오늘 야꼬랑 채팅 중에 과거 이러한 사실이 문득 떠올랐다. 크게 상관있는 일은 아니지만 11bit의 차이는 생각에 따라서 매우 작지만 매우 크기도 한 값이다.

아래는 ActionScript 3.0 레퍼런스의 내용이다. 지금 플래시를 열어서 F1을 누르고 복사한 내용이다.
Language Version:  ActionScript 3.0
Runtime Versions:  AIR 1.0, Flash Player 9, Flash Lite 4
A data type representing an IEEE-754 double-precision floating-point number. You can manipulate primitive numeric values by using the methods and properties associated with the Number class. This class is identical to the JavaScript Number class.
The properties of the Number class are static, which means you do not need an object to use them, so you do not need to use the constructor.

The Number data type adheres to the double-precision IEEE-754 standard.

The Number data type is useful when you need to use floating-point values. Flash runtimes handle int and uint data types more efficiently than Number, but Number is useful in situations where the range of values required exceeds the valid range of the int and uint data types. The Number class can be used to represent integer values well beyond the valid range of the int and uint data types. The Number data type can use up to 53 bits to represent integer values, compared to the 32 bits available to int and uint. The default value of a variable typed as Number is NaN (Not a Number).

위의 볼딕한 내용은 IEEE-754 배정밀도 표준을 사용한다는 것과 최대 53bit를 사용하여 수를 만든다는 것 이다.


아래는 위키백과의 IEEE-754 표준에 대한 설명이다.
IEEE 754컴퓨터에서 부동소수점를 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한 연산을 정의하고 있다.

IEEE 754에는 32 비트 단정도(single-precision), 64 비트 배정도(double-precision), 43 비트 이상의 확장단정도(거의 쓰이지 않음), 79 비트 이상의 확장배정도(일반적으로 80비트로 구현됨)에 대한 형식을 정의하고 있다. 이중 32 비트 단정도는 반드시 구현해야 하며, 다른 형식은 선택사항이다. 많은 프로그래밍 언어에서 IEEE 표준을 따르도록 정의하고 있다. 예를 들어 C에서는 float는 단정도, double은 배정도와 대응된다.


왜 11비트의 차이가 있는것일까? IEEE-754의 표준도 수를 만들기 위해서 64비트 중에 11비트를 다른 것에 사용하고 53비트만 사용하는 것일까?

흔히 타언어에서 double형은 64비트 즉 8바이트 배정밀도이며 float은 32비트 즉 4바이트 단정밀도이다.
참고로 예전에 테스트한 Decimal산출식 테스트 : 링크열기


그럼 Number 넌 정체가 머냐?
8바이트 보다 작은...6바이트 보다 좀 큰.... 53비트인거냐? 이것은 불충분한 도움말의 오해인것이다. 실수형의 용량만 표기하고 그외의 용량을 표기하지 않았다. 아래의 리플처럼 1비트는 역시 음수와 양수의 구분에 사용하고 실수 52비트까지 포함하여 53비트라고 표시한 것 같다. 나머지 11비트는 지수를 표현하는 것이다.



야꼬의 리플로 다시 찾아본 결과 위키 영문에서야 정확한 포맷을 찾을 수 있었다.

Basic formats

The standard defines five basic formats, named using their base and the number of bits used to encode them. A conforming implementation must fully implement at least one of the basic formats. There are three binary floating-point basic formats (which can be encoded using 32, 64 or 128 bits) and two decimal floating-point basic formats (which can be encoded using 64 or 128 bits). The binary32 and binary64 formats are the single and double formats of IEEE 754-1985.

The precision of the binary formats is one greater than the width of its significand, because there is an implied (hidden) 1 bit.

Name Common name Base Digits E min E max Notes Decimal
digits
Decimal
E max
binary16 Half precision 2 10+1 −14 +15 storage, not basic 3.31 4.51
binary32 Single precision 2 23+1 −126 +127 7.22 38.23
binary64 Double precision 2 52+1 −1022 +1023 15.95 307.95
binary128 Quadruple precision 2 112+1 −16382 +16383 34.02 4931.77
decimal32 10 7 −95 +96 storage, not basic 7 96
decimal64 10 16 −383 +384 16 384
decimal128 10 34 −6143 +6144 34 6144

Decimal digits is digits × log10 base, this gives the precision in decimal.

Decimal E max is Emax × log10 base, this gives the maximum exponent in decimal.

All the basic formats are available in both hardware and software implementations.


결국 같은 정밀도를 갖는다는 것이다!!! 그런데 역시나 의문이 남는다. 예전의 정밀도 테스트한 결과 차이가 분명하였기 때문이다. C에서 double과 AS3에서의 Number형의 테스트 결과 Number의 정밀도가 떨어졌기 때문이다. 소수점 몇 자리까지인지 기억나질 않지만...이런건 언어의 특성이라고 봐야하는 것일까?

Posted by 버터백통
Computing2011. 3. 28. 16:54



 




A*알고리즘을 적용한 마름모 맵에서 길찾기

목적지를 정하면 해당 블럭주위 8방향에 대하여 이동 가능한 블럭 여부를 검사한다. 그리고 이동 가능한 블럭인 경우 openList에 짧은 거리의 블럭을 담아서 개별적으로 주위의 8방향에 대하여 검사한다. 그리고 검사한 원소는 표시를 해둔다. 산에서 길을 잃을까봐 나무에 표시하듯이 검사한 블럭은 검사여부와 이전의 블럭위치를 설정/저장하고 각각 블럭은 목적지와의 거리를 갱신한다.

여기까지는 엄청나게 많은 원소가 발생한다. 여러 경우의 루트를 찾아서 전부 가지고 있게 되는 것이다.
이후 다시 한 번 검사하였다. 최종목적지에서 출발지까지 역순으로 루프가 실행하며 각각에 담긴 블럭의 거리(F=G+H)를 검사하여 값이 작은 순으로 원소를 추적한다. 결국 그 합이 가장 짧은 값의 원소를 나열하여 루트배열로 선언하고 그 원소를 따라가도록 하였다.

위처럼 만들었지만 정확하게 잘 만들었는지는 모르겠다.
A*를 개발 중에  인터넷에 떠돌아 다니는 몇 개의 소스를 접해 보았지만 버그나 로직의 미흡 등으로 매트릭스 구조 변경, 장애물이 많거나 다른 복합한 환경에서 길 찾는 확률이 50%~60%도 못 미치는 소스가 많이 있었다. 그래도 아이디어에 도움이 많이 되었다.

내가 개발한 코드는 현재까지는 100%의 확률로 길을 찾고있지만 좀 더 테스트해봐야 할 것 같다.
위의 링크된 파일은 순전히 8방향이고 현재 8방향과 4방향 혼합 그리고 AI를 보강한 버전을 개발 중에 있다~
나중에 전부 완성되고 그때까지도 길을 100%찾는다면 좀 더 자세히 다루어 보겠다...

지금은 4방향으로 개발한 코드로 3D 사천성이나 만들어 볼까 한다~
아래는 개념에 대한 설명이다.

http://www.aistudy.com/heuristic/A_star.htm



Posted by 버터백통
Computing2010. 7. 18. 12:13

국제화와 지역화

(internationalization and localization)

국제화 : internationalization – I18N (‘I’ + 18글자 + ‘N’)

현지화 : localization – L10N


[ 사전적 의미 ]

국제화현지화는 동일 문화권이 아닌 환경(특히 다른 국가나 문화)에서 만들어진 출판물이나 하드웨어 또는 소프트웨어를 특정 환경에 맞춰 적용하는 것을 의미한다. 두 낱말은 비슷한 주제를 다루지만 약간의 차이가 있는데, 국제화가 앞으로 가능성 있는 다른 환경을 지원할 수 있도록 하는 것이라면 현지화는 이미 존재하는 환경에 맞춘 기능을 지원하는 것이다.


[ 구현 ]

기술적으로는 어떻게 개발하느냐에 따라 미세한 부분들이 다르지만 공통분모는 지원하고자 하는 각 언어의 파일 번들/패키지를 생성하고 언어 선택하는 메서드를 구현하는 것이다.

일반적으로 속성파일을 구분하는 키는 언어의 경우 언어부호 ISO 639(kor/ko)에 의해 구분하며 국가는 ISO 3166-1(410/KOR/KR)에 의거하여 정하는 것이 일반적인 규범이다.(언어는 관례적으로 lowercase, 국가는 uppercase로 한다.)

자바의 경우 . properties 에 키와 값을 설정하고 필요한 때에

메서드에서 호출하여 println()하거나 JSTL을 사용하여 HTML에서 화면에 출력한다.


JSTL(JSP Standard Tag Library)을 이용한 예제를 가져와 봤다.

아래는 출력할 언어 번들(단지 영문/한글) properties파일이다

MessageResources_en_US.properties

com.rappstarr.board.title=Title

com.rappstarr.board.content=Content

com.rappstarr.board.titleNotValidate=Title is NOT validate.

com.rappstarr.board.contentNotValidate=Content is NOT validate.


MessageResources_ko_KR.properties

com.rappstarr.board.title=제목

com.rappstarr.board.content=내용

com.rappstarr.board.titleNotValidate=제목이 잘못 되었습니다.

com.rappstarr.board.contentNotValidate=내용이 잘못되었습니다.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

 

<c:if test="${MessageResources==null}">

<fmt:setBundle basename="MessageResources" var="messageResources"/>

</c:if>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>I18N</title>

</head>

<body>

<table>

<tr>

<td>

<fmt:message key="com.rappstarr.board.title" bundle="${messageResources}"/>

</td>

<td>

<input type="text"></input>

</td>

</tr>

<tr>

<td>

<fmt:message key="com.rappstarr.board.content" bundle="${messageResources}"/>

</td>

<td>

<input type="text"></input>

</td>

</tr>

</table> 

<br/> 

</body>

</html>

[출처] I18N 다국어 처리|작성자 띠용희


다음은 해피타운에서 사용한 액션스크립트에서 구현한 것이다.


아래는 언어 설정 파일이다.

package config.locale

{

import com.ahnlab.as3.utils.PO;

public class Message_ko_KR

{

public function Message_ko_KR ()

{

super();

}

public static function setMsgs():void

{

PO.initMsg("{1}coin","{1}코인");

PO.initMsg("Hello","안녕하세요");

PO.initMsg("Bye" , "가버려” );

}

}//end of class

}//end of package



영문(미국) 언어 설정

package config.locale

{

import com.ahnlab.as3.utils.PO;

public class Message_en_US

{

public function Message_en_US ()

{

super();

}

public static function setMsgs():void

{

PO.initMsg("{1}coin","you have {1}coin");

PO.initMsg("Hello","Hello~");

PO.initMsg("Bye" , "fuck out!” );

}

}//end of class

}//end of package



언어 번들에서 설정된 내용을 담아서 전역 접근하는 PO클래스

(관례적으로 키-벨류가 있는 파일(editable language packs).PO 컴파일 되어서 사용이 빠른 번역문서가 담긴 파일을 MO(compiled versions)라고 한다고 한다.)



package com.ahnlab.as3.utils

{

public class PO

{

public function PO()

{

}


/***** msg po map *****/

private static var msg_map:HashMap = null;

public static function __(msg_id:String = "", ...args):String{

if(null == msg_map){

return msg_id;

}

var msg:String = msg_map.getValue(msg_id);

msg = (null == msg)?msg_id:msg;

if(null != args){

for(var i:int = 0; i< args.length; i++){

msg = msg.replace('{'+(i+1).toString()+'}',args[i]);

}

}

return msg;

}

public static function initMsg( key:*, value:* ):void

{

if( msg_map == null ){

msg_map = new HashMap();

}

msg_map.put( key, value );

}

}//class

}//package


아래는 메시지 ko_KR번역문을 출력하는 예이다.

trace( PO.__(“{1}coin” , 20 ) ) “20코인”

trace( PO.__(“Hello” ) ) 안녕하세요”



아이폰은 장치에서 국가를 지원하는데 genstrings를 이용하면 손쉽게 내용을 번역할 수 있다.

우선 지원할 언어를 정하면 프로젝트에서 Resources폴더에서 새로운 파일을 생성하되 반드시

Localizable.strings 이름으로 생성한다. 그룹관리는 저장위치에서 결정되는데 ISO 639에 의거한 언어코드.lproj(ko.lproj/ja.lproj)이라는 폴더를 만들어 저장한다. 이 과정을 반복하여 여러 언어 파일을 만들면 ResourcesLocalizable.strings라는 그룹이 만들어지고 그 그룹안에 만든 언어의 ISO 639코드가 나타난다. 해당 언어파일을 열어 “키”=”값”으로 설정한다.


아래는 한글 번역 파일이다.

"WelcomeKey" = "안녕!!";

"ConfirmKey" = "확인";

"RegionKey" = "한국";

"ImageKey" = "kr.png";


이 과정을 마치고 번역이 필요한 곳에 NSLocalizedString(@"RegionKey", @"");와 같이 코딩하면

번역 문서의 내용이 입력되게 된다. 위의 경우 “한국”이라는 값을 출력하게 된다.


이러한 과정을 마치거나 키와 값이 추가되는 경우 genstrings을 이용하여 업데이트해야한다.

genstrings은 콘솔에서 해당 lproj의 하위에서 실행하거나 그 상위에서 적절한 경로를 이용하여 genstrings -o ./en.lproj/ *.m 을 실행시킨다. 그러면 사용된 .m파일에 해당되는 .o파일이 프로젝트 폴더 깊숙한 곳에 생성된다.


다음은 버튼과 라벨 이미지를 변경하는 코드이다

//라벨에 글자 설정

regionLabel.text = NSLocalizedString(@"RegionKey", @"");


//버튼 글자 설정

[confirmButton setTitle:[NSString stringWithFormat:@"%@",NSLocalizedString(@"ConfirmKey", @"")] forState:UIControlStateNormal];

//이미지 설정

UIImage *regionImage = [UIImage imageNamed:[NSString stringWithFormat:@"%@", NSLocalizedString(@"ImageKey", @"") ] ];

[imageView setImage: regionImage];




Posted by 버터백통
Computing2009. 12. 11. 10:15



SF영화에서나 나올법한 기술이 실제로 이렇게 연구되고 있네요~
멋집니다~ 이자리에는 없었지만 있었다면 저도 박수에 동참~

펌) http://www.ted.com/talks/lang/kor/pranav_mistry_the_thrilling_potential_of_sixthsense_technology.html

Posted by 버터백통
Computing2009. 6. 10. 16:37

For the podcast "This Week in Photography" (TWiP) see This Week in Photography

A twip (abbreviating "twentieth of a point", "twentieth of an inch point"[citation needed], or "twentieth of an Imperial point"[citation needed]) is a typographical measurement, defined as 1/20 of a typographical point. One twip is 1/1440 inch or 17.639 µm when derived from the PostScript point at 72 to the inch, and 1/1445.4 inch or 17.573 µm based on the printer's point at 72.27 to the inch.

Twips are the default unit of measurement in Visual Basic (version 6 and earlier, prior to VB.NET). Converting between twips and screen pixels is achieved using functions such as TwipsPerPixelX and TwipsPerPixelY.

Twips are a commonly used unit with Symbian OS bitmap images and are also used internally in SWF format. They are also used in Rich Text Format from Microsoft for platform-independent exchange and they are the base length unit in Open Office.

Flash internally calculates anything that uses pixels with twips (or 1/20 of a pixel). Sprites, movie clips and any other object on the stage are positioned with twips. If you trace the position of a sprite, for example, you'll notice that it is always in multiples of 0.05 (which is the decimal equivalent of 1/20).

from wikipedia

Twip
- 화면 독립적인 단위(screen-independent unit). 모든 화면출력장치에서 화면 요소의 비율을 동일하게 한다.
- 1 twip은 1인치(inch)의 1/1440
- 1 twip = 1/20 inch

Pixel
- 화면 종속적인 단위(screen-dependent unit)
- 'picture element'의 약자
-  1 pixel은 화면에 표시되는 가장 작은 그래픽 측정 단위임.
- 1 pixel = 1/72 inch
- 1 pixel = 20 twips

form www.solarview.net

Posted by 버터백통
Computing2009. 1. 6. 19:20


데이터베이스라는 것은 여러 사람에 의해 공유되어 사용될 목적으로 특정화된 정보를 통합  관리하는 정보의 집합을 의미하며 여러 모델( 계층적 데이터베이스 , 네트워크 데이터베이스, 객체지향적 등 )들이 있지만 보통은 관계형 데이터 베이스 모델을 사용한다. AIR에서는 바로 이 관계형 베이터 베이스를 사용하는 SQLite 엔진을 이용한다.

관계형 데이터베이스  하나의 테이블에는  column(또는 field) 과 row로 구성되며 각각의 데이터 베이스에는 테이블이 하나 이상 들어갈 수 있고 테이블이에 있는 데이터 사이에는 관계가 설정될 수 있다.
데이터 사이에의 관계는 보통 키(key)를 기반으로 한다, 하나의 키는 하나의 레코드를 식별하는 기능을 하며 하나의 키를 고유 식별자로 사용하게 되면, 그 키를 기본키(primary key)라고 한다. 이 기본키는 테이블 사이의 데이터 간의 관계를 쉽게 설정하게 하도록 한다.

SQL 이란 이러한 관계형 데이터 베이스(RDB)의 조작과 관리에 사용되는 데이터 베이스 하부언어이며 데이터베이스의 모든 속성과 성질 값 등을 정의하거나 설계, 생성 , 삭제... 등 데이터 조작 처리언어이다. SQL과 데이터베이스 방법론과 이론 등 관련 계통은 워낙 방대하기 때문에 간략하게 핥아만 보았다.

앞으로 우리는 개념을 알던 모르던 SQL 문을 AIR에서 사용해야 하는 경우가 발생한다. 훌륭하게 DB를 설계하려면 많이 공부하거나 전문 DB디자이너의 도움을 받아 설계하면 되지만 개발시 몇 가지는 사용해야 하는 질의문이 있다.

[  SQL 주요 질의문 ]

1 테이블 생성/삭제
CREATE TABLE name( column data type , column data type ... )
만약 테이블의 존재여부를 체크하고 싶을 때는 조건문을 사용한다.
CREATE TABLE IF NOT EXISTS name( column data type , column data type ... )

테이블 삭제는 DROP TABLE을 사용한다
DROP TABLE name
만약 테이블의 존재여부를 체크하고 싶을 때는 조건문을 사용한다.
DROP TABLE IF EXISTS name

2 테이블에 DB추가
INSERT INTO name VALUES( "value" , "value"... )
INSERT INTO name( column , column ... ) VALUE( "value" , "value"... )


아래 예시는 PHP문에서 board테이블에  값을 추가하는 예이다
INSERT  INTO  board VALUES  ('', '$name', '$passwd', '$title', '$message')

3 테이블에 DB수정
UPDATE name SET column = value , column = value .. WHERE 수정대상

복합연산시에는 ANDOR 연산자를 이용한다.
UPDATE music SET artist = "김건모" WHERE artist = "kim gun mo" AND album = "김건모 앨범"
위 질의문은 artist 가 "kim gun mo" 인 레코드와 album 이 "김건모 앨범"인 레코드의 artist 의 값을 "김건모"로 수정하라는 것이다.

UPDATE music SET artist = "김건모" WHERE artist = "kim gun mo" OR artist = "깜상 건모"
이번 질의문은 러코드의 artist가 "kim gun mo" 이거나 "깜상 건모"인 레코드의 artist값을 "김건모" 로 바꾸라는 것이다.

4 테이블에 DB삭제
DELETE FROM name WHERE 수정대상

DELETE FROM books WHERE publisher = "트림"
위 질의문은 books테이블에서 출판사가 "트림"인 모른 레코드를 삭제하라는 명령이다.

복합연산시에는 AND와 OR 연산자를 이용한다.
DELETE FROM books WHERE publisher = "트림" OR publisher = "쫄딱"
위 질의문은 books테이블에서 출판사가 "트림" 또는 "쫄딱"인 모른 레코드를 삭제하라는 명령이다.

5 테이블에 DB조회
SELECT column , column ... FROM name

모든 column을 가져올 때는 * 와일드 카드를 사용한다.
SELECT * FROM name

데이터를 가져올 때 중복된 데이터 제거
SELECT DISTINCT  * FROM name

결과 데이터를 정렬하기 위해서는 ORDER BY를 사용한다.
SELECT * FROM name ORDER BY 기준이 되는 column

SELECT * FROM books ORDER BY year
위의 질의문은 books테이블의 데이터를 year의 오름차순으로 정렬하라는 것입니다.
반대로 내림차순(큰 값이 먼저 출력)으로 정렬하려면 끝에 DESC를 추가한다.
SELECT * FROM books ORDER BY year DESC

6 함수 실행하기
평균을 구하는 함수 avg()는 SQL에서 제공하는 함수이다 이와 같은 함수는 다음과 같이 사용한다.
SELECT avg(score) FROM game
game이라는 테이블의 score의 평균값을 avg(score)로 반환한다. 이를 AS 키워드를 사용하여 별칭 칼럼을 만들어 사용할 수 있다.
SELECT avg(score) AS averageScroe FROM game
위의 질의문은 averageScroe에 score평균값을 반영한 것이다.

각각의 column별로 평균 값을 구하고자 할때는 GROUP BY를 사용한다.
SELECT avg(score) AS averageScroe FROM game GROUP BY id
위의 질의문은 game테이블에서 각각의 id별로 점수 평균을 구하는 것이다.

필터링을 한번 더하여 검사하고자 한다면 HANING을 사용한다. 이는 조건문처럼 비교검사하여 해당되는 것만 출력하게 한다.
SELECT avg(score) AS averageScroe FROM game GROUP BY id HAVING averageScroe > 500
위의 질의문은 game테이블에서 각 id별로 평균점수를 구하고 평균점수가 500이상인 것들만 가져오라는 것이다.

참고) SQLite Expert라는 툴이 있는데 처음에 DB설계할 때 매우 편합니다. http://www.sqliteexpert.com/download.html

Posted by 버터백통
Computing2008. 9. 22. 18:03

RPC[Remote Procedure Call]
분산 처리 방식에서, 어떤 컴퓨터의 프로그램에서 다른 컴퓨터에서 동작하고 있는 프로그램의 절차(C 언어에서는 function)를 직접 불러내는 것. 이 기능으로 두 컴퓨터의 프로그램 사이에서 직접 통신이 가능하며, 통신망을 통해 실행 결과의 값을 주고받는다. 네트워크 파일 시스템(NFS), NCS(Network Computing System) 등 분산 처리 기능을 실현하는 소프트웨어에서 사용된다.

AMF[Action Message Format]
- AMF 채널: AMF는 ActionScript 객체를 효율적으로 직렬화하기 위해 사용되는 바이너리 메시지 형식입니다. AMFChannel은 Flash Player용 flash.net.NetConnection 클래스를 사용하여 HTTP를 통해 AMF 형식의 메시지를 AMFEndpoint로 비동기적으로 전송합니다. Flash Player 8.5에서는 AMF 3으로 알려진 새로운 버전의 AMF를 도입하여 새로운 ActionScript 3.0 언어를 제공하지만 이전 버전인 AMF 0도 계속 지원됩니다. 새로운 ActionScript 3 데이터 유형에 대한 지원 외에도 AMF 3에서는 공통적으로 발생하는 클래스 설명과 참조 문자열을 직렬화하여 보다 간결한 인코딩 형식을 사용하고 중복된 정보를 줄입니다. NetConnection(및 AMFChannel)은 기본적으로 AMF 3을 사용합니다. AMFChannel은 HTTP를 통한 바이너리 정보 사용이 가능하고 보안을 위해 암호화 기능을 사용할 필요가 없는 환경에서 모든 RPC 서비스에 대해 권장되는 채널입니다.

- 보안 AMF 채널: 이 채널은 AMFChannel와 동일하지만 HTTPS를 사용하여 AMF 형식의 메시지를 AMFEndpoint로 전송하는 점이 다릅니다

SOAP (Simple Object Access Protocol)
SOAP (Simple Object Access Protocol)은 웹상의 객체들을 액세스하기 위한 마이크로소프트의 프로토콜이다. 이 프로토콜은 HTTP를 사용하여 인터넷에 텍스트 명령어를 보내기 위해 XML 구문을 쓴다.
SOAP은 COM, DCOM, 인터넷 익스플로러, 마이크로소프트의 자바 이행 등 내에서 지원되면, XML과 HTTP 통신을 기반으로 하여 네트워크 상에 존재하는 각종 컴포넌트간의 호출을 효율적으로 실현하기 위한 방법을 제시하는 규약이다.

EAI (Enterprise Application Integration)
전사적 애플리케이션 통합. 미들웨어를 이용해 비즈니스 로직을 중심으로 기업내 각종 애플리케이션을 통합하는 과정. 전통적인 미들웨어가 개별적인 애플리케이션 간의 통합과 그들 간의 불연속적인 트랜잭션을 용이하게 하는 반면, EAI는 기업이 여러 애플리케이션 간의 관계와 비즈니스 프로세스의 근간을 이루는 트랜잭션 네트워크를 관리할 수 있도록 한다. EAI는 말 그대로 기업의 레거시 애플리케이션을 포함해 모든 애플리케이션을 통합하는 것이 목적이다. 이런 EAI의 기본 목적은 어느 업체나 동일하지만 실제로 EAI 솔루션을 제공하는 업체들의 접근 방법은 그 업체가 갖고 있는 기반 기술, 그리고 접근 방법에 따라 다소 달라진다. 

SAP[Service Access Point]
계층화된 프로토콜에서 하나의 계층은 서비스 제공자이며 몇 개의 서비스 기능들로 구성된다. 하나의 서비스 기능은 어떤 계층의 서브시스템이다. 각 서브시스템은 또한 엔티티들로 구성될 수 있다. 계층의 기본 개념은 자신의 상위 계층에 서비스를 제공하는 것을 의미하며 상위 계층이 하위 계층에 서비스를 요청함으로써 실제적인 서비스가 제공된다. 계층간의 인터페이스에서 프리미티브(primitives)라는 4개의 트랜잭션이 서비스 접근점(SAP)이라 불리는 식별자를 통해 계층 사이에서 호출된다. 서비스 접근점은 특정 서비스 기능의 주소나 식별자를 포함한다.

프리미티브에는 요구(request), 지시(indication), 응답(response), 확인(confirm)이 있다. 이중 요구는 서비스 사용자가 기능을 호출하기 위해서 사용하고, 지시는 서비스 제공자가 기능을 호출하기 위해 또는 서비스 접근점에서 기능이 호출되었음을 지시하기 위해 사용하며, 응답은 서비스 사용자가 지시에 의해 이미 호출된 기능을 완료시키기 위해 사용하고, 확인은 서비스 제공자가 요구에 의하여 이미 호출된 기능을 완료시키기 위해 사용한다.

HTTP [hypertext transfer protocol]
인터넷에서 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약이다. 하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다.
http는 1989년 팀 버너스 리(Tim Berners Lee)에 의하여 처음 설계되어 인터넷을 통한 월드 와이드 웹(World-Wide Web) 기반에서 전 세계적인 정보공유를 이루는데 큰 역할을 하였다. http의 첫번째 버전은 인터넷을 통하여 가공되지 않은 데이터를 전송하기 위한 단순한 프로토콜이었으나, 데이터에 대한 전송과 요구·응답에 대한 수정 등 가공된 정보를 포함하는 프로토콜로 개선되었다.
인터넷 주소를 지정할 때 'http://www....'와 같이 하는 것은 www로 시작되는 인터넷 주소에서 하이퍼텍스트 문서의 교환을 http 통신규약으로 처리하라는 뜻이다.


HTTPS
HTTPS는 월드 와이드 웹통신 프로토콜인 HTTP의 보안이 강화된 버전이다. HTTPS는 통신에서의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발했으며, 전자 상거래에서 널리 쓰인다.

- HTTP 채널: 이 채널은 flash.net.URLLoader를 사용하여 XML 형식의 메시지를 HTTP를 통해 HTTPEndpoint로 비동기적으로 전송하는 텍스트 기반 채널입니다. XML 형식은 강력한 형식의 ActionScript 3.0 데이터를 지원하며 공통적으로 발생하는 객체, 클래스 정의 및 문자열에 대한 참조별 직렬화와 같은 AMF 3의 다양한 최적화 기술을 포함합니다. 이 채널은 텍스트 전용 통신 요구 사항이 있는 환경에서 유용합니다.

참고: flash.utils.IExternalizable 인터페이스는 아직 HTTPChannel에서 완전히 지원되지 않습니다. 따라서 객체 참조를 복구할 필요가 있는 mx.utils.ObjectProxy 및 mx.collections.ArrayCollection 인스턴스는 이 채널을 사용하여 직렬화하면 안 됩니다. - Secure HTTP 채널: 이 채널은 HTTPChannel 클래스와 동일하지만 HTTPS를 사용하여 메시지를 HTTPEndpoint에 전송한다는 점이 다릅니다.

HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장한다. HTTPS의 기본 TCP/IP 포트는 443이다.
보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘에 달려있다.

HTTPS를 사용하는 웹페이지의 URL은 'http://'대신 'https://'로 시작한다.
간혹, 웹에서 신용카드를 사용하는 사람들은 HTTPS가 "완벽하게" 정보를 보호해준다고 오해하기도 한다. 그러나 실제로 이것은 웹 서버와 브라우저 사이에 전송되는 카드 정보만이 암호화될 뿐이다. 카드 정보는 보통 서버 데이터베이스에 저장되며(대개 신용카드 처리기에는 전송되지도 않는다), 정보 유출은 대부분 내부 인력이 일으킨다.

 

RTMP[Macromidia Real-Time Messaging Protocl ]
RTMP도 AMF를 사용하여 ActionScript 객체를 직렬화하지만 RTMPEndpoint와의 영구적인 연결을 유지 관리하고 실시간 통신이 가능합니다. RPC 서비스는 단일 클라이언트/서버 요청/응답 모델을 사용하여 비동기적으로 만들어지기 때문에 실시간 통신은 필요하지 않습니다


WSDL(Web Services Description Language)
WSDL은 문서 지향적 또는 프로시저 지향적인 정보를 포함한 메시지에서 작동하는 종점 집합으로서의 네트워크 서비스를 설명하는 XML 형식입니다. 이러한 작동 및 메시지에 대해 대략적으로 설명한 다음, 구체적인 네트워크 프로토콜 및 메시지 형식으로 연결하여 종점에 대해 정의합니다. 관련된 구체적인 종점은 추상 종점(서비스)과 결합되어 있습니다. WSDL은 통신에 사용되는 메시지 형식 또는 네트워크 프로토콜과는 상관 없이 종점 및 종점의 메시지를 설명하도록 확장할 수 있습니다. 하지만, 이 문서에 설명된 바인딩만이 SOAP 1.1, HTTP GET/POST 및 MIME과 함께 WSDL을 사용하는 방법을 설명합니다.

이 WSDL 언어 버전은 종점의 컴퍼지션 및 결합을 설명하는 프레임워크를 포함하지 않는 첫 번째 단계입니다. 계약을 설명하는 전체 프레임워크는 메시지를 받거나 보내는 순서 규칙과 같이 서비스의 동작을 표현하는 방법과 서비스를 작성하는 방법을 포함합니다. 서비스의 컴퍼지션은 모든 형식을 지원해야 하지만 런타임에 교환되고 바운드되는 서비스 참조와 함께 전달되는 참조를 허용해야 합니다. 특히, 후자는 런타임 계약 협상의 중요한 요소이며 참조 동작을 캡처하고 서비스를 중개합니다.

WSDL 스펙 작성자들은 (1)서비스를 작성하는 프레임워크 및 (2)서비스의 동작을 설명하는 프레임워크를 포함하는 WSDL의 수정된 버전 및/또는 추가 문서를 적시에 게시하고 있습니다.

Posted by 버터백통
Computing2008. 9. 11. 11:48
[ Endian ]
가장 중요한 비트(또는 바이트)가 처음으로 오는 이진 데이터의 전송 또는 저장의 방식을 Big-Endian이고 이와 반대되는 방식을little-endian이라 부른다.

endian이란 데이터의 저장 및 전송 방식을 구분할 때 사용되어 지는 것으로 컴퓨터가 여러 바이트로 된 데이타의 저장시 같은 바이트 순서를 따르지 않는다.
8-비트 바이트를 사용하지 않는 컴퓨터들은 점차 사라져 가고 있지만 이러한 바이트의 순서에 대해서는 명확한 표준이 없으므로 문제점으로 남아 있는 것이다.
2바이트로 이루어진 16-비트 정수의 경우를 예로 들어 보면 이것의 저장 방법에는 하위 바이트를 먼저 두는것 (이를 little endian이라고 한다)과 상위 바이트를 먼저 두는 것(이를 big endian이라고한다)이 있다.

◐ 데이타의 저장 형식
여러 바이트가 하나의 데이타를 저장할 때
- little endian: 낮은 주소에 하위 바이트를 저장
- big endian: 낮은 주소에 상위 바이트를 저장

◐ big endian
- high-order byte low-order byte
  address a  address a+1
- IBM370, Motorola 68000, Pyramid

◐ little endian
- Intel 80x86, DEC VAX, DEC PDP-11

첫번째의 경우는 다음과 같다.

Little endian byte order
--------------------------------------------------------
| high-order byte | low-order byte |
--------------------------------------------------------
↑ ↑
addr A+1 addr A

여기서 오른편에서 왼편으로 주소가 증가한다.
낮은 주소가 낮은 바이트라는 논리이다.

Big endian byte order
---------------------------------------------------------
| high-order byte | low-order byte |
---------------------------------------------------------
↑ ↑
addr A addr A+1

여기서는 왼편에 있는 것이 오른편보다 낮은 주소이다

예를들어... "NAVER"라는 단어가 메모리에 저장된다면,
빅 엔디안의경우
100번지 --- "N"
101번지 --- "A"
102번지 --- "V"
103번지 --- "E"
104번지 --- "R"
의 순서로 저장이 되며,

리틀 엔디안의 경우
100번지 --- "R"
101번지 --- "E"
102번지 --- "V"
103번지 --- "A"
104번지 --- "N"
의 순서로 저장이 됩니다.

이것은 개념적인 예시이며,
실제로는 바이트와 비트로 저장되므로(01100111 이런식으로) 좀더 복잡하다.


현재 컴퓨터 시스템에서 많이 쓰이고 있는 바이트 순서는 다음과 같다.
-----------------------------------------------------------------------------
| big endian : sparc, IBM 370, Motorola 68000, Pyramid |
-----------------------------------------------------------------------------
| little endian : Intel 80x86(IBM PC), DEC VAX, DED PDP-11 |
-----------------------------------------------------------------------------

32 비트 정수의 경우에는 이런 현상이 더욱 심각한데요 시스템에 따라 16 비트 부분이 서로 바뀌어 있다. 전산망 규약에서 이 문제에 대한 해결 방법은 망 바이트의 순서를 확정짓는 것이다.
TCP/IP, XNS, SNA 규약들은 규약 머릿부에 쓰이는 16-비트 정수와 32-비트 정수에 모두 big endian을 사용한다. (실수 데이타 부분에 대해서는 차이가 심하지만 다행이 규약에서는 정수 영역만 다룬다)

현재의 대다수 상용UNIX가 돌아가는 RISC프로세서의 경우에는 Big-Endian(주 참조)방식을 사용하는데 반하여 Intel프로세서 및 이에 돌아가는 SCO의 UnixWare는 Little-Endian방식을 사용하고 있다. 따라서 서로 다른 환경을 하나로 통합하는 데에는 많은 노력이 들며 이에 따른 시스템의 성능저하가 예상되므로 결코 쉬운 문제가 아니다.

2-3년전 HP가 IA-64에 대한 지원계획을 발표하며 실제로 SCO와 공동으로 IA-64용 UNIX의 개발을 시도했었는데 양사는 얼마가지 않아서 'Endian'문제에 부닥쳤고 양사의 입장차이로 인하여 HP와 SCO의 공동개발 관계는 파경을 맞이하였던 것이다.

MOTOROLA, IBM등은 Big-Endian 환경에서 개발되었다. AIX 역시 Big-Endian 환경하에서 개발되었고 이의 환경에 익숙해져 있다. 그러나 결정적인 차이는 AIX는 개발 초기부터 다양한 아키텍처의 플랫폼을 지원할 수 있도록 AIX 코드의 많은 부분이 '엔디안 중립'(Endian Netural)의 방식을 채택하고 있기 때문에 훨씬 더 쉽게 전환될 수 있다는 점이다.

ps) 출처 페이지가 폐쇄되어 안타깝습니다.
Posted by 버터백통
Computing2008. 8. 13. 19:02
다운로드를 위한 문서를 제공하는 웹 사이트를 구축할때 일반적으로 질문되는 것은 : "브라우져가 문서를 보여주는 방법을 어떻게 제어하는가" 이다. 예를들어, 만일 필자가 .doc 확장명을 가지는 MSWord 문서 파일에 대한 링크를 제공한다면, 파일로 저장하기 보다는 워드로 문서를 열도록 브라우져에게 어떻게 말할 것인가? 그리고, 만일 필자가 ASP를 이용해 동적으로 Tab-Delimited 포맷 문서를 만들었 다면, 이것을 자동으로 보여주기 위해서 엑셀이나 다른 스프레드 쉬트 응용프로그램으로 어떻게 구현 할 것인가?

  간단히 대답해서 여러분은 "할 수 없다" 이다. 브라우져나 클라이언트 응용프로그램이 웹서버로 부터 보낸 파일을 어떻게 다루는지 컨트롤 하는 것은 불가능하다. 여러분이 할 수 있는 것은 그것이 어떻게 다루어져야 하는 것을 제안하는 것이다. 여러분은 이것을 파일이 어떤 형태인지 브라우져에게 알려줌으로써 이것을 구현하고, 그리고 나서 브라우져와 사용자에게 그것으로 무엇을 할지 결정하도록 남긴다. 있다.


MIME-type과 Content type이란 무엇인가? 
  우리가 클라이언트 브라우져로 어떤 자원을 보낼때(어떤 형태의 파일이나 문서 등), 웹 서버는 일련의 HTTP 헤더로 파일이나 자원을 포함하는 바이트의 Stream을 앞에 보낸다. 이런 헤더는 클라이언트에게 웹 서버와 커뮤니케이션 세부사항을 묘사한다. 예를들어, 헤더는 사용되고 있는 웹 서버의 소프트웨어 의 타입, 서버의 날짜와 시간, HTTP 프로토콜, 사용중인 커넥션 타입 등을 지정한다. 헤더는 또한 클라이언트가 이런 가상 패스나 도메인에 대해서 저장해야 할 쿠키를 포함한다.

  이와 관련해서 가장 중요한 것은 헤더는 또한 보내지는 자원의 content 타입이 포함되는 것이다. 이것은 Content-Type 헤더에 의해 지정되는데, 이 값은 표준 MIME-Type의 하나이다. MIME-Type을 살펴봄으로써 브라우져는 데이터를 나타내는데 어떤 종류의 파일 Stream인지를 알고 있다. HTML 페이지에서, 표준MIME type은 "text/html" 이다. 그리고 텍스트 파일이나 텍스트 stream은 "text/text"이다. 이미지 파일은 "image/gif" 혹은 "image/jpeg" 와 같은 MIME-Type을 가진다. 일반적인 MIME-Type과 파일 확장명의 매칭 리스트는 아래 표에 나와있다.



일반적으로 사용되는 MIME-Type과 파일 확장명

MIME-Type Description File Extension
application/acad AutoCAD drawing files dwg
application/clariscad ClarisCAD files ccad
application/dxf DXF (AutoCAD) dxf
application/msaccess Microsoft Access file mdb
application/msword Microsoft Word file doc
application/octet-stream Uninterpreted binary bin
application/pdf PDF (Adobe Acrobat) pdf
application/postscript PostScript, encapsulated PostScript, ai, ps, eps
Adobe Illustrator
application/rtf Rich Text Format file rtf rtf
application/vnd.ms-excel Microsoft Excel file xls
application/vnd.ms-powerpoint Microsoft PowerPoint file ppt
application/x-cdf Channel Definition Format file cdf
application/x-csh C-shell script csh csh
application/x-dvi TeX dvi dvi dvi
application/x-javascript JavaScript source file js
application/x-latex LaTeX source file latex
application/x-mif FrameMaker MIF format mif
application/x-msexcel Microsoft Excel file xls
application/x-mspowerpoint Microsoft PowerPoint file ppt
application/x-tcl TCL script tcl
application/x-tex TeX source file tex
application/x-texinfo Texinfo (emacs) texinfo, texi 
application/x-troff troff file t, tr, roff t, tr, roff
application/x-troff-man troff with MAN macros man 
application/x-troff-me troff with ME macros me
application/x-troff-ms troff with MS macros ms
application/x-wais-source WAIS source file src
application/zip ZIP archive zip
audio/basic Basic audio (usually m-law) au, snd
audio/x-aiff AIFF audio aif, aiff, aifc
audio/x-wav Windows WAVE audio wav 
image/gif GIF image gif
image/ief Image Exchange Format file ief
image/jpeg JPEG image jpeg, jpg jpe 
image/tiff TIFF image tiff, tif
image/x-cmu-raster CMU Raster image ras
image/x-portable-anymap PBM Anymap image format pnm
image/x-portable-bitmap PBM Bitmap image format pbm
image/x-portable-graymap PBM Graymap image format pgm
image/x-portable-pixmap PBM Pixmap image format ppm
image/x-rgb RGB image format rgb
image/x-xbitmap X Bitmap image xbm
image/x-xpixmap X Pixmap image xpm
image/x-xwindowdump X Windows Dump (xwd)  xwd
multipart/x-gzip GNU ZIP archive gzip
multipart/x-zip PKZIP archive zip
text/css Cascading style sheet  css
text/html HTML file html, htm
text/plain Plain text txt 
text/richtext MIME Rich Text rtx
text/tab-separated- values Text with tab-separated values tsv
text/xml XML document xml
text/x-setext Struct-Enhanced text  etx
text/xsl XSL style sheet xsl
video/mpeg MPEG video mpeg, mpg, mpe 
video/quicktime QuickTime video qt, mov
video/x-msvideo Microsoft Windows video avi
video/x-sgi-movie SGI movie player format movie 


우리가 클라이언트에게 데이터의 Stream을 만들고 보내는데, ASP를 사용한다면, IIS는 이것을 동적으로 HTML 페이지를 만들어질 것이라고 가정한다. 그리고, 그것은 MIME-Type "text/html"로 되돌려 보내질 것이다. 그러나 우리는 ASP 페이지에서 Response.ContentType 속성을 세팅할때 다른 값으로 content type을 바꿀 수 있다. 그래서 우리가 사용할 수 있는 스프레드 쉬트 응용프로그램을 위해 tab-delimited 파일을 만든다고 가정하면, 우리는 content type을 "application/tab-separated-values"으로 대신 세팅할 수 있다:

                    Response.ContentType = "application/tab-separated-values"

  이것은 HTTP 헤더 값을 지정하기 때문에, 우리는 모든 페이지의 보이는 content를 사용자에게 보내기 전에 이것을 해야한다는 것을 명심하라. 일반적으로, 우리는 페이지의 제일 위쪽 근처에 이 문장을 놓게된다. 보통은 <% @ language= ... %>와 Response.buffer 문장 다음에 놓는다.

Posted by 버터백통
Computing2008. 5. 13. 15:06

웹의 도약을 위한 새로운 발판
- 오픈(Open)API와 매시업(Mashup)서비스 -


작년 국내 주요 포탈인 NHN과 다음커뮤니케이션이 자사의 주요 서비스를 오픈 API로 개방하면서 큰 기대를 모았다. 이와 관련하여 오픈 API를 이용해 손쉽게 새로운 서비스를 창출해 내는 매시업(mashup)은 웹을 도약시킬 또 하나의 발판으로 꼽히고 있다. 하지만 처음의 기대와는 달리 오픈 API는 아직 큰 반향을 불러일으키지 못하고 있는 것도 사실이다. 이 글에서는 오픈 API와 매시업의 기술적인 특성과 의미를 재점검해보고 이를 활용할 방안을 고민해보려 한다.


글 · 서광열| kwangyul.seo@gmail.com



지난 2월부터 이달 말까지 ‘2007 대한민국 매시업경진대회’ 행사가 진행 중이다. 국내 주요 포탈 기업인 NHN과 다음커뮤니케이션이 개최한 이 행사는 국내에 오픈 API 기술을 다시 한 번 알리고, 이들을 이용한 새로운 서비스를 발굴하기 위한 노력이다. 하지만 반대로 말하면 작년 이들이 공개한 오픈 API가 화려한 서막에 비해 별다른 이득을 얻지 못했다는 뜻이기도 하다. 오픈 API는 무엇이며 어떤 파급 효과를 가졌기에 이처럼 많은 기대와 실망이 교차하고 있는 걸까?



오픈 API



우선 API는 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)의 약자로 애플리케이션을 작성하기 위해 필요한 기본적인 기능(운영체제, 프로그래밍 언어, 표준 라이브러리 등에서 제공)을 정의해놓은 것이다. 예를 들어 C 프로그래밍 언어에서 sin 값을 알고 싶다면, C 표준 API(math.h에 정의)의 하나인 sin 함수를 이용하면 된다. sin 함수에 어떤 값을 넘겨주면 sin을 취한 값을 돌려준다. 비슷한 기능을 하는 함수로는 con, tan 등도 있을 것이다. 이렇게 프로그램 작성에 필요한 일련의 기능을 모아 놓은 것이 API이다.


오픈 API는 전통적인 API의 개념을 웹으로 확장한 것이다. 특정한 기능이나 서비스를 제공하는 사이트에 접속해서 필요한 데이터를 요청하고 받아오는 행위를 기존 컴퓨터에서 함수를 호출하고 결과를 받는 것과 동일하게 생각한 것이다. 예를 들어, 기상청 사이트가 사용자들을 위해 날씨 정보를 얻을 수 있는 오픈 API를 만들었다면, 다른 사이트에서는 별다른 노력 없이 기상청에서 날씨 정보를 얻어와 고객들에게 보여줄 수 있다.


오픈 API는 인터넷 서비스 회사가 자사에서 독점적으로 사용하던 서비스, 정보를 외부에 열어주겠다는 뜻이다. “오픈”의 의미는 인터넷 상의 API라는 뜻이기도 하지만, 자사의 독점적인 정보를 외부로 열어주겠다는 뜻도 포함되어 있는 것이다. 실례로, NHN이 오픈 API를 제공하기 시작했다는 것은 원래 네이버 사이트에서만 열람할 수 있었던 지식IN, 블로그, 전문자료 검색 등을 네이버 홈페이지에 접속하지 않고서도 외부에서 직접 이용할 수 있게 되었음을 뜻한다.



오픈 API 관련 기술



앞에서 설명한 오픈 API는 그 정의가 다소 추상적이다. 구체적으로 오픈 API가 어떤 외형을 지니는지 이해하려면 오픈 API를 구현하는 기반 기술을 간단하게나마 살펴볼 필요가 있다. 오픈 API는 “API”라는 단어에서 알 수 있듯이 인터넷을 통해 필요한 정보를 요청(주로 웹페이지를 받아오는데 사용하는 HTTP 프로토콜을 이용)하고 결과를 받는 행위를 의미한다.


정보 요청 시에는 구체적으로 누구에게 어떤 정보를 받기를 원하는지 지정할 방법이 필요하다. 또한 결과에는 요청한 정보가 알기 쉽게 정리되어 있어야 한다. 이를 위해 오픈 API는 보통 REST, XML-RPC, SOAP 등의 기술을 사용한다.


[1] REST


REST(Representational State Transfer)는 2000년 로디 피들링(Roy Fiedling)의 박사 학위 논문에서 처음 제안되었고, 대규모 네트워크 시스템을 구축하는데 유용한 아키텍처 스타일(architecture style)이다. REST는 현재의 웹과 같이 대규모 분산 네트워크 구축 시에 지켜야할 원리와 원칙을 의미한다.


이러한 원칙 중에 하나가 “작고 어디서나 통용되는 인터페이스를 가진다(HTTP의 GET, POST, PUT, DELETE)”인데, 오픈 API에서 말하는 REST는 이런 인터페이스를 잘 따르는 간단한 접근 방식을 말한다. 예를 들어 블로그의 내용을 읽어오는 데는 GET을, 블로그 글을 생성하는 데는 PUT을, 블로그 글을 갱신에는 POST를, 글을 삭제하는 데는 DELETE를 쓰는 식이다.


실제로 다음의 신지식 검색 API를 보면 요청 방법을 REST라고 명시하고 있다. 검색은 ‘읽기’에 해당되는 기능이므로 GET을 이용해 원하는 정보를 요청하면 다음의 오픈 API가 결과를 돌려준다. 다음 신지식인에서 GET 방식으로 생성한 URL의 예제는 다음과 같다. 여기서 q는 검색할 질의(여기서는 daum을 검색), result는 결과로 받을 답변의 수, sort는 정렬 방법, range는 검색 범위를 뜻한다.



http://apis.daum.net/search/knowledge?q=daum&result=20&pageno=1&sort=accu&range=progress&apikey=xxx










[표] REST방식의 다음 신지식인 API호출


[2] XML-RPC


XML-RPC는 오픈 API를 사용하기 위한 또 다른 방법이다. RPC는 원격 프로시저 호출(Remote Procedure Call)의 약자로, 분산 컴퓨터 환경에서 이기종의 컴퓨터 자원을 사용하는 기술이다. RPC는 원격의 컴퓨터도 마치 자신의 컴퓨터에 존재하는 함수를 호출하는 것처럼 프로그램할 수 있게 만들어준다. XML-RPC는 이 개념을 웹으로 옮겨온 것으로 프로그램에서 함수 호출을 하듯이 원격에 있는 사이트에 정보를 요청하고 받아올 수 있게 해준다. 이때 주고받는 인자와 리턴 값은 XML로 인코딩하고, 실제로 데이터를 전송하는 수송 수단(transport)으로는 범용적인 HTTP(POST)를 사용한다.


XML-RPC는 이름에서 느껴지는 바와 달리 매우 간단한 기술이다. 명세서의 길이도 7페이지 남짓 밖에 안 되며 누구나 쉽게 이해하고 쓸 수 있다. XML-RPC로 인코딩할 수 있는 정보는 배열, 베이스64 인코딩된 바이너리, 이진값, 날짜/시간, 실수(double), 정수(integer), 문자열, 구조체로 한정되어 있다.


국내에서 다음이 자사의 블로그 API를 XML-RPC 형태로 제공하고 있다. 이 API를 이용하면 블로그 개설, 중복여부 검사, 글 올리기 등의 일을 다음 블로그에 접속하지 않고도 외부에서 처리할 수 있게 된다. 이를 이용하면 워드 프로세서나 전문 에디터 같은 데스크톱용 리치 어플리케이션을 이용해 글을 작성하고 곧바로 블로그에 게재할 수도 있게 된다.

















[그림1] XML-RPC의 모식도



[3] SOAP


SOAP(Simple Object Access Protocol)은 XML-RPC가 발전한 프로토콜이다. 앞서 소개한 XMl-RPC는 기본적인 데이터 타입만을 표현할 수 있기 때문에 복잡한 사용자 정의 타입을 정의하는 데는 어려움이 따른다. 이에 따라 좀 더 복잡한 데이터 구조를 표현하고 이에 특화된 처리를 지원하기 위해 SOAP이라는 프로토콜을 만들게 되었다. SOAP은 REST나 XML-RPC에 비해 복잡도가 상당히 높으며, 주로 엔터프라이즈 솔루션의 웹 서비스(web service) 구현에 자주 사용되고 있다.


기업 솔루션 시장과 달리 인터넷에서는 간단한 프로토콜이 대세이다. 실제로 아마존의 경우 HTTP+XML 형태의 API와 SOAP API를 모두 제공했는데, HTTP+XML 형태의 API가 8:2로 우위를 점했다고 한다. 즉 인터넷 개발자들은 복잡하고 어려운 프로토콜보다는 간단한 XML 데이터를 HTTP 프로토콜로 보내고 쉽게 결과를 얻을 수 있기를 바란다는 것이다.


국내의 경우 이 사실을 잘 알고 있는지 SOAP을 이용해 오픈 API를 접근할 수 있게 한 사례는 없었다. 다음커뮤니케이션즈는 REST와 XML-RPC를, 네이버의 경우 일종의 REST(HTTP GET을 이용)를, 알라딘도 GET, POST를 이용해 질의를 던질 수 있게 되어 있다. [GET과 POST를 모두 질의에 사용하는 방식은 정확한 의미에서 REST라고 볼 수 없다]



매시업이란?



매시업은 오픈 API와 이야기가 나오면 빠지지 않고 나오는 주제이다. 매시업은 여러 오픈 API를 사용하여 새로운 서비스를 창출하는 것을 말한다. PC 환경에서 그래픽스 API, 수학 API 등을 이용해 화면에 그래프를 그릴 수 있는 것처럼, 매시업은 서로 다른 오픈 API를 이용해 시너지를 낼 수 있는 새로운 서비스를 만드는 행위이다.


네이버 지도 API를 이용한 국내 매시업 사례로는 XWIRE(http:// www.xwire.co.kr)가 있다. 해당 사이트를 접속해 보면 지도가 뜨고 위치를 지정하면 해당 위치의 지명에 대한 설명을 볼 수 있다. 필요하면 지도에 메모를 남기고 해당 메모의 URL을 얻을 수 있다. 여기서 XWIRE가 제공하는 서비스는 지도에 메모를 남기고 다른 사람과 공유하는 것인데, 지도는 네이버 가져오고 지명에 대한 정보는 구글에서 가져와 처리한다. ‘핵심’이라고 할 수 있는 메모 남기기 기능만 직접 구현해 넣은 것이다.


XWIRE가 오픈 API를 사용하지 않고 이 기능을 구현하려 했다면 상당한 시간이 걸렸을 것이다. 지도를 제작하거나 구글 같은 검색 엔진을 만드는 수고가 필요하기 때문이다. 그렇다고 임의로 네이버 지도를 긁어오면 저작권 문제에 부딪힐 것이다. 오픈 API가 없다면 구글이나 네이버와 개별적으로 계약 관계를 맺고 연동을 위한 작업을 하는 등의 불편함과 비용을 감수해야 한다.


오픈 API와 매시업이 보여주는 청사진은 서비스 아이디어만 뛰어나면 누구라도 쉽게 기존의 인프라(오픈 API)를 이용해 유용한 사이트를 구축할 수 있다는 것이다. 반대로 오픈 API를 제공하는 업체는 자신들의 콘텐츠의 제공 범위를 넓히고, 협력 관계를 구축해 궁극적으로는 새로운 수익 모델을 만들 수 있을 것이다.


[그림2] XWIRE.COM, 지도는 네이버, 검색은 구글에서 가져왔다



오픈 API가 넘어야 할 벽



결과부터 말하면 작년 장밋빛 청사진에 비해서 지금 국내 오픈 API는 정체 상태나 마찬가지다. 매시업 사이트의 수도 예상보다 저조하고(그나마 있는 매시업도 사업이 되기는 힘든 데모 수준이다), NHN과 다음커뮤니케이션, 알라딘의 오픈 API 사이트를 제외하고는 오픈 API 개발과 관련된 자료를 찾아보기도 어렵다.


앞에서 언급한 오픈 API의 매력과 새로운 사업 모델로서의 매시업 서비스가 주는 장밋빛 환상에도 불구하고 국내 오픈 API가 시작도 해보기 전에 정체되어 있는 이유는 무엇일까?


[1] 기술적 측면


일단 어떤 기술이 널리 쓰이기 위해서 가장 중요한 조건은 사용하기 쉽고 편리해야 한다는 점이다. 국내 오픈 API 사이트들을 보면 제공하는 API는 비교적 간결하고 이해하기 쉽다. 하지만 오픈 API를 이용하기 위한 관련 라이브러리 제공에는 아직까지도 부족한 점이 많다.


국내보다 오픈 API를 먼저 시작한 야후의 경우 자바스크립트, 플래시, 닷넷, PHP, 파이썬, 루비 등을 직접적으로 지원하고 있으며 편리한 라이브러리와 함께 풍부한 문서를 제공하고 있다. 이에 비해 국내 오픈 API 사이트들은 API의 명세서만 간단명료하게 나열하고 있을 뿐 이를 쉽게 이용할 수 있는 라이브러리 제공은 아직까지 찾아보기가 힘든 형편이다.


물론 고급 개발자라면 이런 부분들은 알아서 해결할 수 있을 것이라고 생각할 수도 있다. 하지만 매시업의 주체는 재미난 아이디어를 가진 ‘어떤 누구’라도 될 수 있어야 한다. 기술적인 진입 장벽에 묻혀서 창의적인 아이디어를 살릴 기회를 날린다면 이는 매시업의 발전을 저해하는 요소로 작용하기 때문이다. 따라서 전문적인 웹 개발자가 아니라도 쉽게 매시업을 만들어 볼 수 있을 정도로 쉬운 인터페이스를 제공할 필요가 있다.


[2] 정책적 측면


앞에서 언급한 기술적 측면보다 더 중요한 것은 정책적 측면이다. 현재 국내에서 오픈 API를 이용하기 위해서는 다음과 네이버 모두 사용자 키를 생성하고 이를 이용해 API를 호출해야 한다. 현재 두 업체 모두 하루 질의 수를 5000번으로 제한하고 있다. 그리고 공개된 오픈 API의 사용을 엄격히 비상업적인 용도로만 제한하고 있다. 두 곳 모두 상업적인 용도의 이용을 원할 경우 별도의 협상을 원하고 있다.


이 정책은 오픈 API의 보급을 가장 저해하는 부분이다. 네이버나 다음이 자사의 서비스를 오픈 API를 통해 열었다고는 하지만, 이런 열린 정책이 언제까지 계속될 것인지 아무도 장담할 수 없기 때문이다. 매시업 사이트 입장에서는 좋은 아이디어로 성공적인 사업 모델을 만들어내도 언제든지 대형 포탈의 이권에 따라 휘둘릴 수 있는 상황이기 때문이다. 갑자기 오픈 API 사용에 막대한 사용료를 부가한다면 매시업 사이트 입장에서는 속수무책인 셈이다.


국내 매시업 사이트는 결국 오픈 API를 제공하는 일부 대형 포탈에 종속될 수 있는 상황이다. 비슷한 규모의 오픈 API를 제공하는 곳이 단 두 곳뿐이고, 아직까지 ‘베타’라는 이름을 내걸고 명확한 운영 원칙도 발표하지 않은 상태이다. 상업적인 이용에 대한 가격 정책도 공개적으로 알려진 바가 없고, 그때그때 상황에 따라 유동적일 것이다. 이 환경에서 매시업 사이트는 영속성을 보장할 수 없는 위험한 사업이 된다.


반대로 오픈 API를 제공하는 업체의 입장도 다분히 이해가 간다. NHN과 다음이 제공하는 오픈 API는 대부분의 자사의 콘텐츠를 찾아서 보여주는 검색 API이다. 현재의 오픈 API는 필요한 데이터만 구조화된 데이터(XML, JSON 등)에 담아서 보내기 때문에 이들 포탈의 주 수입원인 광고를 실을 여지가 없다. 콘텐츠를 널리 알리고 매시업 사이트를 아군(홍보자)로 끌어들이는 부가 효과가 있다고 하더라도, 결국 이들 포탈의 오픈 API 제공은 광고 수익을 줄이는 효과가 있다.


결국 매시업 사이트는 오픈 API의 영속성과 독립성(한 번 공개한 오픈 API를 서비스 제공 업체의 상황에 따라 언제든지 바꾸거나 폐지하는 상황을 방지)을 원하고, 오픈 API 제공자는 안정적인 수익 모델을 원하는 셈인데 아직까지는 이 두 요구사항이 맞아떨어지지 않고 있는 것이다.



현재의 대안은?



사실 오픈 API와 매시업의 성공 사례는 미국에서도 많지 않다. 매시업 관련 자료를 제공하는 ProgrammableWeb의 자료를 인용하면 현재 총 1455개의 매시업 사이트가 등록되어 있다. 하지만 실제로 제대로 된 수익 기반을 마련한 곳은 많지 않고 대부분은 초보적인 수준의 실험에 머물고 있다. 이런 와중에 오픈 API의 가장 성공적인 사례로 꼽히는 곳은 다름 아닌 아마존이다.


아마존은 아마존 웹서비스(AWS, Amazon Web Service, http://www.amazon.com/webservices)를 2002년 7월에 이미 공개하고 성공적인 수익 모델까지 만들어 냈다. 그 결과 현재 아마존은 14만 명의 개발자와 수십만 협력 업체가 공존하는 아마존 생태계를 만들어낼 수 있었다.


아마존 생태계의 성공 요인은 아마존 제휴사(affiliate)들에게 수익을 배분해 주었다는 사실에 있다. 아마존 오픈 API를 통해 상품을 검색하고, 이들 제휴사를 통해 책을 구입할 경우 제휴사들에게 매출의 일정 부분을 나누어주는 구조를 만들었다. 이에 따라 수십만 개의 업체가 아마존 API를 이용해 아마존이 직접 닿지 못하는 고객들에게까지 상품을 보여주고, 판매해서 수익을 만들 수 있는 인프라를 구축한 것이다.


국내에서도 유사한 가능성을 보고 오픈 API를 내놓은 곳이 알라딘이다. 명확한 수익 구조가 없는 네이버, 다음과는 달리 알라딘은 도서 검색이라는 오픈 API가 곧바로 도서 구매라는 수익과 연결되는 구조를 가지고 있다. 현재 알라딘도 수익 배분 모델(TTB)을 가지고 있다. 아마존처럼 다른 매시업 사이트들이 사용하기 쉬운 API와 개발 환경을 만들어준다면 충분히 승산이 있을 것이다.


아직 오픈 API를 공개하지 않았지만 국내 인터넷 쇼핑몰들은 오픈 API를 이용해 직접적인 이득을 볼 수 있다. 상품을 쉽게 검색할 수 있는 API를 제공하고, 제휴 사이트들에게 적절하게 수익을 배분해주면, 이들 제휴사를 통한 매출 상승효과가 있을 것이다. 이처럼 오픈 API는 단기적으로는 포탈보다는 쇼핑몰 회사들이 더 관심을 가져야하는 기술이 아닌가 싶다.



지도 기반의 매시업?



많은 사람들이 매시업의 킬러 애플리케이션으로 지도 기반 매시업을 이야기하고 있다. 실제로 지금까지 구현된 매시업의 절반 이상이 전부 구글 맵(Google Maps), 야후 맵(Yahoo Map), 버추얼 얼스(Virtual Earth), 네이버 맵과 같은 지도 기반 오픈 API를 바탕으로 다른 부가 정보를 제공하는 방식이다. 예를 들어 하우징맵스(http://www.housingmaps. com/)는 구글 맵의 지도를 바탕으로 각종 부동산 정보를 제공한다.


[그림3]HOUSINGMAP.COM 지도 위에서 부동산 정보를 제공


하지만 난립하는 지도 기반 매시업들을 보고 있으면 매시업에 대한 또 다른 의구심이 든다. 누구나 아이디어만 있으면 쉽게 구축할 수 있는 바꿔 말해서 매시업 사이트는 진입 장벽이 매우 낮다는 말이다. 누구나 좋다고 생각하는 간단한 아이디어라면, 다른 사람들도 얼마든지 같은 오픈 API를 이용해 짧은 시간 안에 비슷한 사이트를 구축할 수 있기 때문이다.


매시업 사이트는 결코 ‘핵심’이 없이 다른 사이트의 정보를 적절히 짜깁기하는 사이트가 아니다. 매시업의 개념은 어디까지나 핵심 기능만 집중적으로 개발하고 부가적인 기능은 외부 데이터를 이용하는 데 있다. 예를 들어 지도 정보를 가져와서 부동산 정보를 제공하는 매시업 사이트를 만들고 싶다면, 부동산 정보를 잘 정리해서 보여주는 핵심 역량을 갖춰야만 성공할 수 있다. 그렇지 않다면 멋진 아이디어로 출발한 블루 오션이 순식간에 레드 오션으로 바뀌는 경험을 하게 될 것이다.


지도 서비스는 어느 정도 수익 모델이 마련된 상태이다. 구글 맵의 경우 지도를 검색하면 스폰서 링크 등을 통해서 지도에 광고를 보여주고 있다. 아직 구글 맵 API를 통한 지도에는 광고를 보여주지 않고 있지만, 이는 광고를 통해 충분히 수익을 낼 수 있는 부분이다. 키워드를 통한 광고보다 특정 지역 광고가 더 광고 대상을 정확하게 지정할 수 있기 때문이다.


현재 오픈 API의 또 다른 문제점은 오픈 API에 상응하는 오픈 플랫폼이 없다는 사실이다. 매시업 사이트가 아닌 일반 개인들은 오픈 API의 혜택을 매시업 사이트를 통해 간접적으로 얻을 수밖에 없다. 예를 들어 앞서 소개한 블로그 작성 오픈 API를 이용하면 데스크톱 용 리치 어플리케이션에서 글을 작성하고 블로그에 바로 전송할 수 있지만, 아직까지 데스크톱에서 오픈 API를 쉽게 이용할 수 있는 프로그램은 많이 나와 있지 않다.


한 걸음 더 나아가면 PDA나 개인화된 단말에서도 풀브라우징 없이 원하는 정보를 쉽게 읽어오는데 오픈 API가 유용할 수 있다. 오픈 API는 렌더링에 필요한 HTML이나 CSS 같은 부가 정보 없이 원하는 정보를 정확히 주기 때문이다. 이처럼 다양한 장비에서 웹 접근성 향상을 위한 방안으로서 오픈 API도 적극적으로 검토해야 할 것이다.



■ 참고 문헌


[1] 알라딘 도서 상품 검색 API

http://www.aladdin.co.kr/ttb/wguide.aspx?pn=apiguide

[2]네이버 오픈API

http://openapi.naver.com/index.nhn

[3]다음 오픈 API

http://dna.daum.net/apis/about

[4]Yahoo! Serch Web Services

http://developer.yahoo.com/search/




























Posted by 버터백통
Computing2008. 5. 13. 15:05
 

백과사전 연관이미지

인터넷에 연결된 PC나 다른 장비를 구동시켰을 때 단순히 데스 크톱에 들어있는 자원에만 연결되는 것이 아니라, 훨씬 강력한 가상 컴퓨터의 자원을 공유하 는 것을 의미하는 그리드 컴퓨팅에 대하여 알아봅니다.



그리드 컴퓨팅이 e비즈니스 환경 바꾼다



지난 10년간 웹이 개인과 기업의 업무 환경을 획기적으로 변화시키는 견인차 역할을 해왔다면 이제는 ‘그리드(Grid)’라는 새로운 컴퓨팅 플랫폼이 차세대 인터넷의 새로운 대안으로 부상 하고 있다. 최근 새로운 화두로 부상하고 있는 ‘그리드 컴퓨팅’은 과연 무엇을 의미하는가? 그리드 컴퓨팅이란, 한마디로 인터넷에 연결된 PC나 다른 장비를 구동시켰을 때 단순히 데스 크톱에 들어있는 자원에만 연결되는 것이 아니라, 훨씬 강력한 가상 컴퓨터의 자원을 공유하 는 것을 의미한다. 가상 컴퓨터에는 컴퓨팅 파워, 스토리지, 애플리케이션, 데이터, I/O 디바 이스 등이 포함되며 인터넷을 통한 곳이면 어디나 분산될 수 있다. 다시 말해, 그리드 컴퓨팅 이란 지리적으로 분산된 고성능 컴퓨터, 대용량 저장장치, 첨단 장비 등의 자원을 고속 네트 워크로 연결해 상호 공유하고 이용할 수 있도록 하는 차세대 디지털 신경망 서비스라 정의 할 수 있겠다. 그리드 컴퓨팅은 인터넷을 자연스럽게 다음 단계로 진화시켜 분산되어 있는 컴퓨터 시스템들 간의 자원을 공유하는 가상 조직으로 발전시켜 나가게 된다. 이미 과학 및 교육계에서는 그리 드 컴퓨팅이 현실화되고 있다. 그러나 기업의 입장에서는 그동안 컴퓨터 장비를 스스로 소유 하거나 대여해 사용하는 것에 익숙해 있었기 때문에 가상 컴퓨터를 활용한다는 개념이 아직은 피부에 와닿지 않을 수 있다. 비즈니스를 하는 기업의 입장에서 그리드 컴퓨팅이 갖는 매력을 꼽는다면 기존 기술사용 경비 에 비해 아주 적은 비용으로 훨씬 더 큰 용량의 컴퓨팅 파워를 사용할 수 있다는 점이다. 이 점이 바로 CEO나 CFO들이 그리드 컴퓨팅에 대하여 다시 한번 생각해 보게 되는 요인이다.



강력한 가상 컴퓨터 성능 및 융통성 제공



오늘날 모든 종류의 비즈니스를 영위하기 위해서는 탄탄한 정보 기술 인프라와 전세계적인 네 트워킹이 필수적인 요소가 되었다. 그러나 기업인과 회사 경영자들 입장에서는 아직도 한가지 풀리지 않는 걱정거리가 있다. 이는 대부분의 솔루션 성능이 많이 개선되고 있지만 가격 부담 은 여전히 남아있다는 점이다. 기술 자원과 그에 상응한 원가를 상호 공유할 수 있다면 기업에게는 아주 매력적인 제언이 될 것이다. 그리드 컴퓨팅을 이용하면 협업체계의 조직들도 혼자 일할 때보다 훨씬 더 강력한 가 상 컴퓨팅 시스템을 큰 돈 들이지 않고도 쉽게 이용할 수 있게 된다. 대다수 기업들의 또 다른 우려는 시스템의 설치에 관한 것이다. 일반적으로 대규모 설치 작업 은 여러 부서들과 예산에 대한 사전 조율이 필요하며, 이를 결정하기까지 장시간의 의사 결정 과정을 거쳐야 한다. 또 일단 합의가 되더라도 새로운 변수가 발생하면 이에 따르는 조치가 부수적으로 필요하다. 그리드 컴퓨팅은 비즈니스에 변화가 발생할 때마다 컴퓨팅의 조건을 유 연하게 변경해 준다는 이점을 지닌다.



그리드 컴퓨팅 접근법



아직도 그리드 컴퓨팅과 분산 컴퓨팅을 서로 혼동하는 사람들이 있다. 그리드 컴퓨팅은 단지 분산된 컴퓨팅 자원들을 선정하여 이를 공유하는 것을 의미한다. 기업들은 IT 인프라의 유행 에 따라서 중앙집중화 또는 분산컴퓨팅 환경을 되풀이 해왔다. 분산 컴퓨팅은 1980년대에 절 정에 달했으나 최근에도 많은 기업들이 곳곳에서 광범위하게 사용하고 있다. 최근 서버 통합( Server Consolidation) 및 집중화 쪽으로 진행되고 있는 추세이지만 여전히 많은 정보 담당 임원들은 선뜻 이를 채택하지 못하고 있는 게 사실이다.



그리드 컴퓨팅은 하나의 솔루션



그리드 컴퓨팅은 물리적으로 분산된 가상 조직 상호간 및 내부에서 자원을 공유하고 문제를 해결하는 솔루션이다. 컴퓨터, 데이터, 소프트웨어, 저장시스템 및 다른 자원에 직접 접속할 수 있으나, 누가 무엇을 어떤 조건으로 공유할 수 있느냐에 대해서는 엄격한 통제와 명확한 규칙이 적용된다. 중앙집중 환경, 분산 컴퓨팅 환경 또는 혼합 환경이건 간에 조직들은 기존 컴퓨팅 자원을 효율적으로 활용할 수 있게 해주면서 필요에 따라 다른 조직의 자원에도 추가 로 접속할 수 있도록 해준다는 장점이 있다.



학계에서 기업으로



대학과 연구소들은 그리드 컴퓨팅 환경으로의 전이를 선도하고 있으며, 인터넷과 유닉스를 사 용하는 기업들은 학계 및 연구기관의 사례를 토대로 많은 것을 배워나가고 있다. 영국의 옥스 포드, 캠브리지, 에딘버러, 사우스햄턴 등의 많은 주요 대학들이 슈퍼컴퓨터를 초고속망으로 서로 연결한 ‘영국 국가 그리드(National Grid)’를 대표적인 예로 꼽을 수 있다. 사용이 허 가된 사용자들은 해당 컴퓨터의 소재에 상관없이 이 그리드에 속하는 모든 자원 중 어느 것이 나 이용할 수 있는 것이다. 영국 정부는 이들 그리드 컴퓨터 자원을 제약, 화학, 디자인 등의 기술 집약적 분야의 기업들에 우선 개방하고 궁극적으로는 다른 일반 기업들에게도 개방할 예 정이다. 미국의 경우, 국립과학재단(National Science Foundation)이 다양한 분야의 연구기관 들을 위해 세계 최고 성능의 집합 컴퓨팅 시설인 테라그리드(TeraGrid ;Distributed Terascal e Facility)를 구축하고 있다. 또 일리노이 대학 및 샌디에고 대학 슈퍼컴퓨팅 센터, 아르곤 국립연구소, 칼텍(Cal Tech) 등은 케스트(Qwest)사에서 제공하는 40기가비트 광섬유 파이프로 연결된 13.5테라 플롭스의 프로세싱 파워와 700테라 바이트의 저장 기능을 갖게 될 것이다.



그리드 컴퓨팅의 필요성



이는 종전에 해결할 수 없었던 복잡하고 어려운 문제를 해결하는 열쇠가 될 수 있다. 미국 국 립과학재단 망에 연결된 센터 중 하나인 샌디에고 대학에서는 ‘뇌 지도(매칭)’ 연구 프로젝 트를 추진중이다. 이 연구는 노인 치매, 정신 이상, 파킨슨 병, 여러 가지 경화증 및 모든 신 경 질환을 보다 잘 이해하고 치료 방법을 개발할 수 있게 해 줄 것이다. 뇌 지도 연구에서는 막대한 분량의 저장 시스템이 필요한 자기 공명 영상(MRI)을 이용한다. 서로 다른 뇌의 영상을 비교하기 위한 MRI 이미지들을 효과적으로 사용하기 위해서는 여러 곳 의 센터들이 서로 협력해야 한다. 이러한 것이 그리드 컴퓨팅의 진가를 발휘할 수 있는 완벽 한 예라 할 수 있다.



그리드 컴퓨팅의 적용



그리드 컴퓨팅은 마치 우리가 사용하는 전기와 같이 사용량에 따라 요금을 지불하는 대규모 e -유틸리티 업체들이 인터넷상에서 제공하는 주문형 가상 컴퓨팅 자원과 서비스를 사고 팔 수 있는 능력을 제공하는 e-소싱을 보다 유연하고 효율적으로 만들어 줄 것으로 보인다. 이는 e-유틸리티 업체의 운영자들이 컴퓨팅 성능과 자원을 가상 공간에서 공유하고 그 결과, 자원을 최대한 효율적으로 활용하고 관리할 수 있게 해준다. 이를 상업적으로 적용하기 위해 서는 고도의 호환성을 확보하고, 개방형 표준을 제정하기 위해 업계의 기존 경쟁사들 간에 협 력하는 것이 필요하다. 인터넷이 성공할 수 있었던 것은 모든 사람이 사용하는 일련의 개방 프로토콜에 대해 상호 합 의했기 때문이다. 따라서 그리드 컴퓨팅의 성공을 위해서 업계간 서로 다른 컴퓨터들이 데이 터와 파일을 공유할 수 있고, 각자의 컴퓨팅 자원에 대하여 서로 통신할 수 있어야 하며, 더 욱 중요한 것은 보안시스템을 규제하는 프로토콜을 정의하고 합의해야 한다. 그리드 컴퓨팅은 인터넷을 통해 가능하게 된 ‘정보의 공유’ 단계에서 ‘컴퓨팅 자원 공유’ 의 새로운 경지로 이동시키는 것이다. 투자 예산은 한정되어 있지만 컴퓨팅 요구는 계속 증대 되고 있는 현 시점에서 그리드 컴퓨팅은 새로운 밀레니엄의 기술 추세로 자리 잡을 수 있는 적기에 도달하고 있다고 해도 과언이 아닐 것이다.
Posted by 버터백통