์ฐ๋ฆฌ๊ฐ โRedisโ์์ โSQLiteโ๋ก ์ฌ์ค๊ณํ ์ด์
์ฐ๋ฆฌ๊ฐ โRedisโ์์ โSQLiteโ๋ก ์ฌ์ค๊ณํ ์ด์ ๊ด๋ จ
๋ณธ๋ฌธ์ ์์ฆIT์ ๋ฒ์ญ๊ฐ David๊ฐ ํจ๊ป Wafris์ ๋ธ๋ก๊ทธ ๊ธ <Rearchitecting: Redis to SQLite>์ ๋ฒ์ญํ ๊ธ์ ๋๋ค. ํ์์ธ ๋ง์ดํด ๋ฒ ๋น(Michael Buckbee)๋ Wafris(๋ฌด๋ฃ ์คํ ์์ค ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ)์ ๊ณต๋ ์ฐฝ์ ์๋ก, ๋ค์ํ ์กฐ์ง์ ์น์ฌ์ดํธ ๋ฐฉ์ด๋ฅผ ์ง์ํด ์จ ๋ณด์ ์ ๋ฌธ๊ฐ์ด์, ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ๋๋ค. ์ด ๊ธ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ Redis์ SQLite์ ์ฅ๋จ์ ์ ์์๋ณด๊ณ , Redis์์ SQLite๋ก ์ ํํ๊ฒ ๋ ์ด์ ๋ฅผ ์๊ฐํฉ๋๋ค.
ํ์์๊ฒ ํ๋ฝ์ ๋ฐ๊ณ ๋ฒ์ญํ์ผ๋ฉฐ, ๊ธ์ ํฌํจ๋ ๊ฐ์ฃผ(*ํ์)๋ โ๋ฒ์ญ์์ฃผโ์ ๋๋ค. ๊ธ์ ํฌํจ๋ ๋งํฌ๋ ์๋ฌธ์ ๋ฐ๋ผ ํ์ํ์ต๋๋ค.
๋ฐฐ๊ฒฝ
Wafris๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ์ ์คํ์์ค๋ก ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์ ํฌ๋ ๋ค์ํ ํ๋ ์์ํฌ๋ฅผ ์ง์ํ๋๋ฐ, ๊ทธ์ค์์๋ Rails ๋ฏธ๋ค์จ์ด ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๊ณ ์์ฃ . ์ฒ์ v1 ํด๋ผ์ด์ธํธ๋ฅผ ์ถ์ํ์ ๋๋ ์ฌ๋ฌ๋ถ์ ์ฑ๊ณผ ํจ๊ป ๋ก์ปฌ Redis ๋ฐ์ดํฐ์คํ ์ด๋ฅผ ๋ฐฐํฌํด์ผ ํ์ต๋๋ค. ํ์ง๋ง ์ด์ v2 Rails ํด๋ผ์ด์ธํธ๋ฅผ ์ถ์ํ๋ฉด์ SQLite๋ฅผ ๋ฐฑ์๋ ๋ฐ์ดํฐ์คํ ์ด๋ก ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.
์ด ๊ธ์์๋ ์ ํฌ๊ฐ Redis์์ SQLite๋ก ๋ง์ด๊ทธ๋ ์ด์ [1]ํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ด์ , ์ฑ๋ฅ์ ๋ํ ๊ณ ๋ ค ์ฌํญ, ๊ทธ๋ฆฌ๊ณ ์ํคํ ์ฒ์ ๋ณํ์ ๋ํด ๋ค๋ฃฐ ์์ ์ ๋๋ค. ํด๋ผ์ด์ธํธ(๋ฐฐํฌ๋ ๋ฏธ๋ค์จ์ด[2])๋ฅผ ์ํด Redis์์ SQLite๋ก ์ ํํ๊ฒ ๋ ์์ฌ๊ฒฐ์ ๊ณผ์ ์ด ๊ถ๊ธํ์๋ค๋ฉด ๊ณ์ ์ฝ์ด์ฃผ์ธ์.
์์ฝ
- SQLite์๋ ์ฅ์ ๋ ์๊ณ ๋จ์ ๋ ์์ต๋๋ค.
- Redis๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฅ๋จ์ ์ด ์์ฃ .
- ์ ํต์ ์ธ RDBMS(Postgres/MySQL)[3]๋ ์ฅ๋จ์ ์ด ์์ต๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์๋ก ์๋ฒฝํ๊ฒ ๋์ฒดํ ์ ์๋ ๊ฒ ์๋๋๋ค. ๊ทธ๋ฅ ๋ฐ๊ฟ์น๊ธฐํ๋ ค๊ณ ํ๋ฉด ๊ณจ์น ์ํ ์ผ์ด ์๊ธธ ๊ฑฐ๊ณ ์. ๊ทธ๋์ ์ ํฌ๊ฐ v1์ Redis ๊ธฐ๋ฐ ํด๋ผ์ด์ธํธ๋ฅผ, v2์ SQLite ๊ธฐ๋ฐ ํด๋ผ์ด์ธํธ๋ก ์ฌ์ค๊ณํ๋ ๊ณผ์ ์์ ์งํํ ํ ์คํธ์ ์์ฌ๊ฒฐ์ ๊ณผ์ ์ ์์ธํ ์ค๋ช ํด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ณํ์ ๊ณ๊ธฐ
Wafris๋ฅผ ์ฒ์ ๋ง๋ค ๋๋ถํฐ ์ฐ๋ฆฌ์ ๋ชฉํ๋ ๊ฐ๋ฐ์๋ค์ด ์ต๋ํ ์ฝ๊ฒ ์์ ์ ์ฌ์ดํธ๋ฅผ ๋ณดํธํ ์ ์๊ฒ ํ๋ ๊ฒ์ด์์ต๋๋ค. ํ์ง๋ง v1์์๋ ๊ทธ ์ฝ์์ ์งํค๋ ๋ฐ ์์ฌ์ด ์ ์ด ์์์ต๋๋ค. ๋น์์๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ ๊ณตํ๋(์ฌ์ฉ์๊ฐ ์ง์ ์ค์ ํ๋ ๋ฐฉ์) Redis ๋ฐ์ดํฐ ์คํ ์ด๋ก, Wafris ํด๋ผ์ด์ธํธ๋ฅผ ์ง์ํ๋ ๊ฒ ์ข์ ์ ํ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ด๋ฌํ ๊ฒฐ์ ์ ์ฐ๋ฆฌ๊ฐ Heroku ์ํ๊ณ์์ ์ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Heroku์์๋ Redis๋ฅผ ์ฝ๊ฒ ํด๋ฆญ ํ ๋ฒ์ผ๋ก ์์ํ๊ณ , ์๊ฒฉ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฐํฌํ ์ ์์์ต๋๋ค. Sidekiq ๊ฐ์ ์ฑ๊ณต์ ์ธ ํ๋ก์ ํธ๋ ๋น์ทํ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์ด์ฃ . ํ์ง๋ง ์ค์ ์ํ๊ณ๋ ๊ทธ๋ณด๋ค ํจ์ฌ ๋ณต์กํ์ต๋๋ค. ๋ง์ ์ฌ์ฉ์๋ค์ด Redis ๋ฐฐํฌ ๊ณผ์ ์์ ๋๋ฒ๊น ํ๋ฉฐ, ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค. ๋ค์ ๋งํด, ์ฐ๋ฆฌ๋ ์ฌ๋ฌ๋ถ์ ์ผ์ ์ฝ๊ฒ ๋ง๋ค์ด ์ฃผ๋ ค๊ณ ํ๋๋ฐ, ์คํ๋ ค โRedis ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์โ๋ก ๋ง๋๋ ์ค์๋ฅผ ๋ฒํ ๊ฑฐ์ฃ .
๊ฒ๋ค๊ฐ RailsWorld 2023์ ์ฐธ๊ฐํ์ ๋, Redis์ ๋ํ ๋ถ์ ์ ์ธ ๋ถ์๊ธฐ๋ฅผ ์ฝ์๋๋ฐ์. Rails ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋น์ฐํ Redis ์๋ฒ๋ฅผ ์คํํด์ผ ํ๋ค๋ ๊ฐ์ ์ ๋ง์ ์ฌ๋๋ค์ด ๋ถํธํจ์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ๋ฌธ์
Redis๊ฐ RDBMS๋ณด๋ค โ๋น ๋ฅด๋คโ๋ผ๊ณ ํ์ง๋ง, ์ฌ์ ํ ์ฐ๊ฒฐ, ๋ฉ๋ชจ๋ฆฌ, ํ๋ก์ธ์ค ๋ฑ์ ๊ด๋ฆฌํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ด๋ฌํ ์ ์ด ์คํ๋ ค ์์คํ ์ ๋ ๋ณต์กํ๊ณ ์ทจ์ฝํ๊ฒ ๋ง๋ญ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฑด ์ ๋ฐ๋์ธ๋ฐ ๋ง์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ์ด๋ณด๋ค ๋ ์ค์ํ ๊ฑด ๋ฐ๋ก ํด๋ผ์ฐ๋ ํ๊ฒฝ์์์ ๋คํธ์ํฌ ์ง์ฐ ๋ฌธ์ ์ ๋๋ค. ๋คํธ์ํฌ ์ง์ฐ์ ์ฐ๋ฆฌ์๊ฒ ํฐ ๋ฌธ์ ์ ๋๋ค. ์ฌ๋ฌ๋ถ์ ์ฑ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ HTTP ์์ฒญ์ Wafris์ ์ ์ฅ๋ ๊ท์น๊ณผ ๋์กฐํด ํ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ v1 ํด๋ผ์ด์ธํธ๋ฅผ ์ต๋ํ ๋น ๋ฅด๊ฒ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง, ์ข ์ข ๋คํธ์ํฌ ์์ฒด๊ฐ ๋๋ ค ์ ํ๋ฆฌ์ผ์ด์ ์๋๊ฐ ์ ํ๋๋ ์ํฉ์ ์ง๋ฉดํ๊ณค ํ์ต๋๋ค.
๋ชจ๋๋ฆฌ์์ ๋ํ ์๋ชป๋ ๊ฐ์
๋ฌผ๋ก ์์ ํ ๋ถ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ์๊ณ , ๋๋ถ๋ถ์ Rails ์ฑ๋ค์ด โ์๋ํ ๋ชจ๋๋ฆฌ์คโ๋ผ๊ณ ํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ๋ถ์ฐ ์ฑ๋ค์ ๋ง์ด ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฌ๋ฌ ์์ญ์ ๋ฐฐํฌ๋๋ ์ฑ, ์ฑ ์์ด ๊ฒน์น๋ ์ฌ๋ฌ ์๋ฒ๋ก ๊ธฐ๋ฅ์ ๋๋๋ ์ฑ ์๋๋ฉด ์ผ๋ถ๋ง Rails๋ก ๋์ด ์๊ณ , ๋ค๋ฅธ ์ธ์ด๋ ํ๋ ์์ํฌ์ ํจ๊ป ๋ฐฐํฌ๋๋ ์ฑ์ด์ฃ .
๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ ์ค์ ํ๋ก๋์ ํ๊ฒฝ์์ ์ด๋ฐ ๊ฒ๋ค์ ๊ฐ๋จํ์ง ์์์, Redis๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๋ ๋ง์ ๋ง์ฐฐ์ ์ผ์ผ์ผฐ์ต๋๋ค.
์ํคํ ์ฒ๋ฅผ ๋ค์ ์๊ฐํ๊ฒ ๋ ๊ณ๊ธฐ
Wafris๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฉํ๋ฒฝ์ผ๋ก, Rails์์๋ ๋ฏธ๋ค์จ์ด๋ก ์ค์น๋ฉ๋๋ค. โIP 1.2.3.4๋ฅผ ์ฐจ๋จโ ๊ฐ์ ๊ท์น์ ์ค์ ํ ์ ์๊ณ , ๋๊ตฐ๊ฐ๊ฐ ์ฌ๋ฌ๋ถ์ ์ฌ์ดํธ์ ์ ๊ทผํ ๋ ๊ทธ ์์ฒญ์ ์ด๋ฌํ ๊ท์น๊ณผ ๋น๊ตํด ํ๊ฐํฉ๋๋ค.
๊ฐ๋จํ ๋ ๋จ๊ณ๋ก ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค.
- HTTP ์์ฒญ์ ๊ท์น๊ณผ ๋น๊ตํฉ๋๋ค. (๊ท์น๊ณผ ์ผ์นํ๋ฉด 403, ์๋๋ฉด 200)
- ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค. (์ฐจ๋จ๋จ, ํ์ฉ๋จ, ํต๊ณผ๋จ)
์ถ์์ ์ผ๋ก ๋ณด๋ฉด, ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ท์น์ โ์ฝ๋โ ๋จ๊ณ(1๋จ๊ณ)์ ๊ทธ ์์ฒญ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง ๋ณด๊ณ ์๋ฅผ โ์ฐ๋โ ๋จ๊ณ(2๋จ๊ณ)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ ผ๋ฆฌ์ ์ผ๋ก ๋ณผ ๋, ์ฒซ ๋ฒ์งธ โ์ฝ๊ธฐโ ๋จ๊ณ๊ฐ ๋ ๋ฒ์งธ โ์ฐ๊ธฐโ ๋จ๊ณ๋ณด๋ค ํจ์ฌ ๋ ์ค์ํฉ๋๋ค.
- ์ฝ๊ธฐ, ์ฆ โ์์ฒญโ์ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ์์ฒญ ํํฐ๋ง์ด ์ ๋๋ก ์๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ชป๋ ์์ฒญ์ด ํต๊ณผํ ์ ์์ต๋๋ค.
- ์ฝ๊ธฐ, ์ฆ โ์์ฒญโ์ ์ฌ์ฉ์๊ฐ ์ฒด๊ฐํ๋ ์ฌ์ดํธ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก, ์๊ฐ์ ๋ฏผ๊ฐํฉ๋๋ค.
- ์ฐ๊ธฐ, ์ฆ โ๋ณด๊ณ โ๋ ์ข ๋ ๋๋ฆฌ๊ฒ, ์ผ๊ด์ ์ผ๋ก, ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
SQLite์ ๋ฑ์ฅ
SQLite๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ค ์ฉ๋์ ์ ํฉํ์ง๋ ์ด๋ฏธ ๋ค๋ฅธ ๊ณณ์์ ์ ์ค๋ช ํด ๋ ๊ธ์ด ์์ด, ์๋ ์ฒจ๋ถํ ์๋ฃ๋ค์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
- Aaron Francis์ โHigh Performance SQLiteโ๊ฐ์ข
- Stephen Margheim์ โSQLite on Railsโ -the how and why of optimal performance
- Oldmoe blog
์ฐ๋ฆฌ๊ฐ SQLite๋ฅผ ์ ํํ ์ด์ ?
์์ ๋งํ๋ฏ์ด ์ฐ๋ฆฌ์ ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ ์ง์ ์ ๋คํธ์ํฌ ์ ์ถ๋ ฅ์ด๋ฉฐ, Stephen์ SQLite ๋ฌธ์์์ ์ด๋ฐ ๋ฌธ์ฅ์ ์ธ๊ธํ์ต๋๋ค.
โSQLite๋ RDBMS์ ๋น๊ตํ๊ธฐ๋ณด๋ค๋
fopen()
[4] ์์คํ ์ฝ[5]์ ์ฌ์ฉํ๋ ํ์ผ DB[6]์ ๋น๊ตํ์ ๋ ์ด์ ์ ๊ฐ์ต๋๋ค.โ
์ด๋ก ์ ์ผ๋ก ๋ณด๋ฉด, ๋คํธ์ํฌ ์๋ณต ์๊ฐ์ ์์ ๋ฒ๋ฆฌ๋๊น Redis ์๋ฃจ์ ๋ณด๋ค ํจ์ฌ ๋น ๋ฅผ ๊ฑฐ๋ผ๊ณ ์๊ฐํ์ฃ . ๊ทธ๋์ ์ฐ๋ฆฌ๋ SQLite์ Redis์ ์ฑ๋ฅ์ ๋น๊ตํด ๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
SQLite์ Redis ๋ฒค์น๋งํนํ๊ธฐ
๋ฒค์น๋งํน์ด ์ฐธ ๋ฌํ๋ฐ ์ ๋ฐํ ์ซ์๋ก ์๊ธฐ ์์ ์ ์์ด๋ ์ด๋์ด ๊ธฐ์ ์ ๋๋ค. ๊ฑฐ๊ธฐ๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฒค์น๋งํน์ ์ข ๋ ๊น๋ค๋กญ์ต๋๋ค. ์ ๊ฐ ๋ณธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒค์น๋งํฌ์๋ ๋ณํ์ ์กฐ๊ฑด์ด ๊ฐ๋ํ๊ณ , Hacker News์ ๋๊ธ์ โ์ปดํ์ผํ ๋ ์ด ํ๋๊ทธ๋ง ์ค์ ํ์ด๋ ์ฝ๊ธฐ ์๋๊ฐ 3% ๋ ๋นจ๋ผ์ก์ ํ ๋ฐ, ์ด๊ฑธ ์ ํ ๊ฑธ ๋ณด๋ฉด ๋ท๋์ ๋ฐ์๊ฑฐ๋ NFT ์ฌ๊ธฐ๋ฅผ ์น๋ ๊ฒ ๋ถ๋ช ํด!โ ๊ฐ์ ๋ด์ฉ์ด ๋ด๊ฒจ์์ต๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ์๊ฒ ์ด์ ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์๋ฒฝํ ์กฐ๊ฑด๊ณผ ์ธ์ฌํ๊ฒ ์กฐ์ ๋ ์ค์ ์ผ๋ก ์ ๋์ ์ธ ์๋๋ฅผ ์ป์ผ๋ ค๋ ๊ฒ ์๋๋๋ค. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋๊ตฌ๋ ๊ธฐ๋ํ์ง ์๋ ๊ทน๋จ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ฐ๋ฆฌ๋ง์ ํน๋ณํ๊ณ ํธํฅ๋ ๋ฒค์น๋งํฌ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค.
์ต์ ํ ์กฐ์ ์ ์๋์ ์ผ๋ก ๋ฌด์ํ๊ธฐ
์ฐ๋ฆฌ์ ๋ชฉํ๋ ์ฌ๋๋ค์ด Wafris๋ฅผ ์ฑ์ ๋์ ธ ๋ฃ๊ณ , โ๊ทธ๋ฅ ์ ์๋ํ๊ฒโ ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ก ์ ์ธ ๋ฒค์น๋งํฌ ์ค์ํธ(benchmark suite)[7]๋ก ํ ์คํธํ๋ ๊ฒ๋ ์๋์ฃ .
์ฐ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํซ ํจ์ค(hot path[8])์ ๊ฐ์ฅ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ํ ์คํธํ๊ณ ์์ต๋๋ค.
๊ฐ์ฅ ๋ณต์กํ ์ฟผ๋ฆฌ๋ IP ๋ฒ์(v4์ v6)๋ฅผ ์นดํ ๊ณ ๋ฆฌ์ ๋งคํํ๋ โlexical decimal" ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฒญํ๋ ์ฟผ๋ฆฌ์ ๋๋ค. ๊ฐ์ฅ ๋จ์ํ ์์๋ IP -> ๊ตญ๊ฐ ๋งคํ์ผ๋ก, IP ์ฃผ์๊ฐ ๋ ์ฃผ์ ๋ฒ์ ์์ ์์ผ๋ฉด ํด๋น ๊ตญ๊ฐ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ์ ๋๋ค.
์ด ๊ตฌ์กฐ๋ ํ์ฐ์ ์ผ๋ก ํฐ ๊ตฌ์กฐ(์๋ฐฑ๋ง ํ)์ด๋ฉฐ, ํนํ IPv6์์๋ ๊ฐ ํญ๋ชฉ์ด ๋งค์ฐ ํฌ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ฏธ๋ฆฌ ๋ฒ์ ๊ณ์ฐํด์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ฅํ์ต๋๋ค.
- SQLite์ ํ ์ด๋ธ
- Redis์ ์ ๋ ฌ๋ ์งํฉ
๋ค์ด์ค๋ ๋ชจ๋ HTTP ์์ฒญ์ ๋ํด, ์ต์ ์ ๊ฒฝ์ฐ ์์ฒญ IP๋ฅผ ์ด๋ ๊ฒ ํ์ธํด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์ ์ ์ ํ์ฉ ๋ฒ์
- ์ฌ์ฉ์ ์ ์ ์ฐจ๋จ ๋ฒ์
- GeoIP ๋ฒ์
- IP ํํ ๋ฒ์
์ด๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋งํ๋ โํซ ํจ์คโ์ ๋๋ค. ์ด ํน์ ์ฟผ๋ฆฌ ์ ํ์ด ๋๋ฌด ์ค์ํด์ ๋ค๋ฅธ ์ฟผ๋ฆฌ ์ ํ์ด๋ ๊ธฐ๋ฅ์ ๋ฌด์ํด๋ ๋ ์ ๋์ฃ . ๊ทธ๋์ ๋ฒค์น๋งํน ์คํฌ๋ฆฝํธ์์๋ ์ด ์ฟผ๋ฆฌ ์ ํ๋ง ํ ์คํธํ์ต๋๋ค. ๋๋ถ์ ์ฑ์ ๋ค๋ฅธ ์ค์ํ(ํ์ง๋ง ํซ ํจ์ค์๋ ๋ฌด๊ดํ) ๋ถ๋ถ์ ๋ฒค์น๋งํฌ๋ก ์ฎ๊ธฐ๋ ๋ฐ ๋ฉฐ์น ์ฉ ๊ฑธ๋ฆฌ๋ ์๊ณ ๋ฅผ ๋ ์ ์์์ต๋๋ค.
ํ ์คํธ ํ๋กํ ์ฝ
ํ ์คํธ๋ ์ ๋งฅ๋ถ ์์ด M2์์ ์งํํ์ผ๋ฉฐ, ํ๋ธ๋ฃจ๋ก ์ค์นํ Redis์ ๋ก์ปฌ SQLite DB๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฒ์ ๋ฐ์ดํฐ์ (120๋ง ๊ฐ ํญ๋ชฉ)์ผ๋ก ํ ์คํธํ์ต๋๋ค.
- ์ฌ๋ฌ ์ธํธ์ IP๋ฅผ SQLite์ Redis์ ๊ฐ์ ์์๋ก ๋๋ ธ์ต๋๋ค.
- ๊ฐ ์ธํธ๋ง๋ค ํ ์คํธ๋ฅผ 5๋ฒ์ฉ ๋๋ฆฌ๊ณ ํ๊ท ์ ๋์ต๋๋ค.
ํ ์คํธ ๊ฒฐ๊ณผ
SQLite๊ฐ Redis๋ฅผ ์์ ํ ์๋ํ์ต๋๋ค. ๋ง์น ๊ณผ๋ ์ ์ ๋ UFC ํ์ดํฐ๊ฐ ํ์ค์์ ๋ฐ์ด๋ด๋ ค ํฅ ํ์น๋ฅผ ๋ ๋ฆฌ๋ ๊ฒ์ฒ๋ผ ๋ง์ ๋๋ค. (๋ฌผ๋ก ์ฐ๋ฆฌ์ ํน์ํ ์ฌ์ฉ ์ฌ๋ก์ ํ์ ํด์์) SQLite๊ฐ ๋ก์ปฌ์ ์ค์น๋ Redis ์ธ์คํด์ค๋ณด๋ค ์ฝ 3๋ฐฐ ์ ๋ ๋นจ๋์ต๋๋ค. ๋ฌผ๋ก ์ฌ๋ฌ๋ถ์ ๊ฒฝ์ฐ๋ ๋ค๋ฅผ ์ ์์ฃ . ๊ทธ๋ฆฌ๊ณ ์ด๊ฑด ๋คํธ์ํฌ ์ง์ฐ ์๊ฐ์ ๊ณ ๋ คํ๊ธฐ ์ ์ ๊ฒฐ๊ณผ๋ผ๋ ๊ฑธ ๋ค์ ํ๋ฒ ๋ง์๋๋ฆฝ๋๋ค.
์ฐ๋ฆฌ๋ก์๋ ์ ๋ง ๋๋จํ ๊ฒฐ๊ณผ์ ๋๋ค. SQLite๊ฐ ๋ก์ปฌ์์ Redis์ ๋น์ทํ ์ฑ๋ฅ๋ง ๋ด๋ ๋คํธ์ํฌ ์๊ฐ์ ์์ ํ ์์จ ์ ์์ด์ ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด์ฃ . ๋ฌผ๋ก ๋ค์ ํ๋ฒ ๊ฐ์กฐํ์ง๋ง, ์ด ํ ์คํธ๋ ๋งค์ฐ ๋จ์ํ๊ณ ๋ถ์์ ํ ๋ฐฉ์์ผ๋ก ์งํ๋์ต๋๋ค. ๋์ ์ฐ๋ฆฌ๊ฐ ๊ด์ฐฐํ ํ์ค ์ธ๊ณ์ ๊ฒฐํจ์ ๊ทธ๋๋ก ๋ฐ์ํ๋ ๋ฐฉ์์ผ๋ก ์งํํ์ผ๋ฏ๋ก, ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ฐจํธ์์ ๋์น ์ ์?
๋ฒค์น๋งํฌ๋ ํ์ค๊ณผ ๋๋จ์ด์ง ํ๊ฒฝ์์ ์ด๋ค์ง์ฃ . ์ด ์ฐจํธ๊ฐ ๋ณด์ฌ์ฃผ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์์ต๋๋ค.
- ๋ง์ฝ ๋ฒค์น๋งํฌ์์ SQLite ์ฑ๋ฅ์ด ํจ์ฌ ๋๋นด๋ค๊ณ ํด๋ (์๋ฅผ ๋ค์ด 2๋ฐฐ ์ ๋ ๋๋ ธ๋ค๊ณ ํด๋), โ์ค์ ํ๊ฒฝโ์์๋ ์ฌ์ ํ ๋ ๋น ๋ฅผ ๊ฒ์ ๋๋ค. ๋คํธ์ํฌ ์ง์ฐ ๋๋ฌธ์ด์ฃ . Redis๊ฐ ๊ฐ์ ๋ฐ์ดํฐ ์ผํฐ๋ ์ง์ญ์ ์์ด๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
- ์์ฃผ ํผํผํ Redis ์๋ฒ(ํด๋ฌ์คํฐ, ์ค๋ฉ ๋ฑ)๊ฐ ์๋ค๊ณ ํด๋ ๋คํธ์ํฌ ๋์ญํญ์ด๋ ์ฐ๊ฒฐ ์ ๋ฑ์ ์ ํ์ด ์๊ณ , ์ง์ญ ๊ฐ ์ง์ฐ ์๊ฐ๋ ์์ต๋๋ค. ๋ฐ๋ฉด SQLite๋ ๋ฌด๋ฃ๋ก ๊ฑฐ์ ๋ฌดํํ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
- SQLite๋ก ํ๋ฉด ์์ํ๊ธฐ๋ ํจ์ฌ ์์ํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ SQLite๊ฐ ์ฐ์ด๊ณ ์๋ค๋ ์ฌ์ค์กฐ์ฐจ ๋ชจ๋ฅผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฅ ์น ์ฑ์ ํด๋น gem์ ์ถ๊ฐํ๋ฉด ๋ฐ๋ก ์ธ ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ .
- Redis์์๋ ์ฑ๋ฅ์ ๋ ์ต์ ํํ ๋ฐฉ๋ฒ์ ๋ง์ต๋๋ค. ํ์ง๋ง ์ฌ์ฉ์๋ค์๊ฒ ๊ธฐ๋ณธ์ ์ธ ์ค์ ๋ณ๊ฒฝ (์บ์ ์ ๊ฑฐ ์ ์ฑ ๋ฑ)์กฐ์ฐจ ์ค๋ํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ์ด๋ Redis ๊ด๋ฆฌ๊ฐ ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๊ณ , ์ฌ์ฉ์๋ค์ Redis ๊ด๋ฆฌ์๊ฐ ๋๊ธธ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด์ฃ .
์ฐ๋ฆฌ์ ์ด์ ์
- Wafris๋ฅผ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์๊ฒ ๋ง๋ค๊ธฐ
- ๊ท์น ํ๊ฐ๋ฅผ ์ต๋ํ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ
์ด๊ฒ์ด ํต์ฌ์ ๋๋ค. ๋ค๋ฅธ ๋ถ๋ถ์ ๋ค ์ฌ๊ธฐ์ ํ์๋๋ฏ๋ก, ์ ๋ ๊ฐ์ง ๋ชฉํ๋ฅผ ์ํด ์ํคํ ์ฒ๋ฅผ ๋ค์ ์ค๊ณํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ โ์ต๊ณ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ โ์ด๋ โ์ฐ๋ฆฌ(Wafris)๊ฐ ๊ด๋ฆฌํ๊ธฐ ๊ฐ์ฅ ์ฌ์ด ์ธํ๋ผโ๋ฅผ ๋ชฉํ๋ก ํ์ง ์์ต๋๋ค.
๊ฒฐ๊ณผ๋ ๋ ๋ค๋ฅธ ์์์ผ ๋ฟ์ ๋๋ค
์ข์ต๋๋ค, ์ด์ SQLite๊ฐ Redis๋ณด๋ค ๋น ๋ฅด๋ค๋ ๊ฑธ ํ์ธํ์ต๋๋ค. ํ์ง๋ง ์์ง ๋ชจ๋ ๊ฒ ์๋ฒฝํ ๊ฑด ์๋๋๋ค. ํ์ค ์ธ๊ณ์์๋ ํธ๋ ์ด๋์คํ๊ฐ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ์ ํ ์คํธ์์ ์ฐ๋ฆฌ๊ฐ ๊ฐ๊ณผํ ์์ฒญ ํฐ ํธ๋ ์ด๋์คํ ์ค ํ๋๋ โ์ฐ๊ธฐโ ์์ ์ ์ ํ ๊ณ ๋ คํ์ง ์์๋ค๋ ๊ฒ์ ๋๋ค.
๋ช ์์ ์ผ๋ก ๋งํ์ง ์์ง๋ง, โ์ ๋๋ก ๋โ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฐ๊ฒฐ, ์ปค๋ฅ์ ํ, ํธ๋์ญ์ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ๋ ์ด์ ๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์์ ์๋ก ์ถฉ๋ํ์ง ์๋๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์์ ๋๋ค. ์ด์ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ขฐ์ฑ์ ๋์ฌ์ฃผ๋ฏ๋ก, ์ค๋ผํด(Oracle) ๊ฐ์ ํ์ฌ๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์์ฒญ๋ ๊ฐ๊ฒฉ์ ๋งค๊ธธ ์ ์๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์๊ตญ์ธ์ด ์ด์ ํ๋ ์ค๊ตญ์ฐ ์ ๊ธฐ ์ํผ์นด๋ฅผ ์๊ฐํด ๋ณด์ธ์. ์ด ์ฐจ๋ ๋น ๋ฅด๊ณ ํ์์ ์ด์ง๋ง, ์ฝํฌ๋ฆฌํธ ๋ธ๋ก์ ๋์ ์ ์ฒด์ ๋๋ฅด๋ ๋ฐ๋ ์ ํ ์ ํฉํ์ง ์์ฃ .
SQLite๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ๋ง์น NIO EP9 ์ํผ์นด์ฒ๋ผ, SQLite๋ ์ํ๋ ์ผ์ ์จ์ผ ํ๊ณ , ๋ง์ง ์๋ ์ญํ ์ ์ต์ง๋ก ์์ผ์ ์ ๋ฉ๋๋ค.
๋๊ธฐํ ์ํคํ ์ฒ ๊ตฌ์ถํ๊ธฐ
v1(๊ธฐ์กด Redis) ๋ฒ์ ์์๋ ์ ๋ฐ์ดํธ ๊ณผ์ ์ด ์ด๋ ๊ฒ ์งํ๋์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ Wafris Hub์์ ๊ท์น (์: IP 1.2.3.4 ์ฐจ๋จ)์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- Wafris Hub๊ฐ ์ฌ๋ฌ๋ถ์ Redis ๋ฐ์ดํฐ ์ ์ฅ์์ ์๋ ๊ท์น์ ์ ๋ฐ์ดํธํฉ๋๋ค.
์ด ๋ฐฉ์์ ๋น์ฐํ SQLite์์๋ ๋์ง ์์ต๋๋ค. ์น ์๋ฒ์ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํธ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ต๊ทผ์๋ ์ด๋ฅผ ์ง์ํ๋ SQLite ์๋น์ค ์ ๊ณต์๊ฐ ์์ง๋ง, ๋น์ฉ, ์ฑ๋ฅ, ๋ณด์ ๋ฑ ์ฌ๋ฌ ์ด์ ๋ก ์ฐ๋ฆฌํํ ๋ ๋ง์ง ์์์ต๋๋ค. ์ฌ์ ํ ๊ฐ๋ณ ์ฌ์ฉ์๋ค์ด ์ง์ ๋ฐฐํฌํ๊ณ , ํฌํธ๋ฅผ ์ด๊ณ , ์ธ๋ฐ์ด๋ ์ฐ๊ฒฐ์ ํ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋์ v2(SQLite) ๋ฒ์ ์์๋ ์ ๋ฐ์ดํธ ๊ณผ์ ์ด ์ด๋ ๊ฒ ๋ฐ๋์์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ Wafris Hub์์ ๊ท์น์ ์ ๋ฐ์ดํธํฉ๋๋ค.
- ์ผ์ ๊ฐ๊ฒฉ(์๊ฐ์ด๋ ์์ฒญ ํ์)์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฐ์ดํธ๋ ๊ท์น์ด ์๋์ง ํ์ธํฉ๋๋ค.
- ๊ท์น์ด ์ ๋ฐ์ดํธ๋๋ค๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ด ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ์ค์น ๋ฐ ์ค์ ํ๋ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ฌ์ฃผ์ด ์ ์๋ํ๊ณ ์์ต๋๋ค. ์ค์ ๋ก v2 ํด๋ผ์ด์ธํธ์ ์ฑ๊ณต์ ์ธ ์ค์น์จ์ด ์ฝ 3๋ฐฐ ์ ๋ ๋์ด๋ ๊ฑธ ํ์ธํ์ต๋๋ค.
SQLite ๋ถ์ฐ ์ํคํ ์ฒ
์ด๋ฒ์๋ ์คํ ์ค์ผ์ผ๋ง ๊ธฐ๋ฅ์ด ์ผ์ง ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด(AWS, Heroku, Fly ๋ฑ)์ ๋ฐฐํฌ๋ Rails ์ฑ์ ์๊ฐํด ๋ณผ๊ฒ์. ์์ฒญ์ด ์ด๋น 100๊ฐ์์ 10,000๊ฐ๋ก ๊ธ์ฆํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๊ทธ๋ฌ๋ฉด ์ปดํจํ ๋ฆฌ์์ค(๋ค์ด๋ ธ, ๋จธ์ , EC2 ์ธ์คํด์ค)๊ฐ ๋ถํ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์ด๋๊ธฐ ์์ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ทธ๋ ๊ฒ ๋์ด๋ ๊น์?
์๋ง๋ ํ์คํ ์๋ ๊ฒ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ด๋ ๋ณ๋ชฉ ํ์์ ๋ณ๋ชฉ ํ์์ด๊ธฐ ๋๋ฌธ์ด์ฃ . ํน์ ๋ชฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ 100๋ฐฐ ์ด๊ณผ๋ก ํ ๋นํด ๋ ์๋ ์์ง๋ง, ํ์ค์ ์ผ๋ก ๊ทธ๋ ๊ฒ ํ๊ธฐ๋ ํ๋ค ๊ฒ๋๋ค.
์ค์ ๋ก ์ด๋ ๊ฒ ๋ถํ๊ฐ ์ฌํ ๋, Rails ์ฑ์ ์ฃฝ์ด๋ ๊ฐ์ฅ ํฐ ์์ธ์ด ๋ฐ๋ก ์ด๊ฒ์ ๋๋ค. ์ค์ DDoS ๊ณต๊ฒฉ์ธ ๊ฒฝ์ฐ๋ ๋๋ญ ๋๋ค. ๋๋ถ๋ถ ์๊ฒฉ ์ฆ๋ช ๋์ ๊ณต๊ฒฉ์ด๋ ์ ์ฑ ๋ด์ด ์ฌ์ดํธ๋ฅผ ๊ณ์ ๊ณต๊ฒฉํด ์คํ ์ค์ผ์ผ๋ง์ด ์๋ํ๊ณ , ์ด๋ก ์ธํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ด ๋ถ์กฑํด ์ง๋ฉด์ ์ฑ์ด ๋ฉ์ถ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฐ๋ผ์ SQLite DB๋ฅผ ๊ฐ ์ปดํจํ ์ธ์คํด์ค๋ก ๋๊ธฐํํ๋ ์์คํ ์ผ๋ก ๋ฐ๊พธ๋ฉด, ํด๋น ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ํธ์ถ์ ์ ์ปดํจํ ์ธ์คํด์ค ๋ด๋ถ์์ ๋ก์ปฌ๋ก ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฐ๊ธฐ(Write)๋ ์ด๋กํ์ฃ ?
์ด ๊ธ์ ์์ํ ๋ ์ฑ์ ์ฝ๊ธฐ(๊ท์น ํ๊ฐ)์ ์ฐ๊ธฐ(๋ณด๊ณ ) ๊ฒฝ๋ก๋ก ๋๋๋ ์๊ธฐํ์ฃ . ๊ทธ๋ฐ๋ฐ ์ฐ๊ธฐ ๊ฒฝ๋ก๋ ์ ๋นผ๊ณ ์๊ธฐํ์ต๋๋ค.
์ฌ์ค ์ฐ๋ฆฌ๋ ์ฐ๊ธฐ ๊ฒฝ๋ก๋ ์ด๋ ๊ฒ ์ฌ์ค๊ณํ์ต๋๋ค.
- Wafris Hub์ ๋น๋๊ธฐ๋ก ์ฐ๊ฒฐํด์ ๋ณด๊ณ ํ๊ธฐ
- ๋ณด๊ณ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ชจ์์ ๋ณด๋ด๊ธฐ
- ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ธฐ๋ฅผ ์์ ํ ์์ ๊ธฐ
์ด ๋ฐฉ์์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๊ฑฐ์ ์ ์ฉ๋์ง ์์ ์ ์์ง๋ง, ์ฐ๋ฆฌ๋ ํฌ๊ฒ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ด์ฌ์ Wafris ํด๋ผ์ด์ธํธ๋ฅผ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ , ๋น ๋ฅด๊ฒ ์ฐ๊ณ ์ถ์ด ํ๋ 100%์ ์ฌ์ฉ์๋ค์ ๋๋ค. ์ด ๊ธ์ด ์ฌ๋ฌ๋ถ์๊ฒ ์ด๋ค ๊ตํ์ ์ค ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์์ ๋์์ด๋ผ๋ ๋๊ธธ ๋ฐ๋๋๋ค.
๋ง์น๋ฉฐ
์ฐ๋ฆฌ๋ SQLite๋ฅผ ์ฌ์ฉํ๋ v2 ์ํคํ ์ฒ์ ๋งค์ฐ ๋ง์กฑํ๊ณ ์์ต๋๋ค. ๋๋ถ์ ๋ง์ ์ฌ์ดํธ๋ค์ด ๊ณต๊ฒฉ์ ๋ฐ์๋ ๋๋ก์์ด ๋ฒํฐ๊ณ ๊ณ์ ๋์๊ฐ ์ ์์์ฃ . v2๋ ์์ํ๊ธฐ ํจ์ฌ ์ฝ๊ณ , ์ฐ๋ฆฌ์ ์ง์ ์ ๋ฌด๋ ์ค์ฌ์คฌ์ต๋๋ค. ์ฌ์ฉ์๋ ๋ฒ๊ฑฐ๋ก์์ด ์ค์๊ณ ์. ์ด๋ ๋ ์์ ํ๊ณ ๋ณด์์ด ๊ฐํ๋ ์ธํฐ๋ท์ ์ํ ํฐ ์ฑ๊ณผ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ฌธ
๋ฏธ๋ค์จ์ด: ์๋ก ๋ค๋ฅธ ์์คํ ์ด๋ ํ๋ก๊ทธ๋จ๋ค์ ์ฐ๊ฒฐํด ์ฃผ๋ ๋ค๋ฆฌ ์ญํ ์ ํ๋ ์ํํธ์จ์ด โฉ๏ธ
๋ง์ด๊ทธ๋ ์ด์ : ํ ์์คํ ์์ ๋ค๋ฅธ ์์คํ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ฑฐ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ณผ์ โฉ๏ธ
RDBMS: Relational Database Management System์ ์ฝ์๋ก, ๋ฐ์ดํฐ๋ฅผ ํ ํํ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์์คํ โฉ๏ธ
fopen()
: C ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ํ์ผ ์ ์ถ๋ ฅ ํจ์ โฉ๏ธ์์คํ ์ฝ: ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ ์ปค๋์ ์ง์ ์๋น์ค๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ โฉ๏ธ
ํ์ผ DB: ํ์ผ ์์คํ ์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ โฉ๏ธ
Benchmark suite: ์ํํธ์จ์ด๋ ํ๋์จ์ด์ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ๋น๊ตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ผ๋ จ์ ํ์คํ๋ ํ ์คํธ ๋๊ตฌ๋ค์ ์๋ฏธํจ. โฉ๏ธ
Hot path: ํ๋ก๊ทธ๋จ ์คํ ์ค ๊ฐ์ฅ ์์ฃผ ์คํ๋๋ ์ฝ๋ ๊ฒฝ๋ก๋ฅผ ์๋ฏธํจ. โฉ๏ธ