0222 TIL ๐Ÿง‹

looggiยท2023๋…„ 2์›” 22์ผ
0

TILs

๋ชฉ๋ก ๋ณด๊ธฐ
3/114
post-thumbnail

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

  1. SQL๊ณผ NoSQL์˜ ์ฐจ์ด๋ฅผ ๋งํ•ด๋ณด์„ธ์š”
    SQL์€ ๊ด€๊ณ„ํ˜•๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด์— ์ €์žฅํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ค‘๋ณต์—†์ด ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ณดํ†ต SCALE-UP ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅ์„ ํ•˜์—ฌ ๋น„์šฉ์ด ๋งŽ์ด ์†Œ๋ชจ๋ฉ๋‹ˆ๋‹ค.
    NoSQL์€ ๋น„๊ตฌ์กฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ๊ฐ€ ์—†์–ด ์œ ์—ฐํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ scale-out๋ฐฉ์‹์œผ๋กœ ํ™•์žฅ์„ ํ•˜์—ฌ SQL์— ๋น„ํ•ด์„œ ๋น„์šฉ์ด ์ ๊ฒŒ ๋“ค๊ณ  ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ข‹์•„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

DB

DBMS
๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

  • RDBMS SQL์‚ฌ์šฉ
    • MySQL
      Oracle
      SQLite
      MariaDB
      PostgresSQL

SQL

Structured Query Language
๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์€ ์ค‘๋ณต์„ฑ์„ ์ค„์ด๋„๋ก ์ •๊ทœํ™”๋˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์ €์žฅ์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ํ…Œ์ด๋ธ” ์‚ฌ์ด์—์„œ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ

  • SQL์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๊ณ ์ •๋œ ํ˜•์‹์˜ ์Šคํ‚ค๋งˆ๊ฐ€ ํ•„์š”ํ•˜๋‹ค
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”์— ์ €์žฅ
    ์ˆ˜์ง์  ํ™•์žฅ(Scale-up)
  • ACID์†์„ฑ ์ œ๊ณต
    • ์›์ž์„ฑ: ๊ฐ€๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ์ „ํ˜€ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š” ํŠธ๋žœ์žญ์…˜์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๊ด€์„ฑ: ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ค€์ˆ˜ํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฒฉ๋ฆฌ์„ฑ: ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ํŠธ๋žœ์žญ์…˜๋“ค์ด ๊ฐ๊ธฐ ๋ณ„๋„๋กœ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ๋‚ด๊ตฌ์„ฑ: ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์‹œ์Šคํ…œ ์žฅ์•  ๋˜๋Š” ์ •์ „ ์‹œ ๋งˆ์ง€๋ง‰์œผ๋กœ ์•Œ๋ ค์ง„ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

NoSQL

Not Only SQL/ non SQL
๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ •ํ˜•๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ, ์ฆ‰ ๋น„์ •ํ˜•๋ฐ์ดํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ๋‹ด์•„์„œ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

  • ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ(์ˆ˜ํ‰์  ํ™•์žฅ scale-out)
  • ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ (์œตํ†ต์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์‚ฌ์šฉ)
    โ†’ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ๊ฐ€๋Šฅ
  • ํŠน์ • ๋ชฉ์ /๊ธฐ๋Šฅ์— ํŠนํ™”๋จ
    • ์ดˆ๊ณ ์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ ์„ฑ๋Šฅ์— ํŠนํ™”๋œ ๋ชฉ์ ์„ ์œ„ํ•ด, ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์—, ๋น„๊ตฌ์กฐ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ถ„์‚ฐ ์ €์žฅ ์‹œ์Šคํ…œ
    • ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰/๋‹จ์ˆœ ๊ฒ€์ƒ‰ ๋ฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์œ„ํ•œ ํŠนํ™”(์ตœ์ ํ™”)๋œ ๋งค์ปค๋‹ˆ์ฆ˜(ํ‚ค ๊ฐ’ ์ €์žฅ ๊ธฐ๋ฒ•)์„ ์ œ๊ณต โ†’๋ ˆ์ดํ„ด์‹œ(์‘๋‹ต์†๋„)๋‚˜, ์Šค๋ฃจํ’‹(์ฒ˜๋ฆฌ ํšจ์œจ)๋“ฑ์ด ๋›ฐ์–ด๋‚จ
      • ๋ ˆ์ดํ„ด์‹œ: ์ž๊ทน๊ณผ ๋ฐ˜์‘์— ๋Œ€ํ•œ ์ง€์—ฐ์‹œ๊ฐ„
      • ์Šค๋ฃจํ’‹: ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ๋””์ง€ํ„ธ ๋ฐ์ดํ„ฐ ์ „์†ก์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์–‘
    • ex. Facebook, Twitter, Netflix, Instagram, Apple์˜ iCloud, ์‚ผ์„ฑ์˜ SCloud

