[๋ฐ๋ธŒ์ฝ”์Šค] RDBMS ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ •๊ทœํ™” ์ดํ•ด(RDBMS vs NoSQL, PK, FK)

2025. 4. 25. 05:34ยท๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL

1์ฐจ ๋‹จ์œ„๊ธฐ๊ฐ„ ๊ฐ•์˜๋ฅผ ๋ชจ๋‘ ์ˆ˜๊ฐ•ํ–ˆ๋‹ค.๐Ÿ‘๐Ÿ‘๐Ÿ‘๐Ÿ‘


๐Ÿ’ฝ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ , ํšจ์œจ์ ์œผ๋กœ ์กฐํšŒ, ์ˆ˜์ •, ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์‹œ์Šคํ…œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ •ํ˜•ํ™”๋œ ํ‹€์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ณ  ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์ •๋ณด์˜ ๊ตฌ์กฐํ™”๋œ ์ง‘ํ•ฉ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์˜ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

DBMS

Database Management System, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์šด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด

์‚ฌ์šฉ์ž๋Š” ์ง์ ‘ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š” ๋Œ€์‹ , DBMS์—์„œ SQL์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค. ์šด์˜์ฒด์ œ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, DBMS๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๋œ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ด€๋ฆฌ์ž ์—ญํ• ์„ ํ•œ๋‹ค.

 

์ฃผ์š” ๊ธฐ๋Šฅ

  • SQL ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ(SELECT, INSERT, UPDATE, DELETE ๋“ฑ)
  • ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ฐ ๋ณด์•ˆ ๊ด€๋ฆฌ
  • ํŠธ๋žœ์žญ์…˜ ๋ฐ ๋™์‹œ์„ฑ ์ œ์–ด
  • ๋ฐฑ์—… ๋ฐ ๋ณต์› ๊ธฐ๋Šฅ
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์ œ์•ฝ์กฐ๊ฑด ๊ด€๋ฆฌ

โญ ํŠธ๋žœ์žญ์…˜
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ์ž‘์—… ๋‹จ์œ„๋กœ, ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

โญ ๋™์‹œ์„ฑ ์ œ์–ด
์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ์กฐ์ •ํ•˜๋Š” ๊ธฐ๋ฒ•
โญ ACID
ํŠธ๋žœ์žญ์…˜์˜ ์•ˆ์ •์„ฑ๊ณผ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋„ค ๊ฐ€์ง€ ํ•ต์‹ฌ ์†์„ฑ
- ์›์ž์„ฑ(Atomicity)
- ์ผ๊ด€์„ฑ(Consistency)
- ๊ฒฉ๋ฆฌ์„ฑ(Isolation)
- ์ง€์†์„ฑ(Durability)

 

RDBMS vs NoSQL

DBMS์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(RDBMS)์™€ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(NoSQL DBMS)์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์œ ํ˜•์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹, ์ €์žฅ ๋ฐฉ์‹, ์‚ฌ์šฉ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

 

