λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Data Engineering

λ°˜μ •κ·œν™” (의미, λͺ©μ , λŒ€μ•ˆ, 방법)

by 행뱁 2023. 11. 10.

DATA ON-AIR λ°˜μ •κ·œν™”μ™€ μ„±λŠ₯ κΈ€μ˜ μš”μ•½λ³Έμž„μ„ λ°νž™λ‹ˆλ‹€.

 

λ°˜μ •κ·œν™”λž€

μ •κ·œν™”λœ μ—”ν„°ν‹°, 속성, 관계에 λŒ€ν•΄ μ‹œμŠ€ν…œμ˜ μ„±λŠ₯ν–₯상과 개발/운영의 λ‹¨μˆœν™”λ₯Ό μœ„ν•΄ 쀑볡, 톡합, 뢄리 등을 μˆ˜ν–‰ν•˜λŠ” 데이터 λͺ¨λΈλ§μ˜ 기법을 μ˜λ―Έν•œλ‹€.

 

μ™œ λ°˜μ •κ·œν™” ν•˜λŠ”κ°€?

데이터 무결성이 깨질 수 μžˆλŠ” μœ„ν—˜μ„ 무릅쓰고 데이터λ₯Ό μ€‘λ³΅ν•˜μ—¬ λ°˜μ •κ·œν™”λ₯Ό μ μš©ν•˜λŠ” μ΄μœ λŠ” 데이터λ₯Ό μ‘°νšŒν•  λ•Œ λ””μŠ€ν¬ I/OλŸ‰μ΄ λ§Žμ•„μ„œ μ„±λŠ₯이 μ €ν•˜λ˜κ±°λ‚˜ κ²½λ‘œκ°€ λ„ˆλ¬΄ λ©€μ–΄ 쑰인으둜 μΈν•œ μ„±λŠ₯μ €ν•˜κ°€ μ˜ˆμƒλ˜κ±°λ‚˜ μΉΌλŸΌμ„ κ³„μ‚°ν•˜μ—¬ 읽을 λ•Œ μ„±λŠ₯이 μ €ν•˜λ  것이 μ˜ˆμƒλ˜λŠ” 경우 λ°˜μ •κ·œν™”λ₯Ό μˆ˜ν–‰ν•˜κ²Œ λœλ‹€.

기본적으둜 μ •κ·œν™”λŠ” μž…λ ₯/μˆ˜μ •/μ‚­μ œμ— λŒ€ν•œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 뿐만 μ•„λ‹ˆλΌ μ‘°νšŒμ— λŒ€ν•΄μ„œλ„ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 역할을 ν•œλ‹€. κ·ΈλŸ¬λ‚˜ μ •κ·œν™”λ§Œμ„ μˆ˜ν–‰ν•˜λ©΄ μ—”ν„°ν‹°μ˜ κ°―μˆ˜κ°€ μ¦κ°€ν•˜κ³  관계가 λ§Žμ•„μ Έ 일뢀 μ—¬λŸ¬ 개의 쑰인이 κ±Έλ €μ•Όλ§Œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” κ²½μš°κ°€ μžˆλ‹€. μ΄λŸ¬ν•œ 경우 μ—…λ¬΄μ μœΌλ‘œ μ‘°νšŒμ— λŒ€ν•œ μ²˜λ¦¬μ„±λŠ₯이 μ€‘μš”ν•˜λ‹€κ³  νŒλ‹¨λ  λ•Œ λΆ€λΆ„μ μœΌλ‘œ λ°˜μ •κ·œν™”λ₯Ό κ³ λ €ν•˜κ²Œ λ˜λŠ” 것이닀.

 

μ–Έμ œ λ°˜μ •κ·œν™” ν•˜λŠ”κ°€?

- 자주 μ‚¬μš©λ˜λŠ” ν…Œμ΄λΈ”μ— μ ‘κ·Ό(Access)ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μˆ˜κ°€ 많고 항상 μΌμ •ν•œ λ²”μœ„λ§Œμ„ μ‘°νšŒν•˜λŠ” κ²½μš°μ— λ°˜μ •κ·œν™”λ₯Ό κ²€ν† ν•œλ‹€.
- ν…Œμ΄λΈ”μ— λŒ€λŸ‰μ˜ 데이터가 있고 λŒ€λŸ‰μ˜ 데이터 λ²”μœ„λ₯Ό 자주 μ²˜λ¦¬ν•˜λŠ” κ²½μš°μ— μ²˜λ¦¬λ²”μœ„λ₯Ό μΌμ •ν•˜κ²Œ 쀄이지 μ•ŠμœΌλ©΄ μ„±λŠ₯을 보μž₯ν•  수 없을 κ²½μš°μ— λ°˜μ •κ·œν™”λ₯Ό κ²€ν† ν•œλ‹€.
- 톡계성 ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ 톡계 정보λ₯Ό ν•„μš”λ‘œ ν•  λ•Œ λ³„λ„μ˜ ν†΅κ³„ν…Œμ΄λΈ”(λ°˜μ •κ·œν™” ν…Œμ΄λΈ”)을 μƒμ„±ν•œλ‹€.
- ν…Œμ΄λΈ”μ— μ§€λ‚˜μΉ˜κ²Œ λ§Žμ€ 쑰인(JOIN)이 κ±Έλ € 데이터λ₯Ό μ‘°νšŒν•˜λŠ” μž‘μ—…μ΄ 기술적으둜 μ–΄λ €μšΈ 경우 λ°˜μ •κ·œν™”λ₯Ό κ²€ν† ν•œλ‹€.

 

λ°˜μ •κ·œν™”μ˜ λŒ€μ•ˆμ€ 무엇인가?

가급적이면 데이터λ₯Ό μ€‘λ³΅ν•˜μ—¬ 데이터 무결성을 깨뜨릴 μœ„ν—˜μ„ μ œμ–΄ν•˜κΈ° μœ„ν•˜μ—¬ λ°˜μ •κ·œν™”λ₯Ό κ²°μ •ν•˜κΈ° 이전에 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” λ‹€λ₯Έ 방법을 λͺ¨μƒ‰ν•˜λ„둝 ν•œλ‹€.

- λ·°κ°€ 쑰회의 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 역할을 μˆ˜ν–‰ν•˜μ§€λŠ” μ•Šμ§€λ§Œ, κ°œλ°œμžλ³„λ‘œ SQLλ¬Έμž₯을 λ§Œλ“œλŠ” 방법에 따라 μ„±λŠ₯μ €ν•˜κ°€ λ‚˜νƒ€λ‚  수 μžˆμœΌλ―€λ‘œ μ„±λŠ₯을 κ³ λ €ν•œ λ·°λ₯Ό μƒμ„±ν•˜μ—¬ κ°œλ°œμžκ°€ λ·°λ₯Ό 톡해 μ ‘κ·Όν•˜κ²Œ ν•¨μœΌλ‘œμ¨ μ„±λŠ₯μ €ν•˜μ˜ μœ„ν—˜μ„ μ˜ˆλ°©ν•˜λŠ” 것도 쒋은 방법이 λœλ‹€.

- ν΄λŸ¬μŠ€ν„°λ§μ„ μ μš©ν•˜λŠ” 방법은 λŒ€λŸ‰μ˜ 데이터λ₯Ό νŠΉμ • ν΄λŸ¬μŠ€ν„°λ§ νŒ©νŠΈμ— μ˜ν•΄ μ €μž₯방식을 λ‹€λ₯΄κ²Œ ν•˜λŠ” 방법이닀. 단 데이터λ₯Ό μž…λ ₯/μˆ˜μ •/μ‚­μ œν•˜λŠ” 경우 μ„±λŠ₯이 많이 μ €ν•˜λ˜λ―€λ‘œ μ‘°νšŒμ€‘μ‹¬μ˜ ν…Œμ΄λΈ”μ΄ μ•„λ‹ˆλΌλ©΄ μƒμ„±ν•˜λ©΄ μ•ˆλ˜λŠ” μ˜€λΈŒμ νŠΈμ΄λ‹€.

=> ν΄λŸ¬μŠ€ν„°λ§μ΄ 무엇?

- 인덱슀λ₯Ό 톡해 μ„±λŠ₯을 μΆ©λΆ„νžˆ 확보할 수 μžˆλ‹€λ©΄ 인덱슀λ₯Ό μ‘°μ •ν•˜μ—¬ λ°˜μ •κ·œν™”λ₯Ό νšŒν”Όν•˜λ„λ‘ ν•œλ‹€.

=> μΈλ±μŠ€λŠ” μ–΄λ–»κ²Œ μ„€μ •?

- λŒ€λŸ‰μ˜ λ°μ΄ν„°λŠ” Primary Key의 성격에 따라 뢀뢄적인 ν…Œμ΄λΈ”λ‘œ 뢄리할 수 μžˆλ‹€. 즉 μΈμœ„μ μΈ ν…Œμ΄λΈ”μ„ 톡합/λΆ„λ¦¬ν•˜μ§€ μ•Šκ³  물리적인 μ €μž₯기법에 따라 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλŠ” νŒŒν‹°μ…”λ‹μ„ κ³ λ €ν•΄ λ³Ό 수 μžˆλ‹€. 이 κ²½μš°λŠ” 데이터가 νŠΉμ • κΈ°μ€€(νŒŒν‹°μ…”λ‹ ν‚€)에 μ˜ν•΄ λ‹€λ₯΄κ²Œ μ €μž₯되고 νŒŒν‹°μ…”λ‹ 킀에 λ”°λ₯Έ μ‘°νšŒκ°€ 될 λ•Œ μ„±λŠ₯이 μ’‹μ•„μ§€λŠ” νŠΉμ„±μ΄ μžˆλ‹€.

=> νŒŒν‹°μ…”λ‹ μ’…λ₯˜μ™€ νŠΉμ§•μ€?

- μ‘μš© μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ©”λͺ¨λ¦¬ μ˜μ—­μ— 데이터λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 값을 μΊμ‰¬ν•œλ‹€λ“ μ§€ 쀑간 클래슀 μ˜μ—­μ— 데이터λ₯Ό μΊμ‰¬ν•˜μ—¬ κ³΅μœ ν•˜κ²Œ ν•˜μ—¬ μ„±λŠ₯을 ν–₯상 μ‹œν‚€λŠ” 것도 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 방법이 될 수 μžˆλ‹€.

 

μ–΄λ–»κ²Œ λ°˜μ •κ·œν™” ν•˜λŠ”κ°€?

- ν…Œμ΄λΈ” λ°˜μ •κ·œν™”: ν…Œμ΄λΈ” 병합, ν…Œμ΄λΈ” λΆ„ν• , ν…Œμ΄λΈ” μΆ”κ°€κ°€ μžˆλ‹€.

 

λŒ“κΈ€