λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Back-end λ°λΈŒμ½”μŠ€/week 01 - 02 TIL (java, DB)

[TIL] 221024 - λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ μ†Œκ°œ

by young-ji 2022. 10. 24.

μ‹€λ¦¬μ½˜λ°Έλ¦¬μ—μ„œ λ‚ μ•„μ˜¨ λ°μ΄ν„°λ² μ΄μŠ€ - 1. λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ μ†Œκ°œ

 

데이터 λ² μ΄μŠ€κ°€ μ™œ ν•„μš”ν•œκ°€

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€

- ν”„λ‘œλ•μ…˜ κ΄€κ³„ν˜• 데이터 베이슀 (RDSMS)

: μ›Ή μ„œλΉ„μŠ€λ‚˜ μ•±μ˜ μš΄μ˜μ— ν•„μš”ν•œ 데이터λ₯Ό μ €μž₯ν•΄λ‘λŠ” κ΄€κ³„ν˜• 데이터 베이슀

: MySQL, PostgreSQL, ..

: 데이터λ₯Ό κ΅¬μ‘°ν™”λœ ν…Œμ΄λΈ”λ“€μ˜ μ§‘ν•©μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ μ €μž₯, 관리

: λΉ λ₯Έ 처리 속도가 μ€‘μš”ν•œλ‹€.

: vs 데이터 μ›¨μ–΄ν•˜μš°μŠ€ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ (λΉ λ₯Έ μ²˜λ¦¬μ†λ„λ³΄λ‹€ μ–Όλ§ˆλ‚˜ 큰 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠλƒ)

 

- 데이터 μ›¨μ–΄ν•˜μš°μŠ€

: μ„œλΉ„μŠ€μš©μ΄ μ•„λ‹Œ νšŒμ‚¬ κ΄€λ ¨ 데이터λ₯Ό μ €μž₯ν•˜κ³  뢄석

: BigQuery, Snowflake, MySQL,..

: κ΅¬μ‘°ν™”λœ 큰 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것이 μ€‘μš”

: 보톡 ν”„λ‘œλ•μ…˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΅μ‚¬ν•΄μ„œ 데이터 μ›¨μ–΄ν•˜μš°μŠ€μ— μ €μž₯

: 데이터 직ꡰ이라면 λ°˜λ“œμ‹œ μ•Œμ•„μ•Όν•œλ‹€.

데이터 μˆœν™˜ ꡬ쑰 : ν”„λ‘œλ•μ…˜μš© λ°μ΄ν„°λ² μ΄μŠ€μ™€ 데이터 μ›¨μ–΄ν•˜μš°μŠ€

 

λΉ„κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€

: NoSQL λ°μ΄ν„°λ² μ΄μŠ€ : λΉ„κ΅¬μ‘°ν™”λœ 데이터도 닀룬닀.

: 보톡 ν”„λ‘œλ•μ…˜μš© κ΄€κ³„ν˜• 데이터베이λ₯Ό λ³΄μ™„ν•˜κΈ°μœ„ν•œ μš©λ„λ‘œ 많이 μ‚¬μš©λœλ‹€.

: 크게 4μ’…λ₯˜κ°€ 쑴재

  • Key/Value storage(ν”νžˆ μΊμ‰¬λ‘œ μ‚¬μš©λ˜λŠ”) : Redis, Memcache, ..
  • Document Storeage : MonogoDB
  • Wide Column Storage (λ§Žμ€ 데이터λ₯Ό μ €μž₯ κ°€λŠ₯ν•œ) : Cassandra, HBase, DynamoDB
  • Search Engin(검색 엔진) : ElasticSearch

 

λ°±μ—”λ“œ μ‹œμŠ€ν…œ ꡬ성도 예제 보기

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€κ°€ 전체 μ‹œμŠ€ν…œμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ ꡬ성도 μ•Œμ•„λ³΄κΈ°

2 tier

 

3 tier

λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 티어에 μœ„μΉ˜ν•œλ‹€.

 

Spring Boot

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ½κ³ μ“°λŠ” Persistence LayerλŠ” Data tier

→ 데이터 λͺ¨λΈμ„ 잘 λ§Œλ“€κ³  κ·Έκ±Έ ν”„λ‘ νŠΈ κ°œλ°œμžμ™€ 곡유/ ν—™μ—…

→ 속도 κ°œμ„ μ„ μœ„ν•œ 쿼리 μ„±λŠ₯을 λͺ¨λ‹ˆν„°λ§ν•˜κ³  ν•„μš”μ‹œ μ„±λŠ₯ κ°œμ„  μˆ˜ν–‰

 

 

