Home > CS > 2024 > πŸ’Ύ [CS] RDBλž€?

πŸ’Ύ [CS] RDBλž€?
CS

πŸ’Ύ [CS] RDBλž€?

RDBλŠ” Relational Databas(κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€) λ₯Ό 쀄인 μš©μ–΄λ‘œ, κ΄€κ³„ν˜• λͺ¨λΈμ„ 기반으둜 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

RDBμ—μ„œλŠ” 데이터λ₯Ό ν…Œμ΄λΈ” ν˜•νƒœλ‘œ μ €μž₯ν•˜λ©°, 각 ν…Œμ΄λΈ”μ€ ν–‰(row) κ³Ό μ—΄(column) 둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό ν‚€(Key) λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜ν•˜κ³ , 이λ₯Ό 톡해 데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  검색할 수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ RDB의 μ£Όμš” νŠΉμ§•.

1. ν…Œμ΄λΈ” ν˜•μ‹μ˜ 데이터 μ €μž₯.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” 데이터λ₯Ό ν…Œμ΄λΈ”(Table) 둜 μ €μž₯ν•©λ‹ˆλ‹€.
  • ν…Œμ΄λΈ”μ€ λ°μ΄ν„°μ˜ ν•œ μœ ν˜•μ„ λ‚˜νƒ€λ‚΄λ©°, ν…Œμ΄λΈ” μ•ˆμ— μ—¬λŸ¬ λ ˆμ½”λ“œ(ν–‰, row)κ°€ μ €μž₯λ©λ‹ˆλ‹€.
  • 각 ν–‰(row)은 ν…Œμ΄λΈ”μ˜ 데이터 ν•­λͺ©μ„ λ‚˜νƒ€λ‚΄κ³ , μ—΄(column)은 λ°μ΄ν„°μ˜ 속성을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

2. 관계(Relation)

  • RDBμ—μ„œ ν…Œμ΄λΈ” κ°„μ˜ κ΄€κ³„λŠ” Primary Key(κΈ°λ³Έ ν‚€) 와 Foreign Key(μ™Έλž˜ ν‚€) λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •μ˜λ©λ‹ˆλ‹€.
  • κΈ°λ³Έ ν‚€(Primary Key)λŠ” 각 ν…Œμ΄λΈ”μ—μ„œ 각 ν–‰(row)을 κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” 값이며, μ™Έλž˜ ν‚€(Foreign Key)λŠ” λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€(Primary Key)λ₯Ό μ°Έμ‘°ν•˜λŠ” κ°’μž…λ‹ˆλ‹€.
  • 이 ν‚€λ₯Ό 톡해 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ„€μ •ν•˜κ³ , λ°μ΄ν„°μ˜ 일관성과 무결성을 보μž₯ν•©λ‹ˆλ‹€.

3. SQL(Structured Query Language) μ‚¬μš©.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” SQL을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ‘°μž‘ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • SQL은 데이터λ₯Ό μ‚½μž…, 쑰회, μˆ˜μ •, μ‚­μ œν•˜λŠ” λͺ…λ Ήμ–΄λ₯Ό μ œκ³΅ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰(ν…Œμ΄λΈ” 생성, μˆ˜μ •, μ‚­μ œ λ“±)λ₯Ό μ •μ˜ν•˜λŠ” μ–Έμ–΄μž…λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ SQLμ΄λž€?