ํŠน์ง• RDBMS NoSQL 
๋ฐ์ดํ„ฐ ๋ชจ๋ธ ํ…Œ์ด๋ธ”(ํ–‰๊ณผ ์—ด)์˜ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ ํ‚ค-๊ฐ’, ๋ฌธ์„œ, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ
๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ํ˜•์‹์ด ์—„๊ฒฉํ•˜๋‹ค. ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ, ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ง€์›
์ฟผ๋ฆฌ ์–ธ์–ด SQL(Structured Query Language) SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ (๊ฐ DBMS๋ณ„๋กœ ์ฟผ๋ฆฌ ์–ธ์–ด ๋‹ค๋ฆ„)
ACID ํŠน์„ฑ ์ง€์›  ์ผ๋ถ€ ์ง€์›, ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ BASE(Basically Available, Soft state, Eventually consistent) ๋ชจ๋ธ์„ ๋”ฐ๋ฆ„
ํ™•์žฅ์„ฑ ์ˆ˜์ง ํ™•์žฅ(๊ธฐ์กด ์„œ๋ฒ„ ์„ฑ๋Šฅ ๊ฐ•ํ™”) ์ˆ˜ํ‰ ํ™•์žฅ(์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋Š˜๋ ค์„œ ํ™•์žฅ)
์ผ๊ด€์„ฑ ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ(๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€) ์•ฝํ•œ ์ผ๊ด€์„ฑ(๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์ด ๋А์Šจํ•˜๊ฒŒ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Œ)
์„ฑ๋Šฅ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ. ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๊ฐ•ํ•˜๊ณ , ๋น ๋ฅธ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ œ๊ณต
ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ณต์žกํ•œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐ ๋ณต์žกํ•œ JOIN ์—ฐ์‚ฐ ์ง€์› ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์ด ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, JOIN ์—ฐ์‚ฐ์ด ์—†์Œ
๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋†’์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ์ œ์•ฝ ์กฐ๊ฑด(๊ธฐ๋ณธํ‚ค, ์™ธ๋ž˜ํ‚ค, ์œ ๋‹ˆํฌ ๋“ฑ) ์ง€์› ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์€ ์ œํ•œ์ , ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์Œ
์‚ฌ์šฉ ์‚ฌ๋ก€ ๊ธˆ์œต, ํšŒ๊ณ„ ์‹œ์Šคํ…œ, ์ „ํ†ต์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ, ์†Œ์…œ ๋ฏธ๋””์–ด, ๋Œ€๊ทœ๋ชจ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋กœ๊ทธ ๋ถ„์„ ๋“ฑ
์˜ˆ์‹œ
MySQL, PostgreSQL, Oracle, SQL Server MongoDB, Redis, Cassandra, Neo4j, CouchDB, DynamoDB ๋“ฑ
๐Ÿ‘‰RDBMS๋Š” ๊ณ ์ •๋œ ์Šคํ‚ค๋งˆ์™€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋ฉฐ, SQL์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
๐Ÿ‘‰NoSQL์€ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ์™€ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์ˆ˜ํ‰ ํ™•์žฅ์ด ์šฉ์ดํ•˜๊ณ  ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. ํ™•์žฅ์„ฑ์— ๊ฐ•์ ์„ ๋ณด์ธ๋‹ค!

 

๋Œ€ํ‘œ์ ์ธ DBMS ์ข…๋ฅ˜

DBMS ์œ ํ˜• ๊ตฌ์กฐ ํŠน์ง•
Oracle RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ์ƒ์šฉ DB, ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ์— ๊ฐ•ํ•จ, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ์šฐ์ˆ˜
MySQL RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ์˜คํ”ˆ์†Œ์Šค, ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ„, LAMP ์Šคํƒ์˜ ํ•ต์‹ฌ
PostgreSQL RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ์˜คํ”ˆ์†Œ์Šค, ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•จ(JSON ์ง€์›, ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๋“ฑ)
Microsoft SQL Server RDMBS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ Microsoft ์ƒํƒœ๊ณ„์™€ ํ†ตํ•ฉ ์šฐ์ˆ˜, GUI ํˆด ํ’๋ถ€
MariaDB RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ MySQL์—์„œ ํฌํฌ๋œ ์˜คํ”ˆ์†Œ์Šค, MySQL๊ณผ ํ˜ธํ™˜์„ฑ ๋†’์Œ
SQLite RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ์ž„๋ฒ ๋””๋“œํ˜•, ์„œ๋ฒ„ ์—†์ด ํŒŒ์ผ ํ•˜๋‚˜๋กœ ๋™์ž‘, ๋ชจ๋ฐ”์ผ ์•ฑ์— ๋งŽ์ด ์‚ฌ์šฉ
MongoDB NoSQL ๋ฌธ์„œ ๊ธฐ๋ฐ˜ JSON ํ˜•์‹(Document) ์ €์žฅ, ์œ ์—ฐํ•œ ๊ตฌ์กฐ, ์Šคํ‚ค๋งˆ ์—†์Œ
Redis NoSQL ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜, ๋น ๋ฅธ ์†๋„, ์บ์‹œ์šฉ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ
Elasticsearch NoSQL ์—ญ์ƒ‰์ธ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ํŠนํ™”, ๋กœ๊ทธ ๋ถ„์„,๊ฒ€์ƒ‰ ์—”์ง„ ๊ตฌ์ถ•์— ๋งŽ์ด ์‚ฌ์šฉ
IBM DB2 RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ๊ธฐ์—…์šฉ ์‹œ์Šคํ…œ์— ์ ํ•ฉ, IBM ํ”Œ๋žซํผ๊ณผ ์ž˜ ์—ฐ๋™
Snowflake ํด๋ผ์šฐ๋“œ ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋ถ„์„ DB, ๋น…๋ฐ์ดํ„ฐ์™€ BI ํˆด ์—ฐ๋™ ์ตœ์ ํ™”
Microsoft Access RDBMS ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ๋ฐ์Šคํฌํƒ‘ ์ „์šฉ ์†Œํ˜• DB, ์†Œ๊ทœ๋ชจ ์‚ฌ๋‚ด ์‹œ์Šคํ…œ์šฉ

