๐ŸŽฏ F-lab Java 14์ฃผ์ฐจ ํ•™์Šต ์ปค๋ฆฌํ˜๋Ÿผ

14์ฃผ์ฐจ ์ž๋ฃŒ์˜ ๋ชจ๋“  ํ† ํ”ฝ์„ "๋ฐ์ดํ„ฐ ํƒ€์ž… โ†’ HA/ํ™•์žฅ โ†’ SQL ๊ณ ๊ธ‰" ํ๋ฆ„์œผ๋กœ ์žฌ๋ฐฐ์—ดํ•œ ํ•™์Šต ๊ฒฝ๋กœ.
13์ฃผ์ฐจ๊ฐ€ DB ์ด๋ก ๊ณผ ์ธ๋ฑ์Šค ์˜€๋‹ค๋ฉด, 14์ฃผ์ฐจ๋Š” DB ์šด์˜ ์ธก๋ฉด ์œผ๋กœ ํ™•์žฅ.

  • ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ธ์ฝ”๋”ฉ (CHAR/VARCHAR, BLOB/TEXT, Collation)
  • ๊ณ ๊ฐ€์šฉ์„ฑ (HA) (Clustering, Replication, PXC, Backup)
  • ๋ฐ์ดํ„ฐ ๋ถ„ํ•  (Sharding, Partitioning)
  • SQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ (Trigger, JOIN, VIEW, PROCEDURE)

๐Ÿ“Š ํ•™์Šต ๊ฒฝ๋กœ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

[Phase 1] ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ธ์ฝ”๋”ฉ (CHAR/VARCHAR, BLOB/TEXT, Collation)
   โ†“
[Phase 2] DB Clustering โ€” ๊ณ ๊ฐ€์šฉ์„ฑ์˜ ์‹œ์ž‘
   โ†“
[Phase 3] Replication๊ณผ ๋ฐฑ์—… โ€” Master-Slave + PXC
   โ†“
[Phase 4] ๋ฐ์ดํ„ฐ ๋ถ„ํ•  โ€” Sharding๊ณผ Partitioning
   โ†“
[Phase 5] DELETE/TRUNCATE/DROP๊ณผ ROLLBACK ๋ฉ”์ปค๋‹ˆ์ฆ˜
   โ†“
[Phase 6] SQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ โ€” Trigger, JOIN, VIEW, PROCEDURE

์ด 6 Phase ร— 17 Unit โ€” ๋‹จ์ผ ์ฃผ์ฐจ๋กœ ์ ์ • ๋ถ„๋Ÿ‰.

๐Ÿ”— 1~14์ฃผ์ฐจ ํ๋ฆ„ ์ •๋ฆฌ

์ฃผ์ฐจ์ฃผ์ œํ•ต์‹ฌ ๋ณ€ํ™”
1์ฃผ์ฐจOOPยทJVMยทGCยท์ปฌ๋ ‰์…˜ยทI/O ๊ฐœ๋ก ์ž๋ฐ” ํฐ ๊ทธ๋ฆผ
2์ฃผ์ฐจJVM ๋‚ด๋ถ€ยท๋ฐ”์ดํŠธ์ฝ”๋“œยทG1 GC"์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋‚˜"
3์ฃผ์ฐจ์ปฌ๋ ‰์…˜ยท์ œ๋„ค๋ฆญยทํ•จ์ˆ˜ํ˜•์ž๋ฐ” ํ‘œํ˜„๋ ฅ
4์ฃผ์ฐจ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉยท๋™์‹œ์„ฑยทExecutor๋™์‹œ์„ฑ ์ •๋ณต
5์ฃผ์ฐจAtomic + Spring IoC/DI ์ž…๋ฌธ์ž๋ฐ” โ†’ Spring ๋‹ค๋ฆฌ
6์ฃผ์ฐจํ…Œ์ŠคํŠธ + ์›น ์ธํ”„๋ผ + DB ์ ‘๊ทผ ์ง„ํ™”Spring ์‹ค์ „ ํ™˜๊ฒฝ
7์ฃผ์ฐจJPA/ORM ์ž…๋ฌธ + ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”DB ์ถ”์ƒํ™” ์ž…๋ฌธ
8์ฃผ์ฐจํ”„๋ก์‹œ์˜ ์ง„ํ™”AOP ๋ฉ”์ปค๋‹ˆ์ฆ˜
9์ฃผ์ฐจSpring AOP ์‹ค์ „ + ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒAOP ์‹ค์ „ ํ™œ์šฉ
10์ฃผ์ฐจํŠธ๋žœ์žญ์…˜ ์ •๋ฆฌ + ๋นˆ ๋ผ์ดํ”„์‚ฌ์ดํด + ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ํŠธ๋žœ์žญ์…˜ ๋งˆ๋ฌด๋ฆฌ
11์ฃผ์ฐจJPA์˜ ์ •์ฒด์™€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธJPA ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์™„์ „ ์ดํ•ด
12์ฃผ์ฐจ์—ฐ๊ด€๊ด€๊ณ„ + N+1 ๋“ฑ ์„ฑ๋Šฅ ์ตœ์ ํ™”JPA ์‹ค์ „ ํ™œ์šฉ
13์ฃผ์ฐจDB ํŽ€๋”๋ฉ˜ํ„ธ - ๋ชจ๋ธ๋ง๋ถ€ํ„ฐ ์ธ๋ฑ์Šค๊นŒ์ง€DB ๋ณธ์—ฐ์˜ ์˜์—ญ (์ด๋ก )
14์ฃผ์ฐจ (์ง€๊ธˆ)DB ์šด์˜ - ๋ฐ์ดํ„ฐ ํƒ€์ž…ยทHAยทํ™•์žฅยทSQL ๊ณ ๊ธ‰DB ์šด์˜์˜ ์˜์—ญ

13์ฃผ์ฐจ์™€ 14์ฃผ์ฐจ์˜ ๊ด€๊ณ„:

  • 13์ฃผ์ฐจ = DB ์ด๋ก  (์ •๊ทœํ™”ยทNoSQLยทCAPยท์˜ตํ‹ฐ๋งˆ์ด์ €ยท์ธ๋ฑ์Šค)
  • 14์ฃผ์ฐจ = DB ์šด์˜ (ํ™•์žฅยทHAยทSQL ๊ณ ๊ธ‰ ๋„๊ตฌ)
  • โ†’ DB ์˜์—ญ์˜ ์ด๋ก  + ์šด์˜ ๋‘ ์ถ• ์™„์„ฑ

๐Ÿ—“๏ธ ๊ถŒ์žฅ ํ•™์Šต ์ผ์ • (์••์ถ• 5์ผ)

DayPhaseํ•™์Šต ๋ชฉํ‘œ
1์ผ์ฐจPhase 1๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ Collation
2์ผ์ฐจPhase 2 + 3Clustering + Replication + PXC
3์ผ์ฐจPhase 4Sharding + Partitioning
4์ผ์ฐจPhase 5 + 6 (์ „๋ฐ˜)DELETE/TRUNCATE/DROP + Trigger + JOIN
5์ผ์ฐจPhase 6 (ํ›„๋ฐ˜) + ์ข…ํ•ฉVIEW + PROCEDURE + ์ž๊ธฐ ์ ๊ฒ€

์—ฌ์œ  ์ผ์ • (7์ผ): Phase 2-3์— +1์ผ (HA๋Š” ๊ทธ๋ฆผ์ด ํ•„์š”ํ•จ). Phase 6์€ ์ง์ ‘ ์ฟผ๋ฆฌ ๋Œ๋ฆฌ๋ฉฐ ํ•™์Šต ๊ถŒ์žฅ.


๐Ÿ“š Phase 1 โ€” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ธ์ฝ”๋”ฉ

๋ชฉํ‘œ: SQL ์ปฌ๋Ÿผ ์„ค๊ณ„์˜ ์ถœ๋ฐœ์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ํƒ๊ณผ ๋ฌธ์ž์—ด ๋น„๊ต ๊ทœ์น™์„ ์žก๋Š”๋‹ค.

Unit 1.1 โ€” CHAR vs VARCHAR (๊ณ ์ • vs ๊ฐ€๋ณ€)

์„ ์ˆ˜ ์ง€์‹: 6์ฃผ์ฐจ Phase 6 (DB ๊ธฐ์ดˆ)

ํ•ต์‹ฌ ๋น„๊ต โญ :

CHAR(n)VARCHAR(n)
๊ธธ์ด๊ณ ์ • ๊ธธ์ด๊ฐ€๋ณ€ ๊ธธ์ด
์งง์€ ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ๊ณต๋ฐฑ์œผ๋กœ ์ฑ„์›€์‹ค์ œ ๊ธธ์ด๋งŒ
์†๋„๋น ๋ฆ„ (ํŠนํžˆ ์งง์€ ๋ฌธ์ž์—ด)์•ฝ๊ฐ„ ๋А๋ฆผ (๊ธธ์ด ๊ณ„์‚ฐ ํ•„์š”)
๊ณต๊ฐ„ ํšจ์œจ๋‚ฎ์Œ๋†’์Œ

์˜ˆ์‹œ:

-- CHAR(5)
INSERT INTO test VALUES ('Hi');  
-- ์ €์žฅ: 'Hi   ' (๊ณต๋ฐฑ 3๊ฐœ ์ถ”๊ฐ€, ์ด 5๋ฐ”์ดํŠธ)

-- VARCHAR(5)
INSERT INTO test VALUES ('Hi');
-- ์ €์žฅ: 'Hi' (์‹ค์ œ 2๋ฐ”์ดํŠธ๋งŒ)

์‚ฌ์šฉ ๊ฐ€์ด๋“œ:

โœ… CHAR ์ ํ•ฉ โ€” ๊ธธ์ด๊ฐ€ ์ผ์ •ํ•œ ๋ฐ์ดํ„ฐ:

  • ๊ตญ๊ฐ€ ์ฝ”๋“œ: CHAR(2) ('US', 'KR')
  • ์„ฑ๋ณ„: CHAR(1) ('M', 'F')
  • ์šฐํŽธ๋ฒˆํ˜ธ: CHAR(5)
  • ISO ํ‘œ์ค€ ์ฝ”๋“œ

โœ… VARCHAR ์ ํ•ฉ โ€” ๊ธธ์ด ๊ฐ€๋ณ€:

  • ์‚ฌ์šฉ์ž ์ด๋ฆ„: VARCHAR(50)
  • ์ด๋ฉ”์ผ: VARCHAR(100)
  • ์„ค๋ช… ํ…์ŠคํŠธ: VARCHAR(255)

ILIC ์ ์šฉ:

  • ์šด์ž„ ์ฝ”๋“œ, ํ†ตํ™” ์ฝ”๋“œ โ†’ CHAR
  • ๊ณ ๊ฐ ์ด๋ฆ„, ํ™”๋ฌผ ์„ค๋ช… โ†’ VARCHAR

์ž๊ธฐ ์ ๊ฒ€

  • VARCHAR๊ฐ€ ์•ฝ๊ฐ„ ๋А๋ฆฐ ์ด์œ ๋Š”? (ํžŒํŠธ: ๊ธธ์ด ์ •๋ณด ์ถ”๊ฐ€ ์ €์žฅ)
  • CHAR(255)์— 'Hi'๋ฅผ ์ €์žฅํ•˜๋ฉด ๋””์Šคํฌ ์‚ฌ์šฉ์€? (ํžŒํŠธ: 255๋ฐ”์ดํŠธ)

