Saturday, December 12, 2009

이클립스(eclipse)를 이용해서 C/C++ 프로그래밍 환경설정.

http://mudchobo.tomeii.com/tt/73


이클립스(eclipse)를 이용해서 C/C++ 프로그래밍 환경설정.2007/08/11 23:06 / C와 C플러스플러스
google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);
C공부를 다시 해야할 것 같아서 IDE를 설치해야할 일이 생겼습니다. Visual Studio로만 C/C++을 해온 저는 유닉스 환경에서 해야해서 다른 IDE를 찾고 있었습니다. 이클립스를 다운 받을 때 C/C++용도 있었던 것 같았습니다.그래서 이클립스 홈페이지가니 있더군요. 여기저기 수소문 끝에 유닉스환경에서 할 수 있는 C프로그래밍을 윈도우에서도 구축할 수 있더군요. 이런게 있을 줄이야...우선 이클립스를 받습니다.http://www.eclipse.org/downloads/여기 사이트를 들어가시면 Eclipse IDE for C/C++ Developers 라고 있습니다.운영체제에 맞는 것을 받으시구요. Linux와 MacOS도 지원하는군요!받은다음에 적당한 폴더에 압축을 풉니다. 자 그다음 gcc, make 등을 구해야하는데 두가지 종류가 있더군요.(리눅스는 안해줘도 될꺼같군요)Cygwin랑 MinGW 가 있는데 MinGW로 해보겠습니다. (Cygwin은 이걸로 만든 실행파일을 실행할때 dll파일이 필요하다고 하더군요)이곳에서 MinGW를 받습니다.http://www.mingw.org/download.shtml받은 뒤 실행하면 다음신공하다보면 뭐 설치할 꺼냐고 묻는데 전 잘몰라서 c관련된 컴파일러는 다 설치했습니다. make랑 g++랑 objective c 컴파일러같은거 이거 3개 체크하고 설치했습니다.그런다음에 패스를 잡아줘야합니다. gcc랑 make 등의 파일이 어디서든 실행이 되어야합니다.패스잡는것은 비스타기준입니다.컴퓨터(오른쪽버튼누른뒤 속성) -> 고급시스템설정 -> 고급탭에서 환경변수 클릭!XP에서도 비슷하게 속성누르면 있을껍니다.집에 알집이 깔려있다면 위에 알집이 PATH로 잡혀있을껍니다. 요고이 지워줍니다. 그리고 이스트소프트를 막 욕합시다. 시스템변수에 Path를 찾습니다. 그다음 MinGW/bin폴더를 패스를 잡아줍니다.ex) ......;C:\MinGW\bin //c:\MinGW는 MinGW설치폴더패스가 제대로 잡혔는지 보려면 시작 -> cmd를 실행해서 gcc를 실행해봅시다. gcc: no input files라고 나오면 잘 잡힌겁니다.그리고 이클립스에서는 make.exe파일을 make할 때 쓰는데 MinGW는 mingw32-make.exe파일이 make파일입니다. 그래서 이름을 변경하던가 이클립스 설정을 변경하던가 합니다.첫번째 방법은 mingw32-make.exe파일을 똑같은 폴더에 복사해서 새이름으로 make로 저장합니다.두번째 방법은 이클립스에서 변경하는 방법입니다.Window -> Preferences -> C/C++ -> New CDT project wizard -> Makefile project를 보면
중간에 빨간상자부분이 있는데 저 부분을 mingw실행파일에 맞게 바꿔주면 됩니다.둘중에 하나만 하면 됩니다.이제 설정은 다 됐습니다. 언제나 그렇듯이 설정이 끝나면 헬로우 월드를 찍어봅시다-_-;
Toolchain은 MinGW로 선택을 합시다. 프로젝트이름은 HelloWorld로...-_-;HelloWorld프로젝트이름에 오른쪽버튼을 눌러서 New -> Source File 해서 HelloWorld.c 파일을 생성합시다.
HelloWorld.c (Language : c)
#include int main(void){ printf("Hello World!"); return 0;} 저렇게 적읍시다. 아 그리고 마지막 } 이거다음에 한칸 띄워주고 그다음칸을 한칸더 생성해줍시다. 그냥 }스페이스바하고 엔터 하고 저장합시다. 안그러면 no newline at end of file 라는 워링이 뜹니다-_-;검색해보니 뭐 무슨 어쩌구 설명을 하는데 잘모르겠습니다-_-;컴파일 단축키로 컴파일해봅시다. 저장하고 Ctrl + B를 누릅시다.컴파일이 완료되면 run단축키인 Ctrl + F11을 누릅시다.그러면 아래에 Console탭에 Hello World! 라고 뜰껍니다.컴파일할 때 object파일인 *.o도 만들고 윈도우실행파일인 *.exe도 만들어줍니다.
머드초보 이 작성.
TAGS , ,

Thursday, December 10, 2009

Unix Domain Socket - UDP

http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/Unix_Domain_Socket_UDP

Unix Domain Socket - UDP

윤 상배

dreamyun@yahoo.co.kr



1절. 소개

우리는 이미 이전에 Unix Domain Socket를 이용한 IPC 에서 Unix Domain Socket 에 대한 기본적인 내용을 다루었었다.

그때는 SOCK_STREAM 을 이용한 연결지향의 Socket 를 사용했었는데, internet 소켓과 마찬가지로 UDP 특성 Socket 를 사용할수도 있다. 이번 글 에서는 UDP 를 이용한 Unix Domain Socket 에 대해서 알아보도록 하겠다.


2절. Unix Domain Socket (UDP)

2.1절. 특징

internet socket 상에서 UDP 를 다룰때, 관심을 가지는 특성이 비연결지향성이며, 그런이유로 데이타를 유실할수도 있으며, 데이타의 순서가 바뀔수 있다. 그러므로 중요 데이타 통신을 위한 프로토콜로는 UDP 가 적합하지 않다. 라는 점이 될것이다.

그러나 Unix Domain 영역의 UDP 는 internet 영역과는 특성이 좀 다르다고 할수 있다. Unix Domain 에서의 UDP 는 일종의 PIPE 와 같은 형태로 다루어진다. 게다가 동일한 같은 시스템 영역에서의 데이타 교환이므로 패킷이 유실되거나, 순서가 뒤바뀌는 등의 문제는 전혀 발생하지 않을거라고 장담할수 있다.


2.2절. 메시지 전달 방식

internet socket 에 전달되는 패킷들이 헤더 + 바디 로 이루어지는 것과 마찬가지로, Domain 영역에서의 데이타도 헤더 + 바디 로 이루어진다. 그러나 헤더의 구성요소는 매우 다르다.

Domain 영역에서의 데이타 통신은 알겠지만 "지정된 파일" 을 통해서 이루어지게 된다. 이 파일로 데이타를 쓰고/읽는 작업을 하며, 이것은 마치 FIFO 와 같은 pipe 형태로 전달된다.

그러므로 헤더영역에는 다른 기타의 정보가 들어가는게 아닌 통신을 위한 파일정보 가 들어가게 된다. /usr/include/sys/un.h 의 sockaddr_un 구조체를 보면 확실히 이해가 가능할 것이다.

struct sockaddr_un {     __SOCKADDR_COMMON (sun_);     char sun_path[108];     /* Path name.  */ }; 			
위의 구조체를 보면, sockaddr_in 과는 달리 단지 파일의 위치 지정을 위한 108바이트 크기의 배열변수만 있는것을 알수 있다.


2.3절. 서버/클라이언트 구성방식

internet socket 을 이용한 서버/클라이언트 구성과는 달리 Domain 영역에서 udp 를 이용한 서버/클라이언트의 구성은 주의해야 될 몇가지 점이 있다.

