10. ๋ฐฉ๊ตฌ์ ์๋ฒ์ ํ๊ณ๋ฅผ ๋๋ค: Render ๋ฐฑ์ ๋ถํฐ ์น์งํ ๊ฒ์ํ ๊ฐ๋ฐ๊น์ง
๋ค์ด๊ฐ๋ฉฐ: 24์๊ฐ ๋ ธํธ๋ถ ์๋ฒ, ๊ทธ ์น๋ช ์ ์ธ ๋ถ์๊ฐ
์ง๋ 9ํธ์์ ํด๋ผ์ฐ๋ํ๋ ์ด ํฐ๋๊ณผ <code>tmux</code>๋ฅผ ํ์ฉํด ๋ก์ ๊ตฌํ ๋ ธํธ๋ถ์ 24์๊ฐ ๋์๊ฐ๋ ๋ฌด์ค๋จ ์๋ฒ๋ก ํ๋ฐ๊ฟ์ํค๋ ๋ฐ ์ฑ๊ณตํ์ต๋๋ค. ๊น๋ง ํฐ๋ฏธ๋ ์ฐฝ์์ ์กฐ์ฉํ ๋์๊ฐ๊ณ ์๋ ์ FastAPI ์๋ฒ๋ฅผ ๋ณผ ๋๋ฉด ๋ฐฅ์ ์ ๋จน์ด๋ ๋ฐฐ๊ฐ ๋ถ๋ฅธ ๊ธฐ๋ถ์ด์์ฃ .ํ
์ง๋ง ๋ฉฐ์น ์ด ์ง๋์ ํ์ค์ ์ธ ๋ถ์๊ฐ์ด ์์ตํ๊ธฐ ์์ํ์ต๋๋ค. "๋ ธํธ๋ถ ์ฟจ๋ฌ์ ๋จผ์ง๊ฐ ๊ปด์ ์ฒญ์๋ฅผ ํด์ผ ํ๋ฉด ์ด๋กํ์ง?", "์๋์ฐ ์ ๋ฐ์ดํธ๋ ์ ์ ๋๋ฌธ์ ๋ ธํธ๋ถ์ด ์ฌ๋ถํ ๋์ด๋ฒ๋ฆฌ๋ฉด ๋ด ์น์ฌ์ดํธ๋ ๊ทธ๋๋ก ์ฃฝ์ด๋ฒ๋ฆฌ๋ ๊ฑด๊ฐ?"
๊ทธ๋ ์ต๋๋ค. ๋ฐฉ๊ตฌ์ ๋ฌผ๋ฆฌ ์๋ฒ๋ ์ ์ง๋ณด์๋ฅผ ํผํ ์ ์๊ณ , ์ ๊ฐ ๋ ธํธ๋ถ ์ ์์ ๋ด๋ฆฌ๋ ์๊ฐ ์ ์ปค๋ฎค๋ํฐ๋ฅผ ๋ฐฉ๋ฌธํ ์ ์ ๋ค์ ์ ์ ๋ถ๊ฐ ์๋ฌ ์ฐฝ์ ๋ง์ฃผํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด ์น๋ช ์ ์ธ ์ฝ์ ์ ๋ณด์ํ 'ํ๋ B'๊ฐ ์ ์คํ์ต๋๋ค.
1. ๋ ๋ ํ ๋ณดํ, ํด๋ผ์ฐ๋ ํ๋ซํผ 'Render'์์ ๋ง๋จ