Unit 1.2 โ€” BLOB vs TEXT (์ด์ง„ vs ๋ฌธ์ž)

์„ ์ˆ˜ ์ง€์‹: Unit 1.1

ํ•ต์‹ฌ ๋น„๊ต โญ :

BLOBTEXT
๋ฐ์ดํ„ฐ ์ข…๋ฅ˜์ด์ง„(Binary)๋ฌธ์ž(Text)
์‚ฌ์šฉ ์‚ฌ๋ก€์ด๋ฏธ์ง€, ๋™์˜์ƒ, ํŒŒ์ผ๊ธด ๊ธ€, ๋Œ“๊ธ€, ์„ค๋ช…
๋Œ€์†Œ๋ฌธ์ž๊ตฌ๋ถ„(Case-Sensitive)๊ตฌ๋ถ„ ์•ˆ ํ•จ(๊ธฐ๋ณธ)
๋น„๊ต ๋ฐฉ์‹๋ฐ”์ดํŠธ ๋‹จ์œ„Collation ๊ทœ์น™
์ธ์ฝ”๋”ฉ์—†์Œ (์›๋ณธ ๊ทธ๋Œ€๋กœ)UTF-8/ASCII ๋“ฑ
๋ฌธ์ž์—ด ํ•จ์ˆ˜์‚ฌ์šฉ XLIKE/CONCAT ๊ฐ€๋Šฅ

์˜ˆ์‹œ:

BLOB:

CREATE TABLE files (
    id INT,
    image BLOB  -- ์ด๋ฏธ์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ
);

TEXT:

CREATE TABLE posts (
    id INT,
    content TEXT  -- ๊ฒŒ์‹œ๊ธ€ ๋ณธ๋ฌธ
);

MySQL์˜ BLOB/TEXT ๋ณ€ํ˜•:

  • TINYBLOB / TINYTEXT (255 bytes)
  • BLOB / TEXT (64KB)
  • MEDIUMBLOB / MEDIUMTEXT (16MB)
  • LONGBLOB / LONGTEXT (4GB)

์‹ค๋ฌด ๊ถŒ์žฅ:

  • ์ด๋ฏธ์ง€/ํŒŒ์ผ์€ DB์— ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒŒ ์ข‹์Œ
  • โ†’ ๋Œ€์‹  S3 ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ
  • โ†’ DB์—๋Š” URL๋งŒ

ILIC ์ ์šฉ:

  • ์šด์ž„ ๊ฒฌ์  PDF โ†’ S3 ์ €์žฅ + URL์„ VARCHAR๋กœ
  • ํ™”๋ฌผ ์„ค๋ช… ๊ธด ํ…์ŠคํŠธ โ†’ TEXT

์ž๊ธฐ ์ ๊ฒ€

  • ์ด๋ฏธ์ง€๋ฅผ DB์— ์ €์žฅํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ? (ํžŒํŠธ: ํฌ๊ธฐ ํญ์ฆ, ๋ฐฑ์—…/๋ณต๊ตฌ ๋ถ€๋‹ด)
  • TEXT ์ปฌ๋Ÿผ์— ์ธ๋ฑ์Šค๋ฅผ ๊ฑฐ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•œ๊ฐ€? (ํžŒํŠธ: prefix index๋งŒ)

Unit 1.3 โ€” Collation๊ณผ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„

์„ ์ˆ˜ ์ง€์‹: Unit 1.2

ํ•ต์‹ฌ ๊ฐœ๋…

Collation (์ •๋ ฌ ๊ทœ์น™):

"๋ฌธ์ž์—ด์„ ๋น„๊ต/์ •๋ ฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ทœ์น™"

MySQL Collation ๋ช…๋ช… ๊ทœ์น™:

  • utf8_general_ci โ€” UTF-8, ์ผ๋ฐ˜ ๋น„๊ต, case-insensitive (๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ)
  • utf8_bin โ€” UTF-8, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋น„๊ต (๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„)
  • utf8mb4_unicode_ci โ€” UTF-8 4๋ฐ”์ดํŠธ (์ด๋ชจ์ง€ ์ง€์›)

TEXT์˜ ๊ธฐ๋ณธ ๋™์ž‘:

  • ๊ธฐ๋ณธ Collation = utf8_general_ci ๋“ฑ โ†’ ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ

์˜ˆ์‹œ:

SELECT * FROM users WHERE name = 'alice';
-- 'Alice', 'ALICE', 'alice' ๋ชจ๋‘ ๋งค์นญ (case-insensitive ๊ธฐ๋ณธ)

๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์ด ํ•„์š”ํ•  ๋•Œ:

SELECT * FROM users WHERE name COLLATE utf8_bin = 'alice';
-- 'alice' ๋งŒ ์ •ํ™•ํžˆ ๋งค์นญ

๋˜๋Š” BINARY ํ‚ค์›Œ๋“œ:

SELECT * FROM users WHERE BINARY name = 'alice';

์ปฌ๋Ÿผ ๋‹จ์œ„๋กœ Collation ์ง€์ •:

CREATE TABLE users (
    name VARCHAR(50) COLLATE utf8_bin  -- ์ด ์ปฌ๋Ÿผ์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„
);

ILIC ํ™œ์šฉ:

  • ์ผ๋ฐ˜ ๊ฒ€์ƒ‰ (์šด์ž„๋ช… ๋“ฑ) โ†’ ๊ธฐ๋ณธ (case-insensitive)
  • ์‚ฌ์šฉ์ž ID, ์‹œ์Šคํ…œ ์ฝ”๋“œ โ†’ utf8_bin (๊ตฌ๋ถ„)

์ž๊ธฐ ์ ๊ฒ€

  • 12์ฃผ์ฐจ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์ด๋ฉ”์ผ ๋น„๊ต ์‹œ ๋Œ€์†Œ๋ฌธ์ž ์ฒ˜๋ฆฌ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?
  • ํ•œ๊ตญ์–ด๋Š” Collation ์˜ํ–ฅ์ด ์žˆ๋Š”๊ฐ€? (ํžŒํŠธ: ์ž๋ชจ ๋ถ„ํ•ด ๋น„๊ต ๋“ฑ์— ์˜ํ–ฅ)

๐Ÿ“š Phase 2 โ€” DB Clustering (๊ณ ๊ฐ€์šฉ์„ฑ์˜ ์‹œ์ž‘)

๋ชฉํ‘œ: ๋‹จ์ผ ์„œ๋ฒ„ ํ•œ๊ณ„๋ฅผ ๋„˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋„๊ตฌ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋ง์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•œ๋‹ค.

Unit 2.1 โ€” Clustering์˜ ์ •์˜์™€ ํ•„์š”์„ฑ

์„ ์ˆ˜ ์ง€์‹: 13์ฃผ์ฐจ Phase 5 (Scale-Up vs Scale-Out)

ํ•ต์‹ฌ ๋ฌธ์ œ

๋‹จ์ผ ์„œ๋ฒ„์˜ ์œ„ํ—˜:

  • DB ์„œ๋ฒ„ 1๋Œ€ + DB 1๊ฐœ ์šด์˜
  • ์„œ๋ฒ„ ๋‹ค์šด โ†’ ์„œ๋น„์Šค ์ „์ฒด ์ค‘๋‹จ
  • โ†’ ๊ฐ€์šฉ์„ฑ(Availability) ๋ณด์žฅ ๋ถˆ๊ฐ€

Clustering์˜ ํ•ด๊ฒฐ:

"์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ๋…ผ๋ฆฌ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์‚ฐ ์šด์˜"

ํ•ต์‹ฌ ์˜๋ฏธ:

  • ๋ฌผ๋ฆฌ์ ์œผ๋กœ N๋Œ€ ์„œ๋ฒ„
  • ๋…ผ๋ฆฌ์ ์œผ๋กœ 1๊ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (๊ณต์œ  ๋˜๋Š” ๋ณต์ œ)
  • ํ•œ ๋Œ€๊ฐ€ ๋‹ค์šด๋ผ๋„ ๋‚˜๋จธ์ง€๊ฐ€ ์ •์ƒ ๋™์ž‘

๊ตฌ์กฐ (DB ์„œ๋ฒ„ 2๋Œ€ ์‹œ):

[Client]
    โ†“
[Load Balancer]
   /        \
[DB Server 1] [DB Server 2]
   โ†“               โ†“
[DB Storage]  [DB Storage]
(physically separate)

์ด์ :

  • ๊ณ ๊ฐ€์šฉ์„ฑ (HA) โ€” ์žฅ์•  ์‹œ ์„œ๋น„์Šค ์ง€์†
  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ โ€” ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋กœ
  • ์ ์ง„ ๋ณต๊ตฌ โ€” ์šด์˜ ์ค‘์—๋„ ํ•œ ๋Œ€์”ฉ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • 13์ฃผ์ฐจ Scale-Out๊ณผ Clustering์˜ ๊ด€๊ณ„๋Š”? (ํžŒํŠธ: Clustering์€ Scale-Out์˜ ํ•œ ํ˜•ํƒœ)
  • Clustering์ด ํ•ญ์ƒ ์ข‹์€๊ฐ€? (ํžŒํŠธ: ๋น„์šฉ, ๋ณต์žก์„ฑ)

Unit 2.2 โ€” Active-Active vs Active-Standby โญ

์„ ์ˆ˜ ์ง€์‹: Unit 2.1

ํ•ต์‹ฌ 2๊ฐ€์ง€ ํŒจํ„ด:

Active-Active (๋™์‹œ ์šด์˜):

  • ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ํ™œ์„ฑ
  • ํ•œ ๋Œ€ ๋‹ค์šด๋ผ๋„ ๋‚˜๋จธ์ง€๊ฐ€ ์ฆ‰์‹œ ์ฒ˜๋ฆฌ
  • ๋ถ€ํ•˜๋ฅผ N๊ฐœ๋กœ ๋ถ„์‚ฐ โ†’ CPU/Memory ๋ถ€ํ•˜ โ†“

์žฅ์ :

  • ์ฆ‰๊ฐ ์žฅ์•  ๋Œ€์‘ (Failover ๋ถˆํ•„์š”)
  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ ํšจ๊ณผ
  • ์ž์› ํšจ์œจ

๋‹จ์ :

  • ์—ฌ๋Ÿฌ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์Šคํ† ๋ฆฌ์ง€ ๊ณต์œ  ์‹œ ๋ณ‘๋ชฉ ๊ฐ€๋Šฅ
  • ๋ณต์žกํ•œ ๋™์‹œ์„ฑ ์ œ์–ด
  • ๋น„์šฉ โ†‘

Active-Standby (๋Œ€๊ธฐ ๋ชจ๋“œ):

  • Active ์„œ๋ฒ„๋งŒ ์šด์˜, Standby๋Š” ๋Œ€๊ธฐ
  • Active ์žฅ์•  ์‹œ โ†’ Failover๋กœ Standby๊ฐ€ Active ์ „ํ™˜

์žฅ์ :

  • ๋น„์šฉ โ†“ (Standby๋Š” ํ‰์†Œ ๋ฏธ์‚ฌ์šฉ)
  • ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ
  • ๋™์‹œ์„ฑ ์ถฉ๋Œ ์—†์Œ

