2007년 3월 21일 수요일

Apache 웹 서버 장애 해결하기 2 (서비스 거부 공격(DoS)이 가해졌을 때)

서비스 거부 공격(DoS)이 가해졌을 때
DoS는 동시에 서비스할 수 있는 프로세스의 한계가 있다는 점을 악용한 공격이다.
한번의 실행으로 100개나 200개 등 원하는 만큼의 동시 접속을 맺은 후 이 접속을 끊지 않고 유지할 수 있는 공격 코드가 인터넷 상에 공개되어 있다.
그러나 이러한 공격의 경우 공격지의 IP를 속이기가 매우 어려우므로 netstat으로 확인 후 비정상적인 접속으로 확인 될 경우 해당 IP를 차단하면 된다.
특정 IP의 라우팅을 차단하는 방법은 다음과 같이 route를 이용한 방법과 iptables(커널 2.4 이상)를 이용한 방법 두 가지가 있다.

Apache 웹 서버 장애 해결하기 1 (접속이 느려지거나 접속이 안 될 때)

접속이 느려지거나 접속이 안 될 때
가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속 이 너무 느려 아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우 가 있다.
기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기 존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.
따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하 므로 접속 속도가 느린 것처럼 느끼게 되는 것이다.
일반적으로 정상적인 접속 의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에 현재의 상 태가 비정상적인 접속인지 여부를 판단해야 한다. 이를 판단할 수 있는 방법 은 netstat -na grep ES로 ESTA BLISHED된 연결 상태를 확인하여 클라이언트 의 IP가 정상적인 연결인지 여부를 확인하면 된다.
또는 netstat -nagrep ESawk '{print $5}'sort로 클라이언트의 IP만 따로 소트하여 확인해 봐도 된다. 통상적으로 HTTP 1.1 규약에서부터 적용되기 시작 한 KeepAlive 기능을 지정하였을 경우 한 클라이언트 IP에서 동시에 3~5개 정 도의 http 프로세스를 생성하므로 한 IP에서 3~5개 정도의 프로세스를 생성하는 것은 정상적인 현상이다.
비정상적인 접속의 경우에는 다음과 같은 이유가 있을 수 있다.

Apache의 access_log에 관련된 파일형식 남기지 않게 하는 방법

이미지 서버를 구축해 사용하다 보면 access_log에 여러가지 파일형식의 로그들이 쌓여서
용량이 초과하는 경우가 많았을것이다. 여기서 로그들을 주석처리해서 막아 버리는 방법도
있지만 아래와 같이 해서 부분적으로 로그 쌓임을 방지 할수가 있다.

Apache httpd.conf 파일을 열어 다음의 내용들을 추가 하도록 하자.

### JPG Red Deny ####
SetEnvIf Request_URI \.jpg worm
SetEnvIf Referer \.jpg worm

### GIF Red Deny ####
SetEnvIf Request_URI \.gif worm
SetEnvIf Referer \.gif worm

### SWF Red Deny ####
SetEnvIf Request_URI \.swf worm
SetEnvIf Referer \.swf worm

### html Red Deny ####
SetEnvIf Request_URI \.html worm
SetEnvIf Referer \.html worm

### CodeRed Deny ####
SetEnvIf Request_URI \.ida worm
SetEnvIf Referer \.ida worm

### Nimda Deny #####
SetEnvIf Request_URI cmd\.exe worm
SetEnvIf Referer cmd\.exe worm
SetEnvIf Request_URI root\.exe worm
SetEnvIf Referer root\.exe worm
SetEnvIf Request_URI admin\.dll worm
SetEnvIf Referer admin\.dll worm

CustomLog /usr/local/apache/logs/access_log common env=!worm

진한 부분이 CustomLog 부분에 추가해줘야 할 부분이다.

Apache log들 용량을 줄이고 싶을때 사용하는 명령어

아파치 로그를 확인 하다보면 엄청난 양의 access_log,error_log를 확인할때가 있을것이다.
이때 이 양을 0으로 만드는 방법을 소개 하겠다.

cat /dev/null > access_log
cat /dev/null > error_log

Apache 버젼 확인 방법

부끄럽지만 내가 일하면서 알게 된 명령어ㅋㅋ
/usr/local/apache/bin/httpd -v
끝~~

Apache 웹서버에서 폴더 리스트가 출력 안되게 할려면...

Apache를 이용해 웹서버를 구축후에 이런 문의를 받았다
"폴더 리스트가 나오는데 안나오게 할 수 없나요"
이 문의를 받고 난 열심히 웹서핑을 시작하였다.

찾아낸 정보는 다음과 같다.

Apache 설정 파일인 httpd.conf 파일을 열고
/를 키워드 검색을 하자. 찾을 단어는 'FollowSymLinks'
찾게 되면 다음과 같은 문구를 볼수 있다.
Options Includes Indexes FollowSymLinks

그럼 여기서 어떻게 하면 되느냐 indexes를 지워주도록 한다.
그리고 Apache Restart를 해준후에 접근을 해보자. 그럼 원하던대로...

p.s 가상호스트일 경우에는 가상호스트 설정부분에도 indexes를 삭제해주면 된다.

2007년 3월 10일 토요일

linux서버에서 python으로 mysql 사용하는 cgi쉽게 만들기

집필자 : shinmoosung 님이 쓰신 글입니다. 좋은 자료가 될꺼 같아 가지고 왔습니다.


먼저 리눅스 서버를 설치하고,
1. apache 2.0.x이상
2. python최신버전
3. mysql 최신버전
4. MySQLdb(mysql.org의 download에 보면, python 연결용 connector들을 제공한다)

각각의 프로그램의 설치는 이곳에서 설명을 생략한다.

단, apache의 httpd.conf에서는 AddHandler cgi-script .cgi를 설정하는 것과 cgi가 실행될
디렉토리에서 Options +ExecCGI 를 해주어야 cgi가 실행되므로 잊지 않고 설정한다.

이제 python의 라이브러가가 설치된 디렉토리로 간다.
python2.4.x버전에 설치되었다면 보통 /usr/lib/python2.4 폴더가 된다.

이곳에서 dp.py파일을 만들고

import _mysql
class usedb:
def __init__(self,MyDB='test'):
self.db = _mysql.connect(user='mysql',db=MyDB)
def __del__(self):
conn.close()
def query(self, SQLstr=''):
if SQLstr == '':
return "Nothing to execute"
self.db.query(SQLstr)
return self.db.store_result().fetch_row(0)

의 내용을 입력하고 저장한다. 그리고 파일권한은 644로 해둔다.
위의 내용에서 볼 수 있는 것처럼 mysql에는 기본적으로 test데이터 베이스가 있으므로, 데이터베이스를 지정하지 않았을 때는 자동적으로 그것을 사용하게 하였다.

user는 mysql계정으로 사용한다. 이것은 최근의 mysql버전의 설치에서 기본적으로 만들게 되는 계정이므로 그대로 사용한다.

이제 cgi를 실행하도록 된 디렉토리로 가서 아래의 내용으로

test.cgi를 만든다.
#!/usr/bin/python
print "Content-Type: text/html\n"
from db import usedb

s = "show tables;"
d = usedb('information_schema')
print d.query(s)

d = usedb()
print d.query(s)

파일을 저장하고 권하는 755로 한다.

그리고 웹에서 접속해 보면 test.cgi는 python을 이용하여, mysql의 데이터베이스를 사용하는 것을 볼 수 있다.
information_schema는 최신 mysql에서 기본적으로 제공하는 데이터베이스이다.
usedb() 처럼 데이터 베이스를 지정하지 않은 경우 자동적으로 test데이터베이스를 사용한다. SQL문법에 대한 설명은 생략한다.

이상으로 linux의 apache서버에서 python을 사용하여 cgi를 작성한 후, mysql데이터 베이스를 사용할 수 있는 방법을 설명하였다.

이상의 내용은 본인이 밤을 새워가면서, 외국의 자료들을 찾아가면서 얻은 값진 지식입니다. 국내에서는 이러한 지식을 보지 못했네요. 아직까지는요. MySQLdb를 써도 좋기는 합니다.
앞의 내용이 잘못된 부분이 있어서 코드를 완전히 수정해서 다시 올립니다. 신고
shinmoosung (2006-04-10 14:04)출처 : [직접 서술] 앞의 내용처럼 본인이 직접 코딩한 것입니다. 다른 분들이 발전시켜도 좋습니다.

앞의 내용은 제가 약간 이해를 못한 부분이 있어서 약간의 문제를 포함하고 있었음을 사과드립니다.
아래의 내용은 완전히 테스트를 통해 확인한 내용입니다.

먼저 클래스를 정의한 db.py의 내용을 아래처럼 수정합니다.

--------------------------------------------------------------------------------
import _mysql

class usedb:
def __init__(self, MyDB='test'):
self.DBname=MyDB
def do(self, SQLstr=''):
if SQLstr == '':
return "Nothing to do"
self.db=_mysql.connect(db=self.DBname,user='root')
self.db.query(SQLstr)
self.result=self.db.store_result().fetch_row(0)
self.db.close()
return self.result



--------------------------------------------------------------------------------

user='root' 부분은 각자의 mysql설정에 따라서 실행이 가능한 계정이면 됩니다.
즉, user='mysql'일 수도 있고, mysql설정에 따라서 아주 생략해도 되기도 합니다.
이제는 cgi가 실행되는 디렉토리에 test.cgi를 생성해서 다음의 내용을 입력합니다.

--------------------------------------------------------------------------------

#!/usr/bin/python
print "content-type:text/html\n"



from db import *
import cgitb; cgitb.enable()


d = usedb('mysql')
s= d.do("show tables;")
print s
print "

"

d = usedb('information_schema')
print d.do('show tables;')
--------------------------------------------------------------------------------

import cgitb; cgitb.enable()은 코드 디버깅을 위한 것이므로, 디버깅이 끝나면 삭제합니다.
이 예제 cgi에서는 mysql데이터베이스와 information_schema데이터베이스의 테이블목록을 보여주는 단순한 쿼리를 실행합니다.

일단 이것이 성공하면, 다른 SQL쿼리들도 된다는 이야기이지요.

웹에서 http://서버/test.cgi 로 실행합니다.