4. 데이터 무결성.

  • RDBλŠ” 데이터 무결성(Integrity) 을 보μž₯ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ μ œμ•½ 쑰건을 μ§€μ›ν•©λ‹ˆλ‹€.
  • 무결성 μ œμ•½ μ‘°κ±΄μœΌλ‘œλŠ” Primary Key, Foreign Key, Unique μ œμ•½ 쑰건 등이 μžˆμŠ΅λ‹ˆλ‹€.
  • μ΄λŸ¬ν•œ μ œμ•½ 쑰건을 톡해 λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. ACID 속성.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” νŠΈλžœμž­μ…˜ μ²˜λ¦¬μ—μ„œ ACID 속성을 μ€€μˆ˜ν•©λ‹ˆλ‹€.
    • μ›μžμ„±(Atomicity) : νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—…μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜κ±°λ‚˜, 그렇지 μ•ŠμœΌλ©΄ 아무 것도 μ™„λ£Œλ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • 일관성(Consistency) : νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλœ ν›„ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 항상 μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • 고립성(Isolation) : λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” νŠΈλžœμž­μ…˜λ“€μ€ μ„œλ‘œμ˜ μž‘μ—…μ— 영ν–₯을 주지 μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
    • 지속성(Durability) : νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜λ©΄, κ·Έ κ²°κ³ΌλŠ” 영ꡬ적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜λ©λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ νŠΈλžœμž­μ…˜

2️⃣ RDB의 μ£Όμš” κ°œλ….

1. ν…Œμ΄λΈ”(Table)

  • ν…Œμ΄λΈ”μ€ RDB의 κ°€μž₯ 기본적인 μ €μž₯ λ‹¨μœ„μž…λ‹ˆλ‹€.
  • ν…Œμ΄λΈ”μ€ ν–‰(row)κ³Ό μ—΄(colum)둜 κ΅¬μ„±λ˜λ©°, 각 ν–‰(row)은 ν•˜λ‚˜μ˜ λ ˆμ½”λ“œ(데이터 ν•­λͺ©)λ₯Ό, 각 μ—΄(column)은 데이터 속성을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, UsersλΌλŠ” ν…Œμ΄λΈ”μ—λŠ” μ‚¬μš©μž 정보가 μ €μž₯λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ Users ν…Œμ΄λΈ”

id name email
1 Kobe kobe@example.com
2 MinSeond minseong@example.com

2. κΈ°λ³Έ ν‚€(Primary Key)

  • ν…Œμ΄λΈ”μ—μ„œ 각 λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” μ—΄μž…λ‹ˆλ‹€.
  • κΈ°λ³Έ ν‚€λŠ” 쀑볡될 수 μ—†μœΌλ©°, null 값을 κ°€μ§ˆ 수 μ—†μŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Users ν…Œμ΄λΈ”μ—μ„œ id 열이 κΈ°λ³Έ ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

3. μ™Έλž˜ ν‚€(Foreign Key)

  • ν•œ ν…Œμ΄λΈ”μ˜ 열이 λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ°Έμ‘°ν•  λ•Œ, 이λ₯Ό μ™Έλž˜ 킀라고 ν•©λ‹ˆλ‹€.
  • μ™Έλž˜ ν‚€λ₯Ό 톡해 두 ν…Œμ΄λΈ” κ°„μ˜ 관계가 μ„€μ •λ©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Orders ν…Œμ΄λΈ”μ˜ user_id 열은 Users ν…Œμ΄λΈ”μ˜ id 열을 μ°Έμ‘°ν•˜λŠ” μ™Έλž˜ ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ Orders ν…Œμ΄λΈ” (μ™Έλž˜ ν‚€λ₯Ό μ‚¬μš©)

order_id user_id product
1001 1 Laptop
1002 2 Smartphone
  • μ—¬κΈ°μ„œ user_idλŠ” Users ν…Œμ΄λΈ”μ˜ idλ₯Ό μ°Έμ‘°ν•˜λŠ” μ™Έλž˜ ν‚€(Foreign Key)μž…λ‹ˆλ‹€.

