Skip to content

Latest commit

ย 

History

History
464 lines (298 loc) ยท 28.6 KB

database.md

File metadata and controls

464 lines (298 loc) ยท 28.6 KB

๐Ÿ’พ Database ๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

Database

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋‚˜์š”?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์—๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์‹œ์Šคํ…œ ๋‚ด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต ์ €์žฅ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ƒํ˜ธ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ ๋˜ํ•œ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต ์ €์žฅ๋˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•˜๋Š”๋ฐ์š”. ๋จผ์ € ํ•˜๋‚˜์˜ ์‚ฌ์‹ค๋งŒ์„ ๋‚˜ํƒ€๋‚ด๋„๋ก ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต ๋ฐ์ดํ„ฐ๋“ค์— ๊ฐ™์€ ์ˆ˜์ค€์˜ ๋ณด์•ˆ์„ ์œ ์ง€ํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์€ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋ฌธ์ œ๋กœ ์—ฌ๋Ÿฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์ตœ์†Œํ•œ์˜ ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ธ โ€œ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคโ€๊ฐ€ ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.


๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‚ค์˜ ์ข…๋ฅ˜์™€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ‚ค๋ž€ ๊ฒ€์ƒ‰์ด๋‚˜ ์ •๋ ฌ์‹œ์— ํŠœํ”Œ์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ž…๋‹ˆ๋‹ค.

ํ‚ค์˜ ์ข…๋ฅ˜์—๋Š” ์Šˆํผํ‚ค, ํ›„๋ณดํ‚ค, ๊ธฐ๋ณธํ‚ค, ๋Œ€์ฒดํ‚ค, ๋ณตํ•ฉํ‚ค, ์™ธ๋ž˜ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์Šˆํผํ‚ค๋Š” ์œ ์ผ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ž…๋‹ˆ๋‹ค. ์œ ์ผ์„ฑ์„ ๊ฐ€์ง„ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์ด ์—†๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ž…๋‹ˆ๋‹ค.
  2. ํ›„๋ณดํ‚ค๋Š” ์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋“ค๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์„ ์ตœ์†Œ์„ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ธฐ๋ณธํ‚ค๋Š” ์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ์„ ๊ฐ€์ง€๋ฉฐ NULL ๊ฐ’์„ ๊ฐ€์ง€์ง€ ๋ชปํ•˜๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ž…๋‹ˆ๋‹ค. ํ›„๋ณดํ‚ค ๊ฐ€์šด๋ฐ ์„ ํƒ๋œ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋Œ€์ฒดํ‚ค๋Š” ํ›„๋ณดํ‚ค ์ค‘์—์„œ ๊ธฐ๋ณธํ‚ค๋กœ ์„ ํƒ๋œ ๊ฒƒ๋“ค์„ ์ œ์™ธํ•œ ๋ชจ๋“  ํ‚ค๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
  5. ๋ณตํ•ฉํ‚ค๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ์†์„ฑ์„ ํฌํ•จํ•˜๋Š” ํ‚ค๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
  6. ์™ธ๋ž˜ํ‚ค๋Š” ํ•œ ํ…Œ์ด๋ธ”์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ(ํŠœํ”Œ)์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์ž…๋‹ˆ๋‹ค.

