<aside>
</aside>
์๋ ํ์ธ์! 7๋ถ '๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐ ์ฑ๋ฅ ์ต์ ํ'์ ๋ง์ง๋ง ์๊ฐ, 36๊ฐ์ ๋๋ค! ๐
์ง๊ธ๊น์ง 7๋ถ์์๋ FastAPI์ ํต์ฌ์ธ ๋น๋๊ธฐ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ (32๊ฐ), ๋ธ๋กํน ์ฝ๋์ ํจ์ ์ ํผํ๋ ๋ฐฉ๋ฒ(33๊ฐ), ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ฒ๋ฆฌ(34๊ฐ), ๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ ํต์ ์ ์ํ WebSocket(35๊ฐ)๊น์ง ๋ฐฐ์ฐ๋ฉฐ API์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ํ ๋จ๊ณ ๋์ด์ฌ๋ ธ์ต๋๋ค.
์ด๋ฒ ์๊ฐ์๋ ์ฌ๊ธฐ์ ๋ ๋์๊ฐ, ์ฐ๋ฆฌ FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ง์ง๋ง ํ ๋ฐฉ์ธ๊น์ง ์ง๋ด๊ธฐ ์ํ(?) ๋ค์ํ ์ฑ๋ฅ ์ต์ ํ ํ๋ค๊ณผ ๊ณ ๊ธ ์ฃผ์ ๋ค์ ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ๊ฒ ์ต๋๋ค! ๐๐จ ์ด๋ป๊ฒ ํ๋ฉด JSON ์ฒ๋ฆฌ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํ ์ ์์์ง, ๋ฐ๋ณต์ ์ธ ์์ ์ ์ค์ด๋ ์บ์ฑ์ ๋ฌด์์ธ์ง, ๋คํธ์ํฌ ์ ์ก๋์ ์ค์ด๋ ์์ถ์ ์ด๋ป๊ฒ ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์๋ฒ์ CPU๋ฅผ ์ต๋ํ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ์ง ๋ฑ์ ์์๋ณผ ๊ฑฐ์์. ๋ํ, ์ฑ๋ฅ ๋ฌธ์ ์ ์์ธ์ ์ ํํ ์ง๋จํ๋ ํ๋กํ์ผ๋ง์ ์ค์์ฑ๊น์ง ์ง์ด๋ณด๋ฉฐ 7๋ถ๋ฅผ ๋ง๋ฌด๋ฆฌํ๊ฒ ์ต๋๋ค!
7๋ถ ๋ง๋ฌด๋ฆฌ ๊ฐ์๋ก, FastAPI ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํฅ์์ ์ํ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ ๋ฐ ๊ด๋ จ ๊ณ ๊ธ ์ฃผ์ ์๊ฐ. FastAPI์ ๋น๋๊ธฐ ์ํคํ ์ฒ์ ๋์ ์ฑ๋ฅ ๊ธฐ๋ฐ์๋ ๋ถ๊ตฌ, ํน์ ๋ถ๋ถ(๋ฐ์ดํฐ ์ง๋ ฌํ, ๋คํธ์ํฌ, CPU, ๋ฐ๋ณต ๊ณ์ฐ ๋ฑ)์์ ์ฑ๋ฅ ๋ณ๋ชฉ ๋ฐ์ ๊ฐ๋ฅ.
Python ๊ธฐ๋ณธ JSON ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋น ๋ฅธ orjson
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ORJSONResponse
๋ฅผ ์ด์ฉํ JSON ์ฒ๋ฆฌ ์๋ ํฅ์๋ฒ ํ์ต. ๋ฐ๋ณต ๊ณ์ฐ/DB ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ๋์ด๋ ์บ์ฑ(Caching) ์ ๋ต ๊ธฐ๋ณธ ๊ฐ๋
์๊ฐ.
๋คํธ์ํฌ ๋์ญํญ ๋ฐ ๋ก๋ฉ ์๊ฐ ๋จ์ถ์ ์ํ Gzip ์์ถ ๋ฏธ๋ค์จ์ด(GzipMiddleware
) ์ค์ ๋ฒ ํ์ต. ์๋ฒ์ ๋ฉํฐ ์ฝ์ด CPU ํ์ฉ ๊ทน๋ํ๋ฅผ ์ํด Gunicorn๊ณผ Uvicorn ์์ปค๋ฅผ ์ฌ์ฉํ ๋ฉํฐ ํ๋ก์ธ์ค ์คํ ๋ฐฉ๋ฒ ํ์ต. ๋ง์ง๋ง์ผ๋ก, ์ฑ๋ฅ ์ต์ ํ์ ์ฒซ๊ฑธ์์ธ ๋ณ๋ชฉ ์ง์ ์๋ณ์ ์ํ ํ๋กํ์ผ๋ง(Profiling) ์ค์์ฑ ๋ฐ ๊ด๋ จ ๋๊ตฌ ๊ฐ๋ต ์๊ฐ.
์ด ๊ฐ์๋ฅผ ๋ง์น๋ฉด ์ฌ๋ฌ๋ถ์ ๋ค์์ ํ ์ ์๊ฒ ๋ฉ๋๋ค:
orjson
๊ณผ ORJSONResponse
๋ฅผ ์ด์ฉํ JSON ์ฒ๋ฆฌ ์๋ ํฅ์๋ฒ ์ต๋.GzipMiddleware
๋ฅผ ์ฌ์ฉํ HTTP ์๋ต ์์ถ ๋ฐ ๋คํธ์ํฌ ์ ์ก๋ ๊ฐ์.