4. 관계(Relation)

  • ν…Œμ΄λΈ” κ°„μ˜ κ΄€κ³„λŠ” 1:1, 1(μΌλŒ€λ‹€), N(λ‹€λŒ€λ‹€) κ΄€κ³„λ‘œ μ •μ˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 1:1 관계 : ν•œ ν…Œμ΄λΈ”μ˜ ν•˜λ‚˜μ˜ λ ˆμ½”λ“œκ°€ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ ν•˜λ‚˜μ˜ λ ˆμ½”λ“œμ™€λ§Œ μ—°κ΄€λ©λ‹ˆλ‹€.
    • 1 관계 : ν•œ ν…Œμ΄λΈ”μ˜ ν•˜λ‚˜μ˜ λ ˆμ½”λ“œκ°€ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ μ—¬λŸ¬ λ ˆμ½”λ“œμ™€ μ—°κ΄€λ©λ‹ˆλ‹€.
    • N 관계 : 두 ν…Œμ΄λΈ” κ°„μ˜ μ—¬λŸ¬ λ ˆμ½”λ“œκ°€ μ„œλ‘œ μ—¬λŸ¬ λ ˆμ½”λ“œμ™€ μ—°κ΄€λ©λ‹ˆλ‹€. 이λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ—°κ²° ν…Œμ΄λΈ”μ΄ μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ RDB의 μ˜ˆμ‹œ

1. ν…Œμ΄λΈ” 생성

CREATE TABLE Users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

2. 데이터 μ‚½μž…

INSERT INTO Users (id, name, email) VALUES (1, 'Kobe', 'kobe@email.com');

3. 데이터 쑰회

SELECT * FROM Users WHERE id = 1;

4. ν…Œμ΄λΈ” κ°„μ˜ 관계 μ„€μ •

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    product VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCE Users(id)
);
  • 이 μ˜ˆμ‹œμ—μ„œλŠ” Orders ν…Œμ΄λΈ”μ˜ user_idκ°€ Users ν…Œμ΄λΈ”μ˜ idλ₯Ό μ°Έμ‘°ν•˜λŠ” μ™Έλž˜ ν‚€λ‘œ μ„€μ •λ©λ‹ˆλ‹€.

4️⃣ RDB의 μž₯점.

1. 데이터 일관성.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” SQL을 톡해 λ°μ΄ν„°μ˜ 무결성과 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • κΈ°λ³Έ ν‚€(Primary Key)와 μ™Έλž˜ ν‚€(Foreign Key)λ₯Ό 톡해 데이터 κ°„μ˜ 관계λ₯Ό κ΄€λ¦¬ν•˜κ³ , 쀑볡 데이터λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.

2. 데이터 무결성 보μž₯.

  • 데이터 무결성 μ œμ•½ 쑰건(Primary Key, Foreign Key, Unique λ“±)을 톡해 λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 보μž₯ν•©λ‹ˆλ‹€.

3. ν‘œμ€€ν™”λœ 쿼리 μ–Έμ–΄.

  • SQLμ΄λΌλŠ” ν‘œμ€€ν™”λœ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ‘°μž‘ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹€μ–‘ν•œ RDBMSμ—μ„œ SQL을 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ²”μš©μ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€.

4. λ³΅μž‘ν•œ 쿼리 처리.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 쑰인(Join) 연산을 톡해 μ—¬λŸ¬ ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό κ²°ν•©ν•˜μ—¬ λ³΅μž‘ν•œ 쿼리λ₯Ό μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. ACID νŠΈλžœμž­μ…˜ 지원.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” ACID 속성을 μ€€μˆ˜ν•˜μ—¬ νŠΈλžœμž­μ…˜μ˜ 일관성을 보μž₯ν•©λ‹ˆλ‹€.
    • μ΄λŠ” κΈˆμœ΅μ‹œμŠ€ν…œμ΄λ‚˜ μ€‘μš”ν•œ 데이터 μ²˜λ¦¬μ— 맀우 μ ν•©ν•©λ‹ˆλ‹€.

5️⃣ RDB의 단점.

1. ν™•μž₯μ„±μ˜ ν•œκ³„.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” μŠ€μΌ€μΌ 아웃(μ„œλ²„λ₯Ό μˆ˜ν‰μ μœΌλ‘œ ν™•μž₯ν•˜λŠ” 방식)에 μ œμ•½μ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λŒ€κ·œλͺ¨ 데이터 μ²˜λ¦¬λ‚˜ λ³΅μž‘ν•œ λΆ„μ‚° ν™˜κ²½μ—μ„œλŠ” NoSQL λ°μ΄ν„°λ² μ΄μŠ€κ°€ 더 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.

