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์„ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๊ตฌ์กฐ๋ฅผ ์งœ๋ ค๊ณ ํ•  ๋•Œ ์ด๋Ÿฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค.