1์ธ ๊ฐ๋ฐ์์ ํธ๋ํฝ ์์กด๊ธฐ: FastAPI์ Cloudflare ์บ์ ๊ท์น(Cache Rules)์ผ๋ก ์ด๋ฏธ์ง ์๋ฒ ๋ถํ ๋ฐ 503 ์๋ฌ ์๋ฒฝ ํด๊ฒฐ
์น์ฌ์ดํธ๋ฅผ ์ฒ์ ๋ก ์นญํ๊ณ ์ ์ ํธ๋ํฝ์ด ๋์ด๋๊ธฐ ์์ํ์ ๋, ์ ๋ ์ ๊ฐ ์ง FastAPI ๋ฐฑ์๋ ์ฝ๋๊ฐ ์์ฃผ ํ๋ฅญํ๊ฒ ์๋ํ๊ณ ์๋ค๊ณ ๋ฏฟ์์ต๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒ์๊ธ์ด ์๋ง ๊ฐ ์์ด๊ณ ๋ด๋ค์ ๋ฌด๋จ ํฌ๋กค๋ง์ด ์์๋๋ฉด์, ๋ฉ์ฉกํ๋ ์๋ฒ๊ฐ ๊ฐ์๊ธฐ 503 Service Unavailable ์๋ฌ๋ฅผ ๋ฟ์ด๋ด๋ฉฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ค์ด๋๊ธฐ ์์ํ์ต๋๋ค.
์๋ฒ ํฐ๋ฏธ๋์ ์ด๊ณ ์ ์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์๊ฐ, ์ ๋ ๊ฒฝ์ ์ ๊ธ์น ๋ชปํ์ต๋๋ค.