RDBMS์™€ ์ฐจ์ด์ 

  • ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ…Œ์ด๋ธ”๊ฐ„์˜ ์กฐ์ธ ๊ธฐ๋Šฅ ์—†์Œ
  • ์ง์ ‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๋“ฑ์˜ ๋น„SQL ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค
  • ๋Œ€๋ถ€๋ถ„ ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ๋ฌถ์–ด์„œ(ํด๋Ÿฌ์Šคํ„ฐ๋ง) ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์„ฑ
    ๋ถ„์‚ฐํ˜• ํ•˜๋“œ์›จ์–ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด์šฉํ•ด ํ™•์žฅ
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์ง€์›ํ•˜๋Š” Data์ฒ˜๋ฆฌ ์™„๊ฒฐ์„ฑ(Transaction ACID ์ง€์›) ๋ฏธ๋ณด์žฅ
  • ๋ฐ์ดํ„ฐ์˜ ์Šคํ‚ค๋งˆ์™€ ์†์„ฑ๋“ค์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ˆ˜์šฉ ๋ฐ ๋™์  ์ •์˜ (Schema-less)
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค‘๋‹จ ์—†๋Š” ์„œ๋น„์Šค์™€ ์ž๋™ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์ง€์›
  • ๋‹ค์ˆ˜๊ฐ€ Open Source๋กœ ์ œ๊ณต
  • ํ™•์žฅ์„ฑ, ๊ฐ€์šฉ์„ฑ, ๋†’์€ ์„ฑ๋Šฅ

Data Model

์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

  • Key Value DB ex.๋‹ค์ด๋‚˜๋ชจDB
  • Wide Columnar Store ex.HBase, Cassandra
  • Document DB ex.MongoDB
  • Graph DB

๊ธฐํƒ€

  • ScyllaDB
    Event ๊ธฐ๋ฐ˜ Processing ๊ตฌ์กฐ๋กœ ๊ณ ์„ฑ๋Šฅ ์ฒ˜๋ฆฌ
    CPU Core๋ณ„ ๋‹จ์ผ thread๊ธฐ๋ฐ˜ processing
    -> ์–ด๋””์„œ ํ–ˆ์ง€??

  • ์˜คํ”ˆ์†Œ์Šค DBMS์ธ PostgreSQL์˜ ๊ฒฝ์šฐ๋„ 2๋…„์ „๋ถ€ํ„ฐ NoSQL์—์„œ๋‚˜ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ–ˆ๋˜ JSON์„ ์ง€์›ํ•จ์œผ๋กœ์„œ, ์‹œ์žฅ์˜ ์ฃผ๋ชฉ์„ ๋งŽ์ด ๋ฐ›์•˜๊ณ , ๋”๋ถˆ์–ด ๋‹ค๋ฅธ ์˜คํ”ˆ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—…์ฒด๋“ค๋„ JSON์„ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://www.samsungsds.com/kr/insights/1232564_4627.html
