14. ์ํต ์๋ ์ปค๋ฎค๋ํฐ๋ ์๊ผฌ ์๋ ์ฐ๋นต: ๋๊ธ ์์คํ ๊ตฌ์ถ๊ณผ ์คํธ ํ ๋ฌ ๋ฐฉ์ด์
๋ค์ด๊ฐ๋ฉฐ: ๋ด ์น์ฌ์ดํธ๊ฐ ๋๋ฌด '์กฐ์ฉ'ํ๋ค?
๊ด๋ฆฌ์ ์ ์ฉ ๊ธฐ๋ฅ๊น์ง ์์ฑํ๊ณ ์ฌ์ดํธ ์์ฅ๋ง์ ๊ฑฐ๋ฌ๋ธ ๋ค, ์ ๋ ๋ฉฐ์น ๋์ ํ๋ญํ๊ฒ ์ ์น์ฌ์ดํธ๋ฅผ ๋ค์ฌ๋ค๋ณด์์ต๋๋ค. ์ง์ธ๋ค์๊ฒ ๋งํฌ๋ฅผ ๋ณด๋ด์ฃผ๋ ์์ ์ฌ์ง๋ค๋ ์ ๋ฒ ์ฌ๋ผ์ค๊ณ , ์ ๊ฐ ๊ณต๋ค์ฌ ๋ง๋ 30์ผ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ๋ญํน ๋ณด๋ ์์๋ ์์น๋ฝ๋ค์น๋ฝ ๋ฐ๋๋ ๋ชจ์ต์ด ์ ๋ง ์ ๊ธฐํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ฉด์ ๋ฉํ๋ ๋ณด๋ค๊ฐ ๋ฌธ๋ ์์ฃผ ์ค์ํ ์ฌ์ค์ ํ๋ ๊นจ๋ฌ์์ต๋๋ค. ์ฌ์ดํธ๊ฐ ๋๋ฌด '์กฐ์ฉ'ํ๋ค๋ ๊ฒ์ด์์ฃ . ์ ์ ๋ค์ ์ฌ์ง์ ์ฌ๋ฆฌ๊ณ '์ถ์ฒ(ํํธ)' ๋ฒํผ์ ๋๋ฅผ ์๋ ์์์ง๋ง, ๊ทธ ์ฌ์ง์ ๋ํด "์, ์ด ์ฌ์ง ์ ๋ง ์์๋ค์!", "์ด ์์ ์ถ์ฒ๊ฐ ์ด๋์ธ๊ฐ์?" ๊ฐ์ ๋ํ๋ฅผ ๋๋ ๊ณต๊ฐ์ด ์์์ต๋๋ค. ์ํต์ด ์๋ ์ปค๋ฎค๋ํฐ๋ ์๊ผฌ ์๋ ์ฐ๋นต์ด๋ ๋ค๋ฆ์์ต๋๋ค. ์ ๋ ๊ณง๋ฐ๋ก ์๋ํฐ(VS Code)๋ฅผ ์ผ๊ณ , ์ปค๋ฎค๋ํฐ์ ์ฌ์ฅ์ธ '๋๊ธ(Comment)' ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ๋์ ํ์ต๋๋ค.
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ช: 1๋๋ค(1:N) ๊ด๊ณ ๋งบ๊ธฐ