๊ฒ์๊ธ ํ๋๋ฅผ ํด๋ฆญํ ๋๋ง๋ค ํ๋ฉด ํ๋จ์ ์ธ๋ค์ผ๊ณผ ๋ณธ๋ฌธ ์ด๋ฏธ์ง(.webp, .jpg)๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด, 1์ด์ ์์ญ~์๋ฐฑ ๊ฑด์ ์ ์ ํ์ผ ์์ฒญ์ด ๋ฐฑ์๋ ์๋ฒ(Uvicorn)๋ฅผ ์ง์ ๋๋ฆฌ๊ณ ์์๋ ๊ฒ์
๋๋ค. ํ์ด์ฌ ์์ปค(Worker)๋ค์ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ๋ ๋ฐ์๋ฐ, ๋ฌด๊ฑฐ์ด ์ด๋ฏธ์ง ํ์ผ๋ค์ ํ๋๋์คํฌ์์ ๊บผ๋ด์ด ์ ๋ฌํ๋๋ผ ์์ ํ ์ง์ณ ๋ป์ด๋ฒ๋ฆฐ ์ํ์์ต๋๋ค.
1. ์น ์๋ฒ์ ๊ธฐ๋ณธ์ ๋ง๊ฐํ ๋๊ฐ: ๋ชจ๋ ๊ฒ์ ํ์ด์ฌ์ด ์ฒ๋ฆฌํ๋ค
ํ์ ์์ ๋๊ท๋ชจ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์ํคํ ์ฒ๋ฅผ ๋ณด๋ฉด, ํ์ด์ฌ์ด๋ ์๋ฐ ๊ฐ์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ง '๋ฐ์ดํฐ ์ฐ์ฐ'๋ง ๋ด๋นํฉ๋๋ค. ์ด๋ฏธ์ง๋ CSS, JS ๊ฐ์ ์ ์ (Static) ํ์ผ๋ค์ ๊ทธ ์๋จ์ ์๋ Nginx๋ CDN(์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ)์ด ๋์ ํด๋ผ์ด์ธํธ์๊ฒ ๋์ ธ์ฃผ๋ ๊ฒ์ด ์ ์์ ๋๋ค.
ํ์ง๋ง ์ ๋ 1์ธ ๊ฐ๋ฐ์ ํธ์์ฑ์ ์ํด FastAPI์ StaticFiles ๋ผ์ฐํฐ๋ฅผ ์ด์ฉํด ์๋ฒ๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ง์ ๋ฐํํ๋๋ก ์ธํ
ํด ๋์์ต๋๋ค. ์ ์ ๊ฐ ์ ์ ๋๋ ๋ฌธ์ ๊ฐ ์์์ง๋ง, ๊ตฌ๊ธ ๊ฒ์ ๋ด๊ณผ ๊ธ๋ก๋ฒ ์
์ฑ ํฌ๋กค๋ฌ๋ค์ด ๊ฒ์๊ธ์ ๋ฌด์ฐจ๋ณ์ ์ผ๋ก ๊ธ์ด๊ฐ๊ธฐ ์์ํ์ ์๋ฒ์ ๋์ญํญ์ ์์๊ฐ์ ์๊ณ์น๋ฅผ ๋์ด๋ฒ๋ ธ์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฒ ์ฌ์(Scale-up)์ ์ฌ๋ฆฌ๋ ๊ฒ์ ์์ฒญ๋ ๋น์ฉ ๋ญ๋น์์ต๋๋ค. ์ ๋ ์ด ์์ฒญ๋ ํธ๋ํฝ์ ์๋ฒ ๋ฐ๊นฅ์์ ๋ฌด๋ฃ๋ก ์ฒ๋ฆฌํด ์ค ๊ฐ๋ ฅํ ๋ฐฉํจ, Cloudflare(ํด๋ผ์ฐ๋ํ๋ ์ด) ์บ์(Cache) ๊ธฐ๋ฅ์ ์ ๊ทน ํ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค.
2. ๊ตฌ์ํฌ์ ๋ฑ์ฅ: Cloudflare ์๋ฒฝ ์บ์ ๊ท์น(Cache Rules) ์ธํ
ํด๋ผ์ฐ๋ํ๋ ์ด๋ ์ ์ธ๊ณ์ ๊ธ๋ก๋ฒ ์ฃ์ง(Edge) ์๋ฒ๋ฅผ ๋๊ณ ์์ต๋๋ค. ์ ์ ๊ฐ ๋ด ์ฌ์ดํธ์ ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ฉด, ํ๊ตญ์ ์๋ ๋ด ์๋ฒ๊น์ง ์ค์ง ์๊ณ ์ ์ ์ ๊ฐ์ฅ ๊ฐ๊น์ด ํด๋ผ์ฐ๋ํ๋ ์ด ์๋ฒ๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋์ ์ด์ฃผ๋๋ก(์บ์ฑ) ์ค์ ํ ์ ์์ต๋๋ค.
์ ๋ ์ฆ์ Cloudflare ๋์๋ณด๋์ ์ ์ํ์ฌ ์๋์ ๊ฐ์ด ๊ฐ๋ ฅํ ์บ์ ๊ท์น(Cache Rules)์ ์์ฑํ์ต๋๋ค.
๋ฉ๋ด ์ด๋:
Cachingโก๏ธCache Rulesโก๏ธCreate ruleํด๋ฆญ๊ท์น ์กฐ๊ฑด(If):
URI Pathstarts with/static/(์ด๋ฏธ์ง, CSS ๋ฑ ๋ชจ๋ ์ ์ ํ์ผ ๊ฒฝ๋ก)์บ์ ๋์(Then):
Cache eligibility: Eligible for cache (์บ์ ํ์ฉ)Edge TTL: Override origin (์๋ณธ ์๋ฒ ์ค์ ๋ฌด์) โก๏ธ 1 month (1๊ฐ์)Browser TTL: Override origin โก๏ธ 1 month (1๊ฐ์)
์ด ์ค์ ์ ์๋ฏธ๋ ๊ฐ๋จํฉ๋๋ค. "๋๊ตฐ๊ฐ /static/ ๊ฒฝ๋ก์ ์๋ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๋ฉด, ๋ฌด์กฐ๊ฑด ํด๋ผ์ฐ๋ํ๋ ์ด ์๋ฒ์ ํ ๋ฌ(1๊ฐ์) ๋์ ์ ์ฅ(์บ์ฑ)ํด ๋๊ณ ๋ค๊ฐ ์์์ ๋ฐฉ๋ฌธ์๋ค์๊ฒ ๋๋ ์ค๋ผ! ๋ด ํ์ด์ฌ ์๋ณธ ์๋ฒ์๋ ์ ๋ ์์ฒญ์ ๋ณด๋ด์ง ๋ง๋ผ!"๋ผ๋ ๋ป์
๋๋ค.
์ค์ ์ ๋ง์น ํ, ๊ท์น์ ์ฆ์ ๋ฐฐํฌ(Deploy)ํ๊ณ [Caching] โก๏ธ [Configuration] ๋ฉ๋ด์์ [Purge Everything (๋ชจ๋ ์บ์ ์ง์ฐ๊ธฐ)] ๋ฒํผ์ ๋๋ฌ ์๋ก์ด ๊ท์น์ด ๋ฐฑ์ง์ํ์์ ์๋ฒฝํ๊ฒ ์ ์ฉ๋๋๋ก ๊ฐฑ์ ํ์ต๋๋ค.
3. ๊ทน์ ์ธ ๋ณํ: ์๋ฒ ์ ์ ์จ 0%์ ํํ๋ฅผ ๋์ฐพ๋ค
์ค์ ์ ์๋ฃํ๊ณ ๋จ 10๋ถ ๋ค, ํฐ๋ฏธ๋ ๋ก๊ทธ ์ฐฝ์ ๊ธฐ์ ๊ฐ์ ๋ณํ๊ฐ ์ผ์ด๋ฌ์ต๋๋ค.
1์ด์ ์๋ฐฑ ์ค์ฉ ๋ฏธ์น ๋ฏ์ด ์์์ง๋ฉฐ ์๋ฒ๋ฅผ ๊ดด๋กญํ๋ GET /static/uploads/...webp 200 OK ๋ก๊ทธ๊ฐ ๊ฑฐ์ง๋ง์ฒ๋ผ ๋ ๋๊ฒผ์ต๋๋ค. ๊ตฌ๊ธ ๊ฒ์ ๋ก๋ด๊ณผ ์ค์ ์ ์ ๋ค์ด ์๋ฌด๋ฆฌ ๊ฒ์ํ์ ๊ดํดํ๋ฉฐ ์ด๋ฏธ์ง๋ฅผ ๊ธ์ด๊ฐ๋, ์๋ณธ ์๋ฒ(์ค๋ผํด ํด๋ผ์ฐ๋)์๋ ๋จ 1๊ฑด์ ์ด๋ฏธ์ง ์์ฒญ๋ ๋๋ฌํ์ง ์์์ต๋๋ค. ํด๋ผ์ฐ๋ํ๋ ์ด์ ๊ธ๋ก๋ฒ ์ฃ์ง ์๋ฒ๋ค์ด ์ฒ ํต๊ฐ์ด ์ ์๋ฒ๋ฅผ ๋ณดํธํ๋ฉฐ ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ฟ๋ ค์ฃผ๊ณ ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
์๋ฒ์ CPU ์ ์ ์จ์ 100%์์ 5% ๋ฐ์ผ๋ก ๋ ๋จ์ด์ก๊ณ , 503 ์๋ฌ๋ ์๋ฒฝํ๊ฒ ์์ทจ๋ฅผ ๊ฐ์ถ์์ต๋๋ค. ํ์ด์ฌ ์์ปค(Worker) ํ๋ก์ธ์ค๋ค์ ์ค์ง ๊ฐ๋ฒผ์ด ํ ์คํธ(JSON, HTML) ์ฐ์ฐ์๋ง ์ง์คํ ์ ์๊ฒ ๋์ด, ์ ์ฒด์ ์ธ ์ฌ์ดํธ ๋ก๋ฉ ์๋๋ ๋์ ๋๊ฒ ๋นจ๋ผ์ก์ต๋๋ค.
๋งบ์ผ๋ฉฐ: ํด๋ผ์ฐ๋ ์ธํ๋ผ ํ์ฉ์ ์ค์์ฑ
๋ฐฑ์๋ ๋ก์ง์ ์๋ฆ๋ต๊ฒ ์ง๋ ๊ฒ๋งํผ์ด๋ ์ค์ํ ๊ฒ์, '์ด๋ค ํธ๋ํฝ์ ์๋ฒ๊ฐ ์ง์ ์ฒ๋ฆฌํ๊ณ ์ด๋ค ํธ๋ํฝ์ ์๋จ(CDN)์ผ๋ก ์์ํ ๊ฒ์ธ๊ฐ'๋ฅผ ์ค๊ณํ๋ ์ธํ๋ผ ์ต์ ํ ๋ฅ๋ ฅ์ ๋๋ค.
1์ธ ๊ฐ๋ฐ์๋ ์๊ท๋ชจ ์คํํธ์ ์ผ์๋ก ๋น์ผ ์๋ฒ ๋น์ฉ์ ๊ฐ๋นํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๋ง์ฝ ์ง๊ธ ์ด์ ์ค์ธ ์น์ฌ์ดํธ์ ์์ธ ๋ชจ๋ฅผ ๋ณ๋ชฉ ํ์์ด๋ ์๋ฒ ๋ค์ด์ด ๋ฐ์ํ๊ณ ์๋ค๋ฉด, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ค์๊ธฐ ์ ์ ์ ์ ์์(์ด๋ฏธ์ง, ํฐํธ, CSS)์ด ๋ฐฑ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์๋จน๊ณ ์์ง๋ ์์์ง ๋จผ์ ์ ๊ฒํด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ํด๋ผ์ฐ๋ํ๋ ์ด์ ์บ์ ๊ท์น ํ๋๊ฐ ์ฌ๋ฌ๋ถ์ ์๋ฒ ์๋ช ์ค์ ์ฐ์ฅํด ์ค ์ต๊ณ ์ ์นํธํค๊ฐ ๋ ๊ฒ์ ๋๋ค.
โ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ (FAQ)
Q1. Edge TTL๊ณผ Browser TTL์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
A. Edge TTL์ ํด๋ผ์ฐ๋ํ๋ ์ด์ ๊ธ๋ก๋ฒ ์๋ฒ(CDN)์ ํ์ผ์ ์ผ๋ง ๋์ ์ ์ฅํด ๋์ง ๊ฒฐ์ ํ๋ ์๊ฐ์
๋๋ค. Browser TTL์ ๋ฐฉ๋ฌธ์(์ ์ )์ ๊ฐ์ธ ์ค๋งํธํฐ์ด๋ PC ๋ธ๋ผ์ฐ์ (ํฌ๋กฌ, ์ฌํ๋ฆฌ ๋ฑ) ์บ์์ ํ์ผ์ ์ผ๋ง๋ ์ ์ฅํด ๋์ง ๊ฒฐ์ ํฉ๋๋ค. ์ ์ ์ด๋ฏธ์ง ํ์ผ์ ํ ๋ฒ ์ฌ๋ผ๊ฐ๋ฉด ์์ ๋ ์ผ์ด ๊ฑฐ์ ์์ผ๋ฏ๋ก ๋ ๋ค 1๋ฌ(1 month) ์ ๋๋ก ๊ธธ๊ฒ ๋๋ํ ์ก๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์
๋๋ค.
Q2. ์บ์๋ฅผ 1๋ฌ๋ก ์ค์ ํ๋๋ฐ, ๋ง์ฝ ์ด๋ฏธ์ง๋ฅผ ์์ (๊ต์ฒด)ํ๋ฉด ์ด๋ป๊ฒ ๋๋์?
A. ์ ์ ๋ค์ ํ ๋ฌ ๋์ ํด๋ผ์ฐ๋ํ๋ ์ด์ ์ ์ฅ๋ '์๋ ์ด๋ฏธ์ง'๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ์ง๋ฅผ ๊ธด๊ธํ๊ฒ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด, ํด๋ผ์ฐ๋ํ๋ ์ด ๋์๋ณด๋์ [Caching] ๋ฉ๋ด์์ [Purge Custom URL] ๊ธฐ๋ฅ์ ์ด์ฉํด ํด๋น ์ด๋ฏธ์ง์ ํน์ ์ฃผ์๋ง ์บ์๋ฅผ ๊ฐ์ ๋ก ์ญ์ (์ด๊ธฐํ)ํด ์ฃผ์๋ฉด ์๋ณธ ์๋ฒ์ ์ต์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๊ฐ์ ธ์ต๋๋ค.
Q3. Nginx ๊ฐ์ ์น ์๋ฒ ์ํํธ์จ์ด๋ฅผ ๋ก์ปฌ์ ์ง์ ์ค์นํด์ ์บ์ฑํ๋ฉด ์ ๋๋์?
A. ๋ฌผ๋ก Nginx๋ฅผ ํ์ฉํ ๋ก์ปฌ ์บ์ฑ๋ ํ๋ฅญํ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ง๋ง 1์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ ๋ฌด๋ฃ ํด๋ผ์ฐ๋(Oracle Free Tier ๋ฑ)๋ฅผ ์ฌ์ฉํ ๋๋ ๋ก์ปฌ ๋์คํฌ ๊ณต๊ฐ๊ณผ ๋์ญํญ(Bandwidth)์ ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค. ํด๋ผ์ฐ๋ํ๋ ์ด๋ ์ด ๋์ญํญ ์๊ธ์ ๋ฌด๋ฃ๋ก ๋ฐฉ์ดํด ์ฃผ๋ฉด์ ๊ธ๋ก๋ฒ ์ ์ก ์๋๊น์ง ๋ณด์ฅํ๋ฏ๋ก, ์๋์ ์ผ๋ก ์ ๋ฆฌํ ์ธํ๋ผ ๊ตฌ์ฑ ๋ฐฉ์์ ๋๋ค.

๐ฌ ๋๊ธ 0๊ฐ