<์ ์ Render Dashboard์ด๋ค. ๋ฌด๋ฃ๋ผ์ ๋ ์ข๋ค.>
์ด ๋ถ์๊ฐ์ ํด์ํ๊ธฐ ์ํด ์ ๊ฐ ์ ํํ ํด๊ฒฐ์ฑ ์ ๋ฐ๋ก **'Render(๋ ๋)'**๋ผ๋ ํด๋ผ์ฐ๋ ํธ์คํ ์๋น์ค์์ต๋๋ค.
<ul><li>์ ํํ Render์ธ๊ฐ?: ๋ ๋๋ GitHub์ ์ฌ๋ ค๋ ์ ์น์ฌ์ดํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์์ ๋ฌด๋ฃ๋ก ์๋ฒ๋ฅผ ๋ฐฐํฌํด ์ฃผ๋ ์์ฃผ ๊ณ ๋ง์ด ํ๋ซํผ์ ๋๋ค.
</li></ul>์ ์ ๋ต์ ์ด๋ ์ต๋๋ค. ํ์์๋ ์๋๋ ๋น ๋ฅด๊ณ ์ ํ๋ ์๋ ์ '๋ฐฉ๊ตฌ์ ๋ ธํธ๋ถ ์๋ฒ'๊ฐ ๋ฉ์ธ์ผ๋ก ์น์ฌ์ดํธ๋ฅผ ์ฉ์ฉํ๊ฒ ๋๋ฆฝ๋๋ค. ๊ทธ๋ฌ๋ค ์ ๊ฐ ๋ ธํธ๋ถ ์ฒญ์๋ฅผ ํ๊ฑฐ๋ ์ ์ง๋ณด์๋ฅผ ์ํด ์ ์ ์๋ฒ๋ฅผ ๊บผ์ผ ํ ๋, Render์ ์์๋ก ๋์๋ ๋๊ฐ์ ๋ณต์ ์๋ฒ๊ฐ ๋ฐํต์ ์ด์ด๋ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋ฌด์ค๋จ์ผ๋ก ์ ์งํด ์ฃผ๋ ๊ฒ์ ๋๋ค.
์ค์ ๋ก ๊นํ๋ธ(Git)๋ฅผ ํตํด ๋ ธํธ๋ถ์ ์ฝ๋๋ฅผ Render์ ์ฐ๋ํ๊ณ ๋ ธํธ๋ถ ์ ์์ ๊บผ๋ณด์์ ๋, ์ ์น์ฌ์ดํธ๊ฐ ์ฃฝ์ง ์๊ณ Render ์๋ฒ๋ฅผ ํตํด ๋ฉ์ฉกํ ์ ์๋๋ ๊ฒ์ ํ์ธํ๊ณ ๋ ์ ๋ง ์๋์ ํ์จ์ ๋ด์ฌ์์ต๋๋ค. ์ด์ ๋ฌผ๋ฆฌ์ ์๋ฒ๋ค์ด์ ๋ํ ๊ณตํฌ์์ ์์ ํ ํด๋ฐฉ๋์์ต๋๋ค.
2. Jinja2 ํ ํ๋ฆฟ์ผ๋ก '์น์งํ ์ธ๋ค์ผ ๊ฒ์ํ' ๋์์ธํ๊ธฐ
์๋ฒ์ ์์ ์ฑ์ ํ๋ณดํ์ผ๋, ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ ์ ๋ค์ด ํ๋ํ ๋ฌด๋์ธ '๊ฒ์ํ'์ ์์๊ฒ ๊พธ๋ฐ ์ฐจ๋ก์์ต๋๋ค.
์ ๊ฐ ๊ธฐํ ์ค์ธ ์ปค๋ฎค๋ํฐ๋ ํ ์คํธ๋ง ๋๋ ์๋ ์ฌ์ฌํ ๊ฒ์ํ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋๋ค. ํนํ ์ธ์คํ๊ทธ๋จ ๋ฑ์์ ๊ฐ์ ธ์จ ๋ฏธ๋์ด๋ ์์ด๋ ์ฌ์ง ๊ฐ์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ค์ด ์ฃผ๋ก ์ ๋ก๋๋ ๊ณต๊ฐ์ด๊ธฐ ๋๋ฌธ์, ๊ธ ์ ๋ชฉ๋ง ๋์ด๋ ๋ฆฌ์คํธ ํํ๋ณด๋ค๋ ์ฌ์ง์ด ํ๋์ ๋ค์ด์ค๋ '์น์ง(Webzine)' ํํ์ ์ธ๋ค์ผ ๊ฒ์ํ์ด ํ์์ ์ด์์ต๋๋ค.
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ์ด์ฌ FastAPI์ ์ฐฐ๋ก๊ถํฉ์ ์๋ํ๋ Jinja2(์ง์2) ํ ํ๋ฆฟ ์์ง์ ํ์ฉํ์ต๋๋ค. HTML ์ฝ๋ ์ฌ์ด์ <code>{% for post in posts %}</code> ๊ฐ์ Jinja2 ๋ฌธ๋ฒ์ ์์ด ์ฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๊ฒ์๊ธ์ ๋ํ ์ด๋ฏธ์ง(์ธ๋ค์ผ)์ ์ ๋ชฉ์ด ๋ง์น ์์ ํ์ผ์ฒ๋ผ ํ๋ฉด์ ๋ฐ๋ํ์์ผ๋ก ์ฐฉ์ฐฉ ๋ฐฐ์ด๋์์ต๋๋ค. CSS๋ฅผ ์กฐ๊ธ ๋ง์ ธ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋ ์ฌ์ง์ด ์ด์ง ์ปค์ง๋ ์ ๋๋ฉ์ด์ ๊น์ง ๋ฃ๊ณ ๋๋, ์ด์ ์ผ ์ ๋ง ๊ทธ๋ด์ธํ ์์ฉ ์น์ฌ์ดํธ์ ํ๊ฐ ๋๊ธฐ ์์ํ์ต๋๋ค.
3. ๋ฐ์ดํฐ ํญ๋ฐ์ ๋ง์๋ผ: ๊ฒ์ํ ํ์ด์ง๋ค์ด์ (Pagination) ์๋ฒฝ ๊ตฌํ
์ธ๋ค์ผ ๊ฒ์ํ์ ์์ฑํ๊ณ ๊ธฐ์ ๋ง์์ผ๋ก ํ ์คํธ ๊ฒ์๊ธ๊ณผ ์ฌ์ง์ ๋ง๊ตฌ ์ฌ๋ฆฌ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ธ์ด 20๊ฐ, 30๊ฐ๋ฅผ ๋์ด๊ฐ์ ์น์ฌ์ดํธ ๋ก๋ฉ ์๋๊ฐ ๋์ ๋๊ฒ ๋๋ ค์ง๊ธฐ ์์ํ์ต๋๋ค. ํ ํ๋ฉด์ ์์ญ ์ฅ์ ๊ณ ํ์ง ์ธ๋ค์ผ ์ฌ์ง์ ํ ๋ฒ์ ๋ถ๋ฌ์ค๋ ค๋ ๋ ธํธ๋ถ ์๋ฒ๊ฐ ํํ๋๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
์ด๋์ ๋ชจ๋ ์น์ฌ์ดํธ ๊ฒ์ํ ๋งจ ๋ฐ์๋ '1, 2, 3, 4...' ํ๊ณ ์ชฝ์๋ฅผ ๋๋๋ **ํ์ด์ง๋ค์ด์ (Pagination)**์ด ์๋ ๊ฑฐ์๊ตฐ์!
์ํ์ ๋๋ฅผ ํ๊ฐ๋ํ ์๊ฐ์ด์์ต๋๋ค. ์ ์ฒด ๊ฒ์๊ธ ์๋ฅผ ๊ตฌํ๊ณ , ํ ํ์ด์ง๋น ๋ณด์ฌ์ค ๊ธ์ ๊ฐ์(์: 12๊ฐ)๋ก ๋๋์ด ์ด ๋ช ํ์ด์ง๊ฐ ํ์ํ์ง ๊ณ์ฐํ๋ ๋ก์ง์ ์งฐ์ต๋๋ค. FastAPI ๋ฐฑ์๋์์ <code>limit</code>๊ณผ <code>offset</code> ์์ฑ์ ์ด์ฉํด ๋ฑ ๊ทธ ํ์ด์ง์ ํ์ํ ๋ฐ์ดํฐ๋ง DB์์ ์๋ผ์ค๋๋ก ๋ง๋ค๊ณ , ์์ ๋ฐฐ์ด Jinja2๋ฅผ ํ์ฉํด ํ๋ฉด ํ๋จ์ ์ด์ /๋ค์ ๋ฒํผ๊ณผ ์ซ์ ํ์ด์ง ๋ฐ๋ฅผ ์๋ฒฝํ๊ฒ ๊ตฌํํด ๋์ต๋๋ค.
4. ์ปค๋ฎค๋ํฐ์ ๊ฝ, SQLAlchemy๋ก ์ถ์ฒ์์ ์กฐํ์ ์นด์ดํธํ๊ธฐ
๊ฒ์ํ์ ์ธํ์ ๊ฐ์ท์ผ๋, ์ด์ ์ ์ ๋ค์ ํฅ๋ฏธ๋ฅผ ์ ๋ฐํ ์ปค๋ฎค๋ํฐ์ ํต์ฌ ์กฐ๋ฏธ๋ฃ๋ฅผ ์น ์ฐจ๋ก์ ๋๋ค. ๋ฐ๋ก '์กฐํ์'์ '์ถ์ฒ(์ข์์)' ๊ธฐ๋ฅ์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ ํ์ด์ฌ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ๋ค๋ฃจ๊ฒ ํด์ฃผ๋ ORM ๋๊ตฌ์ธ **SQLAlchemy(์์ผ๋ฏธ)**๋ฅผ ์ ๊ทน ํ์ฉํ์ต๋๋ค.
<ul><li>์กฐํ์: ์ ์ ๊ฐ ๊ฒ์๊ธ ๋ณธ๋ฌธ ์ฃผ์๋ก ์ ์(GET ์์ฒญ)ํ ๋๋ง๋ค ํด๋น ๊ธ์ <code>view_count</code> ์ปฌ๋ผ์ ์ซ์๋ฅผ +1์ฉ ์ ๋ฐ์ดํธํ๋๋ก ์ฝ๋๋ฅผ ์งฐ์ต๋๋ค.
</li><li>์ถ์ฒ ๊ธฐ๋ฅ: ํํธ ๋ชจ์ ๋ฒํผ์ ๋ง๋ค๊ณ , ๋ฒํผ์ ๋๋ฅด๋ฉด <code>recommend_count</code>๊ฐ ์ฌ๋ผ๊ฐ๋๋ก ์ค๊ณํ์ต๋๋ค. ์ค๋ณต ์ถ์ฒ์ ๋ง๊ธฐ ์ํด ๋ก๊ทธ์ธํ ์ ์ ์ ์ ๋ณด์ ๊ฒ์๊ธ ๋ฒํธ๋ฅผ ๋งค์นญํ๋ ๋ณ๋์ DB ํ ์ด๋ธ๋ ํ๋ ๋ ์์ฑํ๋ ๋ฑ ์๊ฐ๋ณด๋ค ๊ณ ๋ คํ ์กฐ๊ฑด์ด ๋ง์์ต๋๋ค.
</li></ul>๋จ์ํ ์ซ์๋ฅผ ์ฌ๋ฆฌ๋ ๊ฒ์ ๊ทธ์น์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ์์ธ ์ถ์ฒ์์ ์กฐํ์ ๋ฐ์ดํฐ๋, ํ๋ ์ ๊ฐ ์ผ์ฌ ์ฐจ๊ฒ ๊ธฐํ ์ค์ธ **'๋ช ์์ ์ ๋น(๋ญํน ๋ณด๋)'**์ ๋์ฐ๊ธฐ ์ํ ๊ฐ์ฅ ์ค์ํ ๋ฐ๊ฑฐ๋ฆ์ด ๋ ๊ฒ์ ๋๋ค.
๋ง์น๋ฉฐ: ์ง์ง '๊ฐ๋ฐ์'๊ฐ ๋์ด๊ฐ๋ ๊ธฐ๋ถ
์ด๋ฒ ์์ ์ ์ ๋ง ์๊ฐ ๊ฐ๋ ์ค ๋ชจ๋ฅด๊ณ ํน ๋น ์ ธ์ ์งํํ์ต๋๋ค. ์๋ํ๋ ์ค๋ผ๋ ์์ฑ๋ ํด ์์์ ๋จ์ด ๋ง๋ค์ด๋ ํ ๋ง์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ๋ค ์ฐ๋ ๊ณผ๊ฑฐ์ ๋ฌ๋ฆฌ, ์ธ๋ค์ผ์ ํฌ๊ธฐ๋ถํฐ ํ์ด์ง๋ฅผ ๋๊ธฐ๋ ๋ฐฉ์, ์ถ์ฒ ๋ฒํผ์ ๋ก์ง๊น์ง ์ค๋กฏ์ด ์ ์์ผ๋ก ์ง์ ์ค๊ณํ๊ณ ๊ตฌํํด ๋์ผ๋๊น์.
Render๋ฅผ ํตํ ์๋ฒ ์ด์คํ, ์น์งํ ๋์์ธ, ๊ทธ๋ฆฌ๊ณ SQLAlchemy๋ฅผ ํ์ฉํ ์ธ๋ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํธ๋กค๊น์ง. ํ๋ฃจํ๋ฃจ ์ฑ์ฅํ๋ฉฐ ์ ์น์ฌ์ดํธ๊ฐ ์๋ช ์ ์ป์ด๊ฐ๋ ๋ชจ์ต์ ๋ณด๋ ๋ฌํ ์นดํ๋ฅด์์ค๋ง์ ๋๊ปด์ง๋๋ค.
๋ค์ ํฌ์คํ ์์๋ ์ด ๊ฒ์ํ์ ๋์ฑ ์์ ํ๊ณ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ด๋ฆฌ์(Admin) ํ์ด์ง ๊ตฌ์ถ๊ณผ ๊ถํ ์ค์ , ๊ทธ๋ฆฌ๊ณ ์๋ชป ์ฌ๋ผ๊ฐ ๊ฒ์๊ธ์ ํต์ ํ๋ ๊ธฐ๋ฅ ๋ฑ์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค. ์ด๋ณด ๊ฐ๋ฐ์์ ๋์๋ ๋์ ๊ธฐ๋ฅผ ์ง์ผ๋ด ์ฃผ์ธ์!
์ง๋ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 9. ๊ธฐ๋ณธ๋ถํฐ ๋ค์ ํ๊ธฐ: ๋ง์์ ๋น์ฐ๊ณ FastAPI ์๋ฒ์ Cloudflare ํฐ๋์ ๋ซ๋ค
๋ค์ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 11. ํญ์ ๋ง๋ค๊ณ ๋๋ฉด ์กฐ๊ธ์ฉ ์์ฝ๋ค: ๊ณ์๋๋ ๋ค๋ฌ๊ธฐ
๐ฌ ๋๊ธ 0๊ฐ