๋‹จ์ :

  • Failover ์‹œ๊ฐ„ ๋™์•ˆ ์„œ๋น„์Šค ์ค‘๋‹จ
  • ํšจ์œจ์€ Active-Active์˜ ์ ˆ๋ฐ˜
  • Standby๊ฐ€ Active๋กœ ์ „ํ™˜ ์‹œ ๋ถ€ํ•˜ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๊ฒ€์ฆ ํ•„์š”

๋น„๊ต ๋งคํŠธ๋ฆญ์Šค:

Active-ActiveActive-Standby
์ž์› ์‚ฌ์šฉ๋ชจ๋‘ ํ™œ์„ฑ์ ˆ๋ฐ˜๋งŒ ํ™œ์„ฑ
Failover ์‹œ๊ฐ„๊ฑฐ์˜ 0์ˆ˜ ์ดˆ ~ ๋ถ„
๋น„์šฉ๋†’์Œ๋‚ฎ์Œ
๋ณต์žก๋„๋†’์Œ๋‚ฎ์Œ

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ํ•ต์‹ฌ ๊ฒฐ์ œ ์‹œ์Šคํ…œ โ†’ Active-Active ๊ถŒ์žฅ
  • ๋ฐฑ์˜คํ”ผ์Šค/๊ด€๋ฆฌ ์‹œ์Šคํ…œ โ†’ Active-Standby ๊ฐ€๋Šฅ

์ž๊ธฐ ์ ๊ฒ€

  • ILIC๊ฐ€ Active-Standby๋กœ ์šด์˜ ์ค‘ Active ๋‹ค์šด ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ๋А๋ผ๋Š” ์˜ํ–ฅ์€?
  • Active-Active์—์„œ ๊ฐ™์€ ํ–‰์„ ๋‘ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ ์ˆ˜์ •ํ•˜๋ฉด? (ํžŒํŠธ: ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•„์š”)

Unit 2.3 โ€” Quorum๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ˆ˜ (โ˜… ๋ฉด์ ‘ ๋‹จ๊ณจ)

์„ ์ˆ˜ ์ง€์‹: Unit 2.2

ํ•ต์‹ฌ ์›๋ฆฌ

ํด๋Ÿฌ์Šคํ„ฐ ํˆฌํ‘œ (Quorum):

"๋…ธ๋“œ ์ผ๋ถ€๊ฐ€ ๋‹ค์šด๋˜์—ˆ์„ ๋•Œ ๋‚˜๋จธ์ง€๊ฐ€ ๋‹ค์ˆ˜(majority)๋ฅผ ์ฐจ์ง€ํ•˜๋Š”์ง€ ํŒ๋‹จ"

๊ณผ๋ฐ˜์ˆ˜ ๋ฃฐ โญ :

  • ๊ณผ๋ฐ˜์ˆ˜ (>50%) ์ด์ƒ์˜ ๋…ธ๋“œ ์‚ด์•„์žˆ์œผ๋ฉด โ†’ ์ •์ƒ ์šด์˜
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด โ†’ ์ž๋™ ์ค‘๋‹จ (Fail-Safe)

์™œ ํ•„์š”ํ•œ๊ฐ€:

  • Split Brain ๋ฐฉ์ง€ โ€” ๋„คํŠธ์›Œํฌ ๋‹จ์ ˆ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋‘˜๋กœ ๋‚˜๋‰˜๋ฉด ์–‘์ชฝ์ด ๋ชจ๋‘ ์ž๊ธฐ๋ฅผ ์ •์ƒ์ด๋ผ ์ฃผ์žฅ โ†’ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜
  • ํ•œ์ชฝ๋งŒ ์ •์ƒ์œผ๋กœ ์ธ์ •ํ•ด์•ผ ์ผ๊ด€์„ฑ ์œ ์ง€

์˜ˆ์‹œ (3๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ):

  • 3๊ฐœ ๋…ธ๋“œ ์ค‘ 2๊ฐœ ์‚ด์•„์žˆ์Œ โ†’ ๊ณผ๋ฐ˜์ˆ˜ โ†’ ์ •์ƒ ์šด์˜
  • 2๊ฐœ ๋…ธ๋“œ ๋‹ค์šด, 1๊ฐœ๋งŒ ๋‚จ์Œ โ†’ ๊ณผ๋ฐ˜์ˆ˜ X โ†’ ์ž๋™ ์ค‘๋‹จ

ํ•ต์‹ฌ ํ†ต์ฐฐ โญ :

"ํด๋Ÿฌ์Šคํ„ฐ๋ง์€ ์ตœ์†Œ 3๊ฐœ ๋…ธ๋“œ ๊ถŒ์žฅ โ€” 1๊ฐœ ๋‹ค์šด ์‹œ 2๊ฐœ๋กœ ์ •์ƒ ์šด์˜ ๊ฐ€๋Šฅ"

2๋…ธ๋“œ์˜ ์œ„ํ—˜:

  • 1๊ฐœ ๋‹ค์šด โ†’ 1๊ฐœ๋งŒ ๋‚จ์Œ โ†’ ๊ณผ๋ฐ˜์ˆ˜ X
  • โ†’ ๊ฒฐ๊ตญ 1๋…ธ๋“œ์™€ ๋™์ผ

ํ™€์ˆ˜ ๋…ธ๋“œ ๊ถŒ์žฅ:

  • 3, 5, 7๊ฐœ โ†’ ๋ช…ํ™•ํ•œ ๊ณผ๋ฐ˜์ˆ˜ ๊ฐ€๋Šฅ
  • 4, 6๊ฐœ โ†’ 50:50 ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ

Quorum์˜ ์‘์šฉ:

  • MongoDB Replica Set
  • Apache ZooKeeper
  • Kubernetes etcd
  • โ†’ ๋ชจ๋‘ ํ™€์ˆ˜ ๋…ธ๋“œ ๊ถŒ์žฅ

ILIC ์ ์šฉ:

  • ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋„์ž… ์‹œ โ†’ 3๋…ธ๋“œ ์‹œ์ž‘
  • ํŠธ๋ž˜ํ”ฝ ํญ์ฆ ์‹œ โ†’ 5๋…ธ๋“œ๋กœ ํ™•์žฅ (4๊ฐ€ ์•„๋‹Œ)

์ž๊ธฐ ์ ๊ฒ€

  • "Split Brain"์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ์‚ฌ๊ณ ๊ฐ€? (ํžŒํŠธ: ์–‘์ชฝ ํด๋Ÿฌ์Šคํ„ฐ์— ๋‹ค๋ฅธ ์“ฐ๊ธฐ โ†’ ์ผ๊ด€์„ฑ ๊นจ์ง)
  • 2๋…ธ๋“œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๊ฐ€์šฉ์„ฑ์€ 1๋…ธ๋“œ๋ณด๋‹ค ์ •๋ง ๋†’์€๊ฐ€? (ํžŒํŠธ: NO โ€” Quorum ๋ฃฐ ๋•Œ๋ฌธ)

๐Ÿ“š Phase 3 โ€” Replication๊ณผ ๋ฐฑ์—…

๋ชฉํ‘œ: Master-Slave ๊ตฌ์กฐ์™€ ํด๋Ÿฌ์Šคํ„ฐ๋ง์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ์žก๊ณ , PXC์™€ ๋ฐฑ์—… ์ „๋žต์„ ๋ณธ๋‹ค.

Unit 3.1 โ€” Replication (Master-Slave ๋ณต์ œ)

์„ ์ˆ˜ ์ง€์‹: Phase 2, 13์ฃผ์ฐจ Phase 5

ํ•ต์‹ฌ ๊ตฌ์กฐ

Replication:

"Master ์„œ๋ฒ„์˜ ๋ณ€๊ฒฝ์„ Slave ์„œ๋ฒ„๋กœ ๋ณต์ œ"

๊ตฌ์กฐ:

[Master DB] โ”€โ”€๋ณต์ œโ”€โ”€> [Slave DB 1]
    โ†“                    โ†‘
 (Write)              (Read only)
                         โ†“
                      [Slave DB 2]

์—ญํ•  ๋ถ„๋ฆฌ:

  • Master: INSERT, UPDATE, DELETE
  • Slave: SELECT ์ „๋‹ด

์–ป๋Š” ์ด์  โญ :

  1. ์ฝ๊ธฐ ๋ถ€ํ•˜ ๋ถ„์‚ฐ

    • Read ํŠธ๋ž˜ํ”ฝ์ด ์••๋„์ ์œผ๋กœ ๋งŽ์€ ์‹œ์Šคํ…œ
    • Slave๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ Read ์ฒ˜๋ฆฌ
  2. Master ๋ถ€ํ•˜ โ†“

    • Master๋Š” Write๋งŒ ๋‹ด๋‹น
    • ๋ณต์žกํ•œ SELECT ์ฟผ๋ฆฌ๋Š” Slave๋กœ
  3. ๋ฐฑ์—…ยท๋ถ„์„ ๋ถ€ํ•˜ ๊ฒฉ๋ฆฌ

    • Slave์—์„œ ๋ฐฑ์—…ยทํ†ต๊ณ„ โ†’ Master ์˜ํ–ฅ ์—†์Œ

๋ณต์ œ ๋ฐฉ์‹:

  • ๋น„๋™๊ธฐ (Asynchronous) โ€” ๊ธฐ๋ณธ, ์•ฝ๊ฐ„์˜ ์ง€์—ฐ ํ—ˆ์šฉ
  • ๋ฐ˜๋™๊ธฐ (Semi-synchronous) โ€” Slave ํ•˜๋‚˜๋ผ๋„ ์ ์šฉ ํ™•์ธ ํ›„ ์‘๋‹ต
  • ๋™๊ธฐ (Synchronous) โ€” ๋ชจ๋“  Slave ์ ์šฉ ํ›„ ์‘๋‹ต (๋А๋ฆผ)

๋ณต์ œ ์ง€์—ฐ (Replication Lag):

  • ๋น„๋™๊ธฐ ์‹œ Slave๊ฐ€ Master๋ณด๋‹ค ์•ฝ๊ฐ„ ๋А๋ฆผ
  • ๊ฐ“ INSERTํ•œ ๋ฐ์ดํ„ฐ๋ฅผ Slave์—์„œ SELECTํ•˜๋ฉด ๋ชป ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • โ†’ ์ผ๊ด€์„ฑ ์ค‘์š”ํ•œ ์กฐํšŒ๋Š” Master์—์„œ

Master/Slave ์„ฑ๋Šฅ ๊ณ ๋ ค:

  • Master์™€ Slave ์„ฑ๋Šฅ ๋น„์Šท โ†’ ๋ณต์ œ ์ง€์—ฐ ์—†์Œ
  • Slave๋Š” Read๋งŒ์ด๋ฏ€๋กœ ๋™๋“ฑ ์„ฑ๋Šฅ ๋ถˆํ•„์š”
  • ๊ทธ๋Ÿฌ๋‚˜ Failover ์‹œ Slave๊ฐ€ Master ์—ญํ•  โ†’ ์„ฑ๋Šฅ ์ฐจ์ด ํฌ๋ฉด ์œ„ํ—˜

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์šด์ž„ ๊ฒฌ์  ๋“ฑ๋ก โ†’ Master
  • ์šด์ž„ ๊ฒ€์ƒ‰ โ†’ Slave (Read Replica)
  • ์•ผ๊ฐ„ ํ†ต๊ณ„ โ†’ ๋ณ„๋„ Slave