https://aws.amazon.com/ko/nosql/
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/

  1. ํด๋Ÿฌ์Šคํ„ฐ, ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋ž€
    DB ์ธ๋ฑ์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋กœ ๋„Œํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋Š” ๋ณดํ†ต ์ƒ์„ฑํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๋‹ค. ์›๋ณธ ๋ฐ์ดํ„ฐ์™€ ๋ณ„๊ฐœ๋กœ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋”ฐ๋กœ ์ƒ์„ฑ๋˜์–ด ์ถ”๊ฐ€ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒฝ์šฐ ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค.
    ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค๋Š” ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒฝ์šฐ์—” ํŽ˜์ด์ง€ ๋ถ„ํ• ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์–ด ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋ณด๋‹ค ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ๋”ฐ๋ผ์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž์ฃผ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์žˆ๋Š” ๊ฒƒ!

  • ๋”ฐ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธํ‚ค == ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค
  • ํ…Œ์ด๋ธ”๋‹น ํ•˜๋‚˜
  • ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅ
    • ๋ฃจํŠธ ํŽ˜์ด์ง€(๋…ธ๋“œ)
      ๋ฆฌํ”„ ํŽ˜์ด์ง€์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
    • ๋ฆฌํ”„ ํŽ˜์ด์ง€(๋…ธ๋“œ)
      ์‹ค์ œ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€
  • ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๊ฐ€ ๋”ฐ๋กœ ์—†๊ณ  ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€
    • ๊ฒ€์ƒ‰(SELECT)์†๋„๊ฐ€ ๋„Œํด๋Ÿฌ์Šคํ„ฐ๋ณด๋‹ค ๋” ๋น ๋ฆ„(์ฐธ์กฐํ•˜๋Š” ํŽ˜์ด์ง€์˜ ์ˆ˜๊ฐ€ ์ ๊ธฐ๋•Œ๋ฌธ)
      ์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ๋Š” ๋” ๋Š๋ฆผ
    • ํŽ˜์ด์ง€ ๋ถ„ํ• 
      ๋ฆฌํ”„ ํŽ˜์ด์ง€์— ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€ํ•  ๊ณต๊ฐ„์ด ์—†์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•
      โ†’ ์ธ๋ฑ์Šค๋Š” Balancing Tree๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‘ ๊ฐ™์€ ํฌ๊ธฐ์˜ ํŽ˜์ด์ง€๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๊ฐ„์— ์‚ฝ์ž…๋˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€ ๋  ํ…Œ์ด๋ธ”์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์ ˆ๋ฐ˜์ด ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ด๋™ ํ›„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
      ์ด์™€ ๊ฐ™์ด, ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œํ•  ๋•Œ ํŽ˜์ด์ง€ ๋ถ„ํ• ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์–ด ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ์žฌ์ •๋ ฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ ค์ง„๋‹ค.

๋„Œํด๋Ÿฌ์Šคํ„ฐ ์ธ๋ฑ์Šค

๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ (์ •๋ ฌx), ๋ณ„๋„์˜ ์žฅ์†Œ์— ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑ โ†’ ์šฉ๋Ÿ‰์„ ๋” ์ฐจ์ง€ํ•œ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ์ธ๋ฑ์Šค ํŽ˜์ด์ง€ (๋ฃจํŠธ๋…ธ๋“œ โ†’ ๋ฆฌํ”„๋…ธ๋“œ(์ธ๋ฑ์Šค๊ฐ€ ๋จผ์ €!)) โ†’ ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€
    โ†’ ์ธ๋ฑ์Šค ํŽ˜์ด์ง€๋ฅผ ํ•œ๋ฒˆ ๊ฑฐ์น˜๊ธฐ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์†๋„๋Š” ๋” ๋Š๋ฆฌ์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ๋Š” ๋” ๋น ๋ฅด๋‹ค
  • ์ธ๋ฑ์Šค ์กฐํšŒ ์‹œ ๋น„์šฉ์ด ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค
    โ†’ ๊ฒ€์ƒ‰ํ•˜๊ณ ์žํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ‚ค ๊ฐ’์„ ๋ฃจํŠธ ํŽ˜์ด์ง€์—์„œ ๋น„๊ตํ•˜์—ฌ ๋ฆฌํ”„ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ๊ณ , ๋ฆฌํ”„ ํŽ˜์ด์ง€์—์„œ RID ์ •๋ณด๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋กœ ์ด๋™

https://kosaf04pyh.tistory.com/293
velog.io/@sweet_sumin

๋ทฐ

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

์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ ์ž๋ฃŒ๋งŒ์„ ์ œํ•œ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ๋ณธ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ์œ ๋„๋œ, ์ด๋ฆ„์„ ๊ฐ€์ง€๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ”

  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ์ž๋ฃŒ์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์„ค์ •ํ•จ์œผ๋กœ์จ ๋ณด์•ˆ+1
  • ๋™์ผ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ์‚ฌ์šฉ์ž์˜ ์ƒ์ดํ•œ ์‘์šฉ์ด๋‚˜ ์š”๊ตฌ๋ฅผ ์ง€์›