(리눅스)linux apache에서 python을 사용해서 mysql사용하기 신고
shinmoosung (2006-04-10 15:24)출처 : [직접 서술] 제가 직접!!! 연구하고 작성한 코드들입니다. 부족한 부분은 다른 사람들이 고쳐서 쓰세요. 이로써 리눅스의 아파치 서버에서 파이썬(python)으로 mysql데이터베이스 프로그래밍이 아주~~ 쉽게 가능해졌네요... php, jsp, asp 모두 물렀거라! 가장 쉬운 파이썬 나가신다~

앞에서 작성된 db.py 클래스 코드에 데이터베이스를 생성하는 createdb 메서드와 dropdb 메서드를 추가하여 완성한 코드를 올립니다.


db.py

--------------------------------------------------------------------------------
import _mysql

class usedb:

def __init__(self, MyDB='test'):
self.DBname=MyDB

def do(self, SQLstr=''):
if SQLstr == '':
return "Nothing to do"
self.db=_mysql.connect(db=self.DBname,user='root')
self.db.query(SQLstr)
self.result=self.db.store_result().fetch_row(0)
self.db.close()
return self.result

def createdb(self, MyDB):

"""db이름이 지정되지 않았으면 오류"""
if MyDB == '':
return "Specify the Database name to be created."

self.db=_mysql.connect(db='test',user='root')

"""같은 이름의 db가 있으면 오류"""
self.db.query("show databases;")
self.result=self.db.store_result().fetch_row(0)
for i in self.result:
if i[0] == MyDB:
self.db.close()
return "Database already exits!"

"""db 생성 및 결과 반환"""
self.db.query("create database " + MyDB + ";")
self.db.query("show databases;")
self.result=self.db.store_result().fetch_row(0)
for i in self.result:
if i[0] == MyDB:
return "Database successfully created!"
self.db.close()

def dropdb(self, MyDB):

"""db이름이 지정되지 않았으면 오류"""
if MyDB == '':
return "Specify the Database name to drop."

self.db=_mysql.connect(db='test',user='root')

"""삭제할 db가 있으면 삭제 실행"""
self.db.query("show databases;")
self.result=self.db.store_result().fetch_row(0)
for i in self.result:
if i[0] == MyDB:
self.db.query("drop database " + MyDB + ";")
self.db.close()
return "Database successfully droped!"
self.db.close()
return "Specified database not exits!"



--------------------------------------------------------------------------------

자세한 사용설명은 위의 내용을 참고하시고,
실제 사용 코드는 다음과 같습니다.

--------------------------------------------------------------------------------
#!/usr/bin/python
print "content-type:text/html\n"

from db import *
import cgitb; cgitb.enable()

#데이터 베이스 생성

d = usedb()
s = d.createdb("mydb")
print s
print "

" # -->그냥 줄넘기기 *^^*


#데이터 베이스 삭제
s = d.dropdb("mydb")
print s
print "

"
--------------------------------------------------------------------------------

출처 : [직접 서술] 이상의 내용은 본인이 밤을 새워가면서, 외국의 자료들을 찾아가면서 얻은 값진 지식입니다. 국내에서는 이러한 지식을 보지 못했네요. 아직까지는요. MySQLdb를 써도 좋기는 합니다.

Comparing Python to Other Languages(Python과 다른 언어와의 비교)

Disclaimer: This essay was written sometime in 1997. It shows its age. It is retained here merely as a historical artifact. --Guido van Rossum

Python is often compared to other interpreted languages such as Java, JavaScript, Perl, Tcl, or Smalltalk. Comparisons to C++, Common Lisp and Scheme can also be enlightening. In this section I will briefly compare Python to each of these languages. These comparisons concentrate on language issues only. In practice, the choice of a programming language is often dictated by other real-world constraints such as cost, availability, training, and prior investment, or even emotional attachment. Since these aspects are highly variable, it seems a waste of time to consider them much for this comparison.

Java
Python programs are generally expected to run slower than Java programs, but they also take much less time to develop. Python programs are typically 3-5 times shorter than equivalent Java programs. This difference can be attributed to Python's built-in high-level data types and its dynamic typing. For example, a Python programmer wastes no time declaring the types of arguments or variables, and Python's powerful polymorphic list and dictionary types, for which rich syntactic support is built straight into the language, find a use in almost every Python program. Because of the run-time typing, Python's run time must work harder than Java's. For example, when evaluating the expression a+b, it must first inspect the objects a and b to find out their type, which is not known at compile time. It then invokes the appropriate addition operation, which may be an overloaded user-defined method. Java, on the other hand, can perform an efficient integer or floating point addition, but requires variable declarations for a and b, and does not allow overloading of the + operator for instances of user-defined classes.