์ž๊ธฐ ์ ๊ฒ€

  • ๋ณต์ œ ์ง€์—ฐ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ผ๊นŒ? (ํžŒํŠธ: ๋“ฑ๋ก ํ›„ ์ฆ‰์‹œ ์กฐํšŒ ์‹œ ์•ˆ ๋ณด์ž„)
  • Read-after-Write ์ผ๊ด€์„ฑ์„ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์€? (ํžŒํŠธ: ๋ช…์‹œ์ ์œผ๋กœ Master์—์„œ ์กฐํšŒ)

Unit 3.2 โ€” Replication vs Cluster (โ˜… ๋ฉด์ ‘ ๋‹จ๊ณจ)

์„ ์ˆ˜ ์ง€์‹: Phase 2, Unit 3.1

ํ•ต์‹ฌ ์ฐจ์ด โญ :

ReplicationClustering
๊ตฌ์กฐMaster โ†’ Slave (๋‹จ๋ฐฉํ–ฅ)๋ชจ๋“  ๋…ธ๋“œ ๋™๋“ฑ
WriteMaster๋งŒ๋ชจ๋“  ๋…ธ๋“œ ๊ฐ€๋Šฅ
ReadSlave ๋ถ„์‚ฐ๋ชจ๋“  ๋…ธ๋“œ
์ผ๊ด€์„ฑ๋น„๋™๊ธฐ (์ง€์—ฐ ๊ฐ€๋Šฅ)๋™๊ธฐ ๋˜๋Š” ์ฆ‰์‹œ
Failover์ˆ˜๋™/๋ฐ˜์ž๋™์ž๋™
์ฃผ ๋ชฉ์ ์ฝ๊ธฐ ์„ฑ๋Šฅ + ๋ฐฑ์—…๊ณ ๊ฐ€์šฉ์„ฑ + ์ฆ‰์‹œ Failover

์‹œ๊ฐ์  ๋น„๊ต:

Replication:

[Master]  โ”€wirteโ”€> Master ์ž์‹ 
   โ”‚
   โ”‚ ๋น„๋™๊ธฐ ๋ณต์ œ
   โ†“
[Slave 1]  โ”€read ๋งŒโ”€
[Slave 2]  โ”€read ๋งŒโ”€

Clustering (Active-Active):

[Node 1] โ†” [Node 2] โ†” [Node 3]
   โ†“          โ†“           โ†“
๋ชจ๋‘ read/write ๊ฐ€๋Šฅ (๋™๊ธฐ ๋™๊ธฐํ™”)

์„ ํƒ ๊ธฐ์ค€:

Replication ์ ํ•ฉ:

  • ์ฝ๊ธฐ ๋น„์œจ ์••๋„์  (์˜ˆ: 90% read)
  • ๋ฐฑ์—…ยท๋ถ„์„ ๊ฒฉ๋ฆฌ ํ•„์š”
  • ๋น„์šฉ ์ ˆ๊ฐ

Clustering ์ ํ•ฉ:

  • ์ฆ‰์‹œ Failover ํ•„์ˆ˜
  • ์“ฐ๊ธฐ ๋ถ€ํ•˜๋„ ๋ถ„์‚ฐ ํ•„์š”
  • ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ

๋‘˜ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์‹ค๋ฌด ํ‘œ์ค€):

  • ํ•ต์‹ฌ ํด๋Ÿฌ์Šคํ„ฐ(Master) + ์ฝ๊ธฐ Replica ์ถ”๊ฐ€

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์šด์ž„ ์‹œ์Šคํ…œ ํ•ต์‹ฌ โ†’ Cluster
  • ์šด์ž„ ๊ฒ€์ƒ‰ ์บ์‹œ์šฉ โ†’ Read Replica

์ž๊ธฐ ์ ๊ฒ€

  • "Replication์€ HA ์†”๋ฃจ์…˜์ธ๊ฐ€?"์˜ ๋‹ต์€? (ํžŒํŠธ: ๋ถ€๋ถ„์ , Cluster๊ฐ€ ์ง„์งœ HA)
  • Failover ์ž๋™ํ™”๋Š” ์–ด๋А ์ชฝ์ด ๊ฐ•ํ•œ๊ฐ€?

Unit 3.3 โ€” Percona XtraDB Cluster + ๋ฐฑ์—…

์„ ์ˆ˜ ์ง€์‹: Unit 3.2

Percona XtraDB Cluster (PXC) โญ :

"MySQL ํ˜ธํ™˜ Active-Active ํด๋Ÿฌ์Šคํ„ฐ๋ง ์†”๋ฃจ์…˜"

์™œ PXC๋ฅผ ์„ ํƒํ•˜๋Š”๊ฐ€:

Replication์˜ ํ•œ๊ณ„:
1. Slave๊ฐ€ Read๋งŒ ๋‹ด๋‹น โ†’ ์„ฑ๋Šฅ ์ข‹์€ Master ์˜์กด
2. Master ์žฅ์•  ์‹œ Slave ์ž๋™ ์Šน๊ฒฉ X
3. Slave ์„ฑ๋Šฅ์„ ๋‚ฎ๊ฒŒ ์žก์œผ๋ฉด Master ๋Œ€์ฒด ์–ด๋ ค์›€

PXC์˜ ํ•ด๊ฒฐ:

  • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ Read/Write ๊ฐ€๋Šฅ
  • ํ•œ ๋…ธ๋“œ ์žฅ์•  ์‹œ ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ ํ™œ์šฉ
  • ๋™๊ธฐ ๋ณต์ œ๋กœ ๊ฐ•ํ•œ ์ผ๊ด€์„ฑ

Galera Cluster ๊ธฐ๋ฐ˜:

  • PXC๋Š” Galera Cluster ๊ธฐ์ˆ  ์‚ฌ์šฉ
  • ์ธ์ฆ ๊ธฐ๋ฐ˜ ๋™๊ธฐ ๋ณต์ œ (Certification-Based Replication)

ILIC ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ:

  • ์šด์ž„ ์‹œ์Šคํ…œ ํ•ต์‹ฌ โ†’ PXC
  • ๋‹จ, ๋ชจ๋“  ๋…ธ๋“œ ๋™์‹œ ํ™œ์„ฑ์ด๋ผ ๋น„์šฉ โ†‘

XtraBackup vs mysqldump (๋ฐฑ์—… ๋„๊ตฌ):

XtraBackupmysqldump
๋ฐฉ์‹Hot Backup (์„œ๋น„์Šค ์ค‘)Logical (SQL ์ถ”์ถœ)
์†๋„๋งค์šฐ ๋น ๋ฆ„๋А๋ฆผ
๊ฒฐ๊ณผ๋ฌผ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผSQL ํ…์ŠคํŠธ
๋ณต๊ตฌ๋น ๋ฆ„๋А๋ฆผ (์žฌ์‹คํ–‰)
์šด์˜ ์˜ํ–ฅ์ตœ์†Œ๋ฝ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
๋„๊ตฌPercona ๋„๊ตฌMySQL ๊ธฐ๋ณธ
์ ํ•ฉ๋Œ€์šฉ๋Ÿ‰ ์šด์˜ DB์ž‘์€ DB, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

XtraBackup ๊ถŒ์žฅ:

  • 100GB+ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • 24/7 ์„œ๋น„์Šค (๋‹ค์šดํƒ€์ž„ ๋ถˆ๊ฐ€)

mysqldump ๊ถŒ์žฅ:

  • ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
  • ์ž‘์€ DB
  • ๋‹ค๋ฅธ DB๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (SQL ํ˜ธํ™˜์„ฑ)

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์ผ์ผ ์šด์˜ ๋ฐฑ์—… โ†’ XtraBackup
  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ / ์ž„์‹œ ๋ฐฑ์—… โ†’ mysqldump

์ž๊ธฐ ์ ๊ฒ€

  • "Hot Backup"์˜ ์˜๋ฏธ๋Š”? (ํžŒํŠธ: ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ๋ฐฑ์—…)
  • mysqldump๋ฅผ ์šด์˜ ์‹œ๊ฐ„์— ๋Œ๋ฆฌ๋ฉด? (ํžŒํŠธ: LOCK + ์„ฑ๋Šฅ ์ €ํ•˜)

๐Ÿ“š Phase 4 โ€” ๋ฐ์ดํ„ฐ ๋ถ„ํ•  (Sharding๊ณผ Partitioning)

๋ชฉํ‘œ: ํ•œ ํ…Œ์ด๋ธ”/ํ•œ DB๊ฐ€ ๋„ˆ๋ฌด ์ปค์กŒ์„ ๋•Œ์˜ ๋‘ ๊ฐ€์ง€ ๋ถ„ํ•  ์ „๋žต์„ ๋น„๊ตํ•œ๋‹ค.

Unit 4.1 โ€” Sharding (์ˆ˜ํ‰ ๋ถ„ํ• )

์„ ์ˆ˜ ์ง€์‹: 13์ฃผ์ฐจ Phase 5 (NoSQL์˜ Sharding)

ํ•ต์‹ฌ ๊ฐœ๋…

Sharding:

"์—ฌ๋Ÿฌ DB ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ•  โ€” ๊ฐ ์„œ๋ฒ„๊ฐ€ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง"

๊ตฌ์กฐ:

[Shard 1: user_id 1~1000๋งŒ]
[Shard 2: user_id 1000๋งŒ~2000๋งŒ]
[Shard 3: user_id 2000๋งŒ~3000๋งŒ]

์ƒค๋“œ ํ‚ค (Shard Key):

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ์ค€ ์ปฌ๋Ÿผ
  • ์˜ˆ: user_id, region, hash(id)

์ƒค๋”ฉ ์ „๋žต:

  1. Range-based (๋ฒ”์œ„):

    • user_id 1~1000๋งŒ โ†’ Shard 1
    • ์žฅ์ : ๋‹จ์ˆœ
    • ๋‹จ์ : ํ•ซ์ŠคํŒŸ ๊ฐ€๋Šฅ (ํŠน์ • ๋ฒ”์œ„ ์ง‘์ค‘)
  2. Hash-based (ํ•ด์‹œ):

    • hash(user_id) % N โ†’ Shard ๋ฒˆํ˜ธ
    • ์žฅ์ : ๊ท ๋“ฑ ๋ถ„์‚ฐ
    • ๋‹จ์ : ๋ฒ”์œ„ ๊ฒ€์ƒ‰ ์–ด๋ ค์›€
  3. Geographic (์ง€๋ฆฌ):

    • ํ•œ๊ตญ ์‚ฌ์šฉ์ž โ†’ Shard 1 (์„œ์šธ)
    • ๋ฏธ๊ตญ ์‚ฌ์šฉ์ž โ†’ Shard 2 (์บ˜๋ฆฌํฌ๋‹ˆ์•„)
    • ์žฅ์ : ์ง€์—ฐ ์‹œ๊ฐ„ โ†“

