2023. 7. 31. 09:05ใ๊ฐ๋ฐ/Python
๐ก ์ถ์ฒ : 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 ์ฑ๋ฅ ์ธก์
'๊ฐ๋ฐ > 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 |