node.js의 경우 non-blocking을 기반으로 커뮤니티가 형성되었기 때문에, 서드파티 모듈 등도 non-blocking으로 만들어진 케이스가 많습니다(e.g. db client 등).

하지만 python의 경우에는 그렇지 않습니다. 따라서 request를 동시에 여러개를 처리할 수 있더라도 내부적으로 사용하는 db client가 asynchronous하게 동작할 수 없다면 비효율적이게 됩니다. Django에서 내부적으로 사용하는 models의 경우도 blocking으로 동작합니다. Python용 기본 redis client도 마찬가지입니다. 그러나 최근 non-blocking 방식이 주목을 받으며 Python에서도 관련 프레임워크가 주목을 받습니다.

event-driven 방식의 Twisted와 epoll등을 사용한 Tornado가 그것입니다. 특히 Tornado는 페이스북에서 contribute하고있으며, 빠르게 성장중입니다. 그리고 이런 웹(혹은 서버) 프레임워크가 성장하면서 non-blocking방식의 db client도 만들어지는 중입니다.

redis의 경우 이런 라이브러리가 있습니다: <https://github.com/evilkost/brukva>

기타 rdbms의 경우 Twisted enterprise에서 사용하는 adbapi라는 라이브러리가 있습니다: <http://twistedmatrix.com/documents/current/core/howto/rdbms.html>

그리고, Tornado에서는 Twisted의 기능들을 모두 사용할 수 있습니다(import tornado.platform.twisted). 또한 Tornado를 fork하여 Twisted의 유용한 기능들을 추가적으로 도입한 Cyclone이라는 프레임워크도 있습니다. Cyclone에서는 위에서 언급한 adbapi를 내장합니다.

자료조사가 필요하겠지만 Python을 이용하여 서버구조를 짜려고할 때 이런 라이브러리들을 이용하는 것도 좋아보입니다.

read other posts