Sharding์˜ ์–ด๋ ค์›€ โญ :

  1. JOIN ์–ด๋ ค์›€:

    • ๋‹ค๋ฅธ Shard์˜ ๋ฐ์ดํ„ฐ๋ฅผ JOIN ๋ชป ํ•จ
    • โ†’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ JOIN ์ฒ˜๋ฆฌ
  2. ํŠธ๋žœ์žญ์…˜ ๋ถ„์‚ฐ:

    • ์—ฌ๋Ÿฌ Shard ๊ฑธ์นœ ํŠธ๋žœ์žญ์…˜ ์–ด๋ ค์›€
    • โ†’ ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜ (2PC, Saga)
  3. ์žฌ์ƒค๋”ฉ ๋น„์šฉ:

    • Shard ์ถ”๊ฐ€ ์‹œ ๋ฐ์ดํ„ฐ ์žฌ๋ถ„๋ฐฐ
    • ์šด์˜ ์ค‘ ํฐ ๋ถ€๋‹ด
  4. ์ƒค๋“œ ํ‚ค ์„ ํƒ์˜ ์–ด๋ ค์›€:

    • ์ž˜๋ชป ๊ณ ๋ฅด๋ฉด ํ•ซ์ŠคํŒŸ ๋ฐœ์ƒ

NoSQL๊ณผ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ถํ•ฉ:

  • NoSQL์€ JOIN ์•ˆ ์”€ โ†’ Sharding ์นœํ™”์ 
  • โ†’ 13์ฃผ์ฐจ Phase 5์˜ Scale-Out ํ•ต์‹ฌ

ILIC ์ ์šฉ ์‹œ ๊ฒ€ํ† :

  • 102 ํ…Œ์ด๋ธ”์ด ์ •๋ง ํ•œ DB๋กœ ๋ถ€์กฑํ•œ์ง€ ๋จผ์ € ๊ฒ€์ฆ
  • ๋ณดํ†ต ์ˆ˜์ง ํ™•์žฅ(Scale-Up) + Replica๋กœ ์ถฉ๋ถ„
  • Sharding์€ ์ •๋ง ๋งˆ์ง€๋ง‰ ์นด๋“œ

์ž๊ธฐ ์ ๊ฒ€

  • ์šด์ž„ ๊ฒฌ์  1์–ต ๊ฑด์ด ๋˜๋ฉด Sharding์ด ๋‹ต์ธ๊ฐ€? (ํžŒํŠธ: ๋จผ์ € Partitioning ๊ฒ€ํ† )
  • ํ•ซ์ŠคํŒŸ ์‚ฌ๋ก€๋ฅผ ๋“ค์–ด๋ณด๋ผ (ํžŒํŠธ: ์ธ๊ธฐ ์ƒํ’ˆ, VIP ๊ณ ๊ฐ)

Unit 4.2 โ€” Partitioning (๋‹จ์ผ DB ๋‚ด ๋ถ„ํ• )

์„ ์ˆ˜ ์ง€์‹: Unit 4.1

ํ•ต์‹ฌ ์ฐจ์ด โญ :

PartitioningSharding
๋ถ„ํ•  ๋‹จ์œ„๋‹จ์ผ DB ๋‚ด ํ…Œ์ด๋ธ”์—ฌ๋Ÿฌ DB ์„œ๋ฒ„
์œ„์น˜ํ•œ DBMS๋ถ„์‚ฐ ์‹œ์Šคํ…œ
๊ด€๋ฆฌDBMS ์ž๋™์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
ํŠธ๋žœ์žญ์…˜์ •์ƒ๋ถ„์‚ฐ ์–ด๋ ค์›€
๋ณต์žก๋„๋‚ฎ์Œ๋†’์Œ

Partitioning์˜ ๋ณธ์งˆ:

"ํ•œ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ์  ์กฐ๊ฐ์œผ๋กœ ๋ถ„ํ•  โ€” DBMS๊ฐ€ ์ž๋™ ๋ผ์šฐํŒ…"


Partition ์ข…๋ฅ˜:

1. Range Partitioning (๋ฒ”์œ„):

CREATE TABLE sales (
    sale_date DATE,
    amount DECIMAL
)
PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION p2025 VALUES LESS THAN (2026)
);

2. List Partitioning (๋ชฉ๋ก):

PARTITION BY LIST (region) (
    PARTITION p_kr VALUES IN ('SEOUL', 'BUSAN'),
    PARTITION p_us VALUES IN ('NY', 'LA')
);

3. Hash Partitioning (ํ•ด์‹œ):

PARTITION BY HASH (user_id) PARTITIONS 4;
-- 4๊ฐœ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ท ๋“ฑ ๋ถ„์‚ฐ

4. Key Partitioning:

  • Hash์™€ ์œ ์‚ฌ, MySQL ์ž์ฒด ํ•จ์ˆ˜ ์‚ฌ์šฉ

Partitioning์˜ ํšจ๊ณผ:

  1. ์ฟผ๋ฆฌ ์„ฑ๋Šฅ โ†‘:

    • WHERE ์กฐ๊ฑด์ด ํŒŒํ‹ฐ์…˜ ํ‚ค์™€ ์ผ์น˜ โ†’ ํ•ด๋‹น ํŒŒํ‹ฐ์…˜๋งŒ ์Šค์บ” (Partition Pruning)
    • ์˜ˆ: WHERE sale_date = '2024-...' โ†’ p2024 ํŒŒํ‹ฐ์…˜๋งŒ ์กฐํšŒ
  2. ๊ด€๋ฆฌ ์šฉ์ด:

    • ์˜ค๋ž˜๋œ ํŒŒํ‹ฐ์…˜ โ†’ DROP์œผ๋กœ ๋น ๋ฅธ ์‚ญ์ œ
    • DELETE๋Š” ๋А๋ฆฌ์ง€๋งŒ DROP PARTITION์€ ์ฆ‰์‹œ
  3. ์ธ๋ฑ์Šค ๋ถ€๋‹ด โ†“:

    • ํŒŒํ‹ฐ์…˜๋ณ„ ์ธ๋ฑ์Šค โ†’ ์ž‘์€ ํŠธ๋ฆฌ โ†’ ๋น ๋ฅธ ๊ฒ€์ƒ‰

ILIC ์ ์šฉ ๊ฐ€๋Šฅ:

  • ์ผ๋ณ„ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ โ†’ Range Partitioning by date
  • ์ง€์—ญ๋ณ„ ์šด์ž„ โ†’ List Partitioning

Partitioning ์šฐ์„ , Sharding์€ ๋งˆ์ง€๋ง‰:

  • 1์–ต ํ–‰ โ†’ Partitioning์œผ๋กœ ์ถฉ๋ถ„
  • 100์–ต ํ–‰, ๋‹จ์ผ ์„œ๋ฒ„ ํ•œ๊ณ„ โ†’ Sharding ๊ฒ€ํ† 

์ž๊ธฐ ์ ๊ฒ€

  • Partitioning๊ณผ ์ธ๋ฑ์Šค์˜ ๊ด€๊ณ„๋Š”? (ํžŒํŠธ: ํŒŒํ‹ฐ์…”๋‹์€ ์ธ๋ฑ์Šค + ฮฑ ํšจ๊ณผ)
  • ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ์— Partitioning์ด ํšจ๊ณผ์ ์ธ ์ด์œ ๋Š”? (ํžŒํŠธ: DROP PARTITION ์ฆ‰์‹œ)

๐Ÿ“š Phase 5 โ€” DELETE/TRUNCATE/DROP๊ณผ ROLLBACK ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ชฉํ‘œ: ์ž์ฃผ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ์‚ญ์ œ ๋ช…๋ น์˜ ์ฐจ์ด์™€ ROLLBACK ๊ฐ€๋Šฅ ์—ฌ๋ถ€์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•œ๋‹ค.

Unit 5.1 โ€” DELETE vs TRUNCATE vs DROP (โ˜… ๋ฉด์ ‘ ๋‹จ๊ณจ)

์„ ์ˆ˜ ์ง€์‹: 6์ฃผ์ฐจ Phase 6, 10์ฃผ์ฐจ Phase 5

ํ•ต์‹ฌ ๋น„๊ต โญ :

DELETETRUNCATEDROP
๋ถ„๋ฅ˜DMLDDLDDL
๋Œ€์ƒํŠน์ • ํ–‰๋ชจ๋“  ํ–‰ํ…Œ์ด๋ธ” ์ž์ฒด
WHERE ์ ˆ๊ฐ€๋Šฅ๋ถˆ๊ฐ€๋ถˆ๊ฐ€
์†๋„๋А๋ฆผ๋น ๋ฆ„์ฆ‰์‹œ
ROLLBACK๊ฐ€๋Šฅ โœ…๋ถˆ๊ฐ€ โŒ๋ถˆ๊ฐ€ โŒ
AUTO_INCREMENT์œ ์ง€์ดˆ๊ธฐํ™”(ํ…Œ์ด๋ธ” ์‚ฌ๋ผ์ง)
์ธ๋ฑ์Šค/์ œ์•ฝ์กฐ๊ฑด์œ ์ง€์œ ์ง€์‚ญ์ œ
ํŠธ๋ฆฌ๊ฑฐ ๋ฐœ๋™โœ…โŒโŒ

DELETE โ€” ์•ˆ์ „ํ•œ ์‚ญ์ œ:

DELETE FROM users WHERE id = 5;
DELETE FROM users WHERE created_at < '2020-01-01';

-- ROLLBACK ๊ฐ€๋Šฅ
START TRANSACTION;
DELETE FROM users WHERE id = 5;
ROLLBACK;  -- ๋ณต๊ตฌ๋จ

์™œ ๋А๋ฆฐ๊ฐ€:

  • ํ–‰๋งˆ๋‹ค ๊ฐœ๋ณ„ ์‚ญ์ œ
  • ํŠธ๋ฆฌ๊ฑฐ ๋ฐœ๋™
  • UNDO LOG ์ž‘์„ฑ (๋กค๋ฐฑ์šฉ)

TRUNCATE โ€” ๋น ๋ฅธ ์ „์ฒด ์‚ญ์ œ:

TRUNCATE TABLE users;
-- ๋ชจ๋“  ํ–‰ ์‚ญ์ œ (๊ตฌ์กฐ๋Š” ์œ ์ง€)

์™œ ๋น ๋ฅธ๊ฐ€:

  • ํ–‰ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ ํ…Œ์ด๋ธ” ์žฌ์ƒ์„ฑ ๋ฐฉ์‹
  • UNDO LOG ์•ˆ ์”€ โ†’ ROLLBACK ๋ถˆ๊ฐ€

์ฃผ์˜:

  • AUTO_INCREMENT ์ดˆ๊ธฐํ™” โ†’ ID 1๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘
  • ์™ธ๋ž˜ํ‚ค ์ฐธ์กฐ ์‹œ ์‹คํŒจ ๊ฐ€๋Šฅ

DROP โ€” ์™„์ „ ์ œ๊ฑฐ:

DROP TABLE users;
-- ํ…Œ์ด๋ธ” + ๋ฐ์ดํ„ฐ + ์ธ๋ฑ์Šค + ์ œ์•ฝ์กฐ๊ฑด + ํŠธ๋ฆฌ๊ฑฐ ๋ชจ๋‘ ์‚ญ์ œ

๋ณต๊ตฌ ๋ถˆ๊ฐ€:

  • ๋ฐฑ์—… ์—†์œผ๋ฉด ๋
  • ์šด์˜์—์„œ๋Š” ๋งค์šฐ ์‹ ์ค‘ํ•˜๊ฒŒ

์–ธ์ œ ๋ฌด์—‡์„?:

