본문 바로가기

지식/Network

Twisted Network Programming Essentials (Paperback)

Twisted Network Programming Essentials (Paperback)
Abe Fettig 지음/OReilly(오라일리)


Twisted는 Python 에서 Event/비동기 기반의 네트웍 프로그래램을 쉽게 작성하도록 도와줍니다. 특히 수천명의 client 가 접속하는 안정적인 서버를 비교적 낮은 개발 비용으로 작성할 수 있습니다.

뿐만아니라 TCP, UDP, SSL/TLS, multicast, Unix sockets 과 많은 프로토콜(HTTP, NNTP, POP3 IMAP, SSH, IRC, FTP, Proxy 등)을 이미 구현을 해 두었기 때문에, 널리 알려진 프로토콜들을 쉽게 이용하거나 확장할 수 있습니다.

몇몇 회사들이 메신저나, 특정 사이트의 접속을 막아둔 경우, 외부에 있는 공개 Sock4 proxy 등을 사용할 수도 있는데, 느리거나 접속이 원활하지 않거나, 혹은 개인 정보 유출에 대한 우려도 있습니다. 이럴경우 Twisted 를 이용해 간단히 Sock4 Proxy 를 구현할 수 있습니다.

#! /usr/bin/python
from twisted.internet import reactor
from twisted.protocols import socks

if '__main__' == __name__:
reactor.listenTCP(1085,socks.SOCKSv4Factory(None))
reactor.run()


Asynchronous 시스템이 Context Switching 이나 Lock 등에 들어가는 시스템 자원들을 사용하지 않기때문에, 적은 resource 사용과 높은 cpu 효율, 빠른 응답을 기대할 수 있습니다. 다만 multi thread / process 프로그램 보다 프로그램 작성에 있어서도 비동기에 적합하도록 작성되어야 합니다.

Twisted do not make the code magically asynchronous.

Asynchronous 프로그래밍은 synchronous 프로그래밍 보다 약간은 더 많은 배려가 필요합니다. Twisted 는 비동기로 작성된 코드들이 잘 작동하도록 도와주는 Framework 입니다. 비동기로 만들어주는 어떤 것은 아님을 주의하세요.

물론 바닥부터 raw level socket 들을 이용해 구현하고자 하는 시스템에 최적화된 Framework 을 구축해서 Twisted 보다 빠른 반응속도를 가지는 시스템을 만들 수 있을지 모르지만, 시간과 비용이 많이 들어갈테고, 그렇게 구축한 결과 역시 대부분 비슷한 모델로 귀결 되는 것 같습니다. 혹은 C/C++ 된 ACE 같은 웅장한 시스템을 쓸수도 있긴 합니다만 공부를 조금 많이 해야 합니다.

그래서 대부분의 고성능 서버를 작성하는데 있어서 Twisted 를 사용하는 것은 반은 먹고 들어가는 훌륭한 선택이 될 거라고 생각합니다.

이 책은 Twisted 로 무엇을 할 수 있는지를 쉬운 예제들로 가지고 익힐 수 있게 해 줍니다. 하지만 내부가 어떻게 구성되어 있는지에 대해서는 설명이 부족합니다. 내부 구성을 조금더 알고자 한다면 공식 Document를 읽어보세요.

하지만, Twisted 가 많은 것을 쉽게 도와준다고 해서 Stevens 아저씨의 Unix Network Programming 을 읽지 않아도 된다던가, C10K Problem 같은 중요한 논의들을 몰라도 된다던가 하지는 않습니다.


Oreilly 책들의 표지를 보면 주로 짐승들이 많이 그려져 있고 책의 가장 마지막 페이지에는 표지 모델에 대한 설명이 곁들여 있습니다. 뱀들은 겨울잠이 끝나면 짝짓기를 하기위에 수백의 수컷 뱀들이 하나의 암컷 뱀 주위를 저렇게 엉켜있으면서 간택되기를 기다립니다. 이 중에 오직 하나의 수컷 뱀이 간택되면 그 뱀은 열심히 자신의 할일을 한다는 군요. Twisted 서버처럼 말이죠 ㅎㅎ

출처 : http://miniway.blogspot.com/2007/07/twisted-network-programming-essentials.html

yahon : 좋아 좋아 머리가 터질려고 해, 곧 파이썬 카테고리를 만들어야 할듯 -_-;;;