For these reasons, Python is much better suited as a "glue" language, while Java is better characterized as a low-level implementation language. In fact, the two together make an excellent combination. Components can be developed in Java and combined to form applications in Python; Python can also be used to prototype components until their design can be "hardened" in a Java implementation. To support this type of development, a Python implementation written in Java is under development, which allows calling Python code from Java and vice versa. In this implementation, Python source code is translated to Java bytecode (with help from a run-time library to support Python's dynamic semantics).

Javascript
Python's "object-based" subset is roughly equivalent to JavaScript. Like JavaScript (and unlike Java), Python supports a programming style that uses simple functions and variables without engaging in class definitions. However, for JavaScript, that's all there is. Python, on the other hand, supports writing much larger programs and better code reuse through a true object-oriented programming style, where classes and inheritance play an important role.

Perl
Python and Perl come from a similar background (Unix scripting, which both have long outgrown), and sport many similar features, but have a different philosophy. Perl emphasizes support for common application-oriented tasks, e.g. by having built-in regular expressions, file scanning and report generating features. Python emphasizes support for common programming methodologies such as data structure design and object-oriented programming, and encourages programmers to write readable (and thus maintainable) code by providing an elegant but not overly cryptic notation. As a consequence, Python comes close to Perl but rarely beats it in its original application domain; however Python has an applicability well beyond Perl's niche.

Tcl
Like Python, Tcl is usable as an application extension language, as well as a stand-alone programming language. However, Tcl, which traditionally stores all data as strings, is weak on data structures, and executes typical code much slower than Python. Tcl also lacks features needed for writing large programs, such as modular namespaces. Thus, while a "typical" large application using Tcl usually contains Tcl extensions written in C or C++ that are specific to that application, an equivalent Python application can often be written in "pure Python". Of course, pure Python development is much quicker than having to write and debug a C or C++ component. It has been said that Tcl's one redeeming quality is the Tk toolkit. Python has adopted an interface to Tk as its standard GUI component library.

Tcl 8.0 addresses the speed issuse by providing a bytecode compiler with limited data type support, and adds namespaces. However, it is still a much more cumbersome programming language.

Smalltalk
Perhaps the biggest difference between Python and Smalltalk is Python's more "mainstream" syntax, which gives it a leg up on programmer training. Like Smalltalk, Python has dynamic typing and binding, and everything in Python is an object. However, Python distinguishes built-in object types from user-defined classes, and currently doesn't allow inheritance from built-in types. Smalltalk's standard library of collection data types is more refined, while Python's library has more facilities for dealing with Internet and WWW realities such as email, HTML and FTP.

Python has a different philosophy regarding the development environment and distribution of code. Where Smalltalk traditionally has a monolithic "system image" which comprises both the environment and the user's program, Python stores both standard modules and user modules in individual files which can easily be rearranged or distributed outside the system. One consequence is that there is more than one option for attaching a Graphical User Interface (GUI) to a Python program, since the GUI is not built into the system.

C++
Almost everything said for Java also applies for C++, just more so: where Python code is typically 3-5 times shorter than equivalent Java code, it is often 5-10 times shorter than equivalent C++ code! Anecdotal evidence suggests that one Python programmer can finish in two months what two C++ programmers can't complete in a year. Python shines as a glue language, used to combine components written in C++.

Common Lisp and Scheme
These languages are close to Python in their dynamic semantics, but so different in their approach to syntax that a comparison becomes almost a religious argument: is Lisp's lack of syntax an advantage or a disadvantage? It should be noted that Python has introspective capabilities similar to those of Lisp, and Python programs can construct and execute program fragments on the fly. Usually, real-world properties are decisive: Common Lisp is big (in every sense), and the Scheme world is fragmented between many incompatible versions, where Python has a single, free, compact implementation.



--Guido van Rossum저. (이강성 역)

Java (자바)
Javascript (자바스크립트)
Perl (펄)
Tcl (티클)
Smalltalk (스몰톡)
C++
Common Lisp and Scheme


--------------------------------------------------------------------------------
Python은 흔히 Java, JavaScript, Perl, Tcl 또는 Samlltalk와 같은 인터프리터 언어와 비교된다. C++, Common Lisp 그리고 Scheme과 같은 비교되 부각된다. 이 절에서 난 이들 언어를 간단히 비교할 것이다. 이 비교는 언어적인 측면에서만 다룬다. 실제적으로, 프로그래밍 언어의 선택은 다른 실세계 제약(비용, 유용성, 학습 그리고 선행 투자비용 혹은 감성적인 친근감까지도)에 의해 자주 언급되기도 한다. 이러한 면들은 아주 가변적이고, 이러한 면으로 비교를 한다는 것은 시간 낭비에 가깝다.

Java (자바)
일반적으로 Python 프로그램은 Java 프로그램 보다는 느리게 수행된다. 하지만 Python 프로그램은 개발하는 시간이 훨씬 적게 걸린다. Python 프로그램은 Java 프로그램보다도 3-5배 정도 코드가 짧다. 이 차이는 Python의 내장 고수준 데이터 형과 동적인 형결정 기능에서 기인한다고 생각한다. 예를 들면, Python 프로그래머는 인수나 변수의 형을 선언하는데 시간을 허비하지 않고, 구문적인 지원이 언어안에 내장되어 있는 Python의 강력한 다형질의 리스트(polymorphic list)와 사전 형은 거의 모든 Python 프로그램에서 유용하게 활용되고 있다. 실행시간 형결정으로 인해서 Python의 실행시간에 Java가 하는 것보다 좀더 많은 일을 한다. 예를 들면, a+b와 같은 식을 계산할 때, 먼저 컴파일시에 알려지지 않은 a와 b 객체를 검사하여 그들의 형을 알아내야 한다. 그리고 나서 적절한 덧셈 연산을 호출한다. 그 덧셈 연산은 객체에 따라 사용자에 의해 오버로드(overloaded)된 것일 수 있다. 반면에, Java는 효과적인 정수형, 실수형 덧셈을 한다. 하지만 a와 b의 변수선언을 요구하고, + 연산자에 대한 사용자 정의 연산자 오버로딩을 허용하지 않는다.

이러한 이유들로, Python은 '접착' 언어로서 아주 적당한 반면, Java는 저수준 구현 언어로 특성화 지을 수 있다. 사실 이 두 언어는 아주 훌륭한 조합을 이룬다. Java에서 개발된 요소(components)들이 Python에서 활용된다; Python 역시 Java로 구현되기 전에 그 프로토타입을 정하는데 활용된다. 이러한 형의 개발을 지원하기 위해, Java로 쓰여진 Python 구현(implementation)이 개발중이다. 이것은 Java에서 Python을 호출하고 그 반대도 가능하게 해준다. 이 구현으로, Python 소스코드는 Java 바이트코드로 (Python의 동적 의미를 지원하기 위한 실행시간 라이브러리의 도움으로)번역된다.

Javascript (자바스크립트)
Python의 '객체기반' 부분 집합이 대략 JavaScript와 동일하다. JavaScript와 같이 (그러나 Java와는 다르게), Python은 클래스안에 정의하지 않아도 되는, 단순한 함수와 변수를 사용하는 프로그래밍 스타일을 지원한다. 하지만 JavaScript는 이것이 지원하는 전부이다. Python은, 반면에, 훨씬 큰 프로그램을 클래스와 상속이 중요한 역할을 하는 진정한 객체 지향 프로그래밍 스타일을 통하여 더 좋은 코드 재사용을 하도록 지원한다.

Perl (펄)
Python과 Perl은 비슷한 배경에서 개발되었다(유닉스 스크립트언어에서 성장했다). 그리고 많은 비슷한 기능을 지원한다. 그러나 철학은 다르다. Perl은 보편적인 응용지향 태스크를 지원하는데 중심을 두었지만 (예:내장 정규식 표현, 파일 스캐닝과 보고서 생성 기능들), Python은 보편적인 프로그래밍 방법론 (자료구조 설계 및 객체지향 프로그래밍)을 지원한다. 그리고 프로그래머가 우와하고(elegant) 암호같지 않은 코드를 통해 일기 쉽고 관리하기 쉽도록 한다. 결과적으로, Python이 Perl과 가깝지만 그 원래 응용 영역을 침범하는 일은 많지 않다. 하지만 Python은 Perl의 적합한 응용분야 외에 많은 부분에서 적용성을 갖는다.

Tcl (티클)
Python과 같이 Tcl은 독립적인 프로그래밍 언어 분 아니라, 응용 확장언어(extension language)로도 사용된다. 하지만, 전통적으로 모든 데이터를 문자열로 처리하는 Tcl은 자료구조에 약하고 Python 보다 실행에 시간이 많이 걸린다. Tcl은 또한 모듈러 이름영역(name space)와 같은, 큰 프로그램을 쓰기에 적합한 특징들을 가지고 있지 않다. 따라서 Tcl을 사용하는 전형적인 큰 응용 프로그램은 특별히 그 응용에 필요한 C나 C++로 확장된 부분을 갖는다. 이에 반해서 Python 응용 프로그램은 '순수한 Python'으로만 흔히 기술된다. 물론 순수한 Python을 이용한 개발은 C나 C++부분을 쓰고 디버깅하는 것보다도 훨씬 빠르다. Tcl의 결점을 매우는 부분이 Tk 툴킷이다. Python은 Tk을 표준 GUI 라이브러리로 쓰도록 적용했다.

Tcl 8.0은 바이트코드를 도입하여 빠른 처리를 했고, 제한된 데이터 형 지원과 이름영역을 지원한다고 하지만 여전히 거추장스러운 프로그래밍 언어이다.

Smalltalk (스몰톡)
아마도 Python과 Smalltalk의 가장큰 차이는 Python이 보다 더 '주류(mainstream)' 구문을 가진다는 것이다. Python은 Smalltalk과 같이 동적인 형결정과 결합(binding)을 한다. Python의 모든 것은 객체이다. 하지만, Python은 내장 객체 형과 사용자 정의 클래스를 구별하고, 내장 형으로부터의 상속은 현재로서 허용하지 않는다. Smalltalk의 데어터 타입의 표준 라이브러리 모음은 훨씬 섬세한 반면, Python의 라이브러리는 인터넷과 WWW 세계 (email, HTML, FTP등) 에 적응하기 좋은 많은 기능을 제공한다.

Python은 개발환경과 코드 배포에 있어서 다른 철학을 갖는다. Smalltalk이 환경과 사용자 프로그램을 포함하는 통일된 '시스템 이미지'를 갖는데 반해, Python은 표준 모듈과 사용자 모듈을 다른 파일에 저장하여 쉽게 재배열되고 시스템 밖으로 배포될 수 있다. 한 결과를 예를 들면, GUI가 시스템 안에서 설계된 것이 아니므로, GUI를 붙이기 위한 한가지 이상의 선택이 Python 프로그램에 있다.

C++
Java에 대해서 이야기 한 대부분이 C++에도 적용된다. Python코드가 Java 코드보다 3-5배 짧으며, C++코드에 비해 5-10배 짧다!! 일 예로 한명의 Python 프로그래머는 C++프로그래머 두 명이 1년에 끝낼 수 없는 일을 두달만에 끝낼 수 있다. Python은 C++로 쓰여진 코드를 사용하는 접착 언어로 빛을 발한다.

Common Lisp and Scheme
이들 언어는 동적인 의미해석에서 Python에 가깝다. 그러나 구문해석 접근은 너무 달라서 매우 심한 논쟁거리가 될 만한 비교가 된다: Lisp의 구문적인 부족함이 장점일까 단점일까? Python은 Lisp과 같은 내성적인 능력(capabilities)이 있고, Python 프로그램은 아주 쉽게 프로그램 부분을 구성해서 실행할 수 있다는 것을 밝혀야겠다. 일반적으로, 실세계 실체가 결정적이다: Common Lisp은 크다(어떠한 관점에서도 그렇다). Scheme 세계는 많은 어울리지 않는 버전들로 나누어져있다. 그에 반해서 Python은 하나이고, 무료이고, 작게 구현되었다. 더 자세한 Scheme와의 비교에 관해선 Moshe Zadka가 쓴 Python vs. Scheme을 보라.

Open-source Eclipse barrels down Ajax path(Eclipse, Ajax와 스크립트 언어 전용의 프로젝트를 발표)

The Eclipse Foundation, an open-source consortium, on Tuesday detailed three projects designed to make Ajax-style Web development easier.

The Eclipse software is widely used for writing applications in Java and other programming languages. The Ajax projects, announced at the annual EclipseCon conference, are meant to make a wider number of tools available for JavaScript programming--used to make Ajax applications--as well as other so-called dynamic, or scripting, languages.

The Eclipse Rich Ajax Platform is a project that aims to build pre-written software, or frameworks, that give developers a consistent model for writing Ajax components, according to Eclipse.

The software will build off the existing Eclipse Rich Client Platform and be designed for writing Web-based, desktop and server applications.

In a separate project, Eclipse said that the latest version of the Eclipse Ajax Toolkit Framework now runs on Mac OS X, complementing existing versions on Linux and Windows.

In a third initiative, Eclipse released the code from the Eclipse Dynamic Languages Toolkit Project, which is designed to simplify the job of using Eclipse software to write applications in Python, Ruby and Tcl. The first release, available now, supports Tcl.

Meanwhile, the NetBeans project, which is the primary open-source rival to Eclipse, on Monday announced that by midyear it intends to release a plug-in to let developers write in Ruby programming. Until now, NetBeans has been for Java programming.

Separately, Oracle announced Tuesday that it has become a board member of the Eclipse Foundation.



<번역문>
오픈소스 단체 「이클립스 재단」(Eclipse Foundation)은 6일 (미국 시간), 「Ajax」 스타일의 웹 개발을 간략화 하는 목적을 지닌 3건의 프로젝트에 대해 발표했다.

「이클립스」(Eclipse) 소프트웨어는 자바를 포함한 다양한 프로그램 언어를 이용한 애플리케이션을 개발하는데 널리 이용되고 있다. 연차 컨퍼런스 「이클립스콘」(EclipseCon)에서 발표된 Ajax 관련 프로젝트 (Ajax 관련 애플리케이션 제작에 이용)는 자바스크립트나 다른 스크립트 언어 전용 툴을 개발하는 것을 목적으로 하고 있다.

첫 번째 모델로 발표된 「이클립스 리치 Ajax 플랫폼」(Eclipse Rich Ajax Platform)은 Ajax 컴퍼넌트를 작성할 때, 일관된 모델을 개발자에게 제공할 수 있도록 재이용 가능한 소프트웨어를 미리 준비하는 것을 목표로 하는 프로젝트이다.

이 프로젝트는 기존의 「이클립스 리치 클라이언트 플랫폼」(Eclipse Rich Client Platform)라는 이름으로 웹 기반 애플리케이션, 데스크톱 애플리케이션, 서버 애플리케이션의 작성을 위해 이용하는 소프트웨어를 개발하는데 사용됐다.

두 번째는, 지금까지 리눅스와 윈도우즈에서 실행이 되었던 「이클립스 Ajax 툴킷 프레임워크」(Eclipse Ajax Toolkit Framework)의 최신 버전을 발표했다. 새로운 버전은 맥 OS에서 실행이 가능하다.

세 번째로 「이클립스 다이내믹 랭귀지 툴킷 프로젝트」(Eclipse Dynamic Languages Toolkit Project)의 코드가 공개되었다. 이 프로젝트의 목적은 이클립스를 이용해 Python, Ruby, Tcl의 개발 작업을 용이하게 하는 것이다. 최초로 릴리스 되는 버전은 Tcl을 지원하고 있다.

한편, 오픈소스 프로젝트로서는 이클립스 최대 라이벌인 「넷빈즈」(NetBeans)는 5일, Ruby에 의한 개발을 가능하게 하는 플러그인을 2007년 중순에 릴리스 할 예정이라고 밝혔다. 현재 넷빈즈는 자바를 기반으로 한 개발환경을 지원했다.

한편, 오라클은 6일, 이클립스 재단에 참여했다고 발표했다. @

2007년 3월 8일 목요일

Python을 배워야 하는 이유

cinsk의 그림

개인적으로나 업무상으로나 여러 스크립트 언어를 쓸 경우가 많은데, Python에 가장 큰 점수를 주고 싶습니다. Eric Raymond씨도 "How To Become A Hacker"란 글에서 프로그래밍을 배우고 싶다면 python을 배우라고 쓴 적이 있습니다. 저도, 꽤 많은 언어를 쓰고 있다고 생각하지만, Python만큼 강력하며, 쉽게 배울 수 있는 언어를 본 적이 없습니다. Python 언어에 대한 자세한 사항은 Python 관련 책이나 문서에서 충분히 얻을 수 있을 것이므로, Python에 대한 특징을 바라보는 입장에서 정리해 보았습니다. 여가 시간이 있거나, 배우고 싶은 언어를 찾고 있다면, Python을 익혀보기를 강력하게 추천합니다.


Programming에 대한 경험이 없는 사람의 경우



  • 복잡한 문법(어느 정도 주관적인 기준으로 바라본 것이긴 하지만)을 필요로 하는 Perl이나 C, C++에 비해 문법이 간단하다. 따라서 배우기 쉽다는 장점이 있다.

  • C와 비교했을 때, 포인터와 같은 배우기 힘든 개념이 없기 때문에, 상대적으로 많은 시간을 프로그램 구조와 디자인 등에 투자할 수 있다.

  • C++과 비교했을때, OOP의 기본적인 사항들은 더욱 빠르게 배울 수 있다.


  • 기본적으로 인터프리터 방식이기 때문에, 코드의 결과를 바로바로 확인해 볼 수 있고, 다양한 운영체제를 지원한다. 또한 원할 경우, 바로 실행 파일(.exe)을 만들어 낼 수도 있다.


  • 다양한 라이브러리를 지원하기 때문에, 상대적으로 적은 양의 코드만으로도 GUI 프로그램, game, CGI 프로그램등을 빠르게 만들 수 있다.



C/C++ 프로그래머인 경우



  • C/C++ 그리고 Bourne shell과 유사한 문법을 가지고 있기 때문에, 기타 다른 스크립트 언어에 비해 익히는 속도가 매우 빠르다.


  • OS에 관련된 기능들은 (예: POSIX interface) 대부분 C/C++에서 제공되는 함수와 같은 이름을 쓰고, 심지어 인자 타입이나 의미까지 비슷한 경우가 많기 때문에, 익혀야하는 함수들이 타 스크립트 언어와 비교할 때 많지 않다.


  • class, virtual function, 제한적인 operator overloading을 지원하기 때문에 C++에서 썼던 디자인 방식 그대로 적용할 수 있다.


  • Mixed language programming -- Python은 기타 다른 스크립트 언어에 비해 C/C++로 python module을 작성하기가 매우 쉽다. (어느 정도 주관적인 견해 포함)


  • 제한적이나마 lambda expression을 제공하기 때문에, LISP/Scheme 등에 익숙한 사람들도 비슷한 코드를 쉽게 만들 수 있다. map(), apply() 함수 제공, closure 제공


  • 다른 스크립트 언어에 비해 문서화가 잘 되어 있으며 (Tutorial, Library Reference, Language Reference 제공), 문법 자체에 LISP/Scheme과 마찬가지로 documentation string을 집어 넣을 수 있고, built-in 함수인 dir()을 쓰면, 함수, 모듈, 오브젝트가 제공하는 심볼 테이블을 바로 볼 수 있기 때문에 다른 스크립트 언어를 쓸 때에 비해, 따로 문서를 찾아보는 빈도가 낮아진다.


  • 함수, 클래스 또는 변수에 Decorator를 직접 제작할 수 있다. Decorator란 C/C++ 문법상 qualifier에 해당하는 것으로 다양한 wrapper를 만들거나 class인 경우 static, class method를 지정할 수 있다. Python 2.4 Decorators 참고



기타 사항



  • Dictionary (Postscript의 dictionary나 다른 언어의 associative array에 해당) 타입이 제공된다. 또한 immutable list에 가까운 tuple 타입이 제공되며, 서로 대입이 가능하기 때문에, 한 줄의 코드로 변수 값을 치환할 수도 있다.


  • 모든 타입은 repr() 연산을 써서 문자열로 변경할 수 있다. 또한 eval() 연산을 써서 문자열을 평가한 후 python type으로 불러 올 수 있다. 따라서 이 기능과 여러 DB 모듈을 잘 활용하면, 모든 Python type을 DB에 저장/로드하는 것이 가능해진다.


  • GTK+ binding이 제공되며, GTK+ C API 또는 C++ API(gtkmm)에 비해 훨씬 간단하게 GUI application을 작성할 수 있다. 또한 이미 GTK binary가 MS Windows 용으로 제공되기 때문에, 간단하게 Windows application도 만들 수 있다. (Pygtk 참고)


  • Python은 SDL binding을 제공하기 때문에, 게임을 만들어 보고 싶은 개발자에게도 최적의 언어라고 할 수 있다. (PyGame 참고)


  • Python 자체적으로 cgi, urllib, httplib 등의 모듈을 제공하며, 다양한 XML parsing module도 제공하며, Berkeley DB, GDBM, sqlite, oracle, ODBC등의 DB 모듈도 제공하기 때문에, Web application을 쉽게 만들 수 있다.


  • zlib, bz2, gzip, zipfie, tarfile등의 모듈을 자체적으로 제공하기 때문에 압축 파일 관련 처리가 매우 쉽다.


  • 다양한 os 기능과 함께 curses 모듈도 제공, terminal에서 실행되는 installer나 administrative tool을 만들기가 편리하다.


  • Built-in source debugger인 pdb를 제공한다.


  • 실제 개발할 때 Emacs(Pymacs, python-mode package 활용)에서 완벽하게 interpreter를 지원하며, 다양한 형태의 (buffer, region)등을 python 실행 결과를 확인할 수도 있다. 또한 Emacs 내부에서 디버거를 실행할 수 있으며(M-x pdb), Web browser w3m package를 쓰면 따로 도움말을 보기 위해 browser를 띄울 필요도 없기 때문에 매우 편리하다! (python-mode, w3m, emacs-w3m 참고)

2007년 3월 6일 화요일

What Is Web 2.0

tim oreilly 2001년 가을 닷컴버블의 붕괴는 웹에 이정표를 남겼다. 버블과 연이은 신경제의 붕괴는 모든 기술 혁명이 갖는 공통된 특성들을 보여줬으며 사람들은 웹이 지나치게 과장되었다고 결론내렸다. 이러한 침체는 우위에 있는 기술이 주역을 차지할 준비가 되었음을 나타내는 전형적인 이정표를 의미한다. 닷컴 옹호론자들이 갑자기 해고되는가하면 그들의 성공스토리는 신경제의 힘을 보여주는 현실에서 무엇이 그들을 갈라놓았는지 이해되기 시작했다.

"웹 2.0"의 개념은 오라일리와 미디어라이브 인터내셔널의 컨퍼런스 브레인스토밍 세션에서 시작되었다. 웹 개척자이자 오라일리 부사장인 데일 도허티(Dale Dougherty)는 웹 2.0이 기존의 웹과 충돌하는 것이 아니며, 웹은 지금보다 더 지속적으로 중요해질 것이며, 웹은 놀랄만한 규칙성을 갖고 등장하는 새로운 응용 프로그램과 사이트를 갖게 될 것이라고 언급했다. 뿐만 아니라, 닷컴붕괴이후 살아남은 회사들은 어떤 공통적인 것을 갖고 있다. 웹에 일종의 전환점을 찍은 닷컴 붕괴를 어떻게 표현할 수 없을까? 예를 들어, "웹 2.0"으로 부르는 것은 어떨까? 우리는 이런 의견에 동의했고, 그 결과로 웹 2.0 컨퍼런스가 탄생했다.

그로부터 6개월이 지난후에 "웹 2.0"이라는 용어는 구글에서 950만건 이상 인용되고 있는 것에서 알 수 있는 것처럼 분명 어떤 위치를 자리잡고 있다. 그러나, 일부 사람들은 의미없는 마케팅 유행어라고 비난하는가 하면, 새로운 개념(conventional wisdom)으로 받아들이는 것처럼 웹 2.0이 무엇을 의미하는가에 대한 많은 의견차이가 존재한다.

그래서 여기서는 우리가 말하는 웹 2.0이 무엇을 의미하는지 정리해보려 한다.
초기 브레인스토밍에서 우리는 다음 예제를 사용해서 웹 2.0의 개념을 기술했었다.
null

이 리스트는 계속해서 늘어날 수 있다. 그러나 무엇으로 웹 1.0으로서의 응용 프로그램 또는 접근방법과 웹 2.0을 구분할 수 있는가? (많은 회사들이 웹 2.0이 무엇을 의미하는지 이해도 하지 않고 마케팅 유행어로 붙여넣기 하는 웹 2.0 밈(Meme)[1] 이 널리 퍼져있기 때문에 이 질문은 성급한 질문이다. 대다수의 유행어에 중독된 시작은 분명 웹 2.0이 아니며, 우리가 웹 2.0으로 정의한 넵스터나 비트토런트와 같은 일부 응용 프로그램은 정확히 웹 응용프로그램이 아니기 때문에 웹 2.0에 대한 질문에 답하는 것은 어렵다.) 우리는 웹 1.0의 성공스토리와 새로운 응용 프로그램들의 가장 흥미로운 부분을 다양한 각도로 설명하면서 웹 2.0의 원칙들을 세밀히 살펴볼 것이다.

([1] 역주. 밈(Meme): "이기적 유전자"에서 유전자(Gene)의 발음을 빗대 말들어진 단어로 유전자와 같이 세포로부터 전해지는 것이 아니라 행동의 모방을 통해 전해지는 것으로 여겨지는 문화의 요소로 유행어, 패션의 유행, 노래등이 있다.)


1. 플랫폼으로서의 웹
다른 중요한 컨셉과 마찬가지로 웹 2.0을 의미하는 일정한 경계는 존재하지 않지만 중력과 같은 핵심이 존재한다. 중심부로부터의 거리에 따라 웹 2.0의 원칙들을 설명하는 사이트로 구성된 행성계(solar system)[2] 로 묶어서 원칙이나 원리들의 집합으로 웹 2.0을 그려볼 수 있다.

([2] 역주: 태양계는 The Solar System, 행성계는 a solar system이며 원문은 a veritable solar system이다.)

그림1

그림1은 오라일리 미디어의 컨퍼런스 FOO 캠프의 브레인스토밍 세션에서 만든 웹 2.0의 밈맵(Meme Map)이다. 많은 작업이 진행중이지만 많은 아이디어들을 웹 2.0의 중심부로부터 방사형의 형태로 나타냈다.

예를 들어, 2004년 10월 최초의 웹 2.0 컨퍼런스에서 존(John Battelle)과 나는 개회사에서 웹 2.0의 초기 개념들을 나열했었다. 이러한 원칙의 첫번째가 "플랫폼으로서의 웹"이었다. "플랫폼으로서의 웹은" 마이크로소프트와의 치열한 경쟁 끝에 불꽃으로 산화환 웹 1.0 시대의 넷스케이프가 외치던 구호이기도 했다. 뿐만아니라, 초기 웹 1.0의 대표적인 예로 더블클릭과 아카마이(Akamai)는 플랫폼으로서의 웹을 다루려한 개척자들이다. 사람들은 광고 제공을 "웹 서비스"라고 생각하지 않지만, 실제로 "광고 제공(Ad serving)"은 최초로 널리 배포된 웹 서비스 였으며, 최초로 널리 배포된 매쉬업(mashup)[3] 이다. 모든 배너 광고는 다른 웹 사이트의 독자들에게 하나로 통합된 페이지를 전달하기 위해 두 웹 사이트간에 유기적으로 결합되어 제공된다. 아카마이는 플랫폼으로서의 네트워크를 다룬다. 아카마이는 스택 레벨의 보다 깊은 곳에서 투명한 캐싱(Transparent Caching)[4] 을 구축하고, 대역폭 혼잡을 완화하는 컨텐트 전달 네트워크를 만들어낸다.

([3] 역주: 매쉬업(mashup)은 최근에 통용되기 시작한 신조어로 여러 서드 파티 응용 프로그램의 API를 이용하여 만들어진 웹 응용 프로그램을 의미한다.)

([4] 역주: 투명한 캐시(Transparent Caching)은 프록시 서버를 지정하지 않고, 간단한 설치로 많은 이용자들이 캐시 서비스를 이용하게 해주는 것을 의미한다. 이와 반대의 의미로 Proxy Caching이 있다.)

그럼에도 불구하고, 이들 개척자들은 새로운 참가자들에게 새로운 플랫폼의 특성에 대한 보다 깊은 이해를 제공함으로써 같은 문제에 대해 보다 나은 해결책을 가질 수 있었기 때문에 유용한 차이를 제공한다. 더블클릭과 아카마이는 모두 웹 2.0의 개척자들이며, 웹 2.0 디자인 패턴을 살펴보면서 보다 많은 가능성들에 대한 깨달음을 얻을 수 있다.

이제, 이들 세 가지 요소 각각을 살펴보면서 각 요소의 차이점들을 살펴보자.

넷스케이프 vs 구글
넷스케이프가 웹 1.0의 표준 전달자라면 구글은 분명 웹 2.0의 표준 전달자이다. 가능하다면 넷스케이프와 구글의 IPO(기업공개)가 각 시대의 이벤트로 기록되었다는 점도 이들을 대표한다. 따라서, 이들 두 회사와 그 위치를 비교해보자.

넷스케이프는 오래된 소프트웨어 패러다임의 관점에서 "플랫폼으로서의 웹"을 구상했다. 그들의 기념비적인 제품은 웹 브라우저, 즉 데스크탑 응용 프로그램이었다. 그들의 전략은 브라우저 시장에서의 지배력을 이용해서 비싼 가격의 서버 제품을 위한 시장을 창출하는 것이었다.

이론적으로 PC 시장에서 마이크로소프트가 그랬던 것처럼 브라우저에서 컨텐트와 응용 프로그램을 보여주기 위해 표준보다 강력한 지배력을 갖는 것이 넷스케이프에 같은 시장 지배력을 가져다 줄 것이라 예상했다. 자동차가 없던 시대에 자동차를 수레의 확장으로 여겨 "말없는 수레(horseless carriage)"라고 부르는 것처럼, 넷스케이프에서는 데스크탑을 대체할 웹탑을 내놓았다. 웹탑에 업데이트 정보를 알려주고, 넷스케이프 서버를 구매한 정보 제공자(IP ? Information Providers)가 웹탑에 애플릿을 전달하는 계획을 세웠었다.

결국, 웹 브라우저와 웹 서버는 필수품이 되었고, 가치는 웹 플랫폼 위에서 전달되는 서비스로 이동해버렸다.

반면에, 구글은 판매되거나 패키지로 전달되지 않지만 서비스를 이용하기 위해 소비자가 직간접적으로 비용을 지불해야 하는 순수 웹 응용프로그램으로 시작했다. 구글에서는 기존 소프트웨어 산업이 갖는 특징들이 존재하지 않는다. 예정된 소프트웨어 발표일도 없이 지속적인 개선만이 존재한다. 라이선스나 판매는 없으며 사용만 존재한다. 소비자가 자신의 시스템에서 소프트웨어를 실행하기 위해 다른 플랫픔으로 포팅하는 일도 없으며, 오픈소스 운영체제와 회사 사람들외에는 본적이 없는 자체 개발한 응용 프로그램과 유틸리티를 운영중인 대규모 PC들만 존재한다.

실제로, 구글은 넷스케이프에서 필요하지 않았던 능력 즉, 데이터베이스 관리가 필요하다. 구글은 단순히 소프트웨어 도구 모음이 아니라 특화된 데이터베이스를 의미한다. 데이터가 없으면 도구는 무용지물이다. 소프트웨어가 없다면 데이터는 관리할 수 없다. 소프트웨어를 배포할 필요없이 수행만 하면되고, 데이터를 수집하고 관리하는 능력없이는 소프트웨어가 쓸모없어지기 때문에 이전 시대에 지배력의 수단이었던 소프트웨어 라이선스 정책이나 API에 대한 제어는 무의미해졌다. 실제로, 소프트웨어의 가치는 관리할 수 있는 데이터의 규모에 비례한다.

구글의 서비스는 대규모 인터넷 서버를 통해 전달되지만 서버는 아니며, 브라우저안에서 사용자들에게 경험을 제공하지만 브라우저도 아니다. 대표적인 검색 서비스는 사용자가 검색할 수 있는 컨텐트를 제공하는 것도 아니다. 이는 마치 전화기 자체에서 일어나는 것이 아니라 전화 통화의 양쪽에서 일어나는 전화통화와 비슷하다. 구글은 브라우저와 검색 엔진, 대상 컨텐트 서버 사이의 공간에서 사용자와 온라인 경험 사이를 연결하는 연결자 또는 미들맨과 같이 동작한다.

넷스케이프와 구글 모두 소프트웨어 회사로 설명할 수 있겠지만, 넷스케이프는 1980년대 소프트웨어 혁명기에 시작한 로터스, 마이크로소프트, 오라클, SAP와 같은 세상에 있었다면, 구글의 동료들은 이베이, 아마존, 냅스터, 더블클릭, 아카마이와 같은 인터넷 응용 프로그램들이다.


더블클릭 vs 오버추어와 애드센스
구글과 마찬가지로 더블클릭은 인터넷 시대의 진정한 산물이다. 서비스로서의 소프트웨어를 이용하고, 데이터 관리에 있어 핵심역량을 갖고 있으며, 위에서 언급한 것처럼 웹 서비스라는 이름을 갖기도 전에 웹 서비스 분야에서의 개척자였다. 그러나, 더블클릭은 사업 모델로 인해 절대적인 제약을 갖고 있다. 더블클릭은 참여가 아닌 발행, 소비자가 아닌 광고주가 지배하며, 규모가 중요하다고 여겼던 90년대의 일반적인 개념을 받아들였으며, 인터넷은 미디어메트릭스(MediaMetrix)나 기타 웹 광고 기록에 의해 측정된 상위 웹 사이트들에 의해 점차적으로 지배되고 있었다.

결과적으로 더블클릭은 자신들의 소프트웨어를 2000곳 이상에 성공적으로 구현했다고 인용하고 있다. 반면에, 야후 검색 마케팅(이전에는 오버추어)와 구글 애드센스(AdSense)는 각지에 수십만의 광고주를 제공하고 있다.

오버추어와 구글의 성공은 크리스 앤더슨(Chris Anderson)이 롱테일(Long Tail)이라 언급한, 웹 컨텐트들의 대부분을 차지하는 작은 사이트들의 집단의 힘(collective power)을 이해하는 것에서 알 수 있다. 더블클릭이 판매하는 것은 전형적인 판매 계약서가 필요하고, 그들의 시장을 몇 천개의 큰 웹 사이트들로 시장이 제약되어 있다. 오버추어와 구글은 실제로 거의 모든 웹 페이지에 광고를 둘 수 있음을 이해하고 있다. 뿐만 아니라 발행인/광고 대행사에게 친숙한 배너 광고, 팝업과 같은 광고 포맷을 지양하고, 소비자에게 친숙한 텍스트, 문맥 기반, 최소한도로 사용자에게 간여하는 광고를 제공한다.

웹 2.0의 레슨: 전체 웹 특히, 중심이 아니라 주변부에, 머리가 아니라 긴 꼬리에 도달하기 위해 고객 스스로 사용할 수 있는 서비스와 알고리즘을 이용한 데이터 관리를 제공하라

플랫폼이 응용 프로그램을 이긴다
마이크로소프트는 과거 라이벌과의 경쟁에서 플랫폼 카드를 내놓은 것으로 시장을 지배하고 있는 응용 프로그램들을 물리치는데 성공해왔다. 마이크로소프트는 윈도우를 이용해서 로터스 1-2-3을 엑셀로, 워드퍼펙트는 워드로, 넷스케이프 네비게이터는 인터넷 익스플로러로 대체했다.

그러나, 이번에 벌어지는 충돌(clash)은 플랫폼과 응용프로그램간의 충돌이 아니라 극단적으로 다른 비즈니스 모델을 가진 두 플랫폼간의 충돌이다. 한쪽은 단독 소프트웨어 제공자로 많은 시스템에 설치되는 것을 기반으로하며, 긴밀하게 통합된 운영체제와 API를 통해서 프로그래밍 패러다임에 대한 제어권을 갖고 있으며, 다른 한쪽은 소유자 없는 시스템으로 프로토콜 집합에 의해 상호 연결되어 있으며, 협동을 위한 오픈 표준과 화합(agreements)[5] 을 기반으로 하고 있다.
([5] 역주: agreements는 협약의 의미로 번역되는 것이 대부분이다.)

윈도우는 소프트웨어 API를 통한 전유권(proprietary control)의 정점을 대표한다. 넷스케이프는 마이크로소프트가 다른 경쟁자들에게 사용했던 것과 같은 방법을 사용해서 마이크로소프트로부터 제어권(control)을 빼앗으려 했지만 실패했다. 그러나, 웹의 오픈 표준을 유지하고 있는 아파치는 지속적으로 번영하고 있다. 플랫폼 vs 응용 프로그램이 아니라 플랫폼 vs 플랫폼인 지금의 경쟁은 더 이상 불공평한 것이 아니다. 이제 문제는 어떤 플랫폼이 될 것인가, 즉, 어떤 아키텍처, 어떤 비즈니스 모델이 앞에 놓여있는 기회에 더 적합한가이다.

윈도우는 초기 PC 시대의 문제들에 대한 뛰어난 해결책이었다. 윈도우는 이전까지 업계를 괴롭혀왔던 많은 문제들을 해결했으며, 응용 프로그램 개발자이 동등한 조건으로 자유롭게 경쟁하는 장(the playing field)을 마련해 주었다. 그러나, 단일 업체가 모든 것을 제어하는 독점적인 접근 방법은 더 이상 해결책이 아니며, 바로 그게 문제가 되었다. 플랫폼으로서의 인터넷과 같은 커뮤니케이션 지향 시스템에서는 상호운영성이 요구된다. 단일 업체가 모든 상호 작용의 양측을 제어할 수 없다면, 소프트웨어 API에 사용자가 갇힐 가능성은 낮을 것이다.

자신의 응용 프로그램안에 가둘 기회를 엿보고 있는 웹 2.0 벤더는 정의상 플랫폼을 제어함으로써 얻게 될 것이지만, 더 이상 플랫폼의 장점을 가질 수 없을 것이다.

감금(lock-in) 효과나 경쟁 우위(competitive advantage)와 같은 기회가 없다고 말하는 것은 아니다. 그러나, 이런 것들을 소프트웨어 API나 프로토콜에 대한 제어권을 통해서 찾을 수 없다고 얘기하는 것이다. 이제 새로운 게임이 시작된 것이다. 웹 2.0시대에 성공하는 회사는 PC 소프트웨어 시대의 법칙으로 돌아가려 시도하는 회사가 아니라 게임의 법칙을 이해하는 회사들이 될 것이다.

놀라운 일은 아니지만, 다른 웹 2.0 성공 스토리들도 이와 같은 행동들을 보여주고 있다. 이베이(eBay)는 자동 중개자처럼 행동하는 개인들 간에 소액 거래를 가능하게 했다. 법적인 이유로 문을 닫긴 했지만 냅스터는 중앙집중방식의 노래 데이터베이스를 구축하는 대신에 노래를 다운 받는 사람이 서버가 되어 업로드를 하는 식으로 네트워크를 성장시키는 시스템을 구축하는 것으로 네트워크를 구축했었다.


아카마이(Akamai) vs 비트토런트(BitTorrent)
더블클릭(DoubleClick)과 마찬가지로 아카마이는 꼬리가 아니라 머리와, 모서리가 아닌 중심부와의 비즈니스에 최적화되어 있다. 아카마이는 중심부에 있는 수요가 많은 사이트들에 대한 액세스를 경감시키는 것으로 웹의 주변부에 있는 개인들에게 이익을 제공하는 한편, 중심 사이트로부터는 수익을 모아간다.

P2P 운동에서 다른 선구자들과 마찬가지로 비트토런트는 인터넷 탈중심화(decentralization)에 대해 급진적인 접근방법을 취했다. 모든 클라이언트는 클라이언트인 동시에 서버이다. 파일은 다양한 장소에서 제공받을 수 있는 조각으로 쪼개지고, 다른 사용자들의 대역폭과 데이터를 제공하기 위해 다운로더들의 네트워크를 투명하게 이용한다. 실제로, 인기가 있는 파일일수록 더 많은 사용자들이 완전한 파일을 만들 수 있는 조각들과 대역폭을 제공하기 때문에 더 빠르게 다운로드할 수 있다.

따라서, 비트토런트는 웹 2.0의 핵심원칙을 설명하고 있다: "더 많은 사람들이 사용할 수록 서비스는 자동으로 더욱 우수해진다." 아카마이는 서비스를 향상시키기 위해 서버를 추가해야하지만, 비트토런트는 모든 사용자가 자신의 리소스를 전체에 내놓으면 된다. 지능형 브로커처럼 서비스가 동작하고, 사용자들을 상호 연결시키고, 사용자들의 힘을 이용하는 것에는 협동에 대한 기본 윤리, 즉 암묵적인 "참여의 아키텍처"가 있는 것이다.

2. 집단 지능(collective intelligence)을 이용한다
웹 1.0 시대에 태어나서 웹 2.0 시대를 이끌어가면서 남아있는 거인들의 성공뒤에는 중앙화 원칙(central principle)이 있으며, 이것이 바로 거인들이 집단 지능을 이용하기 위해 웹의 힘을 받아들이고 있다.

  • 하이퍼링크는 웹의 근본이다. 사용자가 새로운 컨텐트, 그리고 새로운 사이트들 추가함에 따라, 컨텐트를 발견하고, 그것을 링크하는 다른 사용자에 의해 웹의 구조에 연결된다. 두뇌에서 시냅스가 많이 형성될수록 연상작용은 반복 또는 강화에 의해 더 강력해지는 것처럼, 모든 웹 사용자의 집단 행동의 결과로 웹의 연결은 유기적으로 성장한다.

  • 첫번째 인터넷 성공 신화인 야후는 수천개의 베스트 사이트들의 카탈로그, 또는 디렉토리 링크를 제공하면서 시작했으며, 현재는 수백만의 웹 사용자를 갖고 있다. 야후가 다양한 종류의 컨텐트를 생산하는 비즈니스 방식으로 옮겨가는 동안, 네트워크 사용자들의 집단 작업에 대한 포탈의 역할은 가치의 중심으로 남아있다.

  • 검색분야에서 의론의 여지없이 빠르게 검색시장의 리더가 된 구글의 눈부신 도약은 보다 나은 검색 결과를 제공하기 위해 문서의 특징을 파악하는 대신 웹의 링크 구조를 이용한 페이지랭크(PageRank) 때문이었다.

  • 이베이의 상품은 사용자들의 집단 활동에 의한 것이다. 웹 그 자체와 같이 이베이는 사용자들의 행위에 반응하면서 유기적으로 성장하였다. 회사의 역할은 사용자 행위가 발생했을 때 이를 실행하는 도구로 동작하는 것이었다. 뿐만아니라, 이베이의 경쟁 우위는 매력이 심각하게 감소되지 않는(significantly less attractive) 유사한 서비스를 제공하는 새로운 참가자를 만들어 내는 구매자와 판매자의 임계 집단(Critical Mass)에 있다.

  • 아마존은 반즈앤노블 같은 경쟁자와 동일한 상품들을 판매하며, 상품의 생산자로부터 동일한 상품 설명, 커버 이미지, 편집 내용을 받는다. 그러나, 아마존은 사용자 참여의 과학을 사용한다. 아마존은 사용자 리뷰 평가를 갖고 있을 뿐만 아니라, 거의 모든 페이지에서 다양한 방법으로 사용자를 참여시키기 위한 제안을 한다. 게다가, 보다 나은 검색 결과를 보여주기 위해 사용자 행위를 사용한다. 반즈앤노블 검색이 해당 회사의 상품이나 스폰서 결과로 유도하고 싶어하는 것과 달리 아마존은 판매지수와 아마존 내부에서 상품 주변의 "흐름(flow)"이라 부르는 다양한 요소들에 기반한 실시간 계산 결과에 따라 "가장 인기있는" 상품을 보여준다. 보다 많은 사용자가 순위 시스템에 참여하기 때문에 아마존의 판매고가 경쟁자들의 판매고를 크게 앞지르는 것은 당연하다.
    이제, 이런 통찰등을 선택하고, 앞으로 이를 확장해나갈 혁신적인 회사들은 웹에 흔적들 만들고 있는 중이다.

  • 위키피디어(Wikipedia)는 웹 사용자가 내용을 추가할 수 있다는 생각지도 못한 생각에 기반한 온라인 백과사전으로 오픈 소스 소프트웨어의 에릭 레이몬드의 격언 "많은 사람들이 검토할 수록 버그는 줄어들 것이다"을 컨텐트 작성에 적용한 신뢰에 대한 극단적인 실험이다. 위키피디어는 이미 상위 100개 사이트에 들었으며, 머지않아 상위 10개 사이트에 들어갈 것이라 예상하고 있다. 이것은 컨텐트 작성의 원동력에 깊은 변화를 가져왔다.

  • 최근에 많은 주목을 받고 있는 두 회사, 델리셔스(del.icio.us)와 플리커(Flickr.com) 같은 사이트들은 일부 사람들이 포크소노미(Folksonomy)라 부르는 개념을 개척하고 있다. 이들 회사는 사용자가 마음대로 선택한 키워드를 사용해서 사이트를 집단 카테고리화하는 스타일을 제공하며, 이를 종종 태그(tags)라 부른다. 태깅을 사용하면 경직된 카테고리와 달리 태그를 사용하는 두뇌들의 연관관계들이 중첩되는 것을 허용한다. 이런 예로 강아지(puppy)에 대한 플리커 사진은 "puppy"나 "cute" 둘 다 태그로 지정할 수 있다. 이는 사용자 행위가 생성한 자연적인 정보에 따른 검색을 가능하게 한다.

  • Cloudmark 같은 협업형 스팸 필터링 제품은 무엇이 스팸이고 무엇이 스팸이 아닌지에 대한 이메일 사용자 개개인의 결정을 취합하여 필터링하기 때문에 메시지 그 자체에 대한 분석에 기반한 시스템보다 성능이 뛰어나다.

  • 가장 위대한 인터넷 성공 스토리는 자신들의 상품에 대해 광고하지 않는다. 성공 스토리에 대한 인용에 의해 "구전 마케팅(viral marketing)"- 사람에게서 사람으로 직접적으로 전파되는 추천-이 영향을 발휘한다. 사이트나 상품에 대한 말을 꺼내기 위해 광고에 의존한다면 그것은 웹 2.0이 아니다.

  • 대부분의 웹 서버에서 사용되는 리눅스, 아파치, MySQL, Perl, PHP, Python 코드를 포함해서 웹 인프라스트럭쳐의 대부분은 오픈 소스의 Peer-production에 의존한다. 이들 자체는 각각의 집단이지만 넷을 통한 지능형을 가능하게 한다. 소스포지(sf.net)에는 10만개 이상의 오픈 소스 소프트웨어 프로젝트가 있으며, 누구든지 프로젝트를 추가할 수 있으며, 코드를 다운로드 받고 사용하는 것이 가능하다. 새로운 프로젝트는 사용자가 자신의 코드를 내놓음으로써 주변부에서 중심부로 이동하는 길이 열려있다. 유기적인 소프트웨어 적응 과정은 전적으로 구전 마케팅에 의존한다.

[6] 역주 참고

  • 포크소노미(Folksonomy)는 사람들(Folks)과 분류법(Taxonomy)의 합성어로 사람들에 의한 분류법을 의미하며, 여기에는 델리셔스등의 태깅에서 키워드까지의 범주들이 모두 포함될 수 있다. 델리셔스, 플리커, 43 Popular Things, 테크노라티와 같은 태깅 적용에 관심이 있다면 TagCloud를 방문하기 바란다.(Tag은 "택"이며 "태그"는 아닌것처럼 TagCloud는 "택클라우드"여야 한다)
  • 위키피디어 포크소노미
  • Lastmind.net의 Folksonomy
교훈: 사용자 기여에 의한 네트워크 효과는 웹 2.0 시대에 시장 지배력의 핵심이다.@


이글의 관련글(트랙백) 주소 :: http://network.hanbitbook.co.kr/tb_response.php?bi_id=1141


Web2.0 과연 기대해 볼만 한가?

지난 2월 16일 오전 10시부터 오후 6시까지 코리아인터넷닷컴과 풀루토미디어가 주최한 Web2.0 컨퍼런스에 다녀왔다. 기대만큼 실망도 컸지만 웹2.0의 붐만큼은 느낄수 있었다. 90년대 후반의 벤처열풍이 다시 일어나기 바라며, 간단하게 웹2.0에 대한 인용을 정리해본다.

"웹2.0은 사람들이 참여해서 공유하고 의견을 나누는 것이 기본이며, 시민 저널리즘 같은 것이다. 가장 중요한 부분은 소셜 네트워크와 같은 특징이다. 또한 개방형 API를 통해 자유롭게 새로운 서비스를 구축하도록 할 수 있는데, 이를 이용하면 Flickr의 계정들을 유지하면서 전혀 다른 UI와 포맷으로 서비스를 만들 수도 있다. "- 플리커 공동창업자 Caterina Fake

"웹2.0은 버블이 아닌 강렬한 혁신의 시대에 나타난 붐이다. 가장 중요한 것은 사용자가 더욱 더 콘텐츠를 창조하고 생성한다는 것이다. 사용자를 강력하게 만드는 혁신.." - 클라이너 퍼킨스 벤처캐피탈리스트 존 도어

"플리커를 부러움을 가지고 봤다. 이것이 웹이 가야할 방향처럼 느꼈다."- 야후 제리양

" 웹2.0의 가장 매력적인 점은 한 손에는 웹을 엄청 변화시킬 사용자 제공 컨텐츠를, 다른 손에는 기업에 진정한 충격을 줄 협력적 상호작용과 ASP를 위한 웹 서비스를 가지고 있다는 점이다." - 리차드 포맨, RDF Ventures

"웹2.0은 구 시장에 대한 새로운 접근" - 구글스토리의 저자, John Battelle

"웹2.0은 스캔들이다." - 송관 (^^)

[KOPHINUS ™ WebSite]


web2.0 Information

Source : ZDNet Web2.0 Explorer: What’s Platform

오는 10월 5일~7일간 샌프란시스코에서 Web2.0 컨퍼런스가 열리는데 많은 사람이 Web2.0이라는 것이 무엇인지 물어본다. 많은 사람들이 다른 관점에서 이야기 하고 있어서 이 질문에 답하기란 쉽지 않다. 가장 일반적인 설명이 Web2.0은 개발 플랫폼으로서 웹이라고 말하는 것이다.

Web2.0이 XML, API, Ajax 라는 기술적 용어들 때문에 비 기술자를 위해서 좀 더 쉽게 풀이할 필요가 있다고 생각된다. 또한 사용자 생산 컨텐츠(UCC), 협업 작업, 서비스 혼합, 사용자가 데이터를 직접 제어 한다는 주제 또한 어떻게 ‘플랫폼’이라는 개념과 관계가 있는가? 위키퍼디아의 웹 2.0 정의가 가장 좋을 듯 싶다.

웹 2.0(Web 2.0)은 월드 와이드 웹이 웹사이트의 집합체에서 최종 사용자에 웹 어플리케이션을 제공하는 하나의 완전한 플랫폼으로 진화하는 변화 양상에 대한 인식을 반영하는 의미로 종종 사용되는 용어이다. 이 개념의 주창자들은 궁극적으로 여러 목적에서 웹 2.0 서비스가 데스크탑 컴퓨터의 응용 프로그램을 대체할 것으로 예견하고 있다.

Jeff Jarvis의 웹로그에 Emil Sotirov가 정의 내린 대로 플랫폼은 우리가 원하는 것을 할 수 있게 해주는 것이다. 웹 2.o에서 개발자들이 만드는 소프트웨어 플랫폼은 절반이다. 나머지 반은 모든 사용자들이 이 플랫폼을 만들고 사용하는 것이다. 이러한 플랫폼은 정말 비지니스에 민감하다. Amazon.com의 CEO Jeff Bezos는 아마존 웹서비스를 쓰는 개발자가 8만명이고 중계 파트너 사이트는 80만개라고 한다. 이 사이트를 이용한 트래픽 효과는 4천 7백만 유저이며 이들이 아마존에 플랫폼을 통해 연계되는 것이다.

우리는 아마존닷컴이라는 마켓플레이스를 움직이는 써드파티 서비스가 있다. 이것은 저희들의 판매량의 26%에 해당한다. 우리는 판매자가 아니다. 우리는 상인들을 위한 복덕방을 개설하고 다른 복덕방이 이걸 이용하게 만드는 것이다. 이걸 우리는 4년 전에 시작했지만 지금도 잘 되고 있고 이걸 플랫폼의 일종이라고 할 수 있을 것이다.

이건 바로 웹 기반 서비스를 플랫폼으로 만들었을 때 비지니스 가치가 있음을 보여 준다. 아마존의 서드파티 플랫폼 개발자 뿐만 아니라 이용자까지도 혜택을 받을 수 있다. AidPage 처럼 사람을 도와 주는 사람들을 묶는 서비스는 웹사이트 관리자 뿐만 아니라 사용자들도 도움을 받을 수 있다.

웹 2.0은 플랫폼으로서 웹이다. 그러나 이것은 개발자들이 만드는 소프트웨어 같은 기술적인 이슈가 아니다. 이것은 웹을 쓰는 사람들이 직접 삶, 미디어, 비지니스, 커뮤니티를 위해 쉽게 만들고 공유하고 다듬을 수 있는플랫폼으로서 웹인 것이다.

앞으로 우리가 사용하게될 인터넷 혹은 웹대한 방향성을 제시한 일종의 패러다이다.그렇다면 기존의 Web을 \'Web1.0\'이라고 하겠는데 과연 이 Web2.0과 그것과는 무엇이 다른가?

1. Web2.0은 새로운 기술이 아니다. Web 환경의 변화의 방향을 제시한 것이다.
지난 2005년 샌프란시스코에서 Web2.0 컨퍼런스가 열렸다. 가장 사람들에게 의문점을 안겨준 것은 바로 \'Web2.0\'이라는 단어다. 이 Web2.0은 새로운 기술도 아니고 새로운 표준도 아닌 앞으로 Web 변화할 혹은 추구하게 될 최종 종착지에서의 모습을 말한다. 맨 처음 Web 등장했을 때는 간단한 이미지와 텍스트로 이루어진 정보가 대부분이었다. 막강한 인터넷 산업의 발전을 등에 업은 Web 이미지나 텍스트외에 다양한 포맷의 문서, 동영상, 파일등을 주고 받을수 있는 사용자 공간으로 변모했다. 하지만 Web2.0은 여기서 더 나아간다.

예를 들어, 현재도 그렇게 하고 있지만, 인터넷 온라인 영화를 본다고 했을 경우 Web을 통해서 실시간으로 영화감상을 할수 있다. 이 순간에 Web이라는 것이 영화플레이어로 변모하는 것이다. 또 다른 가능성은 Web을 통해 문서를 편집하는 것이다. 현재는 각종 워드프로세서 프로그램을 운영체제에 설치해야 하지만 Web2.0환경에서는 Web을 통해서 워드프로세서를 제공하는 싸이트에 접속하면 얼마든지 워드 작업을 할수 있다. 이 뿐아니라 음악감상을 하고 싶으면 음악을 심지어 그래픽 작업도 웹에서 이루어지길 기대한다.


2. 데스크탑과 Web의 경계를 허물다.
Web2.0은 위의 예제와 같이 데스크탑이라는 컴퓨터 분야를 집어 삼킬지도 모른다. 결정적으로 운영체제 자체가 없어질도 모른다. 간단히 인터넷이 되는 TV 에서 모든 것을 할수 있을지도 모른다. 웹서핑, 영화, 음악, 워드, 그래픽등 모든것이 Web으로 통하는 것이 Web2.0이다. 이렇게 되면 컴퓨터의 한분야인 데스크탑분야는 사라질 것이며 거기에 의존하는 많은 기업들이 쓰러질 것이다. 또한 보다 쉽게 임베이딩이 될지도 모른다. 조그마한 PDA에서 고품격의 워드프로세서 작업을 하게 될지도 모른다.


3. Web2.0을 위한 기술들, 아키텍쳐의 병합, 그리고 표준.
Web2.0을 위한 기술들 중에서 현재 와 닫는 것이 Weblog, RSS, Wiki, Ajax 등과 같은 것이다. Weblog 줄여서 Blog라고 하는 것은 이 시대를 이끌 새로운 대표 단어로 모두 인정하는 것이다. RSS는 보다 빠른 정보공유 또는 정보제공을 가능하게 해준다. Wiki는 기존의 게시판을 대체하는 어떤 주제에 대한 토론을 가능하게 해준다. Ajax는 표준 호환성 문제 개선에 선봉장이다.

이러한 Web2.0은 중심에는 표준이 자리하고 있다. 어떤 곳에서도 모두 동일한 성능과 표현, 구조등은 표준화된 스펙을 요구한다. 어떠한 웹이라라는 환경과 어떠한 아키텍쳐에서도 동일한 구조, 표현등을 위해서는 표준을 준수해야만 한다. 비단 이러한 것 외에도 Web을 통해서 소외받을수 있는 장애자나 노인, 어린이등을 위해서라도 표준화는 절실하다.


4. Web2.0 벌써 시작일지도... Web is Everthing
Web2.0은 뭔가 새로운 것이 아니다. 앞으로 그렇게 변모해야 할 목표다. 컴퓨터라는 기기에 의존하지 않고도 Web이라는 매체를 통해서 많은 것을 하게 됨으로써 이제 Web은 가정생활 속의 일부가 될지도 모른다. Web을 통해서 문서작업을 하고 영화를 보고, 음악을 감상하고 책을 읽게 될 그런 Web 환경.모든 것은 웹으로 통하게 된다.

[170h]

도대체 웹2.0 이란 무엇인가?

2006년 신년 벽두부터 ‘웹2.0’에 대한 이야기로 뜨겁다. 연초에 이슈가 될만한 이야기를 찾는 이들에게 웹2.0은 좋은 ‘꺼리’가 될 충분한 자질을 갖추고 있다. 인터넷 기반 언론뿐만 아니라 메이저 언론들에서까지 특집 기사를 내고 있으니 분명 우리가 ‘알아야 할’ 그 무엇인가가 되고 있다는 생각에 이 주제로 컬럼 쓰기에 동참하였다.

많은 대중들마저 알아야 할 ‘웹2.0’을 떠올릴 때 가슴 한구석에 그늘이 지는 이유는 무엇일까? 필자 자신의 무지함 때문이라고 자책해보면서 웹2.0의 참모습에 대해서 많은 독자들과 고민해보고자 한다.

지금까지 알려진 웹2.0
웹2.0이란 말은 ‘오라일리’사와 컴덱스쇼를 주최했던 ‘미디어라이브(MediaLive)’사가 2004년 초 IT관련 컨퍼런스 개최에 대한 아이디어를 협의하는 과정에서 생겨났으며, 오라일리사의 데일 도허티(Dale Dougherty) 부사장이 과거 닷컴 버블에서 살아남은 닷컴 기업들에서 발견되는 특별한 특징들을 다른 기업들과 대비하는 의미에서 웹2.0으로 명명하였다고 한다. 다시 말하면, 웹2.0이라는 말은 과거의 닷컴 버블과의 이별을 통해서 새로운 웹의 개념을 찾아보고 싶다는 희망과 기대의 의미가 많이 포함되어 있다는 것을 알 수 있다.

닷컴 버블에서 처절한 가치 폭락을 경험한 IT 종사자들에게는 최근 들어서 찾아오는 닷컴 부활 열기 속에서 새로운 가치를 대중들에게 주고, 그리고 스스로가 그러한 가치를 느끼고 싶었는지도 모르겠다. 최근의 성공들이 과거의 전철을 밟지 않기 위해서는 과거와의 적절한 단절이 필요할 것이고, 웹2.0은 이런 필요에서 발생한 적절한 산물이라고 보여진다. 물론, 웹2.0의 가치를 폄하할 생각은 전혀 없다.

하지만, 불연속적인 의미의 웹2.0을 받아들이기에는 Web1.0(이런 개념이 있었는지는 모르겠지만)의 의미가 우리에게 모두 공유 되고 있는지 생각해보게 된다. Web의 근본적인 ‘공유’ 정신이 사라지고 있는 지금의 상황에서 사용자 중심의 조작과 공유를 근간으로 하는 웹2.0이 대두되는 현실은 ‘자연으로 돌아가라’는 가르침을 생각하게 한다.

야후의 웹2.0 서비스들
웹2.0의 대표 서비스들로 필자가 근무하는 야후 본사의 서비스들이 많이 언급되고 있는 것은 기분 좋은 일이 아닐 수 없다. 인수가 아닌 야후가 직접 개발한 서비스들이었다면 더 자랑스러웠겠지만. 나열하자면, 태그(tag) 기반의 사진 공유사이트로 웹2.0의 대표주자라고 언급되는 플릭커(www.flickr.com), 소셜 북마크 공유 서비스인 딜리셔스(del.icio.us), XML과 자바스크립트 기반으로 위젯이라는 사용자가 원하는 프로그램을 작성할 수 있는 콘파뷸레이터(www.konfabulator.com), 웹메일이면서 아웃룩과 유사한 인터페이스를 구현한 오드포스트(www.oddpost.com), 일정과 행사를 관리해주는 트래킹 사이트인 업커밍(www.upcoming.org) 등이다. 열거해 놓은 서비스들은 웹2.0이라는 거대한 타이틀에는 어울리지 않을 지 모르지만, 소박하고 유용한 서비스들이다. 조만간 우리나라 사용자들에게도 선보일 수 있도록 노력하겠다.

먹을 것 많은 소문난 잔치로
소문난 잔치에 먹을 것 없다는 흔한 속담이 있다. 이 말을 다른 각도에서 생각해보면 잔치 소문을 듣고 어렵사리 찾아간 사람은 별반 건질 게 없는 데에 비해서, 잔치를 연 주인은 흥행에서 꽤 짭짤한 성공을 거둔다는 뜻이 숨어있지 않을까.

웹2.0을 주창한 사람들은 이를 통해서 사회적인 성공을 가져가고 있을지 모르지만, 이미 알려진 방향으로 웹2.0스러운 서비스를 만든다고 한다면 시장에서 성공하기는 쉽지 않을 것이다. 왜냐하면, 웹2.0은 태생부터 새로운 개념을 잡고 불연속적으로 탄생한 창작의 산물이 아닌, 성공한 서비스들의 Case Study들을 통해서 함축적으로 정리된 개념이기 때문이다. 이런 상황에서 웹2.0으로 지금 시장에 뛰어드는 것은 늦은 감이 없지 않다.

다행히도 우리나라의 많은 IT 종사자들은 유사한 개념으로 이미 수년 전부터 뛰어난 서비스를 만들어왔다. 우리나라에서 출발한 지식 검색이 미국 시장에도 소개되고 있으니 웹2.0의 기원은 대한민국에 있다고 봐도 틀리지 않다. 다만, AJAX 등 기술적인 이슈들에 대한 관심과 연구는 우리나라가 뒤쳐져 있는 것이 분명하니 이런 부분에 있어서의 투자와 관심은 반드시 필요할 것으로 보인다. 웹2.0, 아니 웹3.0 시대라고 하더라도 사용자들에게 제공하는 가치만 높다면 서비스 형태가 어떠하든 성공할 것이다.@

2007년 3월 2일 금요일

어도비, UCC시장 진출…동영상편집툴 확산 정책

한국어도비시스템즈(대표 이원진)는 어도비시스템즈가 이용자제작콘텐츠(UCC) 시장에 진출한다고 2일 발표했다.어도비시스템즈는 사진과 동영상을 공유하는 사이트인 '포토버켓(www.photobucket.com)'과 제휴를 맺고 포토버켓의 모든 사용자들에게 어도비시스템즈의 디지털비디오 편집 툴을 무료로 제공한다.이 디지털비디오 편집 툴은 초보자도 드래그 방식으로 음악, 효과, 장면전환, 타이틀 삽입 등을 쉽게 할 수 있는 프로그램이다. 어도비시스템즈는 앞으로 인터넷기업, 미디어 등과도 전략적 제휴를 맺고 디지털비디오 편집 툴 확산에 힘쓸 계획이다.

다음, 구글과 검색광고 계약 체결

다음커뮤니케이션이 세계적인 검색 업체인 구글 (www.google.com)과 종량제 검색 광고(CPC, Cost Per Click)를 위한 전략적 제휴를 체결하고 오는 1월부터 이를 적용하기로 했다.이번 계약으로 다음은 종량제 검색 광고를 구글의 광고 시스템인 '애드센스(AdSense)'를 통해 운용하게 된다. 다음은 구글의 첨단 광고 시스템과 다음의 강력한 플랫폼 파워를 결합해 경쟁역량을 배가, 시장점유를 지속 확대한다는 전략이다.이용자와 검색 광고주도 차별화된 검색 정보와 다양한 선택의 기회를 얻을 수 있게 됐다. 지금까지는 국내에서 대표적인 CPC 검색 전문 업체와 제휴한 거의 모든 주요 포털의 스폰서 링크가 동일한 검색 결과만을 제공해 왔다.이번 제휴로 다음의 이용자는 검색 의도와 연관성이 높은 차별화된 검색결과와 폭넓은 정보 선택의 기회를 제공 받게 된다.다음 측은 이번 제휴가 다양한 온라인 마케팅 선택의 폭을 확대해 궁극적으로 전체 검색광고 시장의 성장에 긍정적으로 기여할 것으로 기대하고 있다. 또한 상대적으로 저평가된 다음 검색광고의 가치를 국내 검색 광고 시장에서 공정하게 평가 받는 계기가 될 것으로 보고 있다.다음의 김남진 리스팅비즈니스 본부장은 "검색 서비스 향상을 위한 다음의 지속적인 투자와 노력이 괄목할 성과를 보이고 있는 만큼 이제는 적극적으로 시장 공략에 나설 때" 라며 "이번 제휴로 광고주와 이용자에게 보다 향상된 서비스와 가치를 제공해 시장 점유를 확대할 것"이라고 말했다.구글의 아태 및 남미 영업 총괄 부사장인 수킨더 싱 캐시디(Sukhinder Singh Cassidy)는 "이번 제휴를 통해 구글 애드워즈(AdWords) 광고주들이 수백만에 이르는 새로운 잠재고객들에게 접근할 수 있게 됐다"며 "구글의 애드센스 프로그램은 다음에게는 새로운 수익창출의 기회를 제공할 것이며, 이용자들에게는 한층 향상된 서비스를 선사하게 될 것"이 라고 덧붙였다.다음과 글로벌 네트워크를 지닌 구글의 이번 계약으로 그 동안 하나의 전문 업체가 90% 이상을 거의 독점하다시피 했던 국내 검색광고 시장의 치열한 각축이 예상된다.한국인터넷마케팅협회에 따르면 급속히 성장하고 있는 검색광고 시장의 규모는 2007년에 약 5천500억 원에 이를 전망이다.