가장 기본적인 문제는 Domain 영역에서의 udp 는 Internet 영역에서의 udp 와는 달리 경로를 지정 할수 없다는 단점을 가진다. 이것은 다중의 클라이언트를 받아들이는 서버의 경우 문제가 될수 있다.

다음은 Internet 영역의 udp 서버/클라이언트 모델의 경우이다.

                   +----------+           +------- | Client 1 | address 1           |        +----------+  +------+ |        +----------+  | 서버 |-+------- | Client 2 | address 2   +------+ |        +----------+           |        +----------+           +------- | Client 3 | address 3                    +----------+ 			
Internet 영역에서의 서버는 단지 하나의 소켓지정번호(endpoint) 만을 가지고도 다중의 클라이언트와의 연결이 가능하다. 그 이유는 Internet 영역에서 통신을 할때 UDPIP 상위 프로토콜이므로 IP 프로토콜의 헤더를 통해서 해당 메시지가 어디에서 출발했는지 알수 있기 때문이다. 그러므로 굳이 select(2) 나 poll(2) 같은 작업없이 단지 하나의 소켓지정번호로 통신이 가능해진다.( UDP 프로그래밍의 기초를 참고하라.)

그러나 Unix Domain 영역의 udp 소켓이라면 이야기가 달라진다. 기본적으로 가질수 있는 정보가 "파일 경로" 뿐이므로 다중의 클라이 언트로 부터 메시지를 받았을때 어떤 클라이언트로 부터 메시지가 전달되었는지를 알수가 없는 것이다. 물론 이것은 데이타 영역에 클라이언트를 식별할수 있는 어떤 정보를 보냄으로써 해결할수 있긴 하겠지만, 설사 그렇다 하더라도 서버는 다중의 클라이언트중 원하는 클라이언트(client)로 메시지를 보낼방법이 없다. 만약 다중의 클라이언 트가 떠있는 상태에서 메시지를 보낸다면 누가 먼저 읽을지 예측할수가 없게된다.

이문제를 해결하기 위해서는 각 클라이언트 마다 통신을 위한 각각의 소켓지정파일 을 생성할수밖에 없다. 이것은 FIFO 에서 서버/다중클라이언트 를 구성하기 위한 방법과 마찬가지이다.

                  +----------+               +---| Client 1 |  +------+     |   +----------+  |      |-----+   +----------+  | 서버 |---------| Client 2 |  |      |-----+   +----------+  +------+     |   +----------+                   +---| Client 3 |                   +----------+ 			
결국에는 Domain 영역에서 udp 소켓을 사용하기 위해서는 select, poll 등을 써야만 한다는 결론에 도달한다.

여기에서 한가지 궁금한점이 문득 생길것이다. Domain 영역 UDP 소켓 에서의 다중클라이언트를 받아들이기 위한 서버의 제작을 위해서는 그럼 클라이언트의 숫자만큼 소켓파일을 생성시켜야한다는 뜻인데, 그렇다면 서버는 어떻게 클라이언트가 접근할줄 알고 클라이언트와 서버 모두가 알수 있는 소켓파일을 생성할것인가 ?

이문제의 해결방법은 여러가지가 될것이다. 마치 internet 의 TCP 소켓이 다중의 연결을 받아들이기 위해서 accept(2) 하는 하나의 endpoint 소켓을 두는 것처럼, Domain 영역에서도 하나의 endpoint 파일을 두는 것이다. 물론 이 endpoint 파일의 이름은 서버와 클라이언트간에 약속이 되어 있어야 할것이다.

그러먼 서버는 최초에 endpoint 를 위한 소켓파일을 하나 생성하고 이것을 통해서 클라이언트가 접근하면 적당한 이름으로 새로운 소켓파일을 만든다음에 이 파일이름을 클라이언트에게 전달해서 클라이언트가 전달받은 파일이름으로 쓰기를 하도록 하면 된다.


2.3.1절. 예상과는 달리 사용하는게 좀 번거롭군요 ?

예상과는 달리 다중의 클라이언트를 받아들이도록 Domain 영역 udp 소켓을 구성하는게 좀 까다롭다라는 생각이 들수도 있을 것이다.

그러나 어차피 내부 시스템에서의 통신용이라면 대부분의 경우 여러개의 클라이언트가 붙는다고 하더라도, 그 클라이언트가 정해져 있는 경우가 대부분이다. 그러므로 그냥 각 클라이언트 마다 어떤 파일을 통신에 쓰라고 아예 지정해주면 된다. 그러면 단지 select 나 poll 만을 돌림으로써, 간단하게 서버/클라이언트 프로그래밍이 가능하다.

또한 Domain 영역에서의 TCP 소켓과는 달리 다소 복잡한 연결과 연결대기를 위한 작업이 필요가 없으므로 코딩하기도 간편하다는 장점도 가지고 있다. 또한 패킷단위로 주고 받음으로 직관적으로 이해하기 쉬운 코드를 만들수 있다는 장점도 가진다.


2.4절. 예제 코드

그럼 예제 프로그램을 만들어 보도록 하겠다. UDP 프로그래밍의 기초 에서 다루었던 덧셈 프로그램인 sum_server.c 와 sum_client.c 를 Domain 영역에서 동작하도록 변경시킬 것이다. 위의 프로그램들을 참조하면서 코딩하도록 하자.

프로그램자체는 일반적인 Internet UDP 소켓 프로그램과 거의 동일함으로 이해하는데 이해가 없을것이다.


2.4.1절. 서버프로그램

예제 : sum_server.c

#include  #include  #include  #include  #include  #include  #include  #include  #include   struct data {     int a;     int b;     int sum; }; int main(int argc, char **argv) {     int sockfd;     int clilen;     struct data mydata;     struct sockaddr_un clientaddr, serveraddr;      sockfd = socket(AF_UNIX, SOCK_DGRAM, 0);      if (sockfd < href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/manSearch?google=none&name=perror">perror("socket error : ");         exit(0);     }         unlink(argv[1]);      bzero(&serveraddr, sizeof(serveraddr));     serveraddr.sun_family = AF_UNIX;     strcpy(serveraddr.sun_path, argv[1]);      if (bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/manSearch?google=none&name=perror">perror("bind error : ");         exit(0);     }     clilen  = sizeof(clientaddr);        while(1)     {         recvfrom(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&clientaddr, &clilen);          printf("%d + %d = %d\n", mydata.a, mydata.b, mydata.a + mydata.b);             sendto(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&clientaddr, clilen);     }     close(sockfd);     exit(0); } 				


2.4.2절. 클라이언트 프로그램

예제 : sum_client.c

// 클라이언트 아래와 같이 하면 안됩니다.  // 서버에서 보낼 때, 클라이언트가 바인드해야 정보를 받을 수 있습니다.  // 이 글을 보시는 분은 적절한 코드로 수정해 주시기 바랍니다.  // 그외 기타 간단한 오타 및 타입 오류는 제가 수정하고 갑니다. - 용운  #include  #include  #include  #include  #include  #include  #include  #include  #include   struct data {     int a;     int b;     int sum; }; int main(int argc, char **argv) {     int sockfd;     struct sockaddr_un serveraddr;     int  clilen;     struct data mydata;      sockfd = socket(AF_UNIX, SOCK_DGRAM, 0);      if (sockfd < href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/manSearch?google=none&name=perror">perror("exit : ");         exit(0);     }      bzero(&serveraddr, sizeof(serveraddr));     serveraddr.sun_family = AF_UNIX;     strcpy(serveraddr.sun_path, argv[1]);     clilen = sizeof(serveraddr);      mydata.a = atoi(argv[2]);     mydata.b = atoi(argv[3]);     mydata.sum =0;      if (sendto(sockfd, (void *)&mydata, sizeof(mydata), 0,                  (struct sockaddr *)&serveraddr, clilen) < href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/manSearch?google=none&name=perror">perror("send error : ");         exit(0);     }     if (recvfrom(sockfd, (void *)&mydata, sizeof(mydata), 0,                 (struct sockaddr *)&serveraddr, (socklen_t *)&clilen) < href="http://www.joinc.co.kr/modules/moniwiki/wiki.php/manSearch?google=none&name=perror">perror("recv error : ");         exit(0);     }     printf("result is : %d\n", mydata.sum);       close(sockfd);     exit(0); } 				