์ƒํ™ฉ๋ช…๋ น
์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์‚ญ์ œDELETE
๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ (ํ…Œ์ด๋ธ” ์œ ์ง€)TRUNCATE
ํ…Œ์ด๋ธ” ์ž์ฒด ์ œ๊ฑฐDROP
ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์•ˆ์ „ํ•˜๊ฒŒDELETE

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์‚ฌ์šฉ์ž๊ฐ€ ์šด์ž„ ๊ฒฌ์  ์ทจ์†Œ โ†’ DELETE
  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” โ†’ TRUNCATE
  • ๋” ์ด์ƒ ์•ˆ ์“ฐ๋Š” ์ž„์‹œ ํ…Œ์ด๋ธ” โ†’ DROP

์ž๊ธฐ ์ ๊ฒ€

  • TRUNCATE๋Š” ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ROLLBACK ๊ฐ€๋Šฅํ•œ๊ฐ€? (ํžŒํŠธ: NO โ€” DDL์ด๋ผ ์ž๋™ ์ปค๋ฐ‹)
  • DELETE ํ›„ AUTO_INCREMENT ๊ฐ’์€? (ํžŒํŠธ: ์œ ์ง€ โ€” ๋‹ค์Œ ID๋Š” ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ)

Unit 5.2 โ€” ROLLBACK๊ณผ UNDO LOG

์„ ์ˆ˜ ์ง€์‹: Unit 5.1, 6์ฃผ์ฐจ Phase 6 (ACID)

ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜

ROLLBACK์ด ๊ฐ€๋Šฅํ•œ ์ด์œ :

"UNDO LOG ๋•๋ถ„"

UNDO LOG:

  • ํŠธ๋žœ์žญ์…˜์ด ๋ณ€๊ฒฝํ•œ ์ด์ „ ์ƒํƒœ๋ฅผ ์ €์žฅ
  • ๋ณ€๊ฒฝ ์ „์˜ ๊ฐ’(Before Image) ๊ธฐ๋ก
  • ROLLBACK ์‹œ ์ด์ „ ์ƒํƒœ๋กœ ๋ณต์›

์˜ˆ์‹œ ํ๋ฆ„:

1. UPDATE users SET age = 30 WHERE id = 1;
   (age๋Š” ์›๋ž˜ 25์˜€์Œ)

2. UNDO LOG ๊ธฐ๋ก: "id=1์˜ age๋ฅผ 25๋กœ ๋˜๋Œ๋ฆด ๊ฒƒ"

3. ROLLBACK ํ˜ธ์ถœ
   โ†’ UNDO LOG ์ ์šฉ
   โ†’ age = 25 ๋ณต๊ตฌ

InnoDB์˜ ๋‘ ๋กœ๊ทธ โญ :

UNDO LOGREDO LOG
๋ชฉ์ ROLLBACK ์ง€์›๋ณต๊ตฌ (Crash Recovery)
์‹œ์ ํŠธ๋žœ์žญ์…˜ ์ค‘๋ณ€๊ฒฝ ์ฆ‰์‹œ
๋‚ด์šฉ์ด์ „ ์ƒํƒœ (Before)๋ณ€๊ฒฝ ํ›„ (After)
์šฉ๋„๋กค๋ฐฑยทMVCCDurability ๋ณด์žฅ

MVCC (Multi-Version Concurrency Control):

  • 10์ฃผ์ฐจ Phase 5์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์—์„œ ๋ณธ ๊ฐœ๋…
  • UNDO LOG์˜ ์ด์ „ ๋ฒ„์ „ ํ™œ์šฉ โ†’ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ผ๊ด€๋œ ์Šค๋ƒ…์ƒท ์กฐํšŒ

TRUNCATE๋Š” ์™œ ROLLBACK ์•ˆ ๋˜๋‚˜:

  • DDL์€ ์ž๋™ ์ปค๋ฐ‹ (Auto-commit)
  • UNDO LOG ์ž‘์„ฑ ์•ˆ ํ•จ
  • ๋น ๋ฅด์ง€๋งŒ ์œ„ํ—˜

DELETE์˜ ๋น„์šฉ:

  • ๋ชจ๋“  ๋ณ€๊ฒฝ์— UNDO LOG ์ž‘์„ฑ
  • โ†’ 100๋งŒ ํ–‰ DELETE ์‹œ UNDO LOG๋„ 100๋งŒ ๊ฑด
  • โ†’ ๋””์Šคํฌ ๊ณต๊ฐ„ + ์„ฑ๋Šฅ ๋ถ€๋‹ด

ILIC ์ ์šฉ:

  • ์ผ๋ฐ˜ ๋น„์ฆˆ๋‹ˆ์Šค ์ž‘์—… โ†’ DELETE + ํŠธ๋žœ์žญ์…˜ (์•ˆ์ „)
  • ๋Œ€๋Ÿ‰ ์ •๋ฆฌ ์ž‘์—… โ†’ TRUNCATE (๋น ๋ฆ„, ๋‹จ ๋ฐฑ์—… ํ›„)
  • ์šด์˜ ์ค‘ ์ ˆ๋Œ€ ์‚ฌ์šฉ X โ†’ DROP

์ž๊ธฐ ์ ๊ฒ€

  • ROLLBACK์ด ๋ฌดํ•œ์ • ๊ฐ€๋Šฅํ•œ๊ฐ€? (ํžŒํŠธ: NO โ€” UNDO LOG์— ์‹œ๊ฐ„/๊ณต๊ฐ„ ํ•œ๊ณ„)
  • 11์ฃผ์ฐจ ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)๋Š” UNDO LOG์™€ ๊ฐ™์€๊ฐ€? (ํžŒํŠธ: ๋‹ค๋ฆ„ โ€” JPA๋Š” ๋ฉ”๋ชจ๋ฆฌ, UNDO๋Š” DB)

๐Ÿ“š Phase 6 โ€” SQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

๋ชฉํ‘œ: TriggerยทJOINยทVIEWยทPROCEDURE ๋“ฑ SQL์˜ ๋„๊ตฌํ•จ์„ ์ •๋ฆฌํ•œ๋‹ค.

Unit 6.1 โ€” Trigger (์ž๋™ ์‹คํ–‰ ์ฝ”๋“œ)

์„ ์ˆ˜ ์ง€์‹: Phase 5

ํ•ต์‹ฌ ๊ฐœ๋…

Trigger:

"INSERT/UPDATE/DELETE ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ"

์˜ˆ์‹œ โ€” ํ•™์ƒ ์‚ญ์ œ ์‹œ ์ด๋ ฅ ๋ณด๊ด€:

CREATE TRIGGER trg_student_delete
AFTER DELETE ON students
FOR EACH ROW
BEGIN
    INSERT INTO deleted_students (id, name, deleted_at)
    VALUES (OLD.id, OLD.name, NOW());
END;

์ž‘๋™:

DELETE FROM students WHERE id = 5;
-- โ†’ ์ž๋™์œผ๋กœ deleted_students์— INSERT

ํŠธ๋ฆฌ๊ฑฐ ์ข…๋ฅ˜:

์‹œ์ :

  • BEFORE โ€” ์ž‘์—… ์ „ ์‹คํ–‰
  • AFTER โ€” ์ž‘์—… ํ›„ ์‹คํ–‰

์ด๋ฒคํŠธ:

  • INSERT / UPDATE / DELETE

๋ฒ”์œ„:

  • FOR EACH ROW โ€” ํ–‰๋งˆ๋‹ค
  • FOR EACH STATEMENT โ€” ๋ช…๋ น๋งˆ๋‹ค (MySQL ๋ฏธ์ง€์›)

ํ™œ์šฉ ์‚ฌ๋ก€ โญ :

  1. ๊ฐ์‚ฌ ๋กœ๊ทธ (Audit Trail) โ€” ๋ณ€๊ฒฝ ์ด๋ ฅ ์ถ”์ 
  2. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ โ€” ๋ณต์žกํ•œ ๊ฒ€์ฆ
  3. ์ž๋™ ๊ณ„์‚ฐ โ€” ํ•ฉ๊ณ„ ์ž๋™ ๊ฐฑ์‹ 
  4. ์•Œ๋ฆผ โ€” ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ์•Œ๋ฆผ ํŠธ๋ฆฌ๊ฑฐ

ILIC ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ:

  • ์šด์ž„ ๊ฒฌ์  ๋ณ€๊ฒฝ ์ด๋ ฅ ์ž๋™ ๊ธฐ๋ก
  • ์‚ฌ์šฉ์ž ์ •๋ณด ๋ณ€๊ฒฝ ์‹œ ๊ฐ์‚ฌ ๋กœ๊ทธ
  • โ†’ 11-12์ฃผ์ฐจ ILIC์˜ 2-layer history ์‹œ์Šคํ…œ (Spring AOP ํ™œ์šฉ)์ด ํŠธ๋ฆฌ๊ฑฐ์˜ ๋Œ€์•ˆ

Trigger์˜ ๋‹จ์  โš ๏ธ :

  1. ์ˆจ๊ฒจ์ง„ ๋™์ž‘ โ€” ์ฝ”๋“œ๋งŒ ๋ด์„œ๋Š” ์•Œ ์ˆ˜ ์—†์Œ
  2. ๋””๋ฒ„๊น… ์–ด๋ ค์›€ โ€” ํ๋ฆ„ ์ถ”์  ๊ณค๋ž€
  3. ์„ฑ๋Šฅ ๋ถ€๋‹ด โ€” ๋Œ€๋Ÿ‰ ์ž‘์—… ์‹œ ๋ˆ„์ 
  4. ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€ โ€” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ถˆ๊ฐ€

์‹ค๋ฌด ๊ถŒ์žฅ:

  • ๊ฐ„๋‹จํ•œ ๊ฐ์‚ฌ ๋กœ๊ทธ ์™ธ์—๋Š” ํŠธ๋ฆฌ๊ฑฐ ์ง€์–‘
  • ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง โ†’ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด
  • Spring AOP๊ฐ€ ๋” ์ข‹์€ ๋Œ€์•ˆ (8-9์ฃผ์ฐจ)

์ž๊ธฐ ์ ๊ฒ€

  • Trigger์™€ Spring AOP์˜ ๋น„๊ต โ€” ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์–ด๋””์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์ข‹์„๊นŒ?
  • ILIC์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ ์‹œ์Šคํ…œ์„ ํŠธ๋ฆฌ๊ฑฐ vs AOP ์ค‘ ๋ฌด์—‡์œผ๋กœ ํ–ˆ๊ณ  ์™œ?

Unit 6.2 โ€” INNER JOIN vs OUTER JOIN โญ

์„ ์ˆ˜ ์ง€์‹: 6์ฃผ์ฐจ Phase 6 (JOIN)

ํ•ต์‹ฌ ๊ฐœ๋…

JOIN์˜ ๋ณธ์งˆ:

"๋‘ ๊ฐœ ์ด์ƒ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ"

INNER JOIN โ€” ๋งค์นญ๋งŒ ํฌํ•จ:

SELECT u.name, o.product
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

โ†’ users์™€ orders ์–‘์ชฝ ๋ชจ๋‘์— ๋งค์นญ๋˜๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜
โ†’ ๋งค์นญ ์•ˆ ๋˜๋Š” user๋Š” ๊ฒฐ๊ณผ์—์„œ ๋น ์ง