<๋ชจ๋ ์น์ฌ์ดํธ ํต์ฌ ๋๊ธ๊ณผ ์ถ์ฒ>
๋๊ธ ๊ธฐ๋ฅ์ ๋ง๋ค๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) ์ค๊ณ๋ถํฐ ๋ค์ ํด์ผ ํ์ต๋๋ค. ํ์ด์ฌ ๋ฐฑ์๋(FastAPI)์์ ์ ๊ฐ ์ ์ฉํ๋ SQLAlchemy๋ฅผ ๊บผ๋ด ๋ค์์ต๋๋ค.
๊ฒ์๊ธ๊ณผ ๋๊ธ์ ๊ด๊ณ๋ ์ ํ์ ์ธ **'1๋๋ค(1:N) ๊ด๊ณ'**์
๋๋ค. ํ๋์ ๊ฒ์๊ธ(1) ์๋์ ์๋ง์ ๋๊ธ(N)์ด ๋ฌ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด Comment๋ผ๋ ์๋ก์ด DB ๋ชจ๋ธ(ํ
์ด๋ธ)์ ๋ง๋ค๊ณ , ๊ทธ ์์ post_id๋ผ๋ **์ธ๋ํค(ForeignKey)**๋ฅผ ์ฌ์ด์ฃผ์์ต๋๋ค.
"์ด ๋๊ธ์ 5๋ฒ ๊ฒ์๊ธ์ ์ํ ๋
์์ด์ผ!"๋ผ๊ณ ๊ผฌ๋ฆฌํ๋ฅผ ๋ฌ์์ฃผ๋ ์์
์ด์์ต๋๋ค. ์ฒ์์ ํท๊ฐ๋ ธ์ง๋ง, ๊ฒ์๊ธ์ ์ญ์ ํ ๋ ๊ทธ ๋ฐ์ ๋ฌ๋ฆฐ ๋๊ธ๋ค๋ ํ๊บผ๋ฒ์ ํญํ๋๋๋ก cascade="all, delete-orphan" ์ต์
๊น์ง ๊น๋ํ๊ฒ ์ค์ ํด ์ฃผ๋ ์ ๋ฒ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํ๊ฐ ๋๋ ๊ฒ ๊ฐ์์ต๋๋ค.
2. ํ๋ฉด ๊น๋นก์์ ๋ชป ์ฐธ์ง! ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ํต์ (Fetch API) ๋์
DB ์ธํ ์ ๋ง์น๊ณ Jinja2 ํ ํ๋ฆฟ์ ์ด์ฉํด ๊ฒ์๊ธ ๋ณธ๋ฌธ ๋ฐ์ ๋๊ธ ์ ๋ ฅ์ฐฝ๊ณผ ์ ์ก ๋ฒํผ์ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ํ ์คํธ๋ก ๋๊ธ์ ๋ฌ์๋ณด๋ ํฐ ๋ถ๋ง์กฑ์ด ์๊ฒผ์ต๋๋ค. ๋๊ธ ์ ์ก ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค ์น ๋ธ๋ผ์ฐ์ ํ๋ฉด ์ ์ฒด๊ฐ ํ์๊ฒ ๊น๋นก์ด๋ฉฐ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋๋ ๊ฒ์ด์์ต๋๋ค.
์ค๋งํธํฐ์ผ๋ก ์ธ์คํ๊ทธ๋จ์ด๋ ์ ํ๋ธ๋ฅผ ๋ณผ ๋, ๋๊ธ์ ๋จ๋ค๊ณ ํ๋ฉด ์ ์ฒด๊ฐ ์๋ก๊ณ ์นจ ๋์ง๋ ์์์์? ์ ์ปค๋ฎค๋ํฐ๋ ๊ทธ๋ฐ ์ธ๋ จ๋ ๋๋์ ์ฃผ๊ณ ์ถ์์ต๋๋ค.
๊ทธ๋์ HTML๊ณผ CSS์ ์์ญ์ ๋์ด, ํ๋ก ํธ์๋์ ๊ฝ์ด๋ผ ๋ถ๋ฆฌ๋ **์๋ฐ์คํฌ๋ฆฝํธ(JavaScript)**๋ฅผ ๊ฑด๋๋ฆฌ๊ฒ ๋์์ต๋๋ค.
ํ๋ฉด ์ด๋ ์์ด ์๋ฒ์ ๋ชฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ Fetch API (๋น๋๊ธฐ ํต์ ) ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ์ ์ ๊ฐ '๋๊ธ ์์ฑ'์ ๋๋ฅด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์
๋ ฅ๋ ๊ธ์๋ฅผ ๋์์ฑ์ ํ์ด์ฌ(FastAPI) ์๋ฒ๋ก ์กฐ์ฉํ ์ด์ฃผ๊ณ , ์๋ฒ๊ฐ "์ ์ฅ ์๋ฃ!" ์ ํธ๋ฅผ ๋ณด๋ด๋ฉด ๊ทธ ์ฆ์ ํ๋ฉด์ ๋ฐฉ๊ธ ์ด ๋๊ธ์ด ์ค๋ฅด๋ฅต ๋ํ๋๊ฒ ๋ง๋ค์์ฃ . ํ๋ฉด ๊น๋นก์ ์์ด ๋ฌผ ํ๋ฅด๋ฏ ์๋ํ๋ ๋๊ธ์ฐฝ์ ๋ณด๋ ๊ทธ๊ฐ์ ์ฒด์ฆ์ด ์น ๋ด๋ ค๊ฐ๋ ๊ธฐ๋ถ์ด์์ต๋๋ค.
3. ํํ๋ก์ด ๋ง์์ ์ฐพ์์จ ๋ถ์ฒญ๊ฐ: ์คํธ ๋๋ฐฐ ๊ณต๊ฒฉ
๋๊ธ ๊ธฐ๋ฅ์ด ๋๋ฌด ๋ง์์ ๋ค์ด์ ํผ์ "ํ ์คํธ1", "ํ ์คํธ2"๋ฅผ ๋ฏธ์น ๋ฏ์ด ์ฐํํ๋ฉฐ ๋๊ณ ์์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ๋ฑ๊ณจ์ด ์๋ํด์ง๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋ฒํผ์ ๋๋ฅด๋ ์กฑ์กฑ ๋๊ธ์ด ๋ฌ๋ฆฐ๋ค๋ ๊ฒ์, ๋ง์ฝ ์ ์๋ฅผ ํ์ ๋๊ตฐ๊ฐ๊ฐ (ํน์ ๋งคํฌ๋ก ๋ด์ด) 1์ด์ 100๋ฒ์ฉ ์ ์ก ๋ฒํผ์ ๋๋ฅธ๋ค๋ฉด ์ ๋ฐฉ๊ตฌ์ ๋ ธํธ๋ถ ์๋ฒ๊ฐ ๋ฌด์๋ฏธํ ๋๊ธ ๋ฐ์ดํฐ๋ก ๊ฐ๋ ์ฐจ๋ฒ๋ฆฌ๊ณ , ๊ฒฐ๊ตญ DB๊ฐ ๋ป์ด๋ฒ๋ฆด ์ ์๋ค๋ ๋ป์ด์์ต๋๋ค. ์ํต์ ์ํด ์ด์ด๋ ์ฐฝ๋ฌธ์ผ๋ก ์ฐ๋ ๊ธฐ๊ฐ ์์์ ธ ๋ค์ด์ฌ ์๊ธฐ์์ฃ .
4. ๋ฐฉํจ๋ฅผ ๋ค์ด๋ผ: SlowAPI๋ก Rate Limit(์๋ ์ ํ) ๊ฑธ๊ธฐ
์๋ฒ๋ฅผ ๋ณดํธํ ํผํผํ ๋ฐฉํจ๊ฐ ํ์ํ์ต๋๋ค. ์ ๋ FastAPI ํ๊ฒฝ์์ ์์ฃผ ์ฝ๊ฒ ์๋ ์ ํ์ ๊ฑธ ์ ์๋ **slowapi**๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์๋์ต๋๋ค.
Rate Limiting(์๋ ์ ํ)์ด๋?: ํน์ IP ์ฃผ์(์ ์ )๊ฐ ์๋ฒ์ ๋จ์๊ฐ ๋ด์ ๋๋ฌด ๋ง์ ์์ฒญ์ ๋ณด๋ด์ง ๋ชปํ๋๋ก ์ ํ์ ๋๋ ๋ณด์ ๊ธฐ์ ์ ๋๋ค.
์ ๋ ๋๊ธ ์์ฑ API ๋ผ์ฐํฐ์ @limiter.limit("5/minute")๋ผ๋ ์ฝ๋ ํ ์ค์ ์ดํฌ์ ์น์์ต๋๋ค. **"๋์ผํ IP์์๋ 1๋ถ์ ์ต๋ 5๊ฐ์ ๋๊ธ๋ง ์์ฑํ ์ ์๋ค"**๋ ๊ฐ๋ ฅํ ๊ท์น์ ์๋ฒ์ ๋ฐ์๋ฒ๋ฆฐ ๊ฒ์
๋๋ค.
์ฝ๋ ์ ์ฉ ํ ๋ค์ ๋ฏธ์น ๋ฏ์ด ํ
์คํธ ๋๊ธ์ ์ฐํํด ๋ณด์์ต๋๋ค. ๋ฑ 5๊ฐ๊ฐ ์์ฑ๋ ์งํ, ์๋ฒ๋ ๋จํธํ๊ฒ 429 Too Many Requests(์์ฒญ์ด ๋๋ฌด ๋ง์ต๋๋ค) ์๋ฌ๋ฅผ ๋ฑ์ด๋ด๋ฉฐ ์ ์คํธ ๊ณต๊ฒฉ์ ์๋ฒฝํ๊ฒ ํ๊ฒจ๋์ต๋๋ค. ์ ๋ฐฉ๊ตฌ์ ์๋ฒ๊ฐ ์ค์ค๋ก๋ฅผ ๋ณดํธํ ์ค ์๋ ํผํผํ ์์๋ก ์งํํ ์๊ฐ์ด์์ต๋๋ค.
๋ง์น๋ฉฐ: ์ด์ ์ง์ง '์ฐ๋ฆฌ'์ ๊ณต๊ฐ์ด ๋๋ค
๊ฒ์ํ๊ณผ ๋ญํน์ด๋ผ๋ '๋ผ๋' ์์, ๋๊ธ์ด๋ผ๋ 'ํผ์ ์ด'์ด ๋ถ๊ณ , ์คํธ ๋ฐฉ์ด๋ผ๋ 'ํผ๋ถ'๊น์ง ๋ฎ์์ต๋๋ค. ์ ์ ๋ค์ด ์ฌ์ง์ ๋ณด๋ฉฐ ๊ฐ์์ ๋๋๊ณ , ์์ ํ ํ๊ฒฝ์์ ๋ง์๊ป ํ๋ํ ์ ์๋ ์ง์ง '์ปค๋ฎค๋ํฐ'๊ฐ ์์ฑ๋์์ต๋๋ค.
๋๋ง์ ์น์ฌ์ดํธ๋ฅผ ๊ตฌ์ํ๋ฉฐ ๋๋ฉ์ธ(inspeep.com)์ ์๋ ๊ฒ์ด ์๊ทธ์ ๊ฐ์๋ฐ, ์ด๋๋ง ๋๊ตฐ๊ฐ์ ํจ๊ป ๋ํํ ์ ์๋ '์ฐ๋ฆฌ'์ ๊ณต๊ฐ์ผ๋ก ๋ณํด๊ฐ๋ ๊ณผ์ ์ ๋ณด๋ ๊ฐ์ด์ด ๋ฒ ์ฐจ์ค๋ฆ ๋๋ค.
์ด์ ๋๋ง์ 15ํธ, ์ด ๊ธธ๊ณ ๊ธธ์๋ [๊ฐ๋ฐ๊ธฐ] ์๋ฆฌ์ฆ์ ๋ง์ง๋ง์ '์ธ์์ ๋ด ์น์ฌ์ดํธ๋ฅผ ์๋ฆฌ๊ธฐ ์ํ ๊ตฌ๊ธ ๊ฒ์์์ง ์ต์ ํ(SEO)์ ์์น ์ฝ์ ๋ฑ๋ก๊ธฐ', ๊ทธ๋ฆฌ๊ณ ์ง๋ ๋ช ๋ฌ๊ฐ์ ๋๋ฌผ๊ฒจ์ด ์ฌ์ ์ ๋๋์๋ณด๋ **'์ต์ข ํ๊ณ ๋ก'**์ผ๋ก ์ฅ์ํด ๋ณผ๊น ํฉ๋๋ค. ๋ง์ง๋ง๊น์ง ์ง์ผ๋ด ์ฃผ์ธ์!
์ง๋ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 13. ์๋ฒฝํ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ๊ด๋ฆฌ์์ ๊ณ ๊ตฐ๋ถํฌ: OpenCV ์ธ๋ค์ผ๊ณผ ์๋ฌ ๋์ฒ๋ฒ
๋ค์ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 15. ์ธ์์ ๋ด ์น์ฌ์ดํธ๋ฅผ ์๋ฆฌ๋ค: SEO ์ต์ ํ์ ๊ตฌ๊ธ ์์น ์ฝ์, ๊ทธ๋ฆฌ๊ณ ์ต์ข ํ๊ณ ๋ก
๐ฌ ๋๊ธ 0๊ฐ