2.4.3절. 테스트

먼저 서버를 띄운다음에, 클라이언트를 통해서 더하고 싶은 2개의 숫자를 인자를 통해서 넘기면 된다.

[root@localhost src]# ./unix_domain_udp_server /tmp/test_udp  5 + 6 = 11 7 + 1024 = 1031 ... 				
[root@localhost src]# ./unix_domain_udp_client /tmp/test_udp 5 6 [root@localhost src]# ./unix_domain_udp_client /tmp/test_udp 7 1024 				


3절. 결론

다른 Domain 영역 소켓과 마찬가지로, IPC 대용으로 사용가능하다. TCP 소켓이 IPC 대용으로 사용하기가 비교적 복잡하다는 단점과, 오늘 알아본 UDP 도메인 소켓과 아주 비슷한 FIFO 가 범용성이 좀더 떨어지는 단점을 보완한 적당하고 편리하게 사용가능한 IPC 로써의 용도를 제공해 줄것이다.




discussion by DISQUS

Add New Comment

[펌] UDS (UNIX 도메인소켓) 을 이용한 IPC

http://altibase.egloos.com/466834

[펌] UDS (UNIX 도메인소켓) 을 이용한 IPC

Unix Domain Socket(이하 UDS) 는 socket API를 수정없이 이용며,
port 기반의 Inernet Domain Socket에 비해서 로컬 시스템의 파일시스템을
이용해서 내부프로세스간의 통신을 위해 사용한다는 점이 다르다고 할수 있다.

ls 를 이용해서 통신을 위해서 만들어진 파일을 보면 다음과 같은 모습을
보인다.

[yundream@localhost tmp]$ ls -al
srwx------ 1 root nobody 0 12월 14 21:16 .fam_socket


보면 파일타입에 "s" 가 붙어 있는걸 알수 있으며, 파일사이즈가 0으로 되어 있는
걸 알수 있다. 왜냐하면 FIFO와 마찬가지로 메시지가 파일로 쌓이지 않고
커널로 전달되어서 커널에서 처리하기 때문이다.


파일을 통해서 통신을 하며, 커널내부에서 메시지를 관리한다는 점에서
FIFO와 매우 유사한면을 보여주지만, FIFO와는 달리 양방향 통신이 가능하다는
특징을 가지고 있다. 그러므로 다중의 클라이언트를 받아들이는 서버/클라이언트
모델을 만들기가 매우 쉽다.

또한 Inet 소켓을 통한 외부통신에 비해서 2배 이상의 효율을 보여준다라는
장점을 가지고 있다.


많은 경우 약간 복잡한 내부프로세스간 통신을 해야된다고 했을때 UDS을 많이
사용한다. INET 계층에서의 통신이 TCP/IP 4계층을 모두 거치는것과는
다르게, UDS 은 어플리케이션 계층에서 TCP 계층까지만 메시지가 전달되고,
다시 곧바로 어플리케이션 계층으로 메시지가 올라가게 된다. TCP/IP 계층에 대한
자세한 내용은 TCP/IP 개요(2)를 참고 하기 바란다.



위에서 INET 소켓보다 2배이상의 효율을 가진다고 했는데,
4계층의 레이어를 모두 거쳐야하는 INET 소켓에 비해서 단지 2개의 레이어만
사용한다는 점도 그 이유중 하나로 작용한다.


쏘쓰 코드는 다중연결서버 만들기(1)의 zipcode_multi.c 와
셈플로 알아보는 소켓프로그래밍(1)의 zipcode_cli.c 를 사용하도록할것이다.


예제: zipcode_local.c



#include 

#include
#include
#include
#include
#include

#include
#include

