Python - Uvicorn

2023. 7. 31. 09:05ใ†๊ฐœ๋ฐœ/Python

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์ถœ์ฒ˜ : Uvicorn doc

Uvicorn์ด๋ž€?

์ตœ๊ทผ๊นŒ์ง€ python์—๋Š” Asyncio ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์œ„ํ•œ ์ €์ˆ˜์ค€ ์„œ๋ฒ„ / ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Uvicorn์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ubloop๋ฐ httptools๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ASGI Web Server ์ด๋‹ค. ํ˜„์žฌ๋Š” Http/1.1๋ฅผ ์ง€์›ํ•œ๋‹ค.

ASGI๋ž€ ?

ASGI(Asynchronous Server Gateway Interface)๋Š” ๋น„๋™๊ธฐ Python ์›น ์„œ๋ฒ„์ด๋‹ค.

Asyncio๋ž€?

  • Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋น„๋™์‹œ I/O ํ”„๋ ˆ์ž„ ์›Œํฌ์ด๋‹ค.
  • Asyncio๋Š” async/await ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ(Asynchronous) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ์ด๋‹ค.
  • ๋Œ€๊ทœ๋ชจ I/O์ฒ˜๋ฆฌ ๋ฐ ๋ณต์žกํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์„œ๋ฒ„ ๊ตฌ์กฐ์™€ ์ ํ•ฉํ•˜๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์œผ๋กœ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ๊ทธ ์‹œ๊ฐ„ CPU๊ฐ€ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ ์ด๋ฅผ ํ”ํžˆ non-blocking์ด๋ผ๊ณ  ํ•œ๋‹ค.

uvloop๋ž€?

  • Cython์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ libuv ์œ„์— ๊ตฌ์ถ•๋˜์–ด์žˆ๋‹ค.
    • libuv๋Š” Nodejs์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋™๊ธฐ I/O ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • uvloop ๊ธฐ๋ฐ˜ asyncio์˜ ์„ฑ๋Šฅ์€ Go ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์— ๊ฐ€๊น๋‹ค.
  • TCP ์„ฑ๋Šฅ ์ธก์ •
  • HTTP ์„ฑ๋Šฅ ์ธก์ •

Uvicorn์ด๋ž€?

์ตœ๊ทผ๊นŒ์ง€ python์—๋Š” Asyncio ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์œ„ํ•œ ์ €์ˆ˜์ค€ ์„œ๋ฒ„ / ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Uvicorn์ด ๋“ฑ์žฅํ–ˆ๋‹ค. ubloop๋ฐ httptools๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ASGI Web Server ์ด๋‹ค. ํ˜„์žฌ๋Š” Http/1.1๋ฅผ ์ง€์›ํ•œ๋‹ค.

ASGI๋ž€ ?

ASGI(Asynchronous Server Gateway Interface)๋Š” ๋น„๋™๊ธฐ Python ์›น ์„œ๋ฒ„์ด๋‹ค.

Asyncio๋ž€?

  • Python ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋น„๋™์‹œ I/O ํ”„๋ ˆ์ž„ ์›Œํฌ์ด๋‹ค.
  • Asyncio๋Š” async/await ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ(Asynchronous) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ์ด๋‹ค.
  • ๋Œ€๊ทœ๋ชจ I/O์ฒ˜๋ฆฌ ๋ฐ ๋ณต์žกํ•˜๊ฒŒ ์„ค๊ณ„๋œ ์„œ๋ฒ„ ๊ตฌ์กฐ์™€ ์ ํ•ฉํ•˜๋‹ค.
  • ๋Œ€๊ธฐ ์‹œ๊ฐ„์œผ๋กœ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ๊ทธ ์‹œ๊ฐ„ CPU๊ฐ€ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š”๋ฐ ์ด๋ฅผ ํ”ํžˆ non-blocking์ด๋ผ๊ณ  ํ•œ๋‹ค.

uvloop๋ž€?

  • Cython์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ libuv ์œ„์— ๊ตฌ์ถ•๋˜์–ด์žˆ๋‹ค.
    • libuv๋Š” Nodejs์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋™๊ธฐ I/O ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • uvloop ๊ธฐ๋ฐ˜ asyncio์˜ ์„ฑ๋Šฅ์€ Go ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์— ๊ฐ€๊น๋‹ค.
  • TCP ์„ฑ๋Šฅ ์ธก์ •

  • HTTP ์„ฑ๋Šฅ ์ธก์ •

728x90
๋ฐ˜์‘ํ˜•

'๊ฐœ๋ฐœ > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

FastAPI - DB ์—ฐ๋™  (0) 2023.07.31
FastAPI - ์„ค์น˜  (0) 2023.07.31
Python - FastAPI  (0) 2023.07.31
Python Framework  (0) 2023.07.31
Python 3.11 ์ด๋ก , ์‹ค์Šต  (0) 2023.07.31