๐Ÿ”—RDBMS

Relational DBMS, ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ , ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์˜ DBMS

RDBMS๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰(row)์™€ ์—ด(column)๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๋ฉฐ, ๊ฐ ํ…Œ์ด๋ธ”์€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๋ฉด์„œ๋„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ๊ด€๊ณ„๋ฅผ ๋งบ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๊ด€๊ณ„์ง€ํ–ฅ์  ํŠน์ง•

RDBMS์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. ์ด ๊ตฌ์กฐ๋Š” ์‹ค์ œ ์‚ฌ๋žŒ์ด ๊ธฐ์–ต์„ ๋– ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹๊ณผ ๋‹ฎ์•„ ์ž‡๋‹ค.

์˜ˆ๋ฅผ ํ‹€์–ด, ๋ฐฐ์šฐ์˜ ์ด๋ฆ„์„ ์ฐพ๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž

1. ์ž‘ํ’ˆ๋ช…์„ ๊ฒ€์ƒ‰ํ•˜๊ณ 

2. ๋“ฑ์žฅ์ธ๋ฌผ์„ ํ™•์ธํ•œ ๋’ค,

3. ๋“ฑ์žฅ์ธ๋ฌผ์˜ ์‚ฌ์ง„์„ ๋ณด๊ณ ,

4. ๊ทธ ๋ฐฐ์šฐ์˜ ์ด๋ฆ„์„ ์ฐพ์•„๋‚ธ๋‹ค.

์ž‘ํ’ˆ -> ๋“ฑ์žฅ์ธ๋ฌผ -> ์ด๋ฏธ์ง€ -> ์ด๋ฆ„์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ด€๊ณ„ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰์ด๋‹ค.

RDBMS๋Š” ์ด์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ํ‚ค์—์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ ์ด์–ด์ง€๋Š” ์—ฐ๊ด€ ํƒ์ƒ‰์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š” ๊ตฌ์กฐ์ด๋‹ค!

  • NoSQL์ฒ˜๋Ÿผ ๋‹จ์ผ ์ปฌ๋ ‰์…˜/๋ฌธ์„œ ๊ธฐ๋ฐ˜ DB์—์„œ๋Š” ์ด๋Ÿฐ ์—ฐ๊ด€๋œ ํƒ์ƒ‰์ด ์–ด๋ ต๊ฑฐ๋‚˜, ๋ช…์‹œ์ ์œผ๋กœ ์ค‘์ฒฉํ•˜๊ฑฐ๋‚˜ ์ค‘๋ณต ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ˜๋ฉด, RDBMS๋Š” ์ด ๊ณผ์ •์„ "๊ด€๊ณ„ํ˜• ๋ชจ๋ธ"๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

RDBMS์˜ ์žฅ์ 

  • ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๊ณ„ํ˜•์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต์ด ์ค„๊ณ  ๊ตฌ์กฐ๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค.
  • SQL๋กœ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.(JOIN, ์ง‘๊ณ„, ์ •๋ ฌ ๋“ฑ)
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ(PK, FK ๋“ฑ)์„ ํ†ตํ•ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.
  • ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค.

๐Ÿ—๏ธKey

Primary Key(๊ธฐ๋ณธ ํ‚ค)

ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ํ–‰(row)๋ฅผ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ปฌ๋Ÿผ

Primary Key๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๊ณ , NULL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. RDBMS์—์„œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์€ PK๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ , ์ด ํ‚ค๋Š” ํ•ด๋‹น ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค.

