λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
λ°μ΄ν„°λ² μ΄μŠ€

데이터 λͺ¨λΈκ³Ό λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ΅¬μ„±μš”μ†Œ

by μ„œμ•„λž‘πŸ˜ 2024. 1. 4.

 

데이터와 데이터λͺ¨λΈ

데이터와 λ°μ΄ν„° λͺ¨λΈμ€ μ •λ³΄ κΈ°μˆ  λ° μ»΄ν“¨ν„° κ³Όν•™ λΆ„μ•Όμ—μ„œ μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€.

1. λ°μ΄ν„°(Data)

λ°μ΄ν„°λŠ” μ‚¬μ‹€μ΄λ‚˜ 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 수치, 문자, 기호 λ“±μ˜ ν˜•νƒœλ‘œ ν‘œν˜„λœ κ°’μž…λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄ 숫자, ν…μŠ€νŠΈ, 이미지, μŒμ„± 등이 될 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ μ‚΄νŽ΄λ³΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€λŠ” λŒ€λΆ€λΆ„ 수치, 문자둜 이루어져 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, ν•™μƒμ˜ 이름과 ν•™λ²ˆμ„ λ‚˜νƒ€λ‚΄λŠ” λͺ¨λΈμ—μ„œλŠ” 이름은 문자, ν•™λ²ˆμ€ 숫자둜 ν‘œν˜„ν•˜μ£ .
 

λ°μ΄ν„°λŠ” μ •ν˜• 데이터(Structured Data), λ°˜μ •ν˜• 데이터(Semi-structured Data), λΉ„μ •ν˜• 데이터(Unstructured Data)둜 λΆ„λ₯˜λ©λ‹ˆλ‹€. μ •ν˜• λ°μ΄ν„°λŠ” ν‘œ ν˜•νƒœμ˜ λ°μ΄ν„°λ‘œ μ˜ˆμ»¨λŒ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”μ΄ 이에 ν•΄λ‹Ήν•˜λ©°, λ°˜μ •ν˜• λ°μ΄ν„°λŠ” 일뢀 ꡬ쑰λ₯Ό κ°–μΆ˜ λ°μ΄ν„°λ‘œ XML, JSONκ³Ό 같은 ν˜•νƒœκ°€ μžˆμŠ΅λ‹ˆλ‹€. λΉ„μ •ν˜• λ°μ΄ν„°λŠ” κ΅¬μ‘°ν™”λ˜μ§€ μ•Šμ€ λ°μ΄ν„°λ‘œ ν…μŠ€νŠΈ, 이미지, λΉ„λ””μ˜€ 등이 ν•΄λ‹Ήλ©λ‹ˆλ‹€.

 

κ΄€κ³„ν˜• 데이터 λͺ¨λΈ

 

2. 데이터 λͺ¨λΈ(Data Model)

데이터 λͺ¨λΈμ€ ν˜„μ‹€ μ„Έκ³„μ˜ κ°œλ…μ΄λ‚˜ 업무 κ·œμΉ™μ„ μΆ”μƒν™”ν•˜μ—¬ ν‘œν˜„ν•˜λŠ” 방법을 μ˜λ―Έν•©λ‹ˆλ‹€. μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€ 섀계 및 관리, μ‹œμŠ€ν…œ 뢄석 및 섀계 λ“± λ‹€μ–‘ν•œ λΆ„μ•Όμ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. λŒ€ν‘œμ μΈ 데이터 λͺ¨λΈμ˜ μ’…λ₯˜λ₯Ό μ‚΄νŽ΄λ³Όκ²Œμš”.
 

 - κ΄€κ³„ν˜• 데이터 λͺ¨λΈ: ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•΄ 데이터λ₯Ό μ •λ¦¬ν•˜κ³  μ—°κ²°ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. κ°€μž₯ ν”ν•œ 예둜 SQL λ°μ΄ν„°λ² μ΄μŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€.
