Sun Mar 29 2026
...
FastComments๊ฐ ์ฐ์ฃผ์ ์ค๋น๋์์ต๋๋ค!
! ์ด ๊ธฐ์ฌ์๋ ๊ธฐ์ ์ ๋ฌธ ์ฉ์ด๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
์๋ก์ด ์์
๊ฐ FastComments point-of-presence๋ ์ด์ ๋ก์ปฌ๋ก ์ฐ๊ธฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ด๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ชจ๋ ๋ค๋ฅธ ๋ ธ๋์ ๋ณต์ ํฉ๋๋ค. ์ด๋ ์ด์ ์์คํ ๋ณด๋ค ๋ ๋์ ๋ด๊ตฌ์ฑ์ ์ ๊ณตํ๋ฉฐ, ์ผ๋ถ ์ง์ญ์ ์ฌ์ฉ์์๊ฒ๋ ์กฐ์ ๋๊ตฌ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด ์ค๋๋ค. ๋ค์์ ๊ฑฐ๋๊ฐ ํ์ํฉ๋๋ค.
"์ฐ์ฃผ์ ์ค๋น๋์์ต๋๋ค"๋ ๋ค์ ๋๊ด์ ์ด์ง๋ง, ์ฐ๋ฆฌ์ ์๊ฐ์ FastComments๋ฅผ ๋ค์ํ ํ์ฑ์ ๋ฐฐํฌํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ฒฐ๊ตญ ์์คํ ์ ๋๊ธฐํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ช ์์ฑ์ ์๋ ์ฌ์ฉ์๋ ๋ณํ๊ฐ ๋ค๊ฐ์ค๋ ์ฒญ๊ตฌ์ ํ์ด์ง์ ๋ฐ์๋๊ธฐ๊น์ง ์ฝ ํ๋ฃจ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ์ ๋๋ค. ํ์ฌ๋ก์๋ ์ง์ญ๋น ํ๋์ ๋ง์คํฐ๋ง์ด ์ฒญ๊ตฌ ์ ๋ณด๋ฅผ ์ง๊ณํ ์ ์์ต๋๋ค.
์ญ์ฌ์ ์ธ ๋ฐฐ๊ฒฝ, ๋ณํ์ ์ด์
FastComments๊ฐ ์ฒ์ ์ถ์๋์์ ๋ ์ฐ๋ฆฌ๋ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ํคํ ์ฒ๋ฅผ ๊ฐ์ง๊ณ ์์์ต๋๋ค. ํ๋ก์ ๋ ์ด์ด, ์ฑ ๋ ์ด์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋ช ๊ฐ์ ๋ณต์ ๋ณธ์ด ์์๊ณ , ๋์ค์๋ ์ถ๊ฐ ์ค๋ณต์ฑ์ ์ํด ์ง์ญ๊ณผ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๊ฑธ์ณ ๋ณต์ ๋ฅผ ์ด๋ฃจ์์ต๋๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ ๋ณธ์ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ด ์๋ ๋ชจ๋ ์กด์ผ๋ก ์ด๋์ํค๊ณ , ๊ทธ๊ณณ์ ์ฑ์ ๋ฐฐํฌํ์ผ๋ฉฐ, ์์ฒญ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฑ ๋ ธ๋๋ก ๋ผ์ฐํ ํ๊ธฐ ์ํด ์์ฒด DNS ๋ฐ ํ๋ก์ ์์คํ ์ ๋ง๋ค์์ต๋๋ค(์์ธํ ์ฌํญ์ ๋์ค์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ์ค๋ช ํ ์์ ์ ๋๋ค). ์ด๋ ๊ฒ ํ๋ฉด ์ฝ๊ธฐ๊ฐ ๋นจ๋ผ์ง์ง๋ง, ์ฐ๊ธฐ๋ ๋๋ ค์ง๋๋ค. ์ด์ ๋ ๋ฐฑ์๋์ ๋ํด ํ ๋ฒ์ HTTP ์๋ณต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ , ๊ฐ๊น์ด ๋ ธ๋์ ๋ํ HTTP ์๋ณต์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๊ณ , ๊ทธ ๋ ธ๋๋ ๋ค์ ์ฃผ์ ๋ ธ๋์ ์ฌ๋ฌ ๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ธฐ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์ข์ง ์์ต๋๋ค!
๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง์ ์์ญ์ ์ฌ๊ตฌ์ฑํ์ฌ ํจ์ ์ธ์์์ readPreference๋ฅผ ์์ฉํ๋๋ก ํ์ต๋๋ค. ํธ์ถ์๋ ์์ ์ ์ฝ๊ธฐ๊ฐ ์ผ๋ง๋ ์ค๋๋ ์ํ๊ฐ ๋์ด๋ ๊ด์ฐฎ์์ง๋ฅผ ๊ฒฐ์ ํ ์ ์์ผ๋ฉฐ, ์ด์ ๋ง๋ถ์ฌ ๋ ๋ง์ ์ฐ๊ธฐ ์์
(์: ์ค์ฌ์ ํ๋์ ๋ํ ์ค์ฌ ํต๊ณ ์ฐ๊ธฐ)์ fire-and-forget ๋ฐฉ์์ผ๋ก ๊ตฌํํ์ต๋๋ค. ์ด์์ ์ด์ง๋ ์์ง๋ง, ์ํฉ์ ํฌ๊ฒ ๊ฐ์ ํ์ต๋๋ค.
MongoDB๋ฅผ ์ ์ธ๊ณ์ ์ผ๋ก ์ด์ํ๋ฉด์ ๋ง์ฃผ์น ํ ๊ฐ์ง ๋ฌธ์ ๋ ๋คํธ์ํฌ ๋ถ๋ฆฌ์ ๋๋ค. ์ถฉ๋ถํ ์์ ๋ ธ๋๊ฐ ์ฐจ๋จ๋๋ฉด ๊ฐ ๋ ธ๋๋ ์ฝ๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํ์ฉ๋๋์ง ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ๊ฐ ์ ์งํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์์ง๋ง ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ณต์กํด์ง๋๋ค. ์ด๋ ์ด๋ก ์ ์ธ ๋ฌธ์ ๊ฐ ์๋๋ฉฐ, ๋๋ฌด ๋ง์ 3AM ํ์ด์ง๋ฅผ ๋ฐ์์์ผฐ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ง์ณ๋ฒ๋ ธ์ต๋๋ค. ์ฌ์ง์ด MongoDB๋ฅผ ํ ๋ฒ์ ์ ๊ฑฐ ๋ถํ์ค์ฑ์ ๋ํด 1๋ถ ์ฐจ์ด๋ก ๊ด์ฐฎ๋๋ก ์กฐ์ ํ๋ ค๊ณ ์๋ํ๊ธฐ๋ ํ์ต๋๋ค. ์ํ๊น๊ฒ๋, ์๋ฅผ ๋ค์ด ์ํ์ธ๋ก์์ ํ์ผ์ํ์ธ๊น์ง์ ๋คํธ์ํฌ๋ ์ผ๋ถ ํธ์คํ ์ ๊ณต์ ์ฒด์์ ๋งค์ฐ ์ข์ง ์์์ต๋๋ค. ํผ์ก ์ ์ด๋ฅผ ์กฐ์ ํ๊ณ ๊ธฐํ ๋ฐฉ์์ด ๋์์ด ๋์์ง๋ง, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ ๋ชปํ์ต๋๋ค.
์ด์์ ์ธ ํด๊ฒฐ์ฑ ์ ํน์ ๊ฑฐ๋๋ฅผ ์์ฉํ ์ ์๋ค๋ฉด, ํด๋น ๋ ธ๋์์ ๋ก์ปฌ๋ก ์ฐ๊ธฐ๋ฅผ ์์ฉํ๊ณ (ํด๋น ํ๋์จ์ด๊ฐ ๋ฐ์ด๋๊ณ RAID, ๋ฑ๋ฑ์ด ์์ด ๊ณ ์ฅ ๋ ๊ฐ๋ฅ์ฑ์ด ์ ์) ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๊ณ ์๋ฆฌ๋ ๊ฒ์ ๋๋ค. ๊ทธ ์ง์ ์์ ๋ด๊ตฌ์ฑ์ ์ํด ํซ ๋ณต์ ๋ณธ์ผ๋ก ๋ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋๋ฌํ ๊ฒ์ด ์ด๊ฒ์ ๋๋ค. ์ค๋ฆฌ๊ฑด, ๋ฒ์ง๋์, ํ์ผ์ํ์ธ, ์ํ์ธ๋ก, ์ฑ๊ฐํฌ๋ฅด๋ ๋ชจ๋ ๊ฐ์์ ๋ณต์ ์งํฉ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ฐ๊ธฐ๋ฅผ ์์ฉํฉ๋๋ค. EU ๋ฐฐํฌ(๋น๋ก ์ธ ๊ฐ์ PoP๋ง ์์ง๋ง)๋ ๋์ผํ ๋์์ ํฉ๋๋ค.
์๋ ๋ฐฉ์
์ด์ ๊ด๋ จ๋ ์ผ๋ถ ๋ด์ฉ์ ์ด์ ์น์ ์์ ๋ค๋ฃจ์ด์ก์ง๋ง, TL;DR์ CRDT-lite์ ๋๋ค. ์ฐ๋ฆฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ MongoDB ์ฌ์ด์ ์๋ ํ๋ก์๋ฅผ ๋ง๋ค์์ผ๋ฉฐ(Rust๋ก ๋ง๋ค์์ต๋๋ค, ๊ทธ๋ผ ๋น์ฐํ์ฃ ), ์ด๋ฅผ ํตํด ๋ฉํฐ-๋ง์คํฐ๋ฅผ ๊ตฌํํ์ต๋๋ค. ํ๋ก์๋ ํผ์ด ์ธ์์ด ๊ฐ๋ฅํ๊ณ , ์ฒดํฌํฌ์ธํธ, ๋ณต์ , ๋ชจ๋ํฐ๋ง ๋ฐ ์ด๊ธฐ ๋๊ธฐํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์ด๋ MongoDB์ ๋ณต์ ์์คํ ์ ๋ํ ๋ฉํฐ ๋ง์คํฐ ๋์ฒด ์๋ฃจ์ ์ผ๋ก, ์ผ๋ถ DDL ๋ช ๋ น๋ ํฌํจ๋ฉ๋๋ค.
๋ค๋ฅธ ๋๊ตฌ์์ ์ฐจ์ด์ ์ oplog์ ์ถ์ ํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. oplog์ ์ถ์ ํ๊ฑฐ๋ ๋ณ๊ฒฝ ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ํ์ง ์๋๋ฐ, ์ด๋ ์ฐ๊ธฐ ํ ๊ฐ์ฒด์ ์ต์ข
์ํ๋ง ๋ณด์ฌ์ฃผ๋ฏ๋ก ์ถฉ๋์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ $set, $inc ์์
์ ์บก์ฒํ๊ณ ๊ทธ ์์
์์ฒด๋ฅผ ๋ณต์ ํด์ผ ํฉ๋๋ค.
์ด๋ ๋๋ฉ์ธ ํนํ ์๋ฃจ์
์
๋๋ค. ๋ชจ๋ ์ ํ์ ์ ์ฉ๋์ง ์์ ๊ฒ์
๋๋ค. ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ผ๊ณ ํ ์ ์์ต๋๋ค :). ์ฐ๋ฆฌ๋ ์ฒ์๋ถํฐ ๋ฌธ์์์ ๋ณ๊ฒฝํ๋ ํ๋๋ง $setํ๊ธฐ๋ฅผ ๋งค์ฐ ์ ์คํ๊ฒ ์ํํ์ผ๋ฏ๋ก, ์๋ฅผ ๋ค์ด MongoDB์ replaceOne์ ์ฌ์ฉํ ์ ์ด ์์ต๋๋ค. ์นด์ดํฐ๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. SET VOTES = 5๋ ์ ๋ ํ์ง ์์ต๋๋ค. ๋์ ์ INCREMENT VOTES BY 5๋ผ๊ณ ์์ฑํ์ฌ ๊ฒฐ๊ตญ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. ๋ถ์ฐ ์ ๊ธ์ ํ์ง ์์ต๋๋ค. ํด๋ฌ์คํฐ๋น ๋จ ํ๋์ ๋
ธ๋๋ง crons๋ฅผ ์คํํ ์ ์๋ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ ํ์ ์ผ๋ก ๋ณด์ผ ์ ์์ง๋ง, ์ฐ๋ฆฌ๋ ํ
๋ผ๋ฐ์ดํธ(TB) RAM์ ์ฅ์ฐฉํ ์๋ฒ๋ฅผ ๊ตฌ๋งคํ ์ ์์ผ๋ฏ๋ก, ์ด ๊ฑฐ๋๋ฅผ ๊ฐ์ํ์ฌ ์ํ๊ณผ ๋ณต์ก์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
์์ ์ ์ฐ๊ธฐ ์ฝ๊ธฐ
API๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์๋ ์ด์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ ์ฐ๊ธฐ๋ฅผ ์ฝ์ ์ ์์ด์ผ ํฉ๋๋ค(๋๊ธ์ ์์ฑํ๊ธฐ ์ํ API ํธ์ถ ํ ๋๊ธ ๋ชฉ๋ก์ ์ด๊ณ ์๋ก์ด ํญ๋ชฉ์ ํ์ธํฉ๋๋ค). ์ฃผ์์ ์ ์ง์ญ ๊ฐ์๋ ์ด ์์ ์ ์ํํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐฑ์๋๊ฐ ํ๋์ ์ง์ญ์์๋ง ์คํ๋๋ค๋ฉด, ์ฆ us-west์ ๊ฐ์ ๊ฒฝ์ฐ, ์์ ์ ์ฐ๊ธฐ๋ฅผ ์ฝ์ ์ ์์ด์ผ ํฉ๋๋ค. ๋จ, ์ฐ๊ธฐ์ ์ฝ๊ธฐ ์ฌ์ด์ ํด๋น ๋ ธ๋๊ฐ ๋ค์ด๋ ๊ณ DNS ์บ์๊ฐ ๋ค์ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ ๋ฐ์ดํธ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํฉ๋๋ค. ์ด๋ฌํ ์ผ์ด ๋ฐ์ํ์ง ์๋๋ค๋ฉด, ์์ ์ ์ฐ๊ธฐ๋ฅผ ์ฝ๋ ๊ฒ์ ์ ๋ขฐํ ์ ์์ต๋๋ค.
ํ ์คํธ ๋ฐ ๋ง์ด๊ทธ๋ ์ด์
์์คํ ์ ์ฝ๋ ์ค ์ ๋ฐ์ ํ ์คํธ ํ๋ จ, ํ๋ ์์ํฌ ๋ฐ ํ ์คํธ์ ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ฆด๋ฆฌ์ค๋ ์ฝ๊ฐ ๋ถ์์ ํ์ฌ, ์ ๋ฝ ์ฐํฉ(EU)์ 1์๊ฐ, ์ ์ธ๊ณ๋ 20๋ถ๊ฐ๋์ ์์๋ณด๋ค ๊ธด ๋ค์ดํ์์ด ์์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ด ์ด์ ํ๋ฅผ ํต๊ณผํ ๊ฒ์ ๊ธฐ์๋ฉฐ, ์ฌ๋ฌ๋ถ์ ์ธ๋ด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ฒฐ๋ก ๋ฐ ์ด๊ฒ์ด ๊ทํ์๊ฒ ์๋ฏธํ๋ ๊ฒ
FastComments๋ ์ด์ ๊ทธ ์ด๋ ๋๋ณด๋ค ๋น ๋ฅด๊ณ ๋ด๊ตฌ์ฑ์ด ํฅ์๋์์ต๋๋ค. ์ด์ ๊ธฐ๋ฅ ์์ ์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค :)
๊ฑด๋ฐฐ!