OUTER JOIN โ€” ๋ชจ๋“  ํ–‰ ํฌํ•จ:

LEFT OUTER JOIN (์™ผ์ชฝ ๊ธฐ์ค€):

SELECT u.name, o.product
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

โ†’ users ๋ชจ๋“  ํ–‰ ํฌํ•จ
โ†’ orders ์—†๋Š” user๋Š” NULL๋กœ ์ฑ„์›Œ์ง

RIGHT OUTER JOIN (์˜ค๋ฅธ์ชฝ ๊ธฐ์ค€):

FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

โ†’ orders ๋ชจ๋“  ํ–‰ ํฌํ•จ

FULL OUTER JOIN (์–‘์ชฝ ๋ชจ๋‘):

-- MySQL์€ ๊ธฐ๋ณธ ๋ฏธ์ง€์›, UNION์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
SELECT * FROM A LEFT JOIN B ON ...
UNION
SELECT * FROM A RIGHT JOIN B ON ...;

โ†’ ์–‘์ชฝ ๋ชจ๋“  ํ–‰, ๋งค์นญ ์•ˆ ๋˜๋ฉด NULL


์‹œ๊ฐ์  ๋น„๊ต:

[INNER]
A โˆฉ B (๊ต์ง‘ํ•ฉ๋งŒ)

[LEFT OUTER]
A ์ „์ฒด + (B์—์„œ ๋งค์นญ๋˜๋Š” ๋ถ€๋ถ„)

[RIGHT OUTER]
B ์ „์ฒด + (A์—์„œ ๋งค์นญ๋˜๋Š” ๋ถ€๋ถ„)

[FULL OUTER]
A โˆช B (ํ•ฉ์ง‘ํ•ฉ)

์–ธ์ œ ๋ฌด์—‡์„?:

์ƒํ™ฉJOIN ์ข…๋ฅ˜
์–‘์ชฝ ๋ชจ๋‘ ์žˆ๋Š” ํ–‰๋งŒINNER
์™ผ์ชฝ ๋ชจ๋‘ + ๋งค์นญLEFT
ํ•œ ์ชฝ์ด ์—†์–ด๋„ ๋ชจ๋‘OUTER
๋งค์นญ ์•ˆ ๋˜๋Š” ํ–‰ ์ฐพ๊ธฐLEFT + WHERE B IS NULL

ILIC ์‹œ๋‚˜๋ฆฌ์˜ค:

  • ์ฃผ๋ฌธ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๋งŒ โ†’ INNER
  • ๋ชจ๋“  ์‚ฌ์šฉ์ž + ์ฃผ๋ฌธ (์—†์œผ๋ฉด 0) โ†’ LEFT
  • ์ฃผ๋ฌธ ์•ˆ ํ•œ ์‚ฌ์šฉ์ž ์ฐพ๊ธฐ โ†’ LEFT + IS NULL

JPA์—์„œ์˜ JOIN:

  • 12์ฃผ์ฐจ Phase 9 โ€” JOIN, FETCH JOIN
  • JPQL ๊ธฐ๋ณธ์€ INNER
  • LEFT ๋ช…์‹œ: LEFT JOIN

์ž๊ธฐ ์ ๊ฒ€

  • LEFT JOIN๊ณผ LEFT OUTER JOIN์€ ๋‹ค๋ฅธ๊ฐ€? (ํžŒํŠธ: ๊ฐ™์Œ โ€” OUTER๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ)
  • INNER JOIN์œผ๋กœ ๋งค์นญ ์—†๋Š” ํ–‰์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‚˜? (ํžŒํŠธ: NO โ€” LEFT + IS NULL ํ•„์š”)

Unit 6.3 โ€” VIEW (๊ฐ€์ƒ ํ…Œ์ด๋ธ”)

์„ ์ˆ˜ ์ง€์‹: Unit 6.2

ํ•ต์‹ฌ ๊ฐœ๋…

VIEW:

"์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๊ฐ€์ƒ ํ…Œ์ด๋ธ” โ€” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ •์˜"

์˜ˆ์‹œ:

CREATE VIEW user_orders AS
SELECT users.id, users.name, orders.product
FROM users
INNER JOIN orders ON users.id = orders.user_id;

์‚ฌ์šฉ:

SELECT * FROM user_orders;  -- ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ!

VIEW์˜ ํ™œ์šฉ:

  1. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™”:

    -- ๋ณต์žกํ•œ JOIN์„ ํ•œ ๋ฒˆ ์ •์˜ ํ›„ ์žฌ์‚ฌ์šฉ
    SELECT * FROM monthly_sales_summary;
  2. ๋ณด์•ˆ:

    CREATE VIEW public_users AS
    SELECT id, name FROM users;  -- email, password ์ œ์™ธ
  3. ๊ถŒํ•œ ๋ถ„๋ฆฌ:

    • ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…Œ์ด๋ธ” ์ง์ ‘ ์ ‘๊ทผ X
    • VIEW๋งŒ SELECT ๊ถŒํ•œ ๋ถ€์—ฌ
  4. ๋ ˆ๊ฑฐ์‹œ ํ˜ธํ™˜:

    • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€๊ฒฝ ์‹œ VIEW๋กœ ์ด์ „ ์ธํ„ฐํŽ˜์ด์Šค ์œ ์ง€

VIEW์˜ ํ•œ๊ณ„ โš ๏ธ :

  1. ์„ฑ๋Šฅ โ€” ๋‹จ์ˆœ ์ฟผ๋ฆฌ์ง€๋งŒ ๋งค๋ฒˆ ์›๋ณธ ์ฟผ๋ฆฌ ์‹คํ–‰
  2. ์ˆ˜์ • ์ œ์•ฝ โ€” ๋ณต์žกํ•œ VIEW๋Š” INSERT/UPDATE ๋ถˆ๊ฐ€
  3. ์ธ๋ฑ์Šค X โ€” VIEW ์ž์ฒด์— ์ธ๋ฑ์Šค ๋ชป ๊ฒ€ (Materialized View ์ œ์™ธ)

Materialized View (์ฐธ๊ณ ):

  • ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ ์ €์žฅํ•˜๋Š” VIEW
  • ๋น ๋ฅธ ์กฐํšŒ, ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ํ•„์š”
  • MySQL ๋ฏธ์ง€์›, PostgreSQL/Oracle ์ง€์›

ILIC ์ ์šฉ:

  • ๋ณต์žกํ•œ ์šด์ž„ ํ†ต๊ณ„ ์ฟผ๋ฆฌ โ†’ VIEW๋กœ ์บก์Аํ™”
  • ๋ณด๊ณ ์„œ์šฉ ๋ฐ์ดํ„ฐ โ†’ VIEW

์ž๊ธฐ ์ ๊ฒ€

  • VIEW๋ฅผ ์ž์ฃผ ์“ฐ๋ฉด ์–ด๋–ค ๋ฌธ์ œ? (ํžŒํŠธ: ์˜ตํ‹ฐ๋งˆ์ด์ € ์–ด๋ ค์›€, ์„ฑ๋Šฅ)
  • VIEW์— INSERT๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š”? (ํžŒํŠธ: ๋‹จ์ˆœ ๋‹จ์ผ ํ…Œ์ด๋ธ” VIEW)

Unit 6.4 โ€” PROCEDURE (์ €์žฅ ํ”„๋กœ์‹œ์ €)

์„ ์ˆ˜ ์ง€์‹: Unit 6.3

ํ•ต์‹ฌ ๊ฐœ๋…

PROCEDURE (Stored Procedure):

"๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ •์˜ํ•œ ์ž‘์—…์„ DB์— ์ €์žฅ + ํ˜ธ์ถœ"

์˜ˆ์‹œ:

CREATE PROCEDURE add_user(
    IN p_name VARCHAR(50),
    IN p_email VARCHAR(100)
)
BEGIN
    INSERT INTO users (name, email)
    VALUES (p_name, p_email);
END;

-- ํ˜ธ์ถœ
CALL add_user('Alice', 'alice@example.com');

VIEW vs PROCEDURE โญ :

VIEWPROCEDURE
์šฉ๋„์ •์  ์กฐํšŒ๋™์  ์ฒ˜๋ฆฌ
๋ฐ˜ํ™˜ํ…Œ์ด๋ธ” ํ˜•ํƒœ๊ฒฐ๊ณผ ๋˜๋Š” ์˜ํ–ฅ๋งŒ
๋งค๊ฐœ๋ณ€์ˆ˜Xโœ…
INSERT/UPDATE์ œํ•œ์ ์ž์œ ๋กญ๊ฒŒ
ํ˜ธ์ถœSELECT FROM viewCALL procedure

ํ”„๋กœ์‹œ์ €์˜ ํ™œ์šฉ:

  1. ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง โ€” DB ์•ˆ์—์„œ ์ฒ˜๋ฆฌ
  2. ๋ฐฐ์น˜ ์ž‘์—… โ€” ์—ฌ๋Ÿฌ SQL ๋ฌถ์Œ
  3. ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„ ์ž‘์—… โ€” DB ์ฐจ์›์—์„œ ๊ด€๋ฆฌ
  4. ๊ถŒํ•œ ์บก์Аํ™” โ€” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ง์ ‘ SQL ๊ถŒํ•œ X, ํ”„๋กœ์‹œ์ €๋งŒ

ํ˜„๋Œ€์  ๊ด€์ ์—์„œ์˜ ํ‰๊ฐ€ โš ๏ธ :

๊ณผ๊ฑฐ (1990~2000๋…„๋Œ€):

  • DB๊ฐ€ ๊ฐ•๋ ฅํ•œ ๊ณณ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•ฝํ•จ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ DB์— ๋‘๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์›€
  • ํ”„๋กœ์‹œ์ € ํ™œ๋ฐœํžˆ ์‚ฌ์šฉ

ํ˜„์žฌ:

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด๊ฐ€ ํ’๋ถ€ (Java, Spring)
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‘๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
  • โ†’ ํ”„๋กœ์‹œ์ € ์‚ฌ์šฉ ๊ฐ์†Œ

ํ”„๋กœ์‹œ์ €์˜ ๋‹จ์ :
1. ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€ โ€” DB์— ์˜์กด
2. ๋ฒ„์ „ ๊ด€๋ฆฌ ์–ด๋ ค์›€ โ€” Git ๋“ฑ์œผ๋กœ ๊ด€๋ฆฌ X
3. ํฌํŒ… ์–ด๋ ค์›€ โ€” DBMS๋งˆ๋‹ค ๋ฌธ๋ฒ• ๋‹ค๋ฆ„
4. ๋””๋ฒ„๊น… ์–ด๋ ค์›€
5. CI/CD ์–ด๋ ค์›€

์‹ค๋ฌด ๊ถŒ์žฅ:

"๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—, DB๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์— ์ง‘์ค‘"

๋‹ค๋งŒ ๋‹ค์Œ์€ ํ”„๋กœ์‹œ์ € ์ ํ•ฉ:

  • ๋Œ€๋Ÿ‰ ETL ์ž‘์—…
  • ๋ณด๊ณ ์„œ์šฉ ๋ณต์žก ์ง‘๊ณ„
  • DB ์–ด๋“œ๋ฏผ ์ž‘์—…

Trigger vs VIEW vs PROCEDURE ์ •๋ฆฌ โญ :