- 객체지ν–₯ 데이터 λͺ¨λΈ: ν˜„μ‹€ μ„Έκ³„μ˜ 개체λ₯Ό 객체둜 ν‘œν˜„ν•˜κ³ , 이 객체 κ°„μ˜ 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
- λ¬Έμ„œ 데이터 λͺ¨λΈ: 데이터λ₯Ό λ¬Έμ„œλ‘œ ν‘œν˜„ν•˜λ©°, NoSQL λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.
- κ³„μΈ΅ν˜• 데이터 λͺ¨λΈ: 데이터λ₯Ό 트리 ꡬ쑰둜 ν‘œν˜„ν•˜λ©°, μ˜ˆμ „μ— 주둜 μ‚¬μš©λ˜μ—ˆλ˜ 방식 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

데이터 λͺ¨λΈμ€ λ°μ΄ν„°μ˜ ꡬ쑰와 관계λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•¨μœΌλ‘œμ¨, 데이터λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  검색할 수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€. λ˜ν•œ μ‹œμŠ€ν…œ 섀계 λ‹¨κ³„μ—μ„œ μš”κ΅¬μ‚¬ν•­μ„ λͺ…ν™•νžˆ μ΄ν•΄ν•˜κ³  ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. κ°„λ‹¨νžˆ 말해, λ°μ΄ν„°λŠ” ν˜„μ‹€ μ„Έκ³„μ˜ 정보λ₯Ό λ‚˜νƒ€λ‚΄κ³ , 데이터 λͺ¨λΈμ€ κ·Έ 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  ν‘œν˜„ν•˜λŠ” 방법을 μ •μ˜ν•©λ‹ˆλ‹€. 개발 μͺ½μ—μ„œλŠ” 데이터 λͺ¨λΈμ„ μ—”ν‹°ν‹°λ‘œ μ •μ˜ν•˜κ³  λ ˆν¬μ§€ν† λ¦¬(Repository) νŒ¨ν„΄μ„ ν™œμš©ν•˜μ—¬ 데이터 μ—”ν‹°ν‹°λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방식을 자주 μ‚¬μš©ν•©λ‹ˆλ‹€. NestJS의 TypeORM, Spring의 JPAκ°€ 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. μ΄λŠ” 객체와 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ 데이터λ₯Ό μžλ™μœΌλ‘œ λ§€ν•‘ν•΄μ£ΌλŠ” λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 좔후에 μ’€ 더 μžμ„Ένžˆ 닀루도둝 ν•˜μ£ .

 

 

 

λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬μ„±μš”μ†Œ

보편적으둜 많이 μ‚¬μš©ν•˜λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ΅¬μ„±μš”μ†Œμ— λŒ€ν•΄ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 

1. ν…Œμ΄λΈ”(Table)
   - ν…Œμ΄λΈ”μ€ 데이터λ₯Ό ν–‰κ³Ό μ—΄μ˜ ν˜•νƒœλ‘œ μ €μž₯ν•˜λŠ” 기본적인 κ΅¬μ‘°μž…λ‹ˆλ‹€. ν…Œμ΄λΈ”μ„ μ •κ·œν™”ν•˜μ—¬ 쀑볡을 μ΅œμ†Œν™”ν•˜κ³  데이터 일관성을 μœ μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 각 ν…Œμ΄λΈ”μ€ ν•˜λ‚˜μ˜ 주제 λ˜λŠ” 엔터티에 κ΄€λ ¨λœ μ •λ³΄λ§Œμ„ ν¬ν•¨ν•˜λ„λ‘ κ΅¬μ„±ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

2. μ—΄(Column)
   - 열은 ν…Œμ΄λΈ”μ—μ„œ ν•˜λ‚˜μ˜ 속성을 λ‚˜νƒ€λ‚΄λ©°, 각 열은 νŠΉμ • 데이터 μœ ν˜•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€. 각 μ—΄μ˜ 데이터 μœ ν˜•μ„ μ •ν™•ν•˜κ²Œ μ§€μ •ν•˜κ³ , NULL 값을 μ΅œμ†Œν™”ν•˜μ—¬ 데이터 일관성을 μœ μ§€ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

3. ν–‰(Row)
   - 행은 ν…Œμ΄λΈ”μ—μ„œ ν•˜λ‚˜μ˜ λ ˆμ½”λ“œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ—¬κΈ°μ„œ λ ˆμ½”λ“œλŠ” ν•˜λ‚˜μ˜ 의미 μžˆλŠ” 데이터 묢음이라고 보면 될 것 κ°™μŠ΅λ‹ˆλ‹€. 각 행은 κ³ μœ ν•œ μ‹λ³„μž(primary key)λ₯Ό 가지도둝 μ„€κ³„ν•˜μ—¬ 데이터λ₯Ό μœ μΌν•˜κ²Œ 식별할 수 μžˆλ„λ‘ ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 보편적으둜 idκ°€ κ³ μœ ν•œ μ‹λ³„μžκ°€ λ©λ‹ˆλ‹€. 