[์ •๋ฆฌ]

  • ์Šˆํผํ‚ค = ์œ ์ผ์„ฑ ๋งŒ์กฑํ•˜๋Š” ํ‚ค
    • ํ›„๋ณดํ‚ค = ์Šˆํผํ‚ค + ์ตœ์†Œ์„ฑ ๋งŒ์กฑํ•˜๋Š” ํ‚ค
      • ๊ธฐ๋ณธํ‚ค = ํ›„๋ณดํ‚ค ์ค‘ ์„ ํƒ๋œ ํ‚ค = ์œ ์ผ์„ฑ + ์ตœ์†Œ์„ฑ + not null = ํŠน์ • ๋ ˆ์ฝ”๋“œ ๊ตฌ๋ถ„๊ฐ€๋Šฅ
        • ๋Œ€์ฒดํ‚ค = ํ›„๋ณดํ‚ค - ๊ธฐ๋ณธํ‚ค = ๋‚˜๋จธ์ง€ ํ‚ค๋“ค
  • ๋ณตํ•ฉํ‚ค = 1 ์ด์ƒ์˜ ์†์„ฑ์œผ๋กœ ์ด๋ค„์ง„ ํ‚ค = {์†์„ฑ1, .. }
  • ์™ธ๋ž˜ํ‚ค = ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ‚ค

์ˆœ์ฐจ I/O์™€ ๋žœ๋ค I/O์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

์ˆœ์ฐจ io ๋ž€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ฝ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋žœ๋ค io์— ๋น„ํ•ด ํฐ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ˆœ์ฐจ io ๋ฐฉ์‹์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„  full scan์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋žœ๋ค io๋ž€ ๋””์Šคํฌ์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์— ํฉ์–ด์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ธ์ ‘ํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ ํ—ค๋“œ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ๊ธฐ๋ฐ˜์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ชจ๋“  io๋ฅผ ์ˆœ์ฐจ io๋กœ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ๋””์Šคํฌ์— ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์—ฌ๋Ÿฌ ๋””์Šคํฌ์— ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋žœ๋ค ์—‘์„ธ์Šค๊ฐ€ ์ตœ์†Œํ™” ๋˜๋„๋ก ํ•˜๋Š” ๋Œ€์‘ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

DB Clustering&replication

Clustering์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๋Œ€๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

  1. active - active ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๋Œ€๋กœ ๋‚˜๋ˆ„๋Š” ์„œ๋ฒ„๋ฅผ ๋™์ž‘ ์ƒํƒœ๋กœ ๋‘๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด ๋ฐฉ์‹์€ ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„ 2๋Œ€๊ฐ€ ์šด์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์— ์ด๋“์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. active -standby ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋งŒ ์šด์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” standby๋กœ ๋‘๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ active-active ๋ฐฉ์‹์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์—†์ง€๋งŒ, standby์—์„œ active๋กœ ์ „ํ™˜ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


Replication์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์†์‹ค๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ primary db๋ผ ์นญํ•˜๊ณ  ๋ณต์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—…ํ•  ์šฉ๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ secondary db๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ crud ์š”์ฒญ์„ primary db๋กœ ๋ณด๋‚ด๋ฉด ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ secondary db์— ๋™๊ธฐํ™”ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ secondary db๋Š” ๋ฐฑ์—…์šฉ๋„ ์™ธ์— ์กฐํšŒ ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

replication ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”

  1. ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค
  2. ๋˜ํ•œ primary db๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ, secondary db๊ฐ€ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฅ์•  ๋Œ€์‘์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์—ฌ๋Ÿฌ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋กœ ์ธํ•œ ์‘๋‹ต ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

replication์€ primary db์—์„œ secondary db๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ replication lag์ด๋ผ๊ณ  ์นญํ•ฉ๋‹ˆ๋‹ค.

replica๊ฐ€ ๋งŽ์œผ๋ฉด replication lag ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์ฐจ๋กœ primary db์™€ secondary db์— ๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ 100% ์ง€ํ‚ค์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.


Partitioning์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

ํ•˜๋‚˜์˜ ํฐ ํ…Œ์ด๋ธ”์„ ํŒŒํ‹ฐ์…˜์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด์„œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์šฉ๋Ÿ‰์ด ํฐ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋ฉด ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ํฐ ํ…Œ์ด๋ธ”์„ ์ž‘์€ ํ…Œ์ด๋ธ”๋กœ ์ž‘๊ฒŒ ์ชผ๊ฐœ๋Š” ํŒŒํ‹ฐ์…”๋‹ ๊ธฐ๋ฒ•์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…”๋‹์„ ํ•˜๋ฉด, full scan ์‹œ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ…Œ์ด๋ธ”์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ชผ๊ฐœ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ํ›ผ์† ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