์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”
+----------+----------+----------+
| user_id  | name     | password |
+----------+----------+----------+
| test01   | ํ™๊ธธ๋™   | 1234     |
| test02   | ๊น€์ฒ ์ˆ˜   | 5678     |
+----------+----------+----------+
  • ์—ฌ๊ธฐ์„œ user_id๋Š” Primary Key ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๋‘ ์‚ฌ์šฉ์ž ์ค‘ ๊ฐ™์€ ID๋Š” ์žˆ์„ ์ˆ˜ ์—†๋‹ค!

 

๋ฐ์ดํ„ฐ ์ค‘๋ณต

๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์œ„์น˜์— ๋ฐ˜๋ณต ์ €์žฅ๋˜๋Š” ํ˜„์ƒ์œผ๋กœ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋Š” ์ˆ˜์ • ์‹œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ์‹ค์ˆ˜๋กœ ๋ˆ„๋ฝ๋  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด RDBMS์—์„œ๋Š” ์ •๊ทœํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ •๊ทœํ™”

์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ ์žˆ๋Š” ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •

์ •๊ทœํ™”๋Š” "๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ํ•œ ๊ณณ์—๋งŒ ์ €์žฅํ•œ๋‹ค"๋Š” ์›์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  Foreign Key๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•œ๋‹ค.
์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋Š” ๋” ๊น”๋”ํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์ค‘๋ณต์ด ์ œ๊ฑฐ๋˜๊ณ , ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ •๊ทœํ™” ์ „

+---------+------------+------------+------------------+
| post_id | title      | author     | author_email     |
+---------+------------+------------+------------------+
| 1       | ์•ˆ๋…•       | ํ™๊ธธ๋™     | hong@test.com    |
| 2       | ๋˜์•ˆ๋…•     | ํ™๊ธธ๋™     | hong@test.com    |
+---------+------------+------------+------------------+

์ •๊ทœํ™” ํ›„

Users
+---------+------------+------------------+
| user_id | name       | email            |
+---------+------------+------------------+
| u1      | ํ™๊ธธ๋™     | hong@test.com    |
+---------+------------+------------------+

Posts
+---------+------------+----------+
| post_id | title      | user_id  |
+---------+------------+----------+
| 1       | ์•ˆ๋…•       | u1       |
| 2       | ๋˜์•ˆ๋…•     | u1       |
+---------+------------+----------+

โœ…์žฅ์ 

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ œ๊ฑฐ
  • ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ
  • ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

โŒ๋‹จ์ 

  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ (JOIN) ๋ฐœ์ƒ
  • ๊ณผ๋„ํ•œ ์ •๊ทœํ™” ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ(์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋‚˜ ๊ณ ์† ์กฐํšŒ์—๋Š” ๋น„ํšจ์œจ์ )

 

Foreign Key(์™ธ๋ž˜ํ‚ค)

๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ Primary Key๋ฅผ ์ฐธ์กฐํ•˜์—ฌ, ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ํ‚ค

Foreign key๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ๊ด€๊ณ„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค!

      Users
      +---------+--------+
   +- | user_id | name   |
   |  +---------+--------+
   |  | test01  | ํ™๊ธธ๋™ |
   |  | test02  | ๊น€์ฒ ์ˆ˜ |
   |  +---------+--------+
   |
   |  Channels
   |  +-------------+------------+----------+
   +--| channel_id  | title      | user_id  |
      +-------------+------------+----------+
      | ch01        | ์—ฌํ–‰์ฑ„๋„    | test01   |
      | ch02        | ๋จน๋ฐฉ์ฑ„๋„    | test01   |
      | ch03        | ์ฝ”๋”ฉ์ฑ„๋„    | test02   |
      +-------------+------------+----------+
  • Channels.user_id๋Š” User.user_id๋ฅผ ์ฐธ์กฐํ•˜๋Š” Foreign Key

 

์—ฐ๊ด€๊ด€๊ณ„

