Home > CS > 2024 > πŸ’Ύ [CS] 데이터 μ •ν•©μ„±(Data Integrity)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ [CS] 데이터 μ •ν•©μ„±(Data Integrity)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
CS

πŸ’Ύ [CS] 데이터 μ •ν•©μ„±(Data Integrity)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

  • λ°μ΄ν„°μ˜ μ •ν™•μ„±, 일관성, 신뒰성을 μœ μ§€ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
  • 데이터 μ •ν•©μ„±(Data Integrity)이 보μž₯되면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 둜직과 λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ 데이터가 μ„œλ‘œ 일관성 있게 μœ μ§€λ˜λ©°, 데이터가 μ˜λ„ν•˜μ§€ μ•Šμ€ λ³€κ²½ 없이 μ‹ λ’°μ„± 있게 κ΄€λ¦¬λ©λ‹ˆλ‹€.
    • μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ™€ κ΄€λ ¨λœ λͺ¨λ“  μ‹œμŠ€ν…œμ—μ„œ 맀우 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€.

1️⃣ 데이터 μ •ν•©μ„±(Data Integrity)이 μ€‘μš”ν•œ 이유.

  • 데이터 μ •ν•©μ„±(Data Integrity)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터가 μ •ν™•ν•˜κ³ , 였λ₯˜ 없이 μœ μ§€λ  수 μžˆλ„λ‘ ν•˜μ—¬, μ˜¬λ°”λ₯Έ 데이터 기반으둜 μ‹œμŠ€ν…œμ΄ 운영되게 ν•©λ‹ˆλ‹€.
    • λ§Œμ•½ 데이터 μ •ν•©μ„±(Data Integrity)이 깨진닀면, 잘λͺ»λœ λ°μ΄ν„°λ‘œ 인해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 잘λͺ»λœ λ™μž‘μ„ μˆ˜ν–‰ν•  수 있으며, μ΄λŠ” μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ„ μ£Όκ³ , μ‹œμŠ€ν…œμ˜ 신뒰성을 λ–¨μ–΄λœ¨λ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ 데이터 μ •ν•©μ„±(Data Integrity)의 μ’…λ₯˜.

  • 데이터 μ •ν•©μ„±(Data Integrity)λŠ” 크게 μ •ν•©μ„±, μ°Έμ‘° μ •ν•©μ„±, λΉ„μ¦ˆλ‹ˆμŠ€ μ •ν•©μ„±μœΌλ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ μ—”ν‹°ν‹° μ •ν•©μ„±(Entity Integrity)

  • 각 μ—”ν‹°ν‹°(ν…Œμ΄λΈ”)의 κΈ°λ³Έ ν‚€(Primary Key)λŠ” μœ μΌν•˜κ³  μ€‘λ³΅λ˜μ§€ μ•ŠμœΌλ©° NULL이 될 수 μ—†μŒμ„ 보μž₯ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, User ν…Œμ΄λΈ”μ˜ id ν•„λ“œκ°€ μ€‘λ³΅λ˜μ§€ μ•Šκ³  NULL 값이 μ—†λŠ” 경우, μ΄λŠ” μ—”ν‹°ν‹° 정합성이 μœ μ§€λœ κ²ƒμž…λ‹ˆλ‹€.

2️⃣ μ°Έμ‘° μ •ν•©μ„±(Referential Integrity)

  • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ™Έλž˜ ν‚€(Foreign Key)λ₯Ό 톡해 μ—°κ΄€λœ ν…Œμ΄λΈ” κ°„μ˜ 관계가 μΌκ΄€λ˜κ²Œ μœ μ§€λ¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Order ν…Œμ΄λΈ”μ΄ User ν…Œμ΄λΈ”μ˜ μ™Έλž˜ ν‚€λ‘œ user_idλ₯Ό κ°€μ§€λŠ” 경우, λͺ¨λ“  Orderκ°€ μ‘΄μž¬ν•˜λŠ” user_idλ₯Ό κ°€μ Έμ•Ό μ°Έμ‘° 정합성이 μœ μ§€λ©λ‹ˆλ‹€.
      • λ§Œμ•½ User ν…Œμ΄λΈ”μ—μ„œ μ‚­μ œλœ μ‚¬μš©μžμ˜ user_idκ°€ Order ν…Œμ΄λΈ”μ— 남아 있으면 μ°Έμ‘° 정합성이 깨진 κ²ƒμž…λ‹ˆλ‹€.

