๐Ÿ”ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดํ•ดํ•˜๊ธฐ

yeeun leeยท2020๋…„ 4์›” 8์ผ
4

Django

๋ชฉ๋ก ๋ณด๊ธฐ
4/8

์„ธ์…˜์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ์ด๊ธด ํ•œ๋ฐ django ๋ชจ๋ธ๋ง ์‹œ ๋งŽ์ด ์ฐพ์•„๋ด์•ผํ•  ๊ฒƒ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ์„œ django ์‹œ๋ฆฌ์ฆˆ์— ๋„ฃ์—ˆ๋‹ค. ์ •๋ฆฌํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ๋‚ด์šฉ์ด ๋๋„ ์—†์ด ๊ธธ์–ด์ง„๋‹ค ๐Ÿคฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ํ…Œ์ด๋ธ”๊ฐ„ ๊ด€๊ณ„ (one to one ๋“ฑ)์— ๋Œ€ํ•ด ์ •๋ฆฌํ–ˆ๋‹ค.

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐ์ž‘, ๊ฒ€์ƒ‰(store, manipulate, retrieve)ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์ด๋‹ค. ๊ทธ๋ƒฅ ํŒŒ์ผ์— ์ €์žฅํ•ด๋„ ๋˜๋Š”๋ฐ ๊ตณ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ์ ‘๊ทผ, ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(database, DB)๋Š” ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ๋ชฉ์ ์œผ๋กœ ์ฒด๊ณ„ํ™”ํ•ด ํ†ตํ•ฉ, ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ?

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

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

2. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

์„œ๋กœ ์ƒํ˜ธ๊ด€๋ จ์„ฑ์„ ๊ฐ€์ง„ ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ ๋ฐ์ดํ„ฐ. ๋Œ€ํ‘œ์ ์ธ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” MySQL๊ณผ PostgreSQL(์ค„์—ฌ์„œ Postgres)๊ฐ€ ์žˆ๋‹ค.

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํ…Œ์ด๋ธ”์€ Column(sort of data)๊ณผ row(actual data), ์ฆ‰ ์—ด๊ณผ ํ–‰์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ๊ฐ ํ–‰์—๋Š” ๊ณ ์œ  ํ‚คprimary key๊ฐ€ ์กด์žฌํ•œ๋‹ค. pk๋ฅผ ์‚ฌ์šฉํ•ด row๋ฅผ ์ฐพ๊ฑฐ๋‚˜ foreign key๋กœ ์ธ์šฉ(reference)ํ•˜๊ฒŒ ๋œ๋‹ค.

2.1 ๊ด€๊ณ„์„ฑ์„ ๊ฐ–๋Š” ์ด์œ 

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

๊ทธ๋ž˜์„œ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ตฌ๋ถ„์„ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ์—ฐ๊ฒฐํ•œ๋‹ค. ์š” ๊ฐœ๋…์„ ์ •๊ทœํ™”๋ผ๊ณ  ํ•œ๋‹ค.

- ์ •๊ทœํ™”(normalization)

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

2.2 ๊ด€๊ณ„์˜ ์ข…๋ฅ˜

๊ด€๊ณ„(one to one, one to many, many to many)์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ์ดํ•ด๊ฐ€ ๋” ํ•„์š”ํ•ด ๋ณ„๋„ ๊ฒŒ์‹œ๋ฌผ์— ์ •๋ฆฌํ–ˆ๋‹ค. ์•„๋ž˜ ๋งํฌ์—์„œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

https://velog.io/@matisse/๋ฐ์ดํ„ฐ-๊ด€๊ณ„-์ดํ•ดํ•˜๊ธฐ-One-to

3. ๊ด€๊ณ„/๋น„๊ด€๊ณ„ํ˜•