ํ…Œ์ด๋ธ” ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ •์˜ํ•˜๋Š” ๊ตฌ์กฐ

  • 1:1 ๊ด€๊ณ„: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜์™€๋งŒ ์—ฐ๊ฒฐ
  • 1:N ๊ด€๊ณ„: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์™€ ์—ฐ๊ฒฐ
  • M:N ๊ด€๊ณ„: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์™€ ์—ฐ๊ฒฐ(์ค‘๊ฐ„ ํ…Œ์ด๋ธ” ํ•„์š”)
ํšŒ์›(User)
+----------+----------+----------+
| user_id  | password | name     |
+----------+----------+----------+
| testId1  | 1234     | tester1  |
| testId2  | 5678     | tester2  |
+----------+----------+----------+

์ฑ„๋„(Channel)
+----+--------------+----------+---------+-----------+
| id | title        | user_id  | sub_num | video_num |
+----+--------------+----------+---------+-----------+
| 1  | channel1     | testId1  | 1       | 3         |
| 2  | channel2     | testId1  | 29      | 34        |
| 3  | channel3     | testId2  | 1000    | 100       |
+----+--------------+----------+---------+-----------+
  • user_id๋Š” ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ PK์ด์ž, ์ฑ„๋„ ํ…Œ์ด๋ธ”์˜ FK๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • 1๋ช…์˜ ์œ ์ €๊ฐ€ ์—ฌ๋Ÿฌ ์ฑ„๋„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, 1:N ๊ด€๊ณ„๋‹ค.

๐ŸฌMySQL workbench

MySQL ๋ฐ MariaDB๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” GUI ํˆด

๋น„๋ก MariaDB๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„, Workbench๋Š” MySQL๊ณผ์˜ ๋†’์€ ํ˜ธํ™˜์„ฑ ๋•๋ถ„์— ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์ด ์ •์ƒ ์ž‘๋™ํ•œ๋‹ค.
ERD(Entity-Relationship Diagram)๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.


๐Ÿ“Œ ์š”์•ฝ

- DBMS๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด
- RDBMS๋Š” ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€๊ณ„๋ฅผ ํ™œ์šฉํ•ด ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๋ฌด๊ฒฐ์„ฑ์„ ๋†’์ธ๋‹ค
- Primary Key๋Š” ํ–‰์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„, Foreign Key๋Š” ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ์ •์˜
- ์ •๊ทœํ™”๋Š” ์ค‘๋ณต ์ œ๊ฑฐ์™€ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ๊ณผ์ •
- Workbench๋Š” MySQL ๊ณ„์—ด DB ์‹œ๊ฐํ™” ๊ด€๋ฆฌ ํˆด


Supabase(PostgreSQL ๊ธฐ๋ฐ˜)๋‚˜ DynamoDB ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ์ž์ฃผ ์จ์™”์ง€๋งŒ, ์‚ฌ์‹ค DBMS์˜ ์ข…๋ฅ˜๋‚˜ ๊ทธ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๊นŠ์ด ์ƒ๊ฐํ•ด๋ณธ ์ ์ด ์—†์—ˆ๋‹ค. ๊ทธ๋ƒฅ "๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๋ฉด ๋˜์ง€" ์ •๋„๋กœ๋งŒ ์ธ์‹ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ด๋ฒˆ์— ์ •๋ฆฌํ•˜๋ฉด์„œ RDBMS์™€ NoSQL ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด, ๋Œ€ํ‘œ์ ์ธ DBMS๋“ค์ด ์–ด๋–ค ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ์กฐ๊ธˆ์”ฉ ๊ฐ์ด ์žกํžˆ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. ํŠนํžˆ ์ •๊ทœํ™” ๊ฐœ๋…์ด๋‚˜ ๊ด€๊ณ„ํ˜• ๊ตฌ์กฐ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š”์ง€๋ฅผ ์‹ค์Šต์„ ํ†ตํ•ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.

 