๋‹ค๋งŒ join์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒํ‹ฐ์…”๋‹์—๋Š” vertical partitioning, horizontal partitioning ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹์ด๋ž€ ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ๋‚˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” attritbute๋ฅผ ๋…๋ฆฝ์ ์ธ ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ„๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.
  2. ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹์ด๋ž€ ์Šคํ‚ค๋งˆ๊ฐ€ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์„ ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์Šคํ‚ค๋งˆ๊ฐ€ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์ด ๋‘๊ฐœ ์ƒ๊ธฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” sharding๊ณผ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ์—ฌ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Sharding์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

ํ…Œ์ด๋ธ”์„ ํ–‰ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์—ฌ๋Ÿฌ ์ƒค๋“œ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ƒค๋“œ๋ž€ ์ƒค๋”ฉ์„ ํ†ตํ•ด ๋‚˜๋ˆ„์–ด์ง„ ๋ธ”๋ก ๊ตฌ๊ฐ„์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„์— ์ƒค๋“œ ํ‚ค๋ฅผ ํ†ตํ•ด ์ƒค๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ƒค๋“œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์€ hash sharding, dynamic sharding, entity group์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด์‹œ ์ƒค๋”ฉ์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ƒค๋“œ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ์‰ฝ์ง€๋งŒ ์ƒค๋“œ๋ฅผ ํ™•์žฅํ•  ๊ฒฝ์šฐ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. (ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ๋ณ€ํ•˜์—ฌ ๊ธฐ์กด ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ ์ €์žฅ ๋ฐฉ์‹์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค)

ํ•ด์‹œ ์ƒค๋”ฉ์˜ ํ™•์žฅ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์ด๋‚˜๋ฏน ์ƒค๋”ฉ ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. locator service๋ผ๋Š” ํ…Œ์ด๋ธ” ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒค๋“œ ํ‚ค๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒค๋“œ ํ™•์žฅ์— ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ locator service๊ฐ€ ์œ ์‹ค๋˜๋ฉด ์ƒค๋“œ๋ฅผ ๊ณ ๋ฅด๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‘ ์ƒค๋”ฉ ๋ฐฉ์‹์€ key-value ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ„์— ๊ด€๊ณ„๋ฅผ ๋งบ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ํ•ฉํ•œ ์ƒค๋”ฉ ๋ฐฉ์‹์—๋Š” ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ฃน์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ƒค๋“œ ์†์— ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋งŒ ๋ชจ์•„๋‘๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ๊ฐ€ ํšจ์œจ์ ์ด์ง€๋งŒ ๋‹ค๋ฅธ ์ƒค๋“œ ๋‚ด์˜ ์—”ํ‹ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

SQL

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๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

RDBMSvs.NoSQL

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๋ž€?

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์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋‘ ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ํ•ด๊ฒฐ์€ ๊ฐ€๋Šฅ

DB ๊ต์ฐฉ์ƒํƒœ & ๋™์‹œ์„ฑ ์ œ์–ด