์Šคํ‚ค๋งˆ, ์ฆ‰ ๊ด€๊ณ„ ์„ค์ •์— ๋”ฐ๋ฅธ ํ…Œ์ด๋ธ” ๋ชจ๋ธ๋ง์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— ์ •ํ˜•ํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. django์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— models.py๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ๋ฅผ ์ •ํ˜•ํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ์ •๋ฐ˜๋Œ€์ธ ๊ฒƒ์ด๋‹ค!

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์–ด๋””์— ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋น„๊ด€๊ณ„ํ˜•์€ ๊ทธ๋ž˜์•ผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋น ๋ฅธ ์ €์žฅ์ด ํ•„์š”ํ•˜๊ณ , ์ •ํ˜•ํ™”ํ•  ์‹œ๊ฐ„์ด ์—†์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋Œ€ํ‘œ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ MongoDB, Redis, Cassandra๋‹ค.

3.1 sql

์ฃผ๋กœ ์ •ํ˜•ํ™”๋œ, ๋ฐ์ดํ„ฐ ์™„์ „์„ฑ์ด ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. (์ „์ž์ƒ๊ฑฐ๋ž˜, ์€ํ–‰๊ณ„์ขŒ์ •๋ณด, ๊ฑฐ๋ž˜์ •๋ณด ๋“ฑ)

์žฅ์ 

  • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ , ์ฒด๊ณ„์ ์œผ๋กœ ์ €์žฅ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ์™„์ „์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ์•ˆ์ •์  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜์ง€ ์•Š๋‹ค.
  • ํ™•์žฅ์„ฑ์ด ์‰ฝ์ง€ ์•Š๋‹ค. ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๊ฒƒ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค.

3.2 nosql

๋น„์ •ํ˜•ํ™” ๋ฐ์ดํ„ฐ, ์™„์ „์„ฑ์ด ๋œํ•œ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ๊ฐ™์€ ๊ฒƒ๋“ค์— ์‚ฌ์šฉํ•œ๋‹ค ๐Ÿ‘€

์žฅ์ 

  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ณ , ํ™•์žฅํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. ์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋ฉด ๋œ๋‹ค (scale out)
  • ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ์— ์œ ๋ฆฌํ•˜๋‹ค.

๋‹จ์ 

  • ๋ฐ์ดํ„ฐ ์™„์ „์„ฑ์ด ๋œ ๋ณด์žฅ๋œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ์•ˆ ๋˜๊ฑฐ๋‚˜ ๋น„๊ต์  ๋ถˆ์™„์ „ํ•˜๋‹ค.

4. Aquerytool

๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์ „์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ•  ๊ฒƒ์ธ์ง€ ๋ฏธ๋ฆฌ ์‹œ๊ฐํ™”ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ERM ํˆด์ด๋‹ค. ์šฐ์„  ๋ชจ๋ฅด๋Š” ๊ฐœ๋…์— ๋Œ€ํ•ด ์œ„ํ‚ค์˜ ํž˜์„ ๋นŒ๋ ค๋ณด์ž.

4.1 ERM

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋ถ„์•ผ์—์„œ ๊ฐœ์ฒด-๊ด€๊ณ„ ๋ชจ๋ธ์ด๋ž€ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ํ‘œํ˜„์ด๋‹ค. "๊ตฌ์กฐ"ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์“ด๋‹ค.

์ด ๋ฐ์ดํ„ฐ์˜ "๊ตฌ์กฐ" ๋ฐ ๊ทธ์— ์ˆ˜๋ฐ˜ํ•œ ์ œ์•ฝ ์กฐ๊ฑด๋“ค์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์— ์˜ํ•ด ์„ค๊ณ„๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ฐœ์ฒด-๊ด€๊ณ„ ๋ชจ๋ธ๋ง(Entity-Relationship Modelling)์ด๋‹ค. ์ค„์—ฌ์„œ ERM์ด๋ผ๊ณ  ํ•œ๋‹ค.

4.2 ERD

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

ERM ํ”„๋กœ์„ธ์Šค์˜ output์„ ๊ฐœ์ฒด-๊ด€๊ณ„ ๋‹ค์ด์–ด๊ทธ๋žจ(Entity-Relationship Diagram)์ด๋ผ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ณผ์ •์€ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ‘œ์‹œ๋ฒ•์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ERD๋Š” ๊ฐœ๋…์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํ˜น์€ ์‹œ๋งจํ‹ฑ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ํ•œ ํƒ€์ž…์ด๋‹ค.

