Gunicorn: ๋™์ผํ•œ gunicorn ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ๋งŽ์€ WSGI ์•ฑ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2010๋…„ 03์›” 29์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: benoitc/gunicorn

๋™์ผํ•œ gunicorn ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜์—ฌ ๋™์ผํ•œ ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?
์ ์–ด๋„ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋งŽ์€ ์ž‘์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(๋งค์šฐ ๋‚ฎ์€ ๋กœ๋“œ)์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ RAM์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Add Example

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ต์‹ฌ์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Routes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py

๋ชจ๋“  7 ๋Œ“๊ธ€

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํ–‰๋™์€ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ์ž˜ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. gunicorn์ด ๊ธฐ์กด ์›น ์„œ๋ฒ„์™€ ๋น„๊ตํ•˜์—ฌ "์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ"์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋šœ๋ ทํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
werkzeug์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‘ ์•ฑ์ด ๋‹ค๋ฅธ ๊ฒฝ๋กœ์—์„œ ์‘๋‹ตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ต์‹ฌ์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์— ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Routes๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

http://github.com/benoitc/gunicorn/blob/master/examples/multiapp.py

์•ฑ๋งˆ๋‹ค ํŠน์ • ๋งˆ์šดํŠธ ์ง€์ ์„ ์ง€์ •ํ•˜๋Š” ๋Œ€์‹  ์ด๋ฆ„์œผ๋กœ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ์˜ˆ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์™„์ „ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์— ๋Œ€ํ•œ ํ™˜๊ฒฝ['HTTP_HOST']์˜ ๊ฐ„๋‹จํ•œ ๋งคํ•‘์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด gunicorn์— ๋‚ด์žฅ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ contrib ํ•ญ๋ชฉ๊ณผ ๊ฐ™์€ gunicorn์˜ ์„ ํƒ์  ๋ถ€๋ถ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ„๋„์˜ ๊ตฌ์„ฑ์ด ์žˆ๋Š” ๋…๋ฆฝํ˜• ๋ฉ€ํ‹ฐํ”Œ๋ ‰์„œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Django/Paste ์ „๋ฌธํ™”๋„ ๊ฑฐ๊ธฐ์— ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด:

$ gunicorn wsgi_multi django:project1 myblog.wsgi:wsgi_app anotherapp.foo

์—ฌ๊ธฐ์—์„œ gunicorn์€ ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ wsgi_multi๋งŒ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ์ธ์ˆ˜๋Š” ์ผ๋ถ€ ํŠน์ˆ˜ API๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๊ตฌ์„ฑ์„ ํ†ตํ•ด ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ.

๋‚˜๋Š” ์ด ํ‹ฐ์ผ“์—์„œ ์ œ์•ˆ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์“ฐ๋ ค๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € HTTP_HOST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ virtualenv๋ฅผ ์ „ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ํ•œ ํŒŒ์ด์ฌ์—์„œ virtualenvs๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ ์„ธ์ฒ™์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ virtualenv๋ผ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ HTTP_HOST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ WSGI ์•ฑ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. django๋Š” ์ •๋ง ๋†€๋ผ์šด ์ˆ˜์˜ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋„์ฒ˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ, ๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์€ ์œ„์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ๋งŒํผ ์‰ฝ๊ฑฐ๋‚˜ ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž‘์—…์ž๊ฐ€ ์•ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ virtualenv์—์„œ ์‹คํ–‰๋˜๊ณ  ์ค‘์•™ gunicorn ๋งˆ์Šคํ„ฐ๊ฐ€ ๋” ๋งŽ์€ ์ž‘์—…์ž๊ฐ€ ํ•„์š”ํ•œ ์•ฑ์ด ์ด๋ฅผ ์–ป๋„๋ก ํ•˜๋Š” ์ผ์ข…์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‹คํ˜„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ์“ฐ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๊ฑฐ๋‚˜ ์žฌ๋ฏธ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :(

์ด๋Ÿฐ ์ผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด django๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค...

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