int main(int argc, char **argv)
{
int server_sockfd, client_sockfd;
int state, client_len;
pid_t pid;

FILE *fp;
struct sockaddr_un clientaddr, serveraddr;

char buf[255];
char line[255];

if (argc != 2)
{
printf("Usage : ./zipcode [file_name]\n");
printf("예 : ./zipcode /tmp/mysocket\n");
exit(0);
}

memset(line, '0', 255);
state = 0;

if (access(argv[1], F_OK) == 0)
{
unlink(argv[1]);
}
// 주소 파일을 읽어들인다.
client_len = sizeof(clientaddr);
if((fp = fopen("zipcode.txt", "r")) == NULL)
{
perror("file open error : ");
exit(0);
}

// internet 기반의 스트림 소켓을 만들도록 한다.
if ((server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
{
perror("socket error : ");
exit(0);
}
bzero(&serveraddr, sizeof(serveraddr));
serveraddr.sun_family = AF_UNIX;
strcpy(serveraddr.sun_path, argv[1]);


state = bind(server_sockfd , (struct sockaddr *)&serveraddr,
sizeof(serveraddr));
if (state == -1)
{
perror("bind error : ");
exit(0);
}

state = listen(server_sockfd, 5);
if (state == -1)
{
perror("listen error : ");
exit(0);
}


printf("accept : \n");
while(1)
{
client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,
&client_len);
printf("test test\n");
pid = fork();
if (pid == 0)
{
if (client_sockfd == -1)
{
perror("Accept error : ");
exit(0);
}
while(1)
{
memset(buf, '0', 255);
if (read(client_sockfd, buf, 255) <= 0)
{
close(client_sockfd);
fclose(fp);
exit(0);
}

if (strncmp(buf, "quit",4) == 0)
{
write(client_sockfd, "bye bye\n", 8);
close(client_sockfd);
fclose(fp);
break;
}

while(fgets(line,255,fp) != NULL)
{
if (strstr(line, buf) != NULL)
write(client_sockfd, line, 255);
memset(line, '0', 255);
}
write(client_sockfd, "end", 255);
printf("send end\n");
rewind(fp);
}
}
}
close(client_sockfd);
}






다음은 클라이언트 프로그램이다.

예제: zipcode_cli_local.c



#include 
#include

#include
#include
#include
#include
#include

#include


int main(int argc, char **argv)
{

int client_len;
int client_sockfd;

FILE *fp_in;
char buf_in[255];
char buf_get[255];

struct sockaddr_un clientaddr;

if (argc != 2)
{
printf("Usage : ./zipcode_cl [file_name]\n");
printf("예 : ./zipcode_cl /tmp/mysocket\n");
exit(0);
}


client_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (client_sockfd == -1)
{
perror("error : ");
exit(0);
}
bzero(&clientaddr, sizeof(clientaddr));
clientaddr.sun_family = AF_UNIX;
strcpy(clientaddr.sun_path, argv[1]);
client_len = sizeof(clientaddr);
if (connect(client_sockfd, (struct sockaddr *)&clientaddr, client_len) < 0)
{
perror("Connect error: ");
exit(0);
}
while(1)
{
printf("지역이름 입력 : ");
fgets(buf_in, 255,stdin);

buf_in[strlen(buf_in) - 1] = '0';
write(client_sockfd, buf_in, 255);
if (strncmp(buf_in, "quit", 4) == 0)
{
close(client_sockfd);
exit(0);
}
while(1)
{
read(client_sockfd, buf_get, 255);
if (strncmp(buf_get, "end", 3) == 0)
break;

printf("%s", buf_get);
}
}

close(client_sockfd);
exit(0);
}







기존의 INET 버젼의 프로그램과 비교해 보면 고작 3줄 정도만 수정되었음을
알수 있을것이다. 단지 소켓 구조체가 sockaddr_un 으로 바뀌고,
AF_INET 대신 AF_UNIX 를 그리고 port 번호대신에 파일명을 사용했음을
알수 있다.


나머지의 모든 코드는 INET 코드와 완전히 같다. 그러므로
Unix Domain Socket 를 사용하면 Inet Domain Socket 와 코드 일관성을
유지할수 있으며, 동일한 기술을 사용해서 프로그래밍을 할수 있다.


또한 다른 대부분의 IPC 설비들이, 범용적으로 사용하기에는 부족한 여러가지
단점들을 가진반면(단방향 이거나, 읽기만 가능하다거나, 제어하기가 어려운)
UDS는 매우 범용적인 IPC 로써 사용가능하다라는 장점을 가지고 있다.


실제로 X 서버 같은경우에 외부에서의 접근시에는 INET 연결을 내부에서의
연결을 위해서는 UDS 를 사용한다. 이밖에도 mysql, pgsql, KDE, Gnome 과 같은
대부분의 서버프로그램이 내부통신을 위해서 UDS 를 사용한다.

Thursday, December 3, 2009

나도 꼭 이렇게 ㅋㅋㅋ![매달 말일은...월급일입니다...


나도 꼭 이렇게 ㅋㅋㅋ!

=*********************


매달 말일은...월급일입니다...

ㅠㅠ

한달동안 고생(?)하면서

모은 돈...

입금 됐으니...자축(?)해야죠

집근처 "바다어쩌고저쩌고"하는 프랜차이즈 술집...

마눌이 젤 좋아하는

"해물우동볶음"

매콤하니..

괜춘합니다~

저는 뭐~ 좋아라하는 회~

활어회(소) 8,000냥~

걍~ 블럭 떠놓은거 썰어주는듯

걍 미역국~!

미역줄기 초무침~

자~!!

한달 동안 고생했삼~

회 한점 먹고...

ㄱㄱㅑ~!!

벌써 마눌은 맥주 500cc 다뭇네요~

소주와 핸드폰 인증~!!

아버님께 전화를...

마눌...저한테는 않하는 애교를...

흥~!!

안주가 초큼 모지라...

오징어 튀김~!!

바삭하니~

괜춘합니다~!!

퇴근 잘하시고~!!

내일도 고생이구나 ㅠㅠ

월급 받을려면 아직도 가마득하네요~

ㅋㅋㅋ

그래도 화이팅~!!

소화기올림

Wednesday, December 2, 2009

세상을 바꿀 5가지기술

원문 : http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=59974


 


PC World   2009.10.23


 


---


① USB 3.0


② Wi-Fi를 통한 동영상 스트리밍


③ 3D TV


④ 증강현실(Augmented Reality)


⑤ HTML5


---


 


① USB 3.0


 


전문가가 달인 유기농 차를 한 모금 마시며, 면도칼만큼 얇은 벽걸이 HDTV에서 영화를 보기 위해 기가비트 무선 인터넷이 연결된 태블릿을 두드린다. 무선인터넷 HD 송신기에 연결된 초고속의 USB로 미디어 서버가 영화를 실시간 전송시키고, 송신기는 TV로 빔을 보낸다.


 


그 영화배우가 누구던가? 내 머리 속에 이런 의문이 떠올랐을 때 나타난 나의 독특한 안구 움직임을 나의 증강현실(augmented-reality) 콘택트 렌즈가 인식하고, 나는 내 앞의 공간에 나타난 가상 키보드를 두드린다. 그러자 갑자기 몇 개의 비디오 클립들이 따라나오며 그 영화배우가 출연한 영화 목록을 보여주는 웹페이지가 내 시야 앞에 나타났다.


 


이러한 기술들이 먼 미래에 실생활로 다가올 수 있을까? 미래는 맞지만, 멀지는 않다.


 


특히나 영상에 대한 빠른 속도와 내용물들이 홈 영상 시스템과 데스크톱, 노트북, 모바일 기기를 거쳐서 일괄적으로 전해질 것이다. 3D의 깊이 또는 인공적인 시각적 겹침(Overlay)을 포함하여 비디오를 사용하는 새로운 기술들은 더 나은 컴퓨터 기술의 위력과 저장공간 및 속도를 필요로 할 것이다.


 


그것들이 실생활로 이루어지기 위한 기술들을 미리 본다면, 동영상을 더 빨리 옮기기 위한 연결 기관인 USB 3.0, 802.11ac와 802.11ad, 모든 기기들에서 일괄적으로 사용될 수 있는 모든 종류의 내용과 영상을 나타낼 수 있는 HTML5, 그래픽과 텍스트로 볼 것들을 겹침으로써 디지털 세상을 물리적 실제로 확장시킬 수 있는 증강현실, TV를 봄으로써 실제감과 이미지의 깊이를 부가한 3D TV 등을 들 수 있다.
 


USB 3.0


 


당신이 작업실을 떠나기 전에, 당신이 사용했던 컴퓨터를 백업해둘 필요가 있다. 당신이 짐을 싸고 있는 동안, 버튼을 누르고 5분을 기다리면 컴퓨터 시스템이 150GB의 자료를 암호화된 512GB의 SSD(superfast solid-state drive)에 저장하게 되고, 나오면서 오프사이트 백업(offsite backup)이 된 USB를 빼면 된다. 집으로 가는 길에, 패스트 푸드점 밖의 영화 키오스크(공공장소에 설치된 터치스크린 방식의 정보전달 시스템:kiosk)에 멈추어서 판매중인 장편의 3D 비디오 다운로드권을 구매한다. 당신의 드라이브에 연결하면, 키오스크는 당신의 신용정보를 읽고, 당신이 90초의 미리보기 영상을 관람하는 동안에 30GB의 영화를 SSD에 옮겨준다. 모두 옮겨지면 SSD를 빼서 집으로 가면 된다.


 


현재의 USB는 컴퓨터와 모바일 기기에 주어진 가장 세련되지 않은 기술 중 하나인 것으로 보이지만, 속도를 10배로 올리게 되면 지글지글 거리면서 타기 시작할 것이다. 당신의 컴퓨터에 연결된 모든 다른 케이블이 없어도 본체만으로 모든 것이 해결된다. 압축되지 않은 동영상을 전송해 보면 이에 열광하게 될 것이다.


 


스캐닝, 프린팅, 파일 전송 등을 통한 PC와 주변기기 사이의 데이터 전송 작업은 USB 3.0을 사용함으로써 훨씬 빨라질 것이다. 전송이 시작되었다고 인식하기도 전에 완료되는 경우가 많을 것으로 보인다.


USB 규격화 단체(USB Implementors Forum(USB-IF))에서 테스트를 받고 라이선스를 취한 사람들이 ‘초고속’이라고 부르는 USB 3.0 버전은, 실제 처리량의 초당 3.2기GB를 넘어서는 단계에 있다. USB 3.0은 디스플레이포트(DisplayPort)와 급격하게 인기가 떨어지고 있는 eSATA의 몇몇 제품들을 제외한 데스크톱 주변 기기 장치들의 전송속도보다 5배에서 10배까지 빠른 속도를 자랑할 것이다.


 


게다가, USB 3.0은 2.0 버전의 "반이중방식"(한 쪽 방향으로만 전송)의 업그레이드된 버전으로서, 동시에 양방향으로 최대의 속도로 데이터 전송을 할 수 있다. USB 3.0의 잭은 역방향호환성(프로그램의 이전 버전 또는 이전 모델의 컴퓨터와 호환되는 것)으로서 USB 1.0과 2.0 플러그를 받아들일 수 있지만, 3.0 케이블은 3.0의 잭과만 연결될 수 있다.


 


이 기술은 장치 연결 분야에서 게임 체인저(시장의 흐름을 바꾸는 혁신적인 인물 또는 사물:Game Changer)가 될 것이다. 요즘의 현대 데스크톱 컴퓨터는 이더넷(ethernet), USB 2.0, 파이어와이어(FireWire) 400 또는 800 (IEEE 1394a 또는 1394b) 또는 둘 다, DVI 또는 디스플레이포트 또는 둘 다, 그리고 몇몇 eSATA 등의 편의를 도모하기 위해 모든 잭들을 포함하고 있다. USB 3.0은 이더넷을 제외하고는 이들 모두를 제거할 것이다. 이 기술 분야에서는 컴퓨터가 모니터에 데이터를 전해 주고, 스캐너로부터 정보를 받아올 수 있고, 하드 드라이버와 정보를 교환할 수 있는 USB 3.0 포트들을 몇 개 가지고 있게 된다. 아주 빠른 플래시 메모리 드라이브들이 진행중인 것처럼 이러한 향상된 속도도 좋은 시기에 나오게 되었다.


 


USB-IF의 위원장이자 대표인 제프 라벤크래프트(Jeff Ravencraft)는 USB 3.0은 현재 가장 높은 화질로 정의된 비디오 형식인 1080p 초당 60프레임의 압축되지 않은 영상을 전송시킬 수 있을 만큼 빠르다고 말한다. 이러면 캠코더의 비디오 압축 하드웨어를 제거할 수 있고, MPEG-4 동영상 형식을 위한 특허 라이선스 비용을 줄일 수 있게 된다. 사용자는 다른 비디오 처리 없이 간단하게 캠코더로부터 실시간으로 영상을 흘러나오게 할 수 있고, 나중의 빠른 속도의 전송을 위한 내부 드라이브에 저장도 가능하다. 현재는 충분한 압축장치 없이는 이러한 방법들이 실현될 수 없다. USB 3.0의 다양한 특성들을 살펴보았을 때, 몇몇 분석가들은 가능한 보완 혹은 대안으로써 오늘날의 블루 레이 플레이어(Blu-ray player)에서 사용되는 소비자 HDMI 연결 장치를 포함한다고 본다.


 


새로운 USB는 또한 컴퓨터를 실질적인 충전소 역할을 가능하게 할 것이다.  USB 2.0은 각 포트당 소량의 전기인 100mA를 제공할 수 있는 반면에, USB 3.0은 각 장치당 150mA까지 제공할 수 있다. USB 2.0은 최고 500mA를 허브를 통해 흘려보낼 수 있지만, USB 3.0은 최고 900mA를 허브를 통해 제공할 수 있다.


 


아시아와 유럽에서는 충전과 싱크(Sync)의 기능을 표준 플러그로 제공하는 기능을 위해 모바일 폰이 USB를 지원한지 꽤 되었다. 또한 미국 업자들도 최근에 들어서 같은 기능을 하도록 변화시키고 있으며, 앞으로 USB 3.0의 증가된 전류량으로 벽에 붙어있는 모든 종류들의 AC 어댑터 뭉치들을 사라지게 만들 것이다.


 


USB 3.0 버전의 사용과 증가되는 중요성을 고려하면, 미래 데스크톱 컴퓨터들은 충전소로 사용될 전면 부착이 용이한 멀티포트를 포함해서, 두 개의 내부 허브들로 이루어져 있을지도 모른다. 각 허브는 6개의 포트까지 가질 수 있으며 모두 최대치의 전류량을 제공할 것이다. 한편, 노트북 기기들은 길거리에서 더 나은 충전과 접속을 위해 USB 포트들을 증대시킬 수 있을 것이다.  


 


애플의 맥 미니(Mac Mini)는 이미 노트북 뒷 면에 5개의 USB 2.0 포트들을 제공하고 있다.


물론 USB 3.0의 경우에는 데이터 전송 시 20GB가 넘는 용량을 1분 안에 이동시킬 만큼 가속화될 수 있다. 이러한 업그레이드는 점점 증가하고 있는 이미지들과 영화들, 그리고 다운받은 미디어 파일들의 큰 용량을 백업 또는 오프사이트 백업을 하는데 훨씬 용이하도록 도와줄 것이다.


 


새로운 애플리케이션들은 이 기술을 위해 위에서 설명한 싱크와 다운로드 기능을 포함한다. USB-IF의 라벤크래프트는 소비자들이 주유소에서 가스 충전을 하고 있을 동안 영화를 다운받을 수 있을 것이라며, "USB 2.0의 빠른 속도 덕분에, 영화를 다운받는 사람들을 15분 동안 짜증나도록 기다리게 할 필요가 없었던 것과 마찬가지"라고 설명했다.


 


제조업체들은 USB 3.0을 적용시킬 준비를 하고 있으며, 분석가들은 2년 안에 컴퓨터들의 표준 규격으로 대량 채택될 것이라 예측한다. 또한 그 형식은 소비자들의 전자 기기와 모바일 장치들에서 큰 인기를 불러올 것이다. 라벤크래프트는 현재 매해 제조업자들이 USB가 장착된 장치를 20억 개 이상 팔고 있으며, 새로운 규격에 빠르게 발맞출 가능성이 아주 크다고 전망했다


 


② Wi-Fi를 통한 동영상 스트리밍


 


고화질 3D 영화가 저장된 플래시 드라이브를 갖고 집에 도착하면, 당신은 노트북에 그 드라이브를 연결하고 기가비트 Wi-Fi를 통해 네트워크 파일 서버에 전송시킨다. 2분 뒤면 영화는 네트워크 엔터테인먼트 센터에서 당신의 벽걸이 HDTV로 60GHz의 무선 인터넷 연결을 통해 실시간 상영할 준비가 된다.


 


Wi-Fi를 통한 동영상 스트리밍


 


유선 이더넷은 꾸준히 Wi-Fi보다 항상 빨랐지만, Wi-Fi진영은 유선 이더넷의 속도를 따라잡기 위해 계속 노력하고 있다. 2012년까지 802.11ac와 802.11ad 두 개의 새로운 프로토콜은 무선으로 1Gbps 이상의 데이터 전송속도를 제공하게 될 예정이다.


 


결과적으로 앞으로 사용자들은 집안 전체 그리고 방 안에서 여러 개의 고화질 동영상 스트리밍과 게임 스트리밍을 사용할 수 있게 될 것이다. 중추 미디어 서버와 블루레이 플레이어 및 기타 셋톱(set-top) 박스는 최종 기기(end devices)가 집안의 어디에 있던 콘텐츠를 전송시킬 수 있게 된다. 예를 들어, 컴퓨터 및 위성 수신기, 블루레이 플레이어를 값만 비싼 케이블로 연결하지 않고도 멀리 떨어진 방에서 전원만 연결된 HD 비디오 화면으로 영상을 즐길 수 있게 되는 것이다.


 


802.11ac와 802.11ad 표준은 가정에 잘 맞아야 하지만, 애플리케이션은 분명 가정용 그 이상으로 확장되어야 한다. 이 표준명은 전기 전자 기술자협회(IEEE)에서 사용하는 내부 번호매김 방법을 반영한 것으로, 네트워킹을 뜻하는 802, 무선을 뜻하는 11, 그리고 하나 또는 그 이상의 알파벳을 특정 작업 그룹의 순서에 따라 붙여주어 802.11a, b, g, h, n 등으로 나타내진다.


 


802.11ac 규격은 최근 10년 동안 802.11b와 함께 시작된 지역 무선 네트워킹(WLAN) 기술 연구의 성공작인 802.11n 규격을 업데이트 시킨 것이다. 802.11ac으로 무선 네트워킹 성능은 이론적으로 최고 속도 600Mbps로부터 이름상 최대치인 1Gbps 이상으로 발전될 것이다. 사실상 802.11ac를 통한 인터넷 데이터 전송 속도는 현재의 160Mbps보다 빠르며, 하나의 채널에서 동시에 여러 개의 압축된 동영상을 스트리밍하기에 충분한 속도인 300Mbps에서 400Mbps 사이일 가능성이 높다. 하지만 많은 분리된 채널로 특정한 주파수를 계속해서 전송시켜야 하는 개별적인 스트리밍을 이용하기 위해서는 802.11n이나 802.11ac와 같은 규격들은 무선으로 데이터를 송수신하기 위해 많은 안테나들을 사용해야 할 것이다.


 


그러나 802.11ac 표준은 원래의 충실도와 품질을 유지하고 있는 고화질 영상에 대한 손실을 막을 재량이 여전히 없다. 오늘날 디스크나 케이블 혹은 위성으로부터 가져온 압축이 풀어졌거나 디코딩된 무손실 동영상은 유선 인터넷 연결망 상에서 흔하다. 적절한 하드웨어는 802.11ac의 압축된 데이터를 가져올 수 있고, HDTV 세트 안의 디코더로 직접 전송시킬 수 있으며, 현재의 몇몇 HD 세트들은 이미 이런 기능을 제공하고 있다. 하지만 압축되지 않은 동영상을 1Gbps보다 더 빠른 속도로 실시간 제공해야 한다면, 더 빠른 형식의 기술이 사용되어야 함이 틀림없다.


 


따라서 802.11ad 규격이 나오는 것이다. 이 규격은 새롭게 사용할 60GHz 스펙트럼을 사용하기 위해 오늘날 Wi-Fi에서 쓰여지고 있는 2.4GHz나 5GHz의 영역을 사용하지 않는다. 왜냐하면 이 60GHz 스펙트럼 영역은 미국을 포함한 거의 대부분의 나라에서 사용가능하기 때문이다. 따라서 압축되지 않은 각각의 영상을 1Gbps가 넘는 속도로 전송하기 위해 이 스펙트럼 영역에서 다중의 분리된 채널들을 사용하게 될 것이다.


 


하지만 불행하게도, 60GHz의 신호를 이루고 있는 밀리미터 길이의 파장은 벽과 가구를 잘 통과하지 못하며, 산소가 이 파동의 에너지를 쉽게 흡수해 버린다. 따라서 802.11ad는 같은 방 안에 있는 기기 사이의 짧은 거리 사이의 데이터 전송에 가장 적합하다. 빠른 영상 전송들을 지원하는 것은 그렇다 하고, 802.11ad는 USB 3.0의 속도 또는 블루투스 2보다 1,000배 더 빠르게 장치들 사이에서 파일 전송 및 데이터 동기화를 가능케 할 것이다.


 


802.11ad 규격은 스펙트럼의 60GHz 영역을 사용하기 위한 세 가지 경쟁력있는 아이디어 중 하나이다. WiGig(Wireless Gigabit Alliance)가 네트워킹과 소비자 사용을 주시하는 반면, 소비자 전자기기 회사의 협회인 무선 HD(Wireless HD)는 60GHz 영역의 영상 사용에 대해 초점을 맞추고 있다. 이렇게 다양한 단체의 회원들은 겹치기 때문에 아마도 통합될 가능성이 있는 규격을 마련될 것으로 관측된다. 비록 802.11ad는 영상에 대해서 구체적으로 언급하고 있지는 않지만, 많은 종류의 데이터 사용에 대한 편의를 도모할 수 있는 포괄적인 기술이 될 것으로 보인다. 최소한 각 단체는 서로서로의 목적들을 방해하지 않도록 노력할 것이다.


 


USB 3.0과 연결된 802.11ac와 802.11ad의 조합은 집에 있는 엔터테인먼트 하드웨어와 컴퓨터 장비 등클러스터를 적절하게 배치하도록 도울 것이다. USB 3.0과 기가비트 이더넷은 책상 위나 서랍 속에 있는 장치들과 연결되고, 802.11ac는 집안의 클러스터들을 연결시켜 주며, 802.11ad는 방 안의 모바일 기기들과 디스플레이, 그리고 다른 장치들에 데이터를 전송할 것이다.


 


현재 링크시스(Linksys) 제품들을 맡고 있고, 매해 수백만 대의 Wi-Fi와 이더넷 장치들을 수송하는 시스코(Cisco) 소비자 제품의 기술부장 알렌 후오타리(Allen Huotari)는 "홈 네트워크의 변화는 가정에서 하나의 기술로부터가 아니라, 유선 혹은 무선 등의 기술들을 사용한 뼈대와 틀을 이루는 여러 조합의 기술들로부터 이루어질 것"이라고 말한다.


 


이 말은 현재보다 도선과 케이블의 수는 적어지고, 속도는 빨라지며, 더 높은 품질의 영상 재생장치를 이용하게 된다는 것을 의미한다. 2012년까지 앞에서 언급된 두 가지 규격을 이용할 수 있게 되어야 한다. editor@idg.co.kr


 


③ 3D TV


 


충전기에서 액티브 셔터 3D 안경(active-shutter 3D glasses)을 분리시킨 뒤 그것을 착용하고, 다운로드된 헐크 VI편을 확인한다. 헐크는 직물 신축의 성공으로 최근 들어온 초록색 반영웅에 대한 영화이다. 당신은 편안한 쇼파 속에 파고들며 아이들에게 영화볼 시간이라고 알리고, 팝콘 백의 힛 파우치를 흔들어 옥수수가 터지도록 한다. 아이들은 각자 자기의 3D 안경을 가져와 쓰고 쇼파에 앉아 그들 무릎 위에서 헐크가 프리데이터를 공격하는 것을 본다.


 


3D TV


 


TV 생산자가 HDTV들을 도입했을 때, 모든 사람들이 HDTV 세트를 산지 얼마 지나지 않아 그 개선된 고화질 기술이 쓸모없는 기술이 될 것을 알아보는 것은 어떻게 보면 뻔한 일이었다. 그리고 실제로 그렇게 되었다. 다음에 찾아올 가정TV는 3DTV로서 2D 화면과 입체적 깊이를 더한 것이다.


 


3D 영화 제작과 필름 투사 기술이 개선되는 동안, 헐리우드(Hollywood)는 깊이가 강화된(depth-enhacned) 영화들을 조금씩 제작하기 시작했다. 하지만, 1980년대의 흑백 영화 범주에 대해서 채색 기술이 큰 관심을 불러온 것과 마찬가지로, 2D 영화를 3D로 제작할 수 있는 잠재력이 이런 3D관련 기술의 요구를 키울 수 있다. 시리즈 중 처음 두 편의 영화가 3D로 다시 만들어져 나온 토이 스토리(Toy Story) 3D와 같이 컴퓨터 애니메이션 기반의 영화들에서는 이미 이러한 일들이 일어나고 있다.


 


3D의 장래성은 점점 더 몰입하고, 더욱 실제에 가까운 경험을 가져오고, 예전에 보았던 어떤 것들과도 큰 차이를 나타낸 다는 것이다. 상업 영화관에서 3D 투사는 이중인화를 시켜 편광되거나 혹은 각 프레임에 별개의 색을 입힌 이미지들을 포함시키고, 각 눈에 다른 이미지들을 나타내는 이른 바 "패시브" 안경을 관람자에게 쓰도록 한다. 그러면 뇌가 깊이를 인식할 수 있도록 두 이미지들을 합성시킨다.


 


이와 달리, 가정에서 보여질 3D 기술은 연속적인 프레임들에 대해서 좌우 시점을 겹침에 의존할 것으로 보인다. 초 당 120사이클을 재생시킨다는 의미의 120Hz에서 작동하는 HDTV는 널리 사용되고 있기때문에, 인간의 눈이 따라갈 수 있는 속도보다 훨씬 빠르게 좌우 눈의 상들을 교차시킬 수 있는 기술이 이미 존재하고 있다고 볼 수 있다. 기가옴(GigaOm)의 분석가이자 HDTV 웹사이트인 알마낙(Almanac)의 창시자인 알프레드 푸어(Alfred Poor)는 이러한 녹화 기술을 허가받기 위해서 기초 산업 규격을 준수해야 한다고 말한다.


 


3DTV 화면을 표시하기 위해서는 각 눈에 화면을 교체시키기 위해서 빠르게 셔터를 닫을 수 있는 "액티브" 안경을 필요로 할 것이다. 액티브 안경은 지금은 비싸지만, 3D가 사회에 전개되어 갈수록 가격이 떨어질 것이다. 한편, 설계자들은 그 기술의 안경을 필요로 하지않는 3D 세트를 생산하는 개발 단계에 있다.


 


소니(Sony)와 파나소닉(Panasonic)은 3D가능 디스플레이들을 생산할 것이라는 계획을 발표해오고 있으며, 파나소닉는 최근에 2010년에 출시할 것으로 기대되는 대형 스크린 버전을 시연한 바 있다. HDTV가 출시되었을 때와 마찬가지로 프리미엄 3DTV가 먼저 선보인 뒤에 구매가능한 모델들이 점차적으로 나올 것으로 보인다.


 


소비자들의 관심을 키우기 위해서 충분한 3D 콘텐츠들을 만들고 배포하는 것은 도전 이상의 의미로 보인다. 푸어는 최근에 영화 제작자들이 매해마다 손쉬운 3D 작품을 한 개씩 만들거나 개작하고 있다고 언급했다. 하지만 다양한 효과들과 초점, 그리고 이미지 분할을 위한 패턴 신호를 사용하여 기존의 영화를  "종합적 3D" 버전으로 만들어낼 수 있는 기술이 있어야 2D와 3D의 온전한 차이를 메울 수 있을 것이다.


 


현재 존재하는 케이블과 IPTV 네트워크는 3D 콘텐츠를 배포할 수 있다. 전형적인 HD 방송에서 사용되는 광대역은 새로운 영상 압축 기술로 한 번 업그레이드된 3D 영상을 전달하기에 이런 네트워크가 부족하지 않을 것으로 보이지만, 이러한 시스템들은 이미 최고 단계의 압축 기술을 사용하고 있기 때문에, 위성은 더욱 어려운 상황에 직면할지도 모른다.


 


제품 측면에서, 블루레이는 필요한 데이터를 저장할 수 있고, 3D 블루레이 플레이어는 이미 계획 단계에 놓여 있다. 블루레이의 기초 변화는 더이상 필요하지 않기 때문에, 규격을 만든 무역단체는 2D TV가 3D 디스크를 재생시킬 수 있는 그런 호환성에 초점을 두고 있다.


 


3DTV의 융통성만 충분하다면, 규격에 대한 논쟁들은 아주 골칫거리로 남지는 않을 것으로 보인다. 한 업계 단체는 디지털 TV가 진보적이고 얽혀진 버전으로 이루어진 480, 720, 그리고 1080 형식으로 나누어지는데에 대한 몇몇 일반적인 변수들을 설정하는 일을 하고 있다. 3DTV는 이런 다양한 형식들을 지원할 필요가 있지만, 그 모두는 교차되는 이미지들과 셔터에 기반을 둔 한 쌍의 안경을 포함해야 할 것이다.


 


푸어는 앞으로 3DTV가 크게 발전되겠지만, 현존하는 HDTV 세트들에 대해서는 비교적 업그레이드의 비중을 적을 것이라고 예측했다. 업그레이드된 세트들은 3D 안경으로 동기화된 정보들을 보내기 위한 적외선 혹은 무선 전송기뿐만 아니라, 각 눈에 초당 60개의 이미지들을 교체하시키는 개선된 화면 조정기를 필요로 할 것이다. editor@idg.co.kr


 


④ 증강현실(Augmented Reality)


 


집에서 홈 씨어터로 헐크 Vi를 감상한 후, 더 큰 스크린으로 봐야겠다고 결심했다. 아직 영화관에서 상용하고 있지만, 어느 영화관에서 볼 수 있는지 확신할 수가 없다. 예전 같으면, 맵퀘스트(MapQuest)에서 상영관까지 가는 길을 인쇄했을테지만, 요즘은 이런 원시적인 방법은 필요없어졌다. 대신, 자동차 계기판 위에다 당신의 스마트폰을 부착시키면, 실시간으로 영화관까지 가는 길이 자동차 전면 유리에 겹쳐서 나와 이것을 따라 운전할 수 있다. 목적지에 도달하면 높은 빌딩들이 보이고, 빌딩들 중 하나를 전면 유리에 겹치면 건물 이름과 영화관 이름이 나타나고, 그 안에 헐크 VI와 상영시까지 남은 시간이 표시된다. 자동차 내비게이터는 "90m 앞에서 좌회전하세요"라고 자동차의 스테레오를 통해 알려주면서 주차장으로 안내해준다.
 


증강현실(Augmented Reality)


 


닐 스테펜슨(Neal Stephenson)의 책 '눈 사태(Snow Crash)'에서 "가고일(gargoyles)"은 그들의 모든 경험들이 기록된 고글을 통하여, 실제 세상의 최상단에서 자료들을 겹쳐보기 위해 서로에게 연락을 취해온 프리랜서 정보 수집가이다. 형식에서는 다르지만, "증강현실" 일상적인 경험이 되면, 우리 모두는 아마도 책 속의 가고일이 될 것이다.


 


증강현실은 컴퓨터를 바탕으로 형성된 상황에 맞는 자료 및 시각치환을 통해 우리가 바라보는 것을 겹쳐준다는 의미를 가진 포괄적인 단어이다. 이 기술의 초점은 우리들을 둘러싼 것과 직접적으로 관련된 정보를 제공함으로써 그것들과 상호작용할 수 있는 능력을 증가시키는 데에 있다.


 


직장에서 사람들은 사무실 주위를 둘러보면서, 곁을 지나가는 업무상 관련된 사람들의 이름과 부서가 그려진 명찰을 통해서 그들이 누군지 확인한다. 비록 많은 영화 각본에서는 안경 속이나 앞유리에 삽입된 "신속히 반응하는" 디스플레이가 등장하지만, 현재 증강현실에서는 스마트폰에서 "느릿느릿한" 화면만을 찾아볼 수 있는 정도다.


 


일부 업체들은 연속 비디오 카메라 피드(feed) 상의 위치와 상황에 기반을 둔 데이터를 겹치게 도와주는 프로그램을 출시하고 있다. 이런 데이터는 위성을 통해 위치를 확인해주는 GPS, 속도와 방향의 변화를 측정하는 가속도계, 자북을 기준으로 위치를 찾아주는 자기계를 포함하는 스마트폰에 설치된 센서 등으로부터 얻는다.


 


'가장 가까운 장소(Nearest Places)'라는 애플리케이션에서는 지하철 정거장, 주차장, 박물관, 식당과 다른 관심 장소들에 대한 이름과 위치를 아이폰 비디오 피드의 상단부에 표시한다. 사용자가 걷거나 회전할 때마다 주변에 대한 정보가 겹치고 변화된다.


 


나노 기술을 전공으로 하는 워싱턴 대학교의 교수인 바박 파비즈(Babak Parviz)는 "스마트폰과 관계된 애플리케이션은 증강현실의 개척자"라며, "이 애플리케이션들은 얼마 지나지 않아 증강현실 분야를 지배할 것"이라고 말했다.


 


다른 프로토타입 애플리케이션들은 사용자가 주변을 걸어다닐 수 있는 3D 모델, 혹은 사용자의 3D 상 위치에서 세부적인 동작들에 대한 업데이트로 특정한 좌표들에 대해 주어진 정보들을 나타내는 역할을 한다. 하지만 그런 애플리케이션에 대한 기술이 아직 준비되지 않다. 휴대용 기기에 많은 데이터를 삽입하기 위해 더 정교한 위치설정 매커니즘이 있어야 한다. 다행스럽게도 신형 스마트폰일 수록 점차 발전된 센서를 장착하고 있는 것으로 보인다.


 


다른 영역에서는 증강현실이 단순히 정보를 추가적으로 제공할뿐만 아니라, 더 나아진 시각을 제공하는 역할을 담당하는 것으로 보인다. 언젠가는 자동차 전면에 설치된 적외선 카메라를 통해 앞유리에 아주 먼 물체가 마치 밝은 날 보이는 것처럼 표시될 것이다. 레이더 신호와 무선 수신기가 시야 밖의 자동차들을 감지하고 나타내며, 유리의 한 부분에서는 GPS와 교통 상황을 담당할 것이다.


 


과거의 디스플레이를 넘어서서, 파비즈와 그의 연구팀은 안구 바로 위에 직접 디스플레이를 설치하는 방법에 대해 연구하고 있다. 그들은 착용할 수 있는 콘택트 렌즈 속으로 비디오 회로를 설치하기위한 기술을 개발시키려고 노력중이다. 그러한 콘택트 렌즈를 착용하고 있는 동안에는, 시각 범위에 겹쳐진 연속적이고 상황 기반의 데이터 피드(data feed)를 보게될 것이다.


 


파비즈의 렌즈가 실현되기 전에, 증강현실은 모바일 장치에서 상호작용을 위한 보조물이자 길을 찾는 내비게이션으로 역할을 다할 것이다. 게다가, 게임 개발자들은 게이머들이 실제를 둘러싼 디지털 게임 환경을 완벽하게 둘러보게 돕는 기술로 사용할 것이다. editor@idg.co.kr


 


⑤ HTML5


 


헐크 VI는 굉장했지만, 또 오늘 저녁에는 무엇을 볼까 고민이다. 아침에 직장으로 떠나기 전, 영화 웹 사이트에서 몇몇 영화 예고편을 클릭해본다. 하지만 많이 둘러볼 시간이 없다. 당신은 그 비디오들 중 하나의 2D 바코드를 휴대폰으로 찍는다. 그러면, 휴대폰의 브라우저에는 위와 같은 사이트가 뜬다. 회사로 가는 통근 기차에서 4G 휴대폰 접속을 통해 방금 찾아본 사이트의 예고편들을 본다. 몇 개 영화들은 휴대폰폰에서 해보았던 게임들과 관련되어 있다.



HTML5


 


모든 웹 사이트가 "넷스케이프 네비게이터(Netscape Navigator)에 최적화 되어 있거나" 혹은 "인터넷 익스플로러 4(Internet Explorer 4)를 필요로 한다는" 표시가 있었던 때를 기억하는가. 오래 전에는 특정 브라우저에만 맞거나 최적상태로 작동하는 웹 페이지를 만들곤 했다. 어떤 분야에서는 아직도 그렇다.


웹 페이지를 기록하기위한 표준 프로그램 HTML의 새로운 버전인 HTML5(Hypertext Markup Language version 5)은 거의 마무리 단계에 있다.


 


구체적으로 HTML5은 오디오, 동영상, 쌍방향 플러그인 등을 필요없게 만들 것으로 보인다. HTML5는 디자이너들이 데스크톱, 노트북 혹은 모바일 장치의 어떤 브라우저에 따라서도 본질적으로 같은 작업을 할 수 있는 웹 사이트를 만들 수 있도록 도와줄 것이다. 또한, 사용자들에게도 빠르고 다양하며 풍부한 웹 경험을 제공할 것이다.


 


멀티미디어 구현을 위해 각 브라우저 제작자들이 자사 기술과 서드파티 플러그인들을 조합하도록 내버려 두는 것 대신, HTML5는 오디오, 동영상, 2D 그래픽 디스플레이 내장되어 있는 브라우저를 필요로 한다. 어떤 오디오 및 동영상 형식이 공통적인 지원을 받을지 특허 및 라이선스 문제가 확실하지 않지만, 회사들은 이 같은 세부 문제를 해결하기 위한 여러 동기를 가지고 있다.


 


또, 웹사이트 설계자들과 애플리케이션 개발자들은 호환되지 않는 여러 형식들을 다루거나 모든 브라우저에서 똑같은 사용자 경험을 만들어내기 위해 차선책을 사용할 필요가 없어진다. 일반적으로 멀티미디어 지원에 한계가 있는 모바일 브라우저에서 HTML5는 더욱 가치있다. 예를 들어, 플래시(Flash)가 브라우저와 플랫폼 사이에서 동영상 콘텐츠 전달에 중요한 도구임에도 불구하고, 아이폰의 사파리(Safari) 브라우저는 플래시를 지원하지 않는다.


 


웹 디자이너이자 선도적인 웹 규격 권위자인 제프리 젤드만(Jeffrey Zeldman)은 "해결책이 나오려면 2년이 걸리겠지만, 만약 모든 브라우저 회사들이 호환성을 위한 자바스크립트(JavaScript)와 플러그인 없이 단지 동영상 태그로 동영상 디스플레이를 지원한다면, 모바일 장치 사용에 대한 부족함은 없을 것"라면서, "전문적 지식이 부족한 사용자일수록 더 많은 경험을 할 수 있을 것”이라고 말했다.


 


운영체제과 브라우저의 제작자들은 HTML5의 대열에 끼어들고 있다. 구글의 크롬(Google Chrome), 애플의 사파리(Safari), 오페라(Opera), 웹킷(WebKit, 모바일 및 데스크톱 프로그램들의 기초가 되는 개발 패키지) 등은 점차 HTML5를 지원하고 있다.


 


이 부분에 대해서 마이크로소프트의 인터넷 익스플로러 8(IE8)은 HTML5의 일부분만 지원한다고 밝혔다. 그러나 마이크로소프트는 다른 운영체제와 브라우저 제작자들 사이의 여론에도 아랑곳하지 않고 HTML5를 거부함으로써 인터넷 익스플로러 브라우저의 점유율을 더 잃는 위험을 감수하고 싶지는 않을 것이다. 현재 HTML5는 최종규격의 완성과 월드 와이드 웹 협회(World Wide Web Consortium)의 공식적인 지원 획득을 위한 마지막 단계를 밟고 있다. editor@idg.co.kr