์„œ๋กœ ๊ด€๊ณ„๋œ ๋‘ ๊ฐœ์˜ ์—”ํ‹ฐํ‹ฐ:

4.3 ERD ๊ตฌ์„ฑ๋„ ๊ทธ๋ฆฌ๊ธฐ

๊ตฌ์„ฑ๋„๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ๋จผ์ € ํšŒ์›๊ฐ€์ž…์„ ํ•˜์ž. ์ด๋ฏธ ๊ทธ๋ ค๋†“๊ณ  ์ €์žฅํ•˜๋ ค๊ณ  ๋ณด๋ฉด ํšŒ์› ๊ฐ€์ž…์ด ์•ˆ ๋œ๋‹ค^^ ์ด์ƒํ•œ ์‹œ์Šคํ…œ! ํšŒ์›๊ฐ€์ž…ํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๊ตฌ์„ฑ๋„๋ฅผ ๊ณต์œ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • Table name: ์†Œ๋ฌธ์ž, ๋ณต์ˆ˜๋กœ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค(users, products, etc)
  • Name: column์˜ ์ด๋ฆ„. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์†Œ๋ฌธ์ž๋กœ ๋„ฃ๊ณ , ๋‹จ์–ด ๊ฐ„ ๊ตฌ๋ถ„์€ ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์“ด๋‹ค.
  • Table/Name logical name: ํ•œ๊ธ€๋กœ table์ด๋‚˜ column์„ ์„ค๋ช…ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.
  • pk: primary key. table์— ํ•˜๋‚˜๋ฐ–์— ์—†๋Š” ์กด์žฌ์ด๋ฉฐ, ์ด๋ฆ„์€ id๋กœ, ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ int๋กœ ์“ด๋‹ค. auto imcrement(ai) ์กฐ๊ฑด์„ ์ฒดํฌํ•œ๋‹ค.
  • fk: foreign key. ์—ฐ๊ฒฐ ๊ด€๊ณ„๊ฐ€ ์ฃผ์–ด์ง€๊ธฐ ์ „๊นŒ์ง€๋Š” ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•˜๊ธฐ ๋•Œ๋ฌธ์— pk ๋‹ค์Œ์— ์˜ค๋„๋ก ์ˆœ์„œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • null: checkํ•˜๋ฉด ํ—ˆ์šฉ, ์•„๋‹ˆ๋ฉด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค

*vachar: database์—์„œ string์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

5. transaction

๋ญ”๊ฐ€ ๋ฐฐ์šฐ๋‹ค๊ฐ€ ๊ฐ‘์ž๊ธฐ ํŠ€์–ด๋‚˜์˜จ ๊ฐœ๋…์ด๋ผ์„œ ์ผ๋‹จ ํฌํ•จ์€ ์‹œ์ผฐ๋Š”๋ฐ, ๋„ˆ๋ฌด ๊ฐœ๋…์ ์ธ ๋ถ€๋ถ„์ด๋ผ์„œ ๋” ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋งŽ์ด ๋“ ๋‹ค.

  • ์ผ๋ จ์˜ ์ž‘์—…๋“ค์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์œ ๋‹›์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
  • ์ž‘์—… ์ˆ˜ํ–‰์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„

์งˆ์˜๋ฅผ ๋ฌถ์Œ ์ฒ˜๋ฆฌํ•ด์„œ ์ค‘๊ฐ„์— ์‹คํ–‰์ด ์ค‘๋‹จ๋˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๋กค๋ฐฑ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์˜ค๋ฅ˜์—†์ด ๋งˆ์น˜๋ฉด ์ปค๋ฐ‹ํ•˜๊ฒŒ ๋œ๋‹ค. ์งˆ์˜๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋ณด๋ฉด ๋œ๋‹ค.

ex. ์†ก๊ธˆํ•  ๋•Œ ๋‚ด ๊ณ„์ขŒ์—์„œ ๋ˆ์ด ๋‚˜๊ฐ€๊ณ , ํƒ€์ธ์˜ ๊ณ„์ขŒ์—์„œ ๋ˆ์„ ๋ฐ›๋Š” ๊ณผ์ •. ๋ˆ์ด ๋‚˜๊ฐ€๊ณ  ๋ฐ›์ง€๋Š” ๋ชปํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์—!

