๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฌด์์ด๋์?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์๋ ํ์ผ ์์คํ ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ํ์ต๋๋ค.
ํ์ผ ์์คํ ์ ์์ฉ ํ๋ก๊ทธ๋จ๋ง๋ค ํ๋์ ๋ ๋ฆฝ๋ ๋ฐ์ดํฐ ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ์์คํ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ์ ์ฅ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ํ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ ํ์ผ์ ์ํธ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํ์ผ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ ๋ํ ๋ณ๊ฒฝํด์ผํฉ๋๋ค.
ํ ์์คํ ์ ๋ฐ์ดํฐ๊ฐ ์ค๋ณต ์ ์ฅ๋๋ ํ์ผ ์์คํ ์ ์ฌ๋ฌ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋๋ฐ์. ๋จผ์ ํ๋์ ์ฌ์ค๋ง์ ๋ํ๋ด๋๋ก ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ณต ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ์์ค์ ๋ณด์์ ์ ์งํ๊ธฐ ํ๋ญ๋๋ค. ๋ํ ํ๋์ ๋ฐ์ดํฐ ํ์ผ์ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ๋ ์ํฉ์์ ํ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํด๋น ๋ฐ์ดํฐ ํ์ผ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์ ๊ทผํ์ง ๋ชปํฉ๋๋ค.
์์ ๊ฐ์ ํ์ผ ์์คํ ์ ๋ฌธ์ ๋ก ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ , ์ต์ํ์ ์ค๋ณต์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์งํฉ์ธ โ๋ฐ์ดํฐ๋ฒ ์ด์คโ๊ฐ ๋ฑ์ฅํ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํค์ ์ข ๋ฅ์ ๊ธฐ๋ฅ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํค๋ ๊ฒ์์ด๋ ์ ๋ ฌ์์ ํํ์ ๊ตฌ๋ถํ ์ ์๋ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋๋ค.
ํค์ ์ข ๋ฅ์๋ ์ํผํค, ํ๋ณดํค, ๊ธฐ๋ณธํค, ๋์ฒดํค, ๋ณตํฉํค, ์ธ๋ํค๊ฐ ์์ต๋๋ค.
- ์ํผํค๋ ์ ์ผ์ฑ์ ๋ง์กฑํ๋ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋๋ค. ์ ์ผ์ฑ์ ๊ฐ์ง ์ดํธ๋ฆฌ๋ทฐํธ๋ ๋ชจ๋ ๋ ์ฝ๋์์ ์ค๋ณต๋ ๊ฐ์ด ์๋ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋๋ค.
- ํ๋ณดํค๋ ์ ์ผ์ฑ๊ณผ ์ต์์ฑ์ ๋ง์กฑํ๋ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋๋ค. ์ต์ํ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ค๋ก ๋ ์ฝ๋๋ฅผ ์ ์ผํ๊ฒ ๊ตฌ๋ณํ ์ ์๋ ์์ฑ์ ์ต์์ฑ์ด๋ผ๊ณ ํฉ๋๋ค.
- ๊ธฐ๋ณธํค๋ ์ ์ผ์ฑ๊ณผ ์ต์์ฑ์ ๊ฐ์ง๋ฉฐ NULL ๊ฐ์ ๊ฐ์ง์ง ๋ชปํ๋ ์ดํธ๋ฆฌ๋ทฐํธ์ ๋๋ค. ํ๋ณดํค ๊ฐ์ด๋ฐ ์ ํ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- ๋์ฒดํค๋ ํ๋ณดํค ์ค์์ ๊ธฐ๋ณธํค๋ก ์ ํ๋ ๊ฒ๋ค์ ์ ์ธํ ๋ชจ๋ ํค๋ฅผ ๋งํฉ๋๋ค.
- ๋ณตํฉํค๋ ํ ๊ฐ ์ด์์ ์์ฑ์ ํฌํจํ๋ ํค๋ฅผ ๋งํฉ๋๋ค.
- ์ธ๋ํค๋ ํ ํ ์ด๋ธ์์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ ์ฝ๋(ํํ)์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํค์ ๋๋ค.
[์ ๋ฆฌ]
- ์ํผํค = ์ ์ผ์ฑ ๋ง์กฑํ๋ ํค
- ํ๋ณดํค = ์ํผํค + ์ต์์ฑ ๋ง์กฑํ๋ ํค
- ๊ธฐ๋ณธํค = ํ๋ณดํค ์ค ์ ํ๋ ํค = ์ ์ผ์ฑ + ์ต์์ฑ + not null = ํน์ ๋ ์ฝ๋ ๊ตฌ๋ถ๊ฐ๋ฅ
- ๋์ฒดํค = ํ๋ณดํค - ๊ธฐ๋ณธํค = ๋๋จธ์ง ํค๋ค
- ๊ธฐ๋ณธํค = ํ๋ณดํค ์ค ์ ํ๋ ํค = ์ ์ผ์ฑ + ์ต์์ฑ + not null = ํน์ ๋ ์ฝ๋ ๊ตฌ๋ถ๊ฐ๋ฅ
- ํ๋ณดํค = ์ํผํค + ์ต์์ฑ ๋ง์กฑํ๋ ํค
- ๋ณตํฉํค = 1 ์ด์์ ์์ฑ์ผ๋ก ์ด๋ค์ง ํค = {์์ฑ1, .. }
- ์ธ๋ํค = ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ ํค
์์ฐจ I/O์ ๋๋ค I/O์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
์์ฐจ io ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ก๋๋ก ์ฝ๋ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ๋๋ค io์ ๋นํด ํฐ ์ฒ๋ฆฌ๋์ ๊ฐ์ต๋๋ค. ์์ฐจ io ๋ฐฉ์์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด์ full scan์ ํด์ผํฉ๋๋ค.
๋๋ค io๋ ๋์คํฌ์ ์ฌ๋ฌ ๋ถ๋ถ์ ํฉ์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ๋ฐฉ์์ ๋๋ค. ์ธ์ ํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ธฐ ๋๋ฌธ์ ๋์คํฌ ํค๋๊ฐ ๋ฌด์์๋ก ์์ง์ ๋๋ค. ์ด๋ ๊ฒฐ๊ตญ ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํฉ๋๋ค.
์๋ฒ ๊ธฐ๋ฐ์ ํ๊ฒฝ์์๋ ๋ชจ๋ io๋ฅผ ์์ฐจ io๋ก ์ํํ๋๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ๋์คํฌ์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ ๋ณด๋ค ์ฌ๋ฌ ๋์คํฌ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋งคํํ์ฌ ๋๋ค ์์ธ์ค๊ฐ ์ต์ํ ๋๋๋ก ํ๋ ๋์ ๋ฐฉ์์ด ์์ต๋๋ค.
Clustering์ด ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์ ๋๋นํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๋ฅผ ์ฌ๋ฌ๋๋ก ๋๋๋ ๊ธฐ๋ฒ์ ๋๋ค.
-
active - active ๋ฐฉ์์ผ๋ก ์ฌ๋ฌ ๋๋ก ๋๋๋ ์๋ฒ๋ฅผ ๋์ ์ํ๋ก ๋๋ ๋ฐฉ์์ด ์์ต๋๋ค.
์ด ๋ฐฉ์์ ๋ฌด์ค๋จ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ํ ์๋ฒ 2๋๊ฐ ์ด์๋๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง๋ง ์ฑ๋ฅ์ ์ธ ์ธก๋ฉด์ ์ด๋์ด ์์ต๋๋ค.
ํ์ง๋ง ์ฌ๋ฌ ์๋ฒ๊ฐ ํ๋์ ์ ์ฅ์์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ชฉํ์์ด ๋ฐ์ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
-
active -standby ๋ฐฉ์์ด ์์ต๋๋ค.
ํ๋์ ์๋ฒ๋ง ์ด์ฉํ๊ณ ๋๋จธ์ง๋ standby๋ก ๋๋ ๋ฐฉ์์ ๋๋ค.
๋ฐ๋ผ์ active-active ๋ฐฉ์์์ ๋ํ๋๋ ๋ณ๋ชฉ ํ์์ด ์์ง๋ง, standby์์ active๋ก ์ ํํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
Replication์ด ๋ฌด์์ธ๊ฐ์?
์ ์ฅ๋ ๋ฐ์ดํฐ ์์ค๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ primary db๋ผ ์นญํ๊ณ ๋ณต์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์ ํ ์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ secondary db๋ผ๊ณ ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ crud ์์ฒญ์ primary db๋ก ๋ณด๋ด๋ฉด ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ secondary db์ ๋๊ธฐํํ๋ฉด์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
๋ํ secondary db๋ ๋ฐฑ์ ์ฉ๋ ์ธ์ ์กฐํ ์ฉ๋๋ก๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถํ๋ฅผ ๋ถ์ฐ์ํฌ ์ ์์ต๋๋ค.
replication ์ ์ฌ์ฉํ๋ ์ด์ ๋
- ๋ฐ์ดํฐ ์ ์ค์ ๋ง๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค
- ๋ํ primary db๊ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ, secondary db๊ฐ ๊ทธ ์ญํ ์ ๋์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฅ์ ๋์์ ํ ์ ์์ต๋๋ค.
- ์ฌ๋ฌ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋ก ์ธํ ์๋ต ์ง์ฐ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
replication์ primary db์์ secondary db๋ก ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๋ ์์ ์ด ํ์ํฉ๋๋ค. ์ด ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ replication lag์ด๋ผ๊ณ ์นญํฉ๋๋ค.
replica๊ฐ ๋ง์ผ๋ฉด replication lag ์๊ฐ์ด ๊ธธ์ด์ง๊ธฐ ๋๋ฌธ์, ์๊ฐ์ฐจ๋ก primary db์ secondary db์ ๋์ผ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๊ฐ ์์ดํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ 100% ์งํค์ง ๋ชปํฉ๋๋ค.
Partitioning์ด ๋ฌด์์ธ๊ฐ์?
ํ๋์ ํฐ ํ ์ด๋ธ์ ํํฐ์ ์ด๋ผ๋ ์์ ๋จ์๋ก ๋๋๋ ๊ธฐ๋ฒ์ ๋๋ค.
๋ฐ์ดํฐ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฉ๋์ด ํฐ ํ ์ด๋ธ์ด ์กด์ฌํ๋ฉด ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด์ ๋์ํ๊ธฐ ์ํด ํฐ ํ ์ด๋ธ์ ์์ ํ ์ด๋ธ๋ก ์๊ฒ ์ชผ๊ฐ๋ ํํฐ์ ๋ ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ์ต๋๋ค.
ํํฐ์ ๋์ ํ๋ฉด, full scan ์ ํ์ ๋ฒ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์์์ต๋๋ค.
๋ํ ํ ์ด๋ธ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ชผ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฐ์ดํฐ์ ํผ์ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ์ค๋๋ค.
๋ค๋ง join์ฐ์ฐ์ ๋ํ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
ํํฐ์ ๋์๋ vertical partitioning, horizontal partitioning ์ด ์์ต๋๋ค.
- ์์ง ํํฐ์ ๋์ด๋ ์ฉ๋์ด ํฐ ๋ฐ์ดํฐ๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ attritbute๋ฅผ ๋ ๋ฆฝ์ ์ธ ํ ์ด๋ธ๋ก ๋๋๋ ์์ ์ ๋๋ค.
- ์ํ ํํฐ์ ๋์ด๋ ์คํค๋ง๊ฐ ๋์ผํ ํ ์ด๋ธ์ ๋๋์ด ์ ์ฅํ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์ฆ, ์คํค๋ง๊ฐ ๋์ผํ ํ ์ด๋ธ์ด ๋๊ฐ ์๊ธฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ sharding๊ณผ ๋์ผํ ๊ฐ๋ ์ผ๋ก ์ฌ๊ธธ ์ ์์ต๋๋ค.
Sharding์ด ๋ฌด์์ธ๊ฐ์?
ํ ์ด๋ธ์ ํ ๋จ์๋ก ๋๋์ด์ ์ฌ๋ฌ ์ค๋์ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค. ์ค๋๋ ์ค๋ฉ์ ํตํด ๋๋์ด์ง ๋ธ๋ก ๊ตฌ๊ฐ์ ๋งํฉ๋๋ค.
์ดํ์ ์ค๋ ํค๋ฅผ ํตํด ์ค๋๋ฅผ ์ ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์ค๋๋ฅผ ์ ํํ๋ ๋ฐฉ์์ hash sharding, dynamic sharding, entity group์ด ์์ต๋๋ค.
ํด์ ์ค๋ฉ์ ํด์ ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ค๋๋ฅผ ๊ณ ๋ฅด๋ ๋ฐฉ์์ ๋๋ค. ๊ตฌํ์ด ์ฝ์ง๋ง ์ค๋๋ฅผ ํ์ฅํ ๊ฒฝ์ฐ ๋ฐ๋์งํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. (ํด์ ํจ์๊ฐ ๋ณํ์ฌ ๊ธฐ์กด ๋ฐฉ์๊ณผ ๋ค๋ฅธ ์ ์ฅ ๋ฐฉ์์ ๊ฐ๊ฒ ๋ฉ๋๋ค)
ํด์ ์ค๋ฉ์ ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ด๋๋ฏน ์ค๋ฉ ๋ฐฉ์์ด ๋ฑ์ฅํ์ต๋๋ค. locator service๋ผ๋ ํ ์ด๋ธ ์ ๋ณด ๊ธฐ๋ฐ์ผ๋ก ์ค๋ ํค๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ ํ์ฅ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ค๋ง locator service๊ฐ ์ ์ค๋๋ฉด ์ค๋๋ฅผ ๊ณ ๋ฅด๋๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ๋ ์ค๋ฉ ๋ฐฉ์์ key-value ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํฉํฉ๋๋ค.
๋ฐ์ดํฐ๊ฐ์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํฉํ ์ค๋ฉ ๋ฐฉ์์๋ ์ํฐํฐ ๊ทธ๋ฃน์ด ์์ต๋๋ค. ํ๋์ ์ค๋ ์์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ง ๋ชจ์๋๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ๊ฐ ํจ์จ์ ์ด์ง๋ง ๋ค๋ฅธ ์ค๋ ๋ด์ ์ํฐํฐ์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ ๋๋ค.
SQL injection ๊ณต๊ฒฉ ๋ฐฉ์์๋ ๋ฌด์์ด ์๋์?
sql injection ๊ณต๊ฒฉ ๋ฐฉ์์๋ ๋ ๊ฐ์ง๊ฐ ์กด์ฌํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์ธ์ฆ ์ฐํ ๋ ๋ฒ์งธ๋ ๋ฐ์ดํฐ ๋ ธ์ถ์ด ์์ต๋๋ค.์ธ์ฆ ์ฐํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ ๋ ํน์ ์กฐ๊ฑด๋ฌธ์ ํญ์ true๋ก ๋ฐํํ๊ฒ ์ฟผ๋ฆฌ๋ฌธ์ ์กฐ์ํ์ฌ ๋ณด๋ด์ ๋น์ ์์ ์ธ ๋์์ ํ๋๋ก ์กฐ์ํ๋ ๊ณต๊ฒฉ๋ฐฉ์์ ๋๋ค.
๋ฐ์ดํฐ ๋ ธ์ถ์ ์์คํ ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ด์ฉํด ๊ณต๊ฒฉํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ณดํต ์๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ฉด์์ ๋์์ ๋ฐ์ ์ ์๋ ์กด์ฌ์ธ๋ฐ, ํด์ปค๋ค์ ์ด๋ฅผ ์ญ์ด์ฉํด ์ ์์ ์ธ ๊ตฌ๋ฌธ์ ์ฝ์ ํ์ฌ ์๋ฌ๋ฅผ ์ ๋ฐ์ํจ๋ค.
injection์ ๋ฐฉ์ดํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ด๋ค๊ฒ ์๋์?
์ฒซ ๋ฒ์งธ๋ก input๊ฐ์ ๋ฐ์ ์์ ํน์๋ฌธ์ ๊ฒ์ฌ๋ฅผ ์งํํ๋ ๊ฒ ์ ๋๋ค. ๋ก๊ทธ์ธ ์์ ๊ฒ์ฆ ๋ก์ง์ ์ถ๊ฐํ์ฌ ํน์๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ ์์ ์์ฒญ์ ๊ฑฐ๋ถํ๋ ๋ฐฉ์์ ๋๋ค. ๋ ๋ฒ์งธ๋ sql ์๋ฒ ์ค๋ฅ์ ์ค๋ฅ๋ฉ์์ง๋ฅผ ๊ฐ์ถ๋ ๋ฐฉ์์ ๋๋ค. view๋ฅผ ํ์ฉํด์ ์ฌ์ฉ์๊ฐ ์ค๋ฅ ๋ฐ์์ ๋ฉ์์ง๋ฅผ ํ์ธ ํ ์ ์๊ฒํ์ฌ ๋ฐ์ดํฐ ๋ ธ์ถ์ ๋ฐฉ์งํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก prepare statement๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. prepare statement๋ ์๋ฒ ์ธก์์ ํํฐ๋ง ๊ณผ์ ์ ๊ฑฐ์ณ ํน์๋ฌธ์๋ฅผ escapingํ๋ ๋ฐฉ์์ ๋๋ค. ์ด๋ฅผ ํตํด์ ์ธ์ฆ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
Join์์ left join๊ณผ right join์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
left join์ a, b ์งํฉ์ด ์์ ๋, ์กฐ์ธ์ ์งํํํ์ ๊ต์งํฉ์ ํฌํจํ์ฌ ์ค๋ฅธ์ชฝํ ์ด๋ธ์์ null๊ฐ์ ํฌํจํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง๋ง, right join์ ๊ธฐ์คํ ์ด๋ธ์ ์ค๋ฅธ์ชฝ์ผ๋ก joinํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ๋๋ฌธ์ join์ ๊ฒฐ๊ณผ ๊ฐ์ค์์ ์ผ์ชฝ ๋ฐ์ดํฐ๊ฐ ๋์ธ ๊ฒฐ๊ณผ ๊ฐ๋ ํจ๊ป ๋ฐํํฉ๋๋ค.SQL ๋ฌธ๋ฒ ์ข ๋ฅ์ ์์๋ฅผ ๋ค์ด์ฃผ์ธ์
DDL์ (data definition Language) ๋ฐ์ดํฐ ์ ์ ์ธ์ด์ ๋๋ค. ๊ฐ ๋ฆด๋ ์ด์ ์ ์ ์ํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค. alter, drop create table๋ก ๋ฆด๋ ์ด์ ์ ์ญ์ , ์์ฑ ๋ฐ ๋ฆด๋ ์ด์ ์ ํ์ ํฉ๋๋ค. DML์ ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด๋ก insert, select update๊ฐ ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ ๊ฐ ํ ์ด๋ธ์ ์กฐํ ์ฝ์ , ๊ฐฑ์ ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก DCL์ ๋ฐ์ดํฐ ์ ์ด ์ธ์ด๋ก ์ฌ์ฉ์๋ณ๋ก ๋ฐ์ดํฐ์ ๊ถํ์ ๋ค๋ฃจ๊ธฐ ์ํ ์ธ์ด๋ก revoke grant๊ฐ ์์ต๋๋ค.NOSQL์ ๋ฌด์์ด๊ณ ์ด๋ค ํน์ง์ด ์๋์?
NoSQL์ Not Only SQL์ ์ฝ์๋ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ, ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์์ต๋๋ค. ์ ํด์ง ์คํค๋ง๊ฐ ์๊ธฐ๋๋ฌธ์ ๋ณด๋ค ์์ ๋กญ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ์ฌ ์ ์ฅํ ์ ์์ด ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ณ ๋ถ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ํธ๋ณต์ ํ์ฌ ํน์ ์๋ฒ์ ์ฅ์ ๊ฐ ์๊ฒผ์ ๋์๋ ๋ฐ์ดํฐ ์ ์ค์ด๋ ๋ฌด์ค๋จ ์๋น์ค๋ฅผ ์ด์ํ ์ ์์ต๋๋ค.
RDBMS์ NOSQL์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
NoSQL์ด RDB์ ๋ค๋ฅธ ์ ์ ์คํค๋ง๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ ๋ฐ์ดํฐ ๊ด๊ณ์ ์ ํด์ง ๊ท๊ฒฉ(table-column์ ์ ์)์ด ์์ต๋๋ค. ๋ํ NoSQL์ ๋ถ์ฐ์ฒ๋ฆฌ(์ํ์ ํ์ฅ)์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ ๊ณตํฉ๋๋ค. ํ์ง๋ง NoSQL์ ๊ด๊ณ ์ ์๊ฐ ์์ด Join์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ํ ํธ๋์ญ์ ์ ์ง์ํ์ง ์์ต๋๋ค.--RDBMS vs NoSQL (์ฅ๋จ์ )-- RDBMS๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํด์ง ์คํค๋ง์ ๋ฐ๋ผ ํ ์ด๋ธ์ ์ ์ฅํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค. ํ์ง๋ง ์คํค๋ง์ ๋ง์ง์๋ ๋ฐ์ดํฐ๋ ์ถ๊ฐํ ์ ์๊ณ ์ถ๊ฐํ๋ ค๋ฉด ํ ์ด๋ธ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์๋ก์ด ํ ์ด๋ธ์ ๋ง๋ค์ด์ผํฉ๋๋ค. ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๊ธฐ ๋๋ฌธ์ join๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฌธ์ด ๋ง๋ค์ด์ง ์ ์์ต๋๋ค. ๋์ฒด๋ก scale out ๋ฐฉ์๋ณด๋ค๋ scale up ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
NOSQL์ ์คํค๋ง๊ฐ ์์ด ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ๊ณ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์์ join์ด ํ์์๊ณ ์ฟผ๋ฆฌ ๋ก์ง์ ๋ณต์ก๋๊ฐ ๋ฎ์ ์ฅ์ ์ด ์์ต๋๋ค. ๋ํ RDBMS๋ณด๋ค ๋ณต์ก๋๊ฐ ๋จ์ด์ ธ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๊ด๋ฆฌ ํ ์ ์๊ณ , scale out์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ํญ์ ๋ณด์ฅ๋์ง ์๊ณ , ์ค๋ณต์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ UPDATE์ ์ค๋ณต์ผ๋ก ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ด ์ ๋ฐ์ดํธ ํด์ฃผ๋๋ฐ ์๊ฐ์ด ์์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฐ์ฑ์ผ๋ก ์ธํด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒฐ์ ์ ๋ฏธ๋ฃจ๊ฒ ๋ ์๋ ์์ต๋๋ค.
NOSQL์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์๋ ๋ฌด์์ด ์๋์?
๋น๊ด๊ณํ ๋ชจ๋ธ์ ์ด์ฉํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์๋ key-value ๋ฐฉ์, document ๋ฐฉ์, column model ๋ฐฉ์, graph ๋ฐฉ์์ด ์์ต๋๋ค.-
Key-Value ๋ฐฉ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ์ NoSQL๋ก ํค๋ฅผ ๊ณ ์ ํ ์๋ณ์๋ก ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. Redis, Riak์์ ์ฌ์ฉํฉ๋๋ค.
-
Document ๋ฐฉ์ key-value ๋ชจ๋ธ์ ํ์ฅํ ๊ตฌ์กฐ๋ก ํ๋์ ํค์ ํ๋์ ๊ตฌ์กฐํ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ๊ณ ์กฐํํฉ๋๋ค. ์ ์ฅ๋ ๋ฌธ์๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ๋ฌธ์ ์ ์ฅ๊ณผ ๋์์ ๋ฌธ์ ID์ ๋ํ ์ธ๋์ค๋ฅผ ์์ฑํฉ๋๋ค. ๋ฌธ์ ID์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ O(1) ์๊ฐ ์์ ๋ฌธ์๋ฅผ ์กฐํํ ์ ์์ต๋๋ค. XML, JSON, YAML ๊ฐ์ ๋ฐ์ดํฐ ํ์ (document)์ ์ด์ฉํด์ ๋ ์ฝ๋๋ฅผ ์ ์ฅํฉ๋๋ค. ๋๋ถ๋ถ์ ๋ฌธ์ ๋ชจ๋ธ์ bํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ 2์ฐจ ์ธ๋ฑ์ค๋ฅผ ์์ฑํฉ๋๋ค. bํธ๋ฆฌ๋ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ก ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ์ญ์ ํ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฏ๋ก ์ฝ๊ธฐ์ ์ฐ๊ธฐ ๋น์จ์ด 7:3 ์ ๋์ผ๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค. mongoDB, couchDB์์ ์ฌ์ฉํฉ๋๋ค.
-
Column Model ๋ฐฉ์ ํ๋์ ํค์ ์ฌ๋ฌ ๊ฐ์ ์นผ๋ผ ์ด๋ฆ๊ณผ ์นผ๋ผ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์กฐํํฉ๋๋ค. ์ ์ฅ์ ๊ธฐ๋ณธ ๋จ์๋ ์นผ๋ผ์ผ๋ก ์นผ๋ผ์ '์นผ๋ผ ์ด๋ฆ', '์นผ๋ผ ๊ฐ', ํ์์คํฌํ'๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ณดํต์ NoSQL์ order by ๊ฐ์ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ง๋ง, ์ด ๋ชจ๋ธ์ ๋ด๋ถ์ ์ผ๋ก Row Key๋๋ Column Key๋ก ์๋์ ๋ ฌ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ตฌ๊ธ์ Big Table์ด ๋ํ์ ์ธ ์์ ๋๋ค.
-
Graph ๋ฐฉ์ ๊ทธ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ํฐํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฃ์ง๋ก๋ ์ํฐํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐ์ดํฐ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ ๊ฐ ๊ด๊ณ๋ ๋ฐ์ดํฐ ์ทจ๊ธํฉ๋๋ค. ๋ฐ์ดํฐ๋ค์ ๊ด๊ณ๋ฅผ ์ค์์ํด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ค์ด ์ฃ์ง๋ก ์ง์ ์ฐ๊ฒฐ๋ ์ ์์ด ๋ฐ์ดํฐ ์ง์ ์ ํน์ ๋ ธ๋์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ OP๋ก ํ๋๊ฐ๋ฅํฉ๋๋ค. ๊ณ ๋๋ก ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ์คํํ๋๋ฐ ์ ๋ฆฌํฉ๋๋ค. Neo4j, Giraph, IBM DB2์์ ์ฌ์ฉํฉ๋๋ค.
Elasticsearch๋?
Elasticsearch๋ Apache Lucene(์ํ์น ๋ฃจ์ฌ) ๊ธฐ๋ฐ์ Java ์คํ ์์ค ๋ถ์ฐ ๊ฒ์ ์์ง์ ๋๋ค. Elasticsearch๋ฅผ ํตํด ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ(๊ฑฐ์ ์ค์๊ฐ) ์ ์ฅ, ๊ฒ์, ๋ถ์์ ์ํํ ์ ์์ต๋๋ค.
Elasticsearch๋ ์ธ์ ์ฌ์ฉํ๋๊ฐ?
Elasticsearch๋ ๊ฒ์์ ์ํด ๋จ๋ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ๋ฉฐ, ELK(Elasticsearch / Logstash / Kibana) ์คํ/ Elastic ์คํ ์ผ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํฉ๋๋ค.
ELK/Elastic Stack๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ?
์ฃผ๋ก ELK/Elastic Stack๋ ๋ก๋๋ฐธ๋ฐ์ฑ๋์ด ์๋ WAS์ ํฉ์ด์ ธ ์๋ ๋ก๊ทธ๋ฅผ ํ ๊ณณ์ผ๋ก ๋ชจ์ผ๊ณ , ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ๋ค ์๊ฐํํ์ฌ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
Elasticsearch์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ผ.
Elasticsearch๋ ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ํด๋ฌ์คํฐ ์์ ๋ ธ๋, ๋ ธ๋ ์์ ์ธ๋ฑ์ค, ์ธ๋ฑ์ค ์์ ์ค๋, ์ค๋ ์์ ์ธ๊ทธ๋จผํธ๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค.Elasticsearch๋ ์ ๊ฒ์ ์๋๊ฐ ๋น ๋ฅธ๊ฐ?
Inverted-index ์๋ฃ ๊ตฌ์กฐ๋ก ์ธํด ๋น ๋ฆ ๋๋ค. ๋จ์ด ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ElasticSearch๋ ํน์ ๋จ์ด๊ฐ ์ด๋์ ์ ์ฅ๋์ด์๋์ง ์ด๋ฏธ ์๊ณ ์์ด ๋ชจ๋ ๋ํ๋จผํธ๋ฅผ ๊ฒ์ํ ํ์๊ฐ ์์ต๋๋ค.
Elasticsearch์ ์ฅ/๋จ์ ์?
ElasticSearch์ ์ฅ์ ์ * Scale out (๋ถ์ฐ/ํ์ฅ์ฑ) * ์๋ผ์คํฑ์์น์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ๋ฌ ์ค๋๋ก ๋๋์ด ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ฝํ ์ธ ๋ณผ๋ฅจ์ ์ํ ๋ถํ /ํ์ฅ์ด ๊ฐ๋ฅํ๊ณ , ์์ ์ ์ฌ๋ฌ ์ค๋์์ ์ํํ๊ธฐ ๋๋ฌธ์(๋ณ๋ ฌํ) ์ฑ๋ฅ/์ฒ๋ฆฌ๋์ ๋๋ฆด ์ ์์ต๋๋ค. * ๋ ธ๋(Elasticsearch ์๋ฒ)๋ฅผ ์ํ์ ์ผ๋ก ๋๋ฆด ์ ์๊ฒ ์ค๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ์ฉ๋์ด ํ์ํ ๊ฒฝ์ฐ ๋ ธ๋๋ฅผ ํด๋ฌ์คํฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. * ๊ณ ๊ฐ์ฉ์ฑ * Replica๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์์ ์ฑ์ ๋ณด์ฅํฉ๋๋ค. * Schema Free * Json ๋ฌธ์๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ฒ์์ ์ํํ๋ฏ๋ก ์คํค๋ง ๊ฐ๋ ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ํํ ๋์ง ์์ ๋ฌธ์๋ ์์ธํ๊ณ ๊ฒ์ํ ์ ์์ต๋๋ค. * Restful * ๋ฐ์ดํฐ CRUD ์์ ์ HTTP Restful API๋ฅผ ํตํด ์ํํ๋ค. * SELECT = GET * INSERT = PUT * UPDATE = POST * DELETE = DELETE * Restful API๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ค์ํ ํ๋ซํผ์์ ์์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. * Inverted Index * ์ญ์์ธ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.๋จ์
- ์ค์๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- elasticsearch๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ฐ๊ธฐ์ ๋์์ ์ฝ๊ธฐ ์์ ์ ํ ๊ฒฝ์ฐ, ์ธ๊ทธ๋จผํธ๊ฐ ์์ฑ๋๊ธฐ ์ ๊น์ง๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
- ํธ๋์ญ์
์ ์ง์ํ์ง ์๋๋ค.
- ๋ถ์ฐ ์์คํ ๊ตฌ์ฑ์ ํน์ง ๋๋ฌธ์ ์์คํ ์ ์ผ๋ก ๋น์ฉ ์๋ชจ๊ฐ ํฐ ํธ๋์ญ์ ๋ฐ ๋กค๋ฐฑ์ ์ง์ํ์ง ์์ต๋๋ค.
- ์ง์ ํ ์๋ฏธ์ ์
๋ฐ์ดํธ๋ฅผ ์ง์ํ์ง ์๋๋ค.
- ์ธ๊ทธ๋จผํธ๋ ๋ถ๋ฉด์ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์
- ์ธ๊ทธ๋จผํธ์์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ๊ฒฝ์ฐ Soft-Delete๋ฅผ ํ๋ค. (์ญ์ flag = true)
- ์ธ๊ทธ๋จผํธ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ๊ฒฝ์ฐ Soft-Delete๋ฅผ ํ๊ณ , ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ธ๊ทธ๋จผํธ๋ก ์์ฑํ๋ค.
- ๋ฐ๋ผ์ ํ์์์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ณ ์๋ก์ด ์ธ๊ทธ๋จผํธ๋ก ๋ณํฉ ํ ํ ์ธ๊ทธ๋จผํธ๋ฅผ ์ญ์ ํ๋ฉฐ ๋์คํฌ์์ ์์ ํ ์ญ์ ๋๋ '์ธ๊ทธ๋จผํธ ๋ณํฉ ๊ณผ์ '์ด ํ์ํฉ๋๋ค.
- Document๊ฐ์ join์ ์ํํ ์ ์๋ค.
- ๋ ๋ฒ์ ์ฟผ๋ฆฌ๋ก ํด๊ฒฐ์ ๊ฐ๋ฅ
์ ๊ธ๊ธฐ๋ฒ(Locking)์ ๋ํด ์ค๋ช ํ์์ค.
์ ๊ธ๊ธฐ๋ฒ์ ๋ํ์ ์ธ ๋์์ฑ ์ ์ด ๊ธฐ๋ฒ์ ๋๋ค. ์ ๊ธ์ ํ๋์ ํธ๋์ญ์ ์ด ์คํํ๋ ๋์ ํน์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๋์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก Mutual Excusive ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ํ๋์ ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํ์ฌ ์ ๊ธ์ ์ค์ ํ๋ฉด, ์ ๊ธ์ ์ค์ ํ ํธ๋์ญ์ ์ด ํด์ ํ ๋๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ๊ธ ์ฐ์ฐ์ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ์ ์ฑ๊ฒฉ์ ๋ฐ๋ผ ๊ณต์ ์ ๊ธ(Shared lock)๊ณผ ๋ฐฐํ์ ๊ธ(Exclusive lock)์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ๋ ์ ๊ธ ๋ชจ๋ ํด์ ํ ๊ฒฝ์ฐ์๋ unlock ์ฐ์ฐ์ ์ด์ฉํฉ๋๋ค. ๋จผ์ ๊ณต์ ์ ๊ธ์ ์ค์ ํ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์ฝ๊ธฐ ์ฐ์ฐ(read)๋ง ๊ฐ๋ฅํฉ๋๋ค. ๋ ๋ค๋ฅธ ํธ๋์ญ์ ๋ ์ฝ๊ธฐ ์ฐ์ฐ๋ง์ ์คํํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๊ณต์ ์ ๊ธ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ์ ๋ฐํด ๋ฐฐํ์ ๊ธ์ ์ค์ ํ ํธ๋์ญ์ ์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด์ ์ฝ๊ธฐ ์ฐ์ฐ๊ณผ ์ฐ๊ธฐ ์ฐ์ฐ(write) ๋ชจ๋ ๊ฐ๋ฅํ๊ณ ๋์์ ์ฌ๋ฌ ๊ฐ์ ๋ฐฐํ์ ๊ธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ํด์๋ ํ๋์ ๋ฐฐํ์ ๊ธ๋ง ๊ฐ๋ฅํฉ๋๋ค.์ ๊ธ๊ธฐ๋ฒ์ ๋ฌธ์ ์ ์ด ๋ญ๊ฐ์?
๋ง์๋๋ฆฐ ์ ๊ธ์ผ๋ก๋ ์ง๋ ฌ ๊ฐ๋ฅํ ์ค์ผ์ค์ด ํญ์ ๋ณด์ฅ๋์ง ์์ต๋๋ค. ๊ทธ๋์ 2๋จ๊ณ ์ ๊ธ ๊ท์ฝ(2-Phase Locking protocol)์ผ๋ก ์ด ๋ถ๋ถ์ ํด๊ฒฐํ ์ ์์ง๋ง ํด๋น ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ต์ฐฉ์ํ(Deadlock)๋ ๋ฐ์ํ ์ ์์ต๋๋ค.๊ต์ฐฉ์ํ(DeadLock)๋ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ต์ฐฉ ์ํ๋ ์ฌ๋ฌ ๊ฐ์ ํธ๋์ญ์ ๋ค์ด ์คํ์ ํ์ง ๋ชปํ๊ณ ์๋ก ๋ฌดํ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ธฐ ์ํ ์กฐ๊ฑด์ ํฌ๊ฒ 4๊ฐ์ง๋ก ๋งํ ์ ์์ต๋๋ค.์ํธ ๋ฐฐ์ : ํ ๋ฒ์ ํ๋ก์ธ์ค ํ๋๋ง ํด๋น ์์์ ์ฌ์ฉํ ์ ์๋ค. ์ฌ์ฉ ์ค์ธ ์์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ค๋ฉด ์์ฒญํ ์์์ด ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค.
์ ์ ๋๊ธฐ: ์์์ ์ต์ํ ํ๋ ๋ณด์ ํ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์์ ์ ์ ํ๊ธฐ ์ํด ๋๊ธฐํ๋ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํด์ผ ํ๋ค.
๋น์ ์ : ์ด๋ฏธ ํ ๋น๋ ์์์ ๊ฐ์ ๋ก ๋นผ์์ ์ ์๋ค.
์ํ ๋๊ธฐ: ๋๊ธฐ ํ๋ก์ธ์ค์ ์งํฉ์ด ์ํ ํํ๋ก ์์์ ๋๊ธฐํ๊ณ ์์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ํธ๋์ญ์ A๋ 1๋ฒ ๋ฐ์ดํฐ์ ๋ํ UPDATE๋ฅผ ํ๊ณ ํธ๋์ญ์ B๋ 2๋ฒ ๋ฐ์ดํฐ์ ๋ํ UPDATE ์์ ์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ผ 1๋ฒ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ A๊ฐ, 2๋ฒ ๋ฐ์ดํฐ๋ ํธ๋์ญ์ B๊ฐ LOCK์ ํ๊ณ ์๋ ์ํ์ ๋๋ค. ๋ ํธ๋์ญ์ ๋ชจ๋ ๋๋์ง ์์ ์ํ์์ A๊ฐ 2๋ฒ ๋ฐ์ดํฐ์ UPDATE๋ฅผ ์๋ํ๊ณ ํธ๋์ญ์ B๊ฐ 1๋ฒ ๋ฐ์ดํฐ๋ฅผ UPDATE ํ๋ ค๊ณ ํ๋ฉด ๋ ๊ฐ์ ํธ๋์ญ์ ๋ชจ๋ ์คํ์ํค์ง ๋ชปํ๊ณ ๊ต์ฐฉ์ํ์ ๋น ์ง๊ฒ ๋ฉ๋๋ค.
๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์๋ ๋ฌด์์ด ์๋์?
๊ต์ฐฉ ์ํ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋จผ์ ๊ฐ ํธ๋์ญ์ ์ด ์คํ๋๊ธฐ ์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ Locking ํด์ฃผ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์์๋ ๋ฐ์ดํฐ๊ฐ ๋ง์ด ํ์ํ๋ฉด ์ฌ์ค์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ Locking ํด์ค์ผ ํ๋ฏ๋ก ํธ๋์ญ์ ์ ๋ณํ์ฑ์ ๋ณด์ฅํ์ง ๋ชปํฉ๋๋ค. ๋ฟ๋ง ์๋๋ผ ๋ช๋ช ํธ๋์ญ์ ์ ๊ณ์ํด์ ์ฒ๋ฆฌ๋ฅผ ๋ชปํ๊ฒ ๋๋ starvation ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฌํ ๋จ์ ๋ค ๋๋ฌธ์ ์ค์ ๋ก ์์์ ํ ๋นํ ๋ ์๊ฐ ์คํฌํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐฉ์ํ๊ฐ ์ผ์ด๋์ง ์๋๋ก ํํผํ๋ ๋ฐฉ๋ฒ์ด ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋ฌด์์ธ๊ฐ์? ๊ฒฉ๋ฆฌ ์์ค์ ์ข ๋ฅ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์
๊ฒฉ๋ฆฌ์์ค์ ๋ฐ์ดํฐ์ ๋์์ฑ๊ณผ ์ผ๊ด์ฑ์ด tradeoff ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๋ ๋ฒจ๋ง๋ค์ ํน์ง์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํ์์ ๋ง๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.๋ ๋ฒจ์ 0๋ถํฐ 3๊น์ง ์๊ณ , read uncommitted, read committed, repeatable read, serializable ์ด๋ ๊ฒ 4๊ฐ์ง ๋ ๋ฒจ์ด ์์ต๋๋ค.
read uncommitted ๋ ๋ฒจ์ commit๋์ง ์์ ์ฝ๊ธฐ๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ์ read lock์ด ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์ต๋๋ค. dirty read๊ฐ ๋ฐ์ํฉ๋๋ค.
read committed๋ select ๋ฌธ์ฅ์ด ์ํ๋๋ ๋์ ํด๋น ๋ฐ์ดํฐ์ shared lock(read lock)์ด ๊ฑธ๋ฆฌ๋ ๊ณ์ธ ์๋ก ํธ๋์ญ์ ์ด ์ํ๋๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผํ ์ ์์ด ๋๊ธฐํฉ๋๋ค. ์ปค๋ฐ๋ ์ ๋ณด๋ง์ ์ฝ์ง๋ง non-repeatable read๊ฐ ๋ฐ์ํฉ๋๋ค.
repeatable read๋ ํธ๋์ญ์ ์ด ์๋ฃ๋ ๋๊น์ง select ๋ฌธ์ฅ์ด ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฌ๋ ๊ณ์ธต์ผ๋ก ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ๋ณด์ฅ๋ฉ๋๋ค. Non repeatble read ๋ถ์ ํฉ์ด ๋ฐ์ํ์ง ์์ง๋ง phantom read๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ฒฉ๋ฆฌ ์์ค์ ์ข ๋ฅ์ ๋ฐ๋ฅธ ์ค๋ฅ๋ฅผ ๋งํ๊ณ ์ค๋ฅ๋ฅผ ์ค๋ช ํ์์ค
dirty read, unrepeatble read, phantom readdirty read๋ commit๋์ง ์์ ํธ๋์ญ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ์ด๋ค. - uncommitted read
unrepeatable read๋ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋ ์ฝ๊ธฐ๋ฅผ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์์ ๋๊ธฐ ์ ๊ณผ ์์ ๋ ํ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ์ ์๋ฏธํ๋ค. - commited read
phantom read๋ ํ ํธ๋์ญ์ ์์์ ์ผ์ ๋ฒ์์ ๋ ์ฝ๋๋ฅผ ๋ ๋ฒ ์ด์ ์ฝ์์ ๋, ์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ์๋ ๋ ์ฝ๋๊ฐ ๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์์ ๋ํ๋๋ ํ์์ผ๋ก ํธ๋์ญ์ ๋์ค ์๋ก์ด ๋ ์ฝ๋ ์ฝ์ ์ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์ผ์ด๋๋ค. non-repeatable read ๋ถ์ฅํฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก serializable์ ํธ๋์ญ์ ์ด ์๋ฃ ๋ ๋๊น์ง select ๋ฌธ์ฅ์ด ์์ฉ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ์ shared lock์ด ๊ฑธ๋ฆฌ๋ ๊ณ์ธต์ผ๋ก ์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋๋ฅผ ์ ๊ณตํ์ง๋ง, ๋์์ฑ์ ์ ๊ณต๋์ง ์์๋๋ค. ํธ๋์ญ์ ์์ญ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ๋ํ ์์ ๊ณผ ์ ๋ ฅ ๋ชจ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
Transaction์ด๋ ๋ฌด์์ธ๊ฐ์?
ํธ๋์ญ์ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๋ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ์์ ์ ๋จ์๋ผ๊ณ ํ ์ ์๊ณ ํธ๋์ญ์ ์๋ ์ฌ๋ฌ๊ฐ์ ์ฐ์ฐ์ด ์ํ๋ ์ ์๋ค.โ ์ฌ์ฉํ๋ ์ด์ โ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ด ์ผ์ด๋ฌ์ ๊ฒฝ์ฐ ๋กค๋ฐฑ์ ํตํ์ฌ ๋ฐ์ดํฐ์ ๋ถ์ ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด์์ด๋ค.
Transaction์ ํน์ฑ์ด ์๋๋ฐ ๊ฐ๊ฐ์ ์ค๋ช ํด์ฃผ์ธ์
Atomicity - ํธ๋์ญ์ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋ ์ ํ ๋ฐ์๋์ง ์์์ผ ํ๋ค.Consistency - ํธ๋์ญ์ ์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ํญ์ ์ผ๊ด์ฑ ์๋ค
Isolation- ๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ๋ณํ ์คํ๋๊ณ ์์ ๋, ์ด๋ค ํธ๋์ญ์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์๋ค.
Durability - ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์๋ค๋ฉด ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผํ๋ค.
Redis๋ ์ด๋ค ๊ฒฝ์ฐ์ ์ฌ์ฉํ ๊น์?
์ด์ ์ค์ธ ์๋ฒ์์ ํค-๊ฐ ํํ์ ๋ฐ์ดํฐ ํ์ ์ ์ฒ๋ฆฌํด์ผํ๊ณ , I/O๊ฐ ๋น๋ฒํ ๋ฐ์ํด ๋ค๋ฅธ ์ ์ฅ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํจ์จ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ธ ์กฐํ์์ ๊ฐ์ ์นด์ดํธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค ์ ์์ต๋๋ค. ์ธ๊ธฐ ์์์ผ ๊ฒฝ์ฐ RDS ํํ์ ๋ฐ์ดํฐ์ ์ ์ฅํด I/O๋ฅผ ๋ฐ๋ณตํ๋ค๋ฉด ์์ฒญ๋ ์์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์ด๋ฅผ Redis๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ ์ฒ๋ฆฌํ๊ณ ์ผ์ ํ ์ฃผ๊ธฐ์ ๋ฐ๋ผ RDS์ ์ ๋ฐ์ดํธ๋ฅผ ํ๋ค๋ฉด RDS์ ๊ฐํด์ง๋ ๋ถ๋ด์ ํฌ๊ฒ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ ๊ฒ์ ๋๋ค. ๋ ์ฌ์ฉ์์ ์ธ์ ๊ด๋ฆฌ์๋ ์ฌ์ฉ๋ ์ ์๋๋ฐ ์ฌ์ฉ์์ ์ธ์ ์ ์ ์งํ๊ณ , ๋ถ๋ฌ์ค๊ณ , ์ฌ๋ฌ ํ๋๋ค์ ์ถ์ ํ๋๋ฐ ๋งค์ฐ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Redis์ ์ฅ์ ์ ๋ฌด์์ด ์์๊น์?
๋จผ์ ๋ ๋์ค๋ In-Memory ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ ์กฐํํ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋น ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด ๊ฐ๋ฐ์ ํธ์์ฑ์ ์ฆ๊ฐ์์ผ์ค๋๋ค. ๋ ํธ๋์ญ์ ๋ฌธ์ ๋ ํด๊ฒฐํด ์ค ์ ์์ต๋๋ค. Redis ์๋ฃ๊ตฌ์กฐ๋ Atomicํ๋ค๋ ํน์ง ๋๋ฌธ์ race condition์ ํผํ ์ ์์ต๋๋ค.