FastAPI์ Redis๋ฅผ ํ์ฉํ 1์ธ ๊ฐ๋ฐ์์ ๋ฐฑ์๋ ์ต์ ํ ์ฌ์
์น ์ปค๋ฎค๋ํฐ๋ฅผ ์ฒ์ ์คํํ๊ณ ๋๋ฉด ๊ฐ์ฅ ๋๋ ค์ฐ๋ฉด์๋ ์ค๋ ๋ ์๊ฐ์ด ๋ฐ๋ก 'ํธ๋ํฝ์ด ๊ธ์ฆํ ๋'์ ๋๋ค. ๋ฐฉ๋ฌธ์๊ฐ ๋์ด๋๋ค๋ ๊ฒ์ ์๋น์ค๊ฐ ์ฑ์ฅํ๊ณ ์๋ค๋ ๊ธฐ๋ถ ์ข์ ์ฆ๊ฑฐ์ง๋ง, ๋์์ ๋ฐฑ์๋ ์๋ฒ๊ฐ ๊ทธ ๋ถํ๋ฅผ ๊ฒฌ๋์ง ๋ชปํ๊ณ ๋ค์ด๋์ด ๋ฒ๋ฆฌ์ง๋ ์์๊น ํ๋ ์์ฒญ๋ ์๋ฐ๊ฐ์ผ๋ก ๋ค๊ฐ์ค๊ธฐ๋ ํฉ๋๋ค. ์ ์ญ์ ์ต๊ทผ ๋์ด๋๋ ์ ์ ๋ถ๋ค์ ํ๋๋์ ๋ณด๋ฉฐ ๊ธฐ์กด์ ๋ก์ ์๋ฒ ์ํคํ ์ฒ๋ก๋ ํ๊ณ๊ฐ ์์์ ๋ผ์ ๋ฆฌ๊ฒ ๋๊ผ์ต๋๋ค.
๊ทธ๋์ ์ค๋์ ์ ๊ฐ ์ง์ ์ปค๋ฎค๋ํฐ ๋ฐฑ์๋๋ฅผ ๊ตฌ์ถํ๋ฉฐ ๊ฒช์๋ ์ํ์ฐฉ์ค, ๊ทธ๋ฆฌ๊ณ 'FastAPI'์ 'Redis'๋ผ๋ ๊ฐ๋ ฅํ ๋ฌด๊ธฐ๋ฅผ ๋์ ํ์ฌ ์๋ฒ์ ์๋ต ์๋๋ฅผ ๊ทน์ ์ผ๋ก ๋์ด์ฌ๋ฆฐ ์ต์ ํ ๊ฒฝํ๋ด์ ์ฌ๋ฌ๋ถ๊ณผ ๊ณต์ ํด ๋ณด๋ ค ํฉ๋๋ค. ํธ๋ํฝ ๋ณ๋ชฉ ํ์์ผ๋ก ๊ณ ํต๋ฐ๊ณ ๊ณ์ ์๋น ์ฐฝ์ ์๋ ์ฃผ๋์ด ๊ฐ๋ฐ์๋ถ๋ค๊ป ์์ ์ธ์ฌ์ดํธ๊ฐ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
1. ์ ์๋ง์ ํ์ด์ฌ ํ๋ ์์ํฌ ์ค 'FastAPI'์์๊น?
์ผ๋ฐ์ ์ผ๋ก ํ์ด์ฌ(Python)์ผ๋ก ์น ์๋ฒ๋ฅผ ๋ง๋ ๋ค๊ณ ํ๋ฉด ์ญ์คํ๊ตฌ ์ฅ๊ณ (Django)๋ ํ๋ผ์คํฌ(Flask)๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋ ์ฌ๋ฆฌ์ค ๊ฒ๋๋ค. ๋ฐฉ๋ํ ์ํ๊ณ์ ๋ ํผ๋ฐ์ค๋ฅผ ์๋ํ๋ ํ๋ฅญํ ๋๊ตฌ๋ค์ด์ฃ . ํ์ง๋ง ์ ๋ ๊ณผ๊ฐํ๊ฒ ์ด๋ค์ ๋ค๋กํ๊ณ ์๋์ ์ผ๋ก ํ๋ฐ์ฃผ์์ธ FastAPI๋ฅผ ์ ํํ์ต๋๋ค. ๊ทธ ๊ฒฐ์ ์ ์ธ ์ด์ ๋ ๋ฐ๋ก '๋ค์ดํฐ๋ธ ๋น๋๊ธฐ(Asynchronous) ์ฒ๋ฆฌ' ์ง์ ๋๋ฌธ์ด์์ต๋๋ค.
๊ธฐ์กด์ ๋๊ธฐ(Synchronous) ๋ฐฉ์ ํ๋ ์์ํฌ๋ ์๋น์ผ๋ก ๋น์ ํ์๋ฉด '๋นํจ์จ์ ์ธ ์ข ์ ์'๊ณผ ๊ฐ์ต๋๋ค. 1๋ฒ ํ ์ด๋ธ ์๋์ด ์ฃผ๋ฌธํ ์์์ด ์ฃผ๋ฐฉ์์ ๋์ฌ ๋๊น์ง ์ฃผ๋ฐฉ์ฅ ์์์ ๊ฐ๋งํ ์์ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๊ทธ๋์ 2๋ฒ, 3๋ฒ ํ ์ด๋ธ ์๋์ ์ฃผ๋ฌธ์กฐ์ฐจ ํ์ง ๋ชปํ๊ณ ๋ฐฉ์น๋์ฃ . ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ฉด ์๋ฒ๊ฐ ๊ทธ๋๋ก ๋ฉ์ถฐ๋ฒ๋ฆฌ๋(๋ณ๋ชฉ ํ์) ์ฃผ๋ ์์ธ์ ๋๋ค.
๋ฐ๋ฉด FastAPI๋ ํ์๋ถํฐ ๋น๋๊ธฐ๋ฅผ ์ง์ํฉ๋๋ค. ์ข ์ ์์ด 1๋ฒ ํ ์ด๋ธ์ ์ฃผ๋ฌธ์ ์ฃผ๋ฐฉ์ ๋ฃ์๋ง์, ์๋ฆฌ๊ฐ ๋์ค๋ ์๊ฐ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฆ์ 2๋ฒ ํ ์ด๋ธ๋ก ์ด๋ํด ๋ค์ ์ฃผ๋ฌธ์ ๋ฐ์ต๋๋ค. I/O ์์ (๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ, ์ธ๋ถ API ํต์ ๋ฑ)์ด ์๋ฃ๋ ๋๊น์ง CPU๋ฅผ ๋๋ฆฌ์ง ์๊ณ ๋ค๋ฅธ ์์ฒญ์ ๋์์์ด ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ด ์ฐจ์ด๋ ์๋ฐฑ ๋ช ์ ์ ์ ๊ฐ ๋์์ ๊ฒ์ํ์ ํด๋ฆญํ ๋ ์ฌ์ดํธ๊ฐ ๋ฒํฐ๋๋ ๋ฌด๋์ง๋๋๋ฅผ ๊ฐ๋ฅด๋ ๊ฒฐ์ ์ ์ธ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ช ์๋ฆฌ, ๋น๋๊ธฐ SQLAlchemy๋ก ์ ์ฌ์ฐ๋ค
์น ํ๋ ์์ํฌ๋ฅผ ๋น๋๊ธฐ๋ก ๋ฐ๊ฟจ๋ค๊ณ ํด์ ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ๊ฒ์ ์๋๋๋ค. ์๋ฒ ๋ก์ง์ด ์๋ฌด๋ฆฌ ๋นจ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ค๋ ์ฐฝ๊ณ , ์ฆ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS)๋ก ๊ฐ๋ ํต๋ก๊ฐ ๊ฝ ๋งํ์๋ค๋ฉด ๊ฒฐ๊ตญ ์๋ต ์๋๋ ๋๋ ค์ง๋๋ค.
์ด๊ธฐ์๋ ์ชฝ์ง ๊ธฐ๋ฅ์ด๋ ๋ณต์กํ ๊ฒ์๊ธ ๋ชฉ๋ก์ ๋ถ๋ฌ์ฌ ๋, ๊ทธ ์ ๋ช ๋์ 'N+1 ์ฟผ๋ฆฌ ๋ฌธ์ '๊ฐ ๋ฐ์ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น๋ช ์ ์ง๋ฌ๋์ต๋๋ค. 10๊ฐ์ ๊ธ์ ๋ถ๋ฌ์ค๊ธฐ ์ํด 11๋ฒ์ ํต์ ์ ํ๋ ๋์ฐํ ๋นํจ์จ์ด์์ฃ . ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐฑ์๋์ ๋น๋๊ธฐ SQLAlchemy(Async SQLAlchemy)๋ฅผ ์ ๋ฉด ๋์ ํ์ต๋๋ค.
๊ธฐ์กด์ ๊ฝ ๋งํ ๋จ๋ฐฉํฅ ๋๋ก๋ฅผ ๋ค์ฐจ์ ๊ณ ์๋๋ก๋ก ๋ซ์ด์ฃผ๋ ์์
์ด์์ต๋๋ค. selectinload์ ๊ฐ์ ์ฆ์ ๋ก๋ฉ(Eager Loading) ๊ธฐ๋ฒ์ ํ์ฉํด, ๊ฒ์๊ธ์ ๊ฐ์ ธ์ฌ ๋ ์์ฑ์์ ํ๋กํ ์ ๋ณด๊น์ง ๋จ ํ ๋ฒ์ ๋น๋๊ธฐ ์ฟผ๋ฆฌ๋ก ๋ชจ๋ ๋ฌถ์ด์ ๋๊ณ ์ค๋๋ก ์ํคํ
์ฒ๋ฅผ ์ ๋ฉด ์์ ํ์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๋ฒ ์ฒ๋ฆฌ ์๊ฐ์ด ๊ธฐ์กด ๋๋น 70% ์ด์ ๋จ์ถ๋๋ ๋๋ผ์ด ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋ ์ ์์์ต๋๋ค.
3. ๊ถ๊ทน์ ๋ฌด๊ธฐ: Redis ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ(Caching)์ ๋์
์๋ฌด๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํด๋, ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ฉ์ธ ํ์ด์ง์ ์ ์ํ ๋๋ง๋ค ๋งค๋ฒ ํ๋๋์คํฌ ๊ธฐ๋ฐ์ ์คํ ๋ฆฌ์ง๋ฅผ ๋ค์ ๊ฑฐ๋ฆฌ๋ ๊ฒ์ ์๋ฒ์ ์ฒด๋ ฅ์ ๊ฐ์๋จน๋ ์ผ์ ๋๋ค. ํนํ ๊ฒ์์์ง ๋ก๋ด(SEO)์ด๋ ์๋ง์ ์ฌ๋๋ค์ด ๋ฐ๋ณตํด์ ์ฝ๋ 'IT ๊ฒ์ํ'๊ณผ '๋ฉ์ธ ํตํฉ ๋ชฉ๋ก'์ ๋๋์ฑ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๋์ ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋จ์ Redis(๋ ๋์ค)๋ฅผ ์บ์ ์๋ฒ๋ก ๋ฐฐ์นํ์ต๋๋ค. Redis๋ ๋ฐ์ดํฐ๋ฅผ ๋๋ฆฐ ํ๋๋์คํฌ๊ฐ ์๋, ๋น์ฒ๋ผ ๋น ๋ฅธ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ(RAM) ์์ ์ฌ๋ ค๋๊ณ ์๋น์คํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ(In-Memory) ์์คํ ์ ๋๋ค.
์ ์ ๊ฐ ๋ฉ์ธ ํ๋ฉด์ ์์ฒญํ๋ฉด, ์๋ฒ๋ ๋ฌด๊ฑฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋จผ์ ์ฐ๋ฅด์ง ์์ต๋๋ค. ๊ฐ๋ณ๊ณ ๋น ๋ฅธ Redis์๊ฒ "ํน์ ์๊น ๋ง๋ค์ด๋ ๋ฉ์ธ ํ๋ฉด ๋ฐ์ดํฐ ์์ด?"๋ผ๊ณ ๋ฌผ์ด๋ด ๋๋ค. ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ๋ฆฌ์ด(ms) ๋จ์๋ก ์ฆ์ ์ ์ ์๊ฒ ํ๋ฉด์ ๋์ ธ์ค๋๋ค. ์ด๋ฅผ ํตํด ๋ฐฑ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ๊ฑฐ์ 0์ ๊ฐ๊น๊ฒ ์ค์ฌ๋ฒ๋ ธ์ต๋๋ค. ๋ฌผ๋ก ๋ฐ์ดํฐ๊ฐ ์ค๋๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ผ์ ์๊ฐ๋ง๋ค ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ์ต์ ํํ๋ SWR(Stale-While-Revalidate) ํจํด๋ ํจ๊ป ์ ์ฉํ์ฌ, ์ ์ ๋ค์ ์ธ์ ๋ ์ง์ฐ ์๋ ์พ์ ํ ํ๋ฉด์ ๋ณผ ์ ์๊ฒ ๋์์ต๋๋ค.
๋งบ์ผ๋ฉฐ: 1์ธ ๊ฐ๋ฐ์์๊ฒ ์ต์ ํ๋ '์์กด'์ ๋๋ค
๋ง๋ํ ์๋ณธ์ ํฌ์ํ์ฌ ๋ฌดํ์ ์๋ฒ ์ธํ๋ผ(์ปดํจํ ํ์)๋ฅผ ๋๋ ค๋ฒ๋ฆฌ๋ ์ด๋ฅธ๋ฐ '์ค์ผ์ผ ์ (Scale-up)'์ ์์ ๋กญ๊ฒ ํ ์ ์๋ 1์ธ ๊ฐ๋ฐ์์๊ฒ, ์ฝ๋ ์ต์ ํ์ ํจ์จ์ ์ธ ์ํคํ ์ฒ ์ค๊ณ๋ ์ ํ์ด ์๋ ์์กด์ ๋ฌธ์ ์ ๋๋ค.
ํ์ด์ฌ๊ณผ FastAPI, ๊ทธ๋ฆฌ๊ณ Redis๋ฅผ ์ฎ์ด๋ด๋ฉฐ ์๋ง์ ์๋ฌ ๋ก๊ทธ์ ๋ง์ฃผํ์ง๋ง, ํ๋์ด ๋๋ ๋ก์ง์ด ๋ชจ๋ํฐ์ 0.01์ด ๋จ์์ ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ์ฐ์ด์ค ๋์ ๊ทธ ์ง๋ฆฟํจ์ ์ด๋ฃจ ๋งํ ์ ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ๋ ๊ฒฐ๊ตญ '์ ์ ์ ์พ์ ํ ๊ฒฝํ'์ด ์ ๋ถ๋ผ๋ ์ฌ์ค์ ์๋ฒ ๊ด๋ฆฌ ๋์๋ณด๋๋ฅผ ๋ณด๋ฉฐ ๋ค์ ํ๋ฒ ๊นจ๋ซ์ต๋๋ค.
๐ฌ ๋๊ธ 0๊ฐ