TriggerVIEWPROCEDURE
ํ˜ธ์ถœ์ž๋™ (์ด๋ฒคํŠธ)SELECTCALL (์ˆ˜๋™)
๋งค๊ฐœ๋ณ€์ˆ˜OLD/NEWXโœ…
์šฉ๋„์ž๋™ ๋ถ€์ˆ˜ ์ž‘์—…๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋ช…์‹œ์  ์ž‘์—… ๋‹จ์œ„

ILIC ๊ถŒ์žฅ:

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง โ†’ Spring ์„œ๋น„์Šค ๋ ˆ์ด์–ด
  • ๋‹จ์ˆœ ์ฟผ๋ฆฌ ๋‹จ์ˆœํ™” โ†’ VIEW ๊ฐ€๋Šฅ
  • ์ž๋™ ๊ฐ์‚ฌ ๋กœ๊ทธ โ†’ Trigger ๋˜๋Š” AOP (8-9์ฃผ์ฐจ)
  • ๋ณต์žกํ•œ ETL โ†’ PROCEDURE ๋˜๋Š” Spring Batch

์ž๊ธฐ ์ ๊ฒ€

  • ILIC๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ”„๋กœ์‹œ์ €๋กœ ์•ˆ ๋‘๋Š” ์ด์œ ๋Š”? (ํžŒํŠธ: ํ…Œ์ŠคํŠธ, ๋ฒ„์ „ ๊ด€๋ฆฌ)
  • ํ”„๋กœ์‹œ์ €๋ฅผ ์ •๋ง ์จ์•ผ ํ•  ๊ฒฝ์šฐ๋Š”? (ํžŒํŠธ: DB ๊ด€๋ฆฌ, ๋Œ€๋Ÿ‰ ETL)

๐ŸŽ“ ์ข…ํ•ฉ ์ž๊ธฐ ์ ๊ฒ€ (14์ฃผ์ฐจ ์กธ์—… ์‹œํ—˜)

๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ธ์ฝ”๋”ฉ

  1. CHAR์™€ VARCHAR์˜ ์ฐจ์ด๋ฅผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ?
  2. CHAR(255)์— 'A' ์ €์žฅ ์‹œ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์€?
  3. BLOB๊ณผ TEXT์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š”?
  4. utf8_general_ci์—์„œ 'ci'์˜ ์˜๋ฏธ๋Š”?
  5. MySQL์—์„œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๊ฒ€์ƒ‰์„ ๊ฐ•์ œํ•˜๋ ค๋ฉด?

DB Clustering

  1. Clustering์˜ ์ •์˜์™€ ๋‹จ์ผ ์„œ๋ฒ„ ๋Œ€๋น„ ์ด์ ์€?
  2. Active-Active์™€ Active-Standby์˜ ์ฐจ์ด๋Š”?
  3. ํด๋Ÿฌ์Šคํ„ฐ์— ์ตœ์†Œ 3๊ฐœ ๋…ธ๋“œ๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋Š”?
  4. Split Brain์˜ ์ •์˜์™€ ์œ„ํ—˜์„ฑ์€?

Replication๊ณผ PXC

  1. Master-Slave Replication์˜ ๊ตฌ์กฐ์™€ ์ด์ ์€?
  2. Replication๊ณผ Clustering์˜ ๊ฒฐ์ •์  ์ฐจ์ด 3๊ฐ€์ง€๋Š”?
  3. PXC๊ฐ€ ์ผ๋ฐ˜ Replication๋ณด๋‹ค ์ข‹์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š”?
  4. XtraBackup์ด mysqldump๋ณด๋‹ค ์ ํ•ฉํ•œ ๊ฒฝ์šฐ๋Š”?

๋ฐ์ดํ„ฐ ๋ถ„ํ• 

  1. Sharding๊ณผ Partitioning์˜ ์ฐจ์ด๋Š”?
  2. Hash-based Sharding์˜ ์žฅ๋‹จ์ ์€?
  3. Range Partitioning์ด ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ ์‚ฌ๋ก€๋Š”?
  4. "Partitioning ์šฐ์„ , Sharding์€ ๋งˆ์ง€๋ง‰"์˜ ์˜๋ฏธ๋Š”?

์‚ญ์ œ ๋ช…๋ น๊ณผ ROLLBACK

  1. DELETE/TRUNCATE/DROP ์ฐจ์ด๋ฅผ ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋ผ
  2. TRUNCATE๊ฐ€ ROLLBACK ์•ˆ ๋˜๋Š” ์ด์œ ๋Š”?
  3. UNDO LOG์™€ REDO LOG์˜ ์ฐจ์ด๋Š”?
  4. AUTO_INCREMENT ๊ฐ’์ด DELETE/TRUNCATE ํ›„ ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฐ€?

SQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

  1. Trigger์˜ ํ™œ์šฉ ์‚ฌ๋ก€ 3๊ฐ€์ง€๋Š”?
  2. Trigger์˜ ๋‹จ์  4๊ฐ€์ง€์™€ ๋Œ€์•ˆ(AOP)์˜ ๋น„๊ต๋Š”?
  3. INNER JOIN๊ณผ LEFT OUTER JOIN์˜ ๊ฒฐ๊ณผ ์ฐจ์ด๋ฅผ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์„ค๋ช…ํ•˜๋ผ
  4. "์ฃผ๋ฌธ ์•ˆ ํ•œ ์‚ฌ์šฉ์ž ์ฐพ๊ธฐ" SQL์„ ์ž‘์„ฑํ•˜๋ผ
  5. VIEW์˜ ํ™œ์šฉ ์‚ฌ๋ก€ 4๊ฐ€์ง€๋Š”?
  6. VIEW์™€ PROCEDURE์˜ ๊ฒฐ์ •์  ์ฐจ์ด๋Š”?
  7. ํ˜„๋Œ€ ์‹ค๋ฌด์—์„œ PROCEDURE ์‚ฌ์šฉ์ด ์ค„์–ด๋“  ์ด์œ  3๊ฐ€์ง€๋Š”?

๐Ÿ“Œ ํ•™์Šต ์šด์˜ ํŒ

9-์„น์…˜ ๋งˆ์Šคํ„ฐ ํ”„๋กฌํ”„ํŠธ๋กœ ๊นŠ์ด ํŒŒ์•ผ ํ•  Unit

โ˜…โ˜…โ˜… ๋ฉด์ ‘ยท์‹ค๋ฌด ๋‹จ๊ณจ (๋ฐ˜๋“œ์‹œ):

  • Unit 2.3 โ€” Quorum๊ณผ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ˆ˜
  • Unit 3.2 โ€” Replication vs Cluster
  • Unit 5.1 โ€” DELETE vs TRUNCATE vs DROP
  • Unit 6.2 โ€” INNER vs OUTER JOIN

โ˜…โ˜… ๋งค์šฐ ๊ถŒ์žฅ:

  • Unit 4.1~4.2 โ€” Sharding๊ณผ Partitioning ์ฐจ์ด
  • Unit 5.2 โ€” UNDO LOG์™€ ROLLBACK
  • Unit 6.3 โ€” VIEW์˜ ํ™œ์šฉ
  • Unit 6.4 โ€” PROCEDURE์˜ ํ˜„์žฌ ์œ„์น˜

Phase๋ณ„ ์ง„๋„ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

[ ] Phase 1 โ€” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ธ์ฝ”๋”ฉ (Unit 1.1~1.3)
[ ] Phase 2 โ€” DB Clustering (Unit 2.1~2.3)
[ ] Phase 3 โ€” Replication๊ณผ ๋ฐฑ์—… (Unit 3.1~3.3)
[ ] Phase 4 โ€” Sharding๊ณผ Partitioning (Unit 4.1~4.2)
[ ] Phase 5 โ€” DELETE/TRUNCATE/DROP๊ณผ ROLLBACK (Unit 5.1~5.2)
[ ] Phase 6 โ€” SQL ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ (Unit 6.1~6.4)
[ ] ์ข…ํ•ฉ ์ž๊ธฐ ์ ๊ฒ€ 28๋ฌธํ•ญ ํ†ต๊ณผ

13์ฃผ์ฐจ + 14์ฃผ์ฐจ = DB ์˜์—ญ ์™„๊ฒฐ

13์ฃผ์ฐจ (์ด๋ก ):

  • ์ •๊ทœํ™” โ†’ NoSQL โ†’ CAP/PACELC โ†’ ์˜ตํ‹ฐ๋งˆ์ด์ € โ†’ ์ธ๋ฑ์Šค

14์ฃผ์ฐจ (์šด์˜):

  • ๋ฐ์ดํ„ฐ ํƒ€์ž… โ†’ Clustering โ†’ Replication โ†’ Sharding/Partitioning โ†’ SQL ๋„๊ตฌ

โ†’ ์ด์ œ DB ๋ฉด์ ‘์—์„œ ๋งˆ์ฃผ์น  ๋Œ€๋ถ€๋ถ„์˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•™์Šต ์‹œ ์ฃผ์˜

์ด๋ฒˆ ์ฃผ์ฐจ๋Š” ์šด์˜ ์‹ค๋ฌด ์ƒ‰์ฑ„๊ฐ€ ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์†์„ ๋”๋Ÿฝํ˜€์•ผ ์ฒดํ™”๋ฉ๋‹ˆ๋‹ค:

  1. Phase 2-3 (Clustering/Replication):

    • Docker Compose๋กœ MySQL Replication ํ™˜๊ฒฝ ๊ตฌ์ถ•
    • ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋‹ค์šด โ†’ ๋™์ž‘ ํ™•์ธ
    • PXC๋„ Docker๋กœ ์‹œ๋„ (์‹œ๊ฐ„ ์—ฌ์œ  ์žˆ๋‹ค๋ฉด)
  2. Phase 4 (Partitioning):

    • ์ง์ ‘ RANGE PARTITION ํ…Œ์ด๋ธ” ์ƒ์„ฑ
    • EXPLAIN์œผ๋กœ Partition Pruning ํ™•์ธ
  3. Phase 5 (DELETE/TRUNCATE/DROP):

    • ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ๊ฐ ๋ช…๋ น ์‹คํ–‰ ํ›„ ROLLBACK ์‹œ๋„
    • AUTO_INCREMENT ๋™์ž‘ ํ™•์ธ
  4. Phase 6 (Trigger/VIEW/PROCEDURE):

    • ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๊ณ , ILIC ์–ด๋–ค ์˜์—ญ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ๊ฒ€ํ† 

ํŠนํžˆ ILIC์™€ ์—ฐ๊ฒฐํ•ด์„œ ์ƒ๊ฐํ•˜์„ธ์š”:

  • 102 ํ…Œ์ด๋ธ” ์ค‘ ํŒŒํ‹ฐ์…”๋‹ ํ›„๋ณด๋Š”?
  • Read Replica๋ฅผ ๋„์ž…ํ•œ๋‹ค๋ฉด ์–ด๋–ค ํŠธ๋ž˜ํ”ฝ์ด ๋ถ„์‚ฐ๋ ๊นŒ?
  • ๋ณ€๊ฒฝ ์ด๋ ฅ ์‹œ์Šคํ…œ์„ Trigger๋กœ ํ–ˆ๋”๋ผ๋ฉด ์–ด๋• ์„๊นŒ? (AOP์™€์˜ ๋น„๊ต)

profile
Software Developer

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