3️⃣ λΉ„μ¦ˆλ‹ˆμŠ€ μ •ν•©μ„±(Business Integrity)

  • λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 따라 νŠΉμ • 쑰건듀이 μΌκ΄€λ˜κ²Œ μœ μ§€λ¨μ„ 보μž₯ν•©λ‹ˆλ‹€.
    • 즉, λΉ„μ¦ˆλ‹ˆμŠ€ μš”κ΅¬ 사항에 맞게 데이터가 μ •ν™•νžˆ λ°˜μ˜λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, Account ν…Œμ΄λΈ”μ—μ„œ κ³„μ’Œ μž”κ³ κ°€ 음수둜 내렀가지 μ•Šλ„λ‘ ν•˜λŠ” κ·œμΉ™μ΄ μžˆλ‹€λ©΄, 이 κ·œμΉ™μ„ μ§€μΌœμ•Ό λΉ„μ¦ˆλ‹ˆμŠ€ 정합성이 μœ μ§€λ©λ‹ˆλ‹€.

3️⃣ 데이터 μ •ν•©μ„± 보μž₯ 방법.

  • 데이터 정합성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 기법이 μ‚¬μš©λ©λ‹ˆλ‹€.
    • 1. λ°μ΄ν„°λ² μ΄μŠ€ μ œμ•½ 쑰건 : λ°μ΄ν„°λ² μ΄μŠ€ μˆ˜μ€€μ—μ„œ PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL λ“±μ˜ μ œμ•½ 쑰건을 μ„€μ •ν•˜μ—¬ 정합성을 보μž₯ν•©λ‹ˆλ‹€.
    • 2. νŠΈλžœμž­μ…˜ : νŠΈλžœμž­μ…˜μ€ ACID(Atomicity, Consistency, Isolation, Durability) 속성을 톡해 λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€. νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—…μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλ˜κ±°λ‚˜ λͺ¨λ‘ μ‹€νŒ¨ν•΄μ•Ό 데이터 정합성이 보μž₯λ©λ‹ˆλ‹€.
    • 3. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직 : λΉ„μ¦ˆλ‹ˆμŠ€ 정합성은 λ°μ΄ν„°λ² μ΄μŠ€λΏλ§Œ μ•„λ‹ˆλΌ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œμ—μ„œλ„ ν™•μΈλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, νŠΉμ • κ·œμΉ™μ— 따라 데이터λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜κΈ° 전에 λ‘œμ§μ„ 톡해 κ²€μ¦ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

4️⃣ JPAμ—μ„œμ˜ 데이터 μ •ν•©μ„± μœ μ§€.

  • JPAλ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ 데이터 정합성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 연관관계 주인 μ„€μ • : 연관관계 주인을 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •ν•˜μ—¬, μ–‘λ°©ν–₯ κ΄€κ³„μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— 데이터가 μΌκ΄€λ˜κ²Œ λ°˜μ˜λ˜λ„λ‘ ν•©λ‹ˆλ‹€.
    • Cascade와 Orphan 객체 처리 : CascadeType.ALLκ³Ό orphanRemoval = true 섀정을 톡해 λΆ€λͺ¨-μžμ‹ κ΄€κ³„μ—μ„œ 데이터 정합성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • νŠΈλžœμž­μ…˜ 관리 : λ°μ΄ν„°μ˜ μ‚½μž…, μˆ˜μ •, μ‚­μ œ μž‘μ—…μ„ νŠΈλž™μž­μ…˜μœΌλ‘œ λ¬Άμ–΄, μž‘μ—… 도쀑 μ—λŸ¬κ°€ λ°œμƒν•΄λ„ 정합성이 깨지지 μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.

5️⃣ μš”μ•½.

  • 데이터 정합성은 λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 신뒰성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μΈ κ°œλ…μž…λ‹ˆλ‹€.
    • 이λ₯Ό 보μž₯ν•˜λ €λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ μ œμ•½ 쑰건, νŠΈλžœμž­μ…˜ 관리, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‘œμ§μ„ ν†΅ν•œ 검증이 ν•„μš”ν•˜λ©°, JPAλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 연관관계와 νŠΈλžœμž­μ…˜μ„ μ˜¬λ°”λ₯΄κ²Œ 관리해야 ν•©λ‹ˆλ‹€.