<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) ์ค‘์š”์„ฑ ๋ฐ ๊ด€๋ จ ๋„๊ตฌ ๊ฐ„๋žต ์†Œ๊ฐœ.


๐ŸŽฏ ์ฑ•ํ„ฐ ๋ชฉํ‘œ

์ด ๊ฐ•์˜๋ฅผ ๋งˆ์น˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

  1. FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•„์š” ์ด์œ  ๋ฐ ์˜์—ญ ์ดํ•ด.
  2. orjson๊ณผ ORJSONResponse๋ฅผ ์ด์šฉํ•œ JSON ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ๋ฒ• ์Šต๋“.
  3. ์บ์‹ฑ(Caching) ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  ํšจ๊ณผ ์ดํ•ด.
  4. GzipMiddleware๋ฅผ ์‚ฌ์šฉํ•œ HTTP ์‘๋‹ต ์••์ถ• ๋ฐ ๋„คํŠธ์›Œํฌ ์ „์†ก๋Ÿ‰ ๊ฐ์†Œ.
  5. Gunicorn๊ณผ Uvicorn ์›Œ์ปค๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ํ™œ์šฉ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰(Throughput) ์ฆ๋Œ€๋ฒ• ์ดํ•ด.
  6. ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์‹๋ณ„์„ ์œ„ํ•œ ํ”„๋กœํŒŒ์ผ๋ง(Profiling) ์ค‘์š”์„ฑ ์ธ์ง€.

๐Ÿ—๏ธ ์ด๋ฒˆ ๊ฐ•์˜ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ฐ ์˜ˆ์ œ ์ฝ”๋“œ (๊ฐœ๋…)