์ž ๊ธˆ๊ธฐ๋ฒ•(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 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๋‹จ์ ๋“ค ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ž์›์„ ํ• ๋‹นํ•  ๋•Œ ์‹œ๊ฐ„ ์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š๋„๋ก ํšŒํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Transaction

ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์˜ ์ข…๋ฅ˜๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š” ๊ฒฉ๋ฆฌ์ˆ˜์ค€์€ ๋ฐ์ดํ„ฐ์˜ ๋™์‹œ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์ด 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 read

dirty read๋Š” commit๋˜์ง€ ์•Š์€ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฒƒ์ด๋‹ค. - uncommitted read

unrepeatable read๋Š” ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋œ ์ฝ๊ธฐ๋ฅผ ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜๊ธฐ ์ „๊ณผ ์ˆ˜์ • ๋œ ํ›„์— ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. - commited read

phantom read๋Š” ํ•œ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ผ์ • ๋ฒ”์œ„์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ์ฝ์—ˆ์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ์—†๋˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ฟผ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋„์ค‘ ์ƒˆ๋กœ์šด ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ์–ด๋‚œ๋‹ค. non-repeatable read ๋ถ€์žฅํ•ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ serializable์€ ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ select ๋ฌธ์žฅ์ด ์ƒ์šฉ๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— shared lock์ด ๊ฑธ๋ฆฌ๋Š” ๊ณ„์ธต์œผ๋กœ ์™„๋ฒฝํ•œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋™์‹œ์„ฑ์€ ์ œ๊ณต๋˜์ง€ ์•ˆ์”๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ •๊ณผ ์ž…๋ ฅ ๋ชจ๋‘ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


Transaction์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์˜ ๋‹จ์œ„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  ํŠธ๋žœ์žญ์…˜์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

โ†’ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  โ‡’ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์ •ํ•ฉ์ด ์ผ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ ๋กค๋ฐฑ์„ ํ†ตํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ถ€์ •ํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.


Transaction์— ํŠน์„ฑ์ด ์žˆ๋Š”๋ฐ ๊ฐ๊ฐ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š” Atomicity - ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ชจ๋‘ ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

Consistency - ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ์ผ๊ด€์„ฑ ์žˆ๋‹ค

Isolation- ๋‘˜ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ๋ณ‘ํ–‰ ์‹คํ–‰๋˜๊ณ  ์žˆ์„ ๋–„, ์–ด๋–ค ํŠธ๋žœ์žญ์…˜๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ์—ฐ์‚ฐ์— ๋ผ์–ด๋“ค ์ˆ˜ ์—†๋‹ค.

Durability - ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผํ•œ๋‹ค.

Redis

Redis๋Š” ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ• ๊นŒ์š”?

์šด์˜ ์ค‘์ธ ์„œ๋ฒ„์—์„œ ํ‚ค-๊ฐ’ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๊ณ , I/O๊ฐ€ ๋นˆ๋ฒˆํžˆ ๋ฐœ์ƒํ•ด ๋‹ค๋ฅธ ์ €์žฅ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ ํŠœ๋ธŒ ์กฐํšŒ์ˆ˜์™€ ๊ฐ™์€ ์นด์šดํŠธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๊ธฐ ์˜์ƒ์ผ ๊ฒฝ์šฐ RDS ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ์— ์ €์žฅํ•ด I/O๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค๋ฉด ์—„์ฒญ๋‚œ ์ž์›์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ Redis๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ผ์ •ํ•œ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ RDS์— ์—…๋ฐ์ดํŠธ๋ฅผ ํ•œ๋‹ค๋ฉด RDS์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€๋‹ด์„ ํฌ๊ฒŒ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์€ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜ ๊ด€๋ฆฌ์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ์‚ฌ์šฉ์ž์˜ ์„ธ์…˜์„ ์œ ์ง€ํ•˜๊ณ , ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์—ฌ๋Ÿฌ ํ™œ๋™๋“ค์„ ์ถ”์ ํ•˜๋Š”๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Redis์˜ ์žฅ์ ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”?

๋จผ์ € ๋ ˆ๋””์Šค๋Š” In-Memory ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ๋น ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ด ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ์„ ์ฆ๊ฐ€์‹œ์ผœ์ค๋‹ˆ๋‹ค. ๋˜ ํŠธ๋žœ์žญ์…˜ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Redis ์ž๋ฃŒ๊ตฌ์กฐ๋Š” Atomicํ•˜๋‹ค๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— race condition์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Regularization(์ •๊ทœํ™”)

Index & Hint