κ΄€κ³„ν˜• 데이터 베이슀

  • κ΅¬μ‘°ν™”λœ 데이터λ₯Ό μ €μž₯ν•˜κ³  μ§ˆμ˜ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” μŠ€ν† λ¦¬μ§€
  • ν…Œμ΄λΈ”μ—λŠ” 컬럼(μ—΄)κ³Ό λ ˆμ½”λ“œ(ν–‰)이 μ‘΄λŒ€ν•˜λ©° μ—‘μ…€ μ‹œν”„λ ˆλ“œμ‹œνŠΈ ν˜•νƒœλ‘œ μ €μž₯
  • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‘°μž‘ν•˜λŠ” μ–Έμ–΄ → SQL (DDL, DML)

2λ‹¨κ³„λ‘œ κ΅¬μ„±λœ ꡬ쑰

: κ°€μž₯ λ°‘λ‹¨μ—λŠ” ν…Œμ΄λΈ”λ“€μ΄ 쑴재 (μ—‘μ…€μ˜ μ‹œνŠΈ)

: 데이블듀은 λ°μ΄ν„°λ² μ΄μŠ€(μŠ€ν‚€λ§ˆ)λΌλŠ” 폴더 λ°‘μ—μ„œ ꡬ성 (μ—‘μ…€μ—μ„œ 파일)

: ν…Œμ΄λΈ”μ˜ ꡬ쑰 (ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆ)

  • ν…Œμ΄λΈ”μ€ λ ˆμ½”λ“œλ“€λ‘œ ꡬ성 : ν–‰
  • λ ˆμ½”λ“œλŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν•„λ“œ(컬럼)둜 ꡬ성 : μ—΄
  • ν•„λ“œ(컬럼)λŠ” 이름과 νƒ€μž…κ³Ό 속성(primary key)으둜 ꡬ성됨

SQL μ†Œκ°œ

κ΅¬μ‘°ν™”λœ 데이터λ₯Ό λ‹€λ£¨λŠ”λ° μ΅œμ ν™”κ°€ λ˜μ–΄μžˆλ‹€.

: λ§Žμ€ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€λ“€μ΄ ν”Œλž«ν•œ ꡬ쑰만 μ§€μ›ν•œλ‹€.(no nested like JSON - ꡬ글 λΉ…μΏΌλ¦¬λŠ” nested structure을 지원함)

  • 데이터 λͺ¨λΈ
    • Star schema : 데이터λ₯Ό 논리적 λ‹¨μœ„λ‘œ λ‚˜λˆ  μ €μž₯ν•˜κ³  ν•„μš”μ‹œ 쑰인, μŠ€ν† λ¦¬μ§€ λ‚­λΉ„κ°€ λœν•˜κ³  μ—…λ°μ΄νŠΈκ°€ 쉽닀.
    • Denormalized schema : noSQLμ΄λ‚˜ 데이터 μ›¨μ–΄ν•˜μš°μŠ€μ—μ„œ μ‚¬μš©ν•˜λŠ” 방식. λ‹¨μœ„ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ  μ €μž₯ν•˜μ§€ μ•ŠμŒμœΌλ‘œ λ³„λ„μ˜ 쑰인이 ν•„μš”μ—†λŠ” ν˜•νƒœμ—¬μ„œ μŠ€ν† λ¦¬μ§€λ₯Ό 더 μ‚¬μš©ν•˜μ§€λ§Œ 쑰인이 ν•„μš”μ—†μ–΄ λΉ λ₯Έ 계산 κ°€λŠ₯

Star schema
Denormalized schema

  • κΈ°λ³Έ
    • λ‹€μˆ˜μ˜ sql 문을 μ‚¬μš©ν•œλ‹€λ©΄ ; 으둜 뢄리
    • 인라인 주석 --
    • λͺ…λͺ…κ·œμΉ™μ„ μ •ν•˜λŠ”κ²Œ μ€‘μš” : λ³΅μˆ˜ν˜•/λ‹¨μˆ˜ν˜• λ“±
  • DDL : λ°μ΄λΈ”μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” μ–Έμ–΄
    • GREATE TABLE : μ„±λŠ₯ν–₯상을 μœ„ν•΄ 인덱슀λ₯Ό 지정할 수 있음.
    • DROP TABLE : IF EXISTS
    • ALTER TABLE
  • DML : λ°μ΄λΈ”μ—μ„œ μ›ν•˜λŠ” λ ˆμ½”λ“œλ₯Ό μ½μ–΄μ˜€λŠ” 질의 μ–Έμ–΄. μΆ”κ°€/μ‚­μ œ/κ°±μ‹ 
    • SELECT
    • INSERT INTO / UPDATE FROM / DELET FROM (TRUNCATE : λͺ¨λ“  λ ˆμ½”λ“œ μ‚­μ œ)

 

 

좜처 - ν•œκΈ°μš© κ°•μ‚¬λ‹˜ : μ‹€λ¦¬μ½˜λ°Έλ¦¬μ—μ„œ λ‚ μ•„μ˜¨ 데이터 베이슀

λŒ“κΈ€