μ—΄κ³Ό 행을 ν‘œν˜„ν•œ λŒ€ν‘œμ μΈ ν…Œμ΄λΈ”μ˜ λͺ¨μŠ΅


4. μΈλ±μŠ€(Index)
   - μΈλ±μŠ€λŠ” νŠΉμ • 열에 λŒ€ν•œ 검색 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€. 자주 κ²€μƒ‰λ˜λŠ” 열에 인덱슀λ₯Ό μƒμ„±ν•˜λ©΄ 검색 μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄λŠ 정도 규λͺ¨κ°€ μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€λŠ” 인덱슀λ₯Ό 적절히 ν™œμš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, 인덱슀λ₯Ό κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•˜λ©΄ μ“°κΈ° μž‘μ—…μ˜ μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆμœΌλ―€λ‘œ μ μ ˆν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

5. κΈ°λ³Έ ν‚€(Primary Key)
   - κΈ°λ³Έ ν‚€λŠ” 각 행을 μœ μΌν•˜κ²Œ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ—΄ λ˜λŠ” μ—΄μ˜ μ‘°ν•©μž…λ‹ˆλ‹€. κΈ°λ³Έ ν‚€λŠ” NULL 값을 ν—ˆμš©ν•˜μ§€ μ•Šκ³ , λ³€ν•˜μ§€ μ•ŠλŠ” 값을 μ„ νƒν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€. 보편적으둜 idλ₯Ό κΈ°λ³Έ ν‚€λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.  

6. μ™Έλž˜ ν‚€(Foreign Key)
   - μ™Έλž˜ ν‚€λŠ” 두 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό λ‚˜νƒ€λ‚΄λ©°, λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. μ™Έλž˜ ν‚€ μ œμ•½ 쑰건을 μ‚¬μš©ν•˜μ—¬ 데이터 무결성을 μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ΄€λ ¨λœ ν…Œμ΄λΈ” κ°„μ˜ 일관성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ μ™Έλž˜ ν‚€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

기본킀와 μ™Έλž˜ν‚€ 관계 (좜처: https://velog.io/@so_oyv/%EA%B8%B0%EB%B3%B8-%ED%82%A4Primary-key%EC%99%80-%EC%99%B8%EB%9E%98-%ED%82%A4Foreign-key-%ED%9B%84%EB%B3%B4%ED%82%A4-%EC%8A%88%ED%8D%BC%ED%82%A4)


7. λ·°(View)
   - λ·°λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν…Œμ΄λΈ”μ—μ„œ μ„ νƒν•œ μ—΄ 및 ν–‰μ˜ μ„œλΈŒμ…‹μ„ λ‚˜νƒ€λ‚΄λŠ” 가상 ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. λ³΅μž‘ν•œ μΏΌλ¦¬λ‚˜ νŠΉμ • μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•œ λ°μ΄ν„°λ§Œμ„ ν¬ν•¨ν•˜λŠ” λ·°λ₯Ό μƒμ„±ν•˜μ—¬ λ³΄μ•ˆ λ° νš¨μœ¨μ„±μ„ ν–₯μƒμ‹œν‚¬ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

8. νŠΈλžœμž­μ…˜(Transaction)
   - νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ˜ 논리적인 λ‹¨μœ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. νŠΈλžœμž­μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 데이터 일관성을 보μž₯ν•˜κ³ , λ‘€λ°±κ³Ό 컀밋을 μ μ ˆν•˜κ²Œ ν™œμš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ•ˆμ •μ„±μ„ μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ κ΅¬μ„±μš”μ†Œλ₯Ό μ‘°μ‹¬μŠ€λŸ½κ²Œ μ„€κ³„ν•˜κ³  κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯, μΌκ΄€μ„±, λ³΄μ•ˆ λ“±μ„ νš¨κ³Όμ μœΌλ‘œ κ΄€λ¦¬ν•  μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€