๊ธฐ๋ณธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ํฌํ•จํ•œ ์†์„ฑ(์—ด) ์ง‘ํ•ฉ์œผ๋กœ ๋ทฐ๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

  • ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ ๋…๋ฆฝ์„ฑ์„ ์ œ๊ณต
  • ๋…๋ฆฝ์ ์œผ๋กœ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ

๋ทฐ์˜ ์ •์˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ(ALTER VIEW)์€ ๋ถˆ๊ฐ€๋Šฅ

  • CREATE VIEW โ†” DROP VIEW RESTRICT/CASCADE
  • ๋ทฐ๋กœ ์ƒˆ๋กœ์šด ๋ทฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‹ค

https://coding-factory.tistory.com/224

๋ฝ๊ณผ ๋ฐ๋“œ๋ฝ OS

๋™๊ธฐํ™” ๋ฌธ์ œ

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

https://cheetile.tistory.com/entry/OS-Race-Condition-Deadlock-Starvation-Livelock

๋ฝ๊ณผ ๋ฐ๋“œ๋ฝ DB

๋ฐ๋“œ๋ฝ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€์ ์—์„œ ํŠธ๋žœ์žญ์…˜๊ฐ„ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ
  • ๋‘๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€์ง„ ๋ฆฌ์†Œ์Šค์˜ ๋ฝ์„ ํš๋“ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•จ

๋ฝ

  • ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•œ๊ฐ€์ง€
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฝ์€ ๋‘˜ ์ด์ƒ์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ™์€ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
  • ๋ฝ์ด ๊ฑธ๋ฆฐ ๋ฐ์ดํ„ฐ๋Š” ํ•ด์ œ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๊ณ  COMMIT ์ด๋‚˜ ROLLBACK๊ตฌ๋ฌธ ์‹คํ–‰ ํ›„ ํ•ด์ œ๋œ๋‹ค.
    *blocking: ๋ฝ๋ผ๋ฆฌ ๊ฒฝํ•ฉ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ(๋ ˆ์ด์Šค ์ปจ๋””์…˜?) ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฉˆ์ถ˜ ์ƒํƒœ
    โ†’ commit/ rollback์œผ๋กœ ํ•ด๊ฒฐ
    • ๊ณต์œ ๋ฝ(Read Lock)
      ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์„ ๋•Œ ์‚ฌ์šฉ select
      ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅ
    • ๋ฐฐํƒ€์ ๋ฝ(Write Lock)
      ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ insert, update, delete
      ํ•ด์ œ๋˜๊ธฐ ์ „์—๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค
    • ๋‚ด์žฌ๋ฝ(Intent Lock) - IS, IX, SIX
      ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ๋ฒ”์œ„์— ๋ฝ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒŒ์•…
      row / page / table(indexํฌํ•จ) / database(DB๋ณต๊ตฌ์‹œ)
      *lock escalation: ๋ฝ์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ธฐ๋•Œ๋ฌธ์— ํ•˜์œ„๋ฝ์˜ ๋น„์œจ์ด ์ผ์ • ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„œ๋ฉด ์ƒ์œ„๋ฝ์„ ์ƒ์„ฑํ•จ
      โ†’ level์ด ๋‚ฎ์„ ์ˆ˜๋ก ๋™์‹œ์„ฑ์ด ์ข‹์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์€ ๋‚ฎ์•„์ง„๋‹ค

https://velog.io/@koo8624/Database

  • 0220 TIL ๋ฝ๊ณผ ๋ฐ๋“œ๋ฝ DB๊ด€์ ์—์„œ
  • 0220 TIL ๋ฝ๊ณผ ๋ฐ๋“œ๋ฝ OS๊ด€์ ์—์„œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œํ’€๊ธฐ

โžก๏ธํฐ์ผ“๋ชฌ

def solution(nums):
    return min(len(nums)/2,len(set(nums)))

๋‘˜์ค‘ ์ž‘์€ ๊ฒŒ ๋‹ต์ด ๋  ๋• if ๋ถ€๋“ฑํ˜ธ ์“ฐ์ง€๋ง๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ min์„ ์“ฐ์ž..
์•„๋‹˜ else๊นŒ์ง€ ๊ฐˆ ๊ฒƒ๋„ ์—†์ด ๊ทธ๋ƒฅ ์ด๋Ÿฐ ๊ฒƒ๋„..?

def solution(nums):
    if len(list(set(nums))) < len(nums)/2:
        return len(list(set(nums)))
    return len(nums)/2
profile
looooggi

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