์ด์ œ๋Š” ๋‹จ์ˆœํžˆ DB๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ค๊ณ„๋ถ€ํ„ฐ ๋ชฉ์ ์— ๋”ฐ๋ผ ์–ด๋–ค DBMS๋ฅผ ์„ ํƒํ• ์ง€๊นŒ์ง€ ๋” ๋„“์€ ๊ด€์ ์—์„œ ๊ณ ๋ฏผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐ๋ธŒ์ฝ”์Šค] GUI ํ™œ์šฉ๊ณผ API ์—ฐ๋™์œผ๋กœ ๋ฐฐ์šฐ๋Š” DB ํ™œ์šฉ ์‹ฌํ™”  (0) 2025.05.01
[๋ฐ๋ธŒ์ฝ”์Šค] ์‚ฌ์šฉ์ž-๊ฒŒ์‹œ๊ธ€ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” ํ…Œ์ด๋ธ” ์„ค๊ณ„์™€ ์ปฌ๋Ÿผ ์†์„ฑ, ์ œ์•ฝ์กฐ๊ฑด  (0) 2025.04.28
[๋ฐ๋ธŒ์ฝ”์Šค] Express ๋ผ์šฐํ„ฐ ๋ชจ๋“ˆํ™”์™€ userId๋ฅผ ํ™œ์šฉํ•œ API ๊ตฌ์กฐ ๊ฐœ์„   (0) 2025.04.23
[๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”  (1) 2025.04.22
[๋ฐ๋ธŒ์ฝ”์Šค] HTTP ์ƒํƒœ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ณ ๋„ํ™”(+ํ•ธ๋“ค๋Ÿฌ, ๋ฆฌ์Šค๋„ˆ, ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ)  (0) 2025.04.16
'๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค/TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [๋ฐ๋ธŒ์ฝ”์Šค] GUI ํ™œ์šฉ๊ณผ API ์—ฐ๋™์œผ๋กœ ๋ฐฐ์šฐ๋Š” DB ํ™œ์šฉ ์‹ฌํ™”
  • [๋ฐ๋ธŒ์ฝ”์Šค] ์‚ฌ์šฉ์ž-๊ฒŒ์‹œ๊ธ€ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” ํ…Œ์ด๋ธ” ์„ค๊ณ„์™€ ์ปฌ๋Ÿผ ์†์„ฑ, ์ œ์•ฝ์กฐ๊ฑด
  • [๋ฐ๋ธŒ์ฝ”์Šค] Express ๋ผ์šฐํ„ฐ ๋ชจ๋“ˆํ™”์™€ userId๋ฅผ ํ™œ์šฉํ•œ API ๊ตฌ์กฐ ๊ฐœ์„ 
  • [๋ฐ๋ธŒ์ฝ”์Šค] ๋นˆ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ํŒจํ„ด๊ณผ app.route()๋ฅผ ํ™œ์šฉํ•œ Express API ๊ตฌ์กฐํ™”
ํ‚ํ‚์ž‰
ํ‚ํ‚์ž‰
๋ฟŒ๋ก ํŠธ ๊ฐœ๋ฐœ์ž(์ง€๋ง์ƒ)์˜ ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ
  • ํ‚ํ‚์ž‰
    monicx.dev
    ํ‚ํ‚์ž‰
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (173)
      • ๐Ÿ–ฅ๏ธdevelop (2)
        • Github (2)
        • Frontend (4)
        • Backend (5)
        • Mobile (0)
        • CS (0)
        • Three.js (0)
        • Docker (2)
      • ๐Ÿ“šbook (9)
        • npm Deep Dive (4)
      • ๐Ÿ“•review (33)
        • ์ฑ… (24)
        • ํ–‰์‚ฌ (1)
        • ํšŒ๊ณ  (2)
      • โญproject (5)
        • petiary (2)
        • ๆšŽ่ฉ  (0)
        • ์ธํ„ด (2)
      • ๐Ÿ˜ถ‍๐ŸŒซ๏ธalgorithm (0)
      • ๐Ÿ’กtips (1)
      • ๐Ÿ˜Ždaily (10)
      • ๐Ÿ•น๏ธgame (0)
      • ๐Ÿ•Š๏ธํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค (87)
        • TIL (61)
        • ํ”„๋กœ์ ํŠธ (18)
        • ํšŒ๊ณ  (8)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
  • ๋งํฌ

    • ๋ฒจ๋กœ๊ทธ
  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํ‚ํ‚์ž‰
[๋ฐ๋ธŒ์ฝ”์Šค] RDBMS ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์ •๊ทœํ™” ์ดํ•ด(RDBMS vs NoSQL, PK, FK)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”