5.1 TPS

Transaction Per Second. ์ดˆ๋‹น ํŠธ๋žœ์žญ์…˜ ์ˆ˜์ธ๋ฐ, ๊ฐœ๋… ์„ค๋ช…์€ ์œ„ํ‚ค ์ฐธ๊ณ !

์ดˆ๋‹น ํŠธ๋žœ์žญ์…˜ ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ด€์ ์—์„œ ์ดˆ๋‹น ํŠน์ • ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ˆ˜ํ–‰ํ•œ ์›์ž ๋™์ž‘์˜ ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋” ์ œํ•œ๋œ ๊ด€์ ์—์„œ ์ด ์šฉ์–ด๋Š” DBMS ๋ฒค๋”์™€ ์‚ฌ์šฉ์ž ๊ณต๋™์ฒด๊ฐ€ ์ดˆ๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋‹ค.

5.2 ACID

transaction์ด ์ œ๊ณตํ•˜๋Š” ํŠน์ง• 4๊ฐ€์ง€๋ฅผ ์•ฝ์ž๋กœ ๋”ฐ์˜จ ๋‚ด์šฉ. ํ•˜๋‚˜ํ•˜๋‚˜ ๋”ฐ์ง€๋ฉด ์–ด๋ ค์šด ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„์ด ์žˆ์„ ๋•Œ ๊นŠ๊ฒŒ ๊ณต๋ถ€ํ•˜์ž!

- ์›์ž์„ฑ(atomicity)

all or nothing. ๋ถ€๋ถ„์ ์œผ๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•œ๋‹ค. ์ž‘์—… ๋‹จ์œ„๋ฅผ ์ผ๋ถ€๋ถ„๋งŒ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ์ผ๊ด€์„ฑ(consistency)

ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋˜๋ฉด ์ผ๊ด€์ ์ธ db์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ. ๋ฐ์ดํ„ฐ ํƒ€์ž…, ์ƒํƒœ๊ฐ€ ์ค‘๊ฐ„์— ๋ณ€์งˆ๋˜์ง€ ์•Š๋Š”๋‹ค.

- ๊ณ ๋ฆฝ์„ฑ(isolation)

ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์‹œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ์ž‘์—…์ด ๋ผ์–ด๋“ค์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ. ํŠธ๋žœ์žญ์…˜๋ผ๋ฆฌ๋Š” ์„œ๋กœ ๊ฐ„์„ญํ•  ์ˆ˜ ์—†๊ณ  ํŠธ๋žœ ์žญ์…˜ ๋ฐ–์˜ ์–ด๋–ค ์—ฐ์‚ฐ๋„ ์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

- ์ง€์†์„ฑ(durability)

์„ฑ๊ณตํ•œ ํŠธ๋žœ์žญ์…˜์€ ์˜์›ํžˆ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค.


๋‹ค์‹œ ์ •๋ฆฌํ•˜๋Š”๋ฐ๋„ ๋Š˜ ์ƒˆ๋กญ๋‹ค. ๋‹จ์ˆœํžˆ ๋“ฃ๋Š” ๊ฒƒ์ด ๋์ด ์•„๋‹ˆ๋ผ ๊ถ๊ธˆํ•œ ๊ฒƒ์€ ์‚ด์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ

profile
์ด์‚ฌ๊ฐ„ ๋ธ”๋กœ๊ทธ: yenilee.github.io

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2020๋…„ 7์›” 14์ผ

๊ธ€์ด ์ฐธ ์ •๋ฆฌ๊ฐ€ ์ž˜๋˜์–ด ์žˆ๊ตฐ์š”. ์ž์ฃผ ์˜ฌ ๊ฒƒ ๊ฐ™๋„ค์š” ! ๊ณต๋“ค์—ฌ ๋งŒ๋“ค์–ด์ฃผ์‹  ์ •๋ณด ๊ณต์œ  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