2. λ³΅μž‘ν•œ ꡬ쑰.

  • ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ„€μ •ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 것은 κ°•λ ₯ν•˜μ§€λ§Œ, λ³΅μž‘ν•œ μŠ€ν‚€λ§ˆ 섀계가 ν•„μš”ν•œ 경우 μœ μ§€ 관리가 μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

3. λΉ„μ •ν˜• 데이터 처리의 ν•œκ³„.

  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λŠ” κ³ μ •λœ μŠ€ν‚€λ§ˆ ꡬ쑰λ₯Ό κ°€μ§€λ―€λ‘œ, λΉ„μ •ν˜• 데이터(예: JSON, XML, λ―Έλ””μ–΄ 파일 λ“±)λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ°λŠ” μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

6️⃣ RDB의 μ˜ˆμ‹œ μ‹œμŠ€ν…œ.

1. MySQL

  • μ˜€ν”ˆ μ†ŒμŠ€ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ κ°€μž₯ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

2. PostgreSQL

  • κ³ κΈ‰ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ˜€ν”ˆ μ†ŒμŠ€ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, λ³΅μž‘ν•œ 쿼리와 νŠΈλžœμž­μ…˜μ„ μ§€μ›ν•©λ‹ˆλ‹€.

3. Oracle Database

  • μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, μ„±λŠ₯κ³Ό μ•ˆμ •μ„±μ΄ 맀우 λ›°μ–΄λ‚˜κ³ , λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

4. Microsoft SQL Server

  • Microsoftμ—μ„œ κ°œλ°œν•œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ‘œ, 주둜 Windows ν™˜κ²½μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

7️⃣ RDB의 ν™œμš© 사둀.

1. μ „μžμƒκ±°λž˜ μ‹œμŠ€ν…œ

  • μ‚¬μš©μž 정보, μ£Όλ¬Έ 정보, μ œν’ˆ 정보 등을 ν…Œμ΄λΈ”λ‘œ κ΄€λ¦¬ν•˜κ³ , μ΄λŸ¬ν•œ ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό μ„€μ •ν•˜μ—¬ 데이터λ₯Ό 일관성 있게 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

2. 은행 μ‹œμŠ€ν…œ

  • κ³„μ’Œ 정보, 거래 기둝, 고객 정보 등을 ν…Œμ΄λΈ”μ— μ €μž₯ν•˜κ³ , 각 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό 톡해 ν…Œμ΄ν„°λ₯Ό μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  • νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ μ€‘μš”ν•©λ‹ˆλ‹€.

3. ERP μ‹œμŠ€ν…œ

  • κΈ°μ—… μžμ› 관리 μ‹œμŠ€ν…œμ—μ„œ 생산, 재고, ꡬ맀, 판맀, 인사 λ“±μ˜ 데이터λ₯Ό ν…Œμ΄λΈ”λ‘œ κ΄€λ¦¬ν•˜κ³ , μ„œλ‘œ 관계λ₯Ό λ§Ίμ–΄ 데이터λ₯Ό 효율적으둜 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

8️⃣ μš”μ•½.

  • RDB(Relational Database) λŠ” 데이터λ₯Ό ν…Œμ΄λΈ” ν˜•νƒœλ‘œ μ €μž₯ν•˜κ³ , 관계(Relation) λ₯Ό 톡해 ν…Œμ΄λΈ” κ°„μ˜ 연결을 κ΄€λ¦¬ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
  • RDBλŠ” SQL을 μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό 쑰회, μ‚½μž…, μˆ˜μ •, μ‚­μ œν•˜λ©°, ACID 속성을 톡해 νŠΈλžœμž­μ…˜μ˜ 일관성을 보μž₯ν•©λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 μœ μ§€ν•˜κ³  λ³΅μž‘ν•œ 쿼리λ₯Ό μ²˜λ¦¬ν•˜λŠ”λ° κ°•λ ₯ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜μ§€λ§Œ, ν™•μž₯μ„±μ΄λ‚˜ λΉ„μ •ν˜• 데이터 μ²˜λ¦¬μ—λŠ” ν•œκ³„κ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.