μ£Όλ‹ˆμ–΄ 개발자 λ©΄μ ‘ μ€€λΉ„ - DB

2023. 1. 10. 15:07ㆍ면접 μ€€λΉ„

ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ λ©΄μ ‘ μ€€λΉ„λ₯Ό ν•˜λ©΄μ„œ κ³΅λΆ€ν•œ λ‚΄μš©λ“€μ„ κΈ°λ‘ν•˜κ³  후에 λ‹€μ‹œ 보기 μœ„ν•΄ μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€! λ§Œμ•½ 잘λͺ»λœ λ‚΄μš©μ΄ μžˆλ‹€λ©΄ 적극적으둜 ν”Όλ“œλ°±ν•΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€.


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

  • μ‹€μ‹œκ°„ μ ‘κ·Όμ„±(Real-Time Accessibility)
    • μ‚¬μš©μžμ˜ 데이터 μš”κ΅¬μ— μ‹€μ‹œκ°„μœΌλ‘œ 응닡 κ°€λŠ₯
  • 지속적인 λ³€ν™”(Continuous Evolution)
    • μ§€μ†μ μœΌλ‘œ λ³€ν™”ν•˜λŠ” ν˜„μ‹€ 세계λ₯Ό μ •ν™•νžˆ λ°˜μ˜ν•˜κΈ° μœ„ν•΄ DB λ˜ν•œ μ§€μ†μ μœΌλ‘œ λ³€ν™” κ°€λŠ₯
  • λ™μ‹œ 곡유 κ°€λŠ₯(Concurrent Sharing)
    • μ—¬λŸ¬ μ‚¬μš©μžκ°€ λ¬Έμ œμ—†μ΄ λ™μ‹œμ— 이용 κ°€λŠ₯
  • λ‚΄μš©μ— μ˜ν•œ μ°Έμ‘°(Content Reference)
    • 데이터가 μ €μž₯된 λ””μŠ€ν¬μ˜ μœ„μΉ˜, μ£Όμ†Œκ°€ μ•„λ‹Œ λ°μ΄ν„°μ˜ 값을 톡해 μ°Έμ‘° κ°€λŠ₯

λ°μ΄ν„°λ² μ΄μŠ€ μ–Έμ–΄

  • DDL(μ •μ˜μ–΄: Data Definition Language)
    • μƒˆλ‘œμš΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ μŠ€ν‚€λ§ˆλ₯Ό μ •μ˜ν•˜κ±°λ‚˜ κΈ°μ‘΄ μŠ€ν‚€λ§ˆλ₯Ό μ‚­μ œ, μˆ˜μ •ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

 

  • DML(μ‘°μž‘μ–΄: Data Manipulation Language)
    • λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄ λ°μ΄ν„°μ˜ μ‚½μž…, μ‚­μ œ, μˆ˜μ •, 검색 등을 μœ„ν•΄ μ‚¬μš© 
    • 절차적 데이터 μ‘°μž‘μ–΄
      • μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터가 무엇인지, 또 ν•΄λ‹Ή 데이터λ₯Ό μ–»μœΌλ €λ©΄ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Όν•˜λŠ”μ§€κΉŒμ§€ μ„€λͺ…
    • λΉ„μ ˆμ°¨μ  데이터 μ‘°μž‘μ–΄ 
      • μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터가 λ¬΄μ—‡μΈμ§€λ§Œ μ„€λͺ… 

 

  • DCL(μ œμ–΄μ–΄: Data Control Language)
    • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성, λ³΄μ•ˆ, 회볡, λ™μ‹œμ„±μ„ μœ„ν•΄ ν•„μš”ν•œ κ·œμΉ™μ΄λ‚˜ 기법을 μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

SELECT 문의 μ‹€ν–‰ μˆœμ„œ

  1. FROM, ON, JOIN
  2. WHERE, GROUP BY, HAVING
  3. SELECT
  4. DISTINCT
  5. ORDER BY
  6. LIMIT

Index(인덱슀)λž€?

  • μΈλ±μŠ€λž€ ν…Œμ΄λΈ”μ„ μ²˜μŒλΆ€ν„° λκΉŒμ§€ κ²€μƒ‰ν•˜λŠ” Full Table Scanμ™€λŠ” 달리 인덱슀λ₯Ό 톡해 νŠΉμ • 데이터λ₯Ό κ²€μƒ‰ν•˜λŠ” 방법
  • 인덱슀λ₯Ό ν†΅ν•˜λ©΄ 데이터λ₯Ό 항상 μ •λ ¬λœ μƒνƒœλ‘œ μœ μ§€ν•˜κΈ° λ•Œλ¬Έμ— 검색이 λΉ¨λΌμ§€μ§€λ§Œ, λ°μ΄ν„°μ˜ μΆ”κ°€, μˆ˜μ •, μ‚­μ œμ— μžˆμ–΄μ„œλŠ” 쿼리 μ‹€ν–‰ 속도가 느렀짐

Indexμ—μ„œ μ‚¬μš©λ˜λŠ” 자료 ꡬ쑰

  • B+Tree 인덱슀 자료ꡬ쑰
    • B-Treeλ₯Ό κ°œμ„ ν•œ ꡬ쑰둜, B-Tree의 리프 λ…Έλ“œλ₯Ό μ—°κ²° 리슀트둜 μ—°κ²°ν•˜μ—¬ 순차 검색이 용이.
    • μ‹œκ°„λ³΅μž‘λ„: O(log2 N)

 

  • ν•΄μ‹œν…Œμ΄λΈ”
    • 칼럼 데이터 기반으둜 μƒμ„±λœ ν•΄μ‹œλ₯Ό ν†΅ν•œ 인덱슀 κ΅¬ν˜„
    • μ‹œκ°„λ³΅μž‘λ„κ°€ μš°μˆ˜ν•˜μ§€λ§Œ 순차 검색이 λΆˆκ°€ν•˜κΈ° λ•Œλ¬Έμ— 잘 쓰이지 μ•ŠμŒ
    • μ‹œκ°„λ³΅μž‘λ„: O(1)

μ΄μƒν˜„μƒ

  • ν…Œμ΄λΈ”μ˜ 잘λͺ»λœ μ„€κ³„λ‘œ 인해 λ°œμƒν•˜λŠ” 논리적 였λ₯˜λ₯Ό 칭함

 

  • μ‚½μž… 이상
    • 자료λ₯Ό μ‚½μž…ν•  λ•Œ νŠΉμ • 속성에 ν•΄λ‹Ήν•˜λŠ” 값이 μ—†μ–΄ NULL을 μž…λ ₯ ν•΄μ•Ό ν•˜λŠ” ν˜„μƒ

 

  • κ°±μ‹  이상
    • μ€‘λ³΅λœ 데이터 쀑 μΌλΆ€λ§Œ μˆ˜μ •λ˜μ–΄ λ°μ΄ν„°μ˜ λͺ¨μˆœμ΄ λ°œμƒν•˜λŠ” ν˜„μƒ

 

  • μ‚­μ œ 이상
    • νŠΉμ • μ •λ³΄μ˜ μ‚­μ œ μ‹œ, μ˜λ„μΉ˜ μ•Šμ€ λ‹€λ₯Έ μ •λ³΄κΉŒμ§€ μ‚­μ œλ˜λŠ” ν˜„μƒ

 

DB μ •κ·œν™”

  • ν•˜λ‚˜μ˜ λ¦΄λ ˆμ΄μ…˜μ— ν•˜λ‚˜μ˜ 의미만 μ‘΄μž¬ν•˜λ„λ‘ λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •. λ°μ΄ν„°μ˜ 일관성, μ΅œμ†Œν•œμ˜ 데이터 쀑볡, μ΅œλŒ€ν•œμ˜ 데이터 μœ μ—°μ„±μ„ μœ„ν•¨.
  • DBμ—μ„œ λ°œμƒν•˜λŠ” 각쒅 μ΄μƒν˜„μƒ(μ‚½μž…, κ°±μ‹ , μ‚­μ œ)을 ν•΄κ²°ν•˜λ©° 더 λ‚˜μ•„κ°€ ν™•μž₯에 μš©μ΄ν•œ DB ꡬ쑰λ₯Ό ꡬ좕 κ°€λŠ₯.

 

  • 제1μ •κ·œν˜•
    • ν…Œμ΄λΈ”μ˜ 칼럼이 μ›μž κ°’(Atomic Value; ν•˜λ‚˜μ˜ κ°’)을 갖도둝 λΆ„ν•΄

 

  • 제2μ •κ·œν˜•
    • 제1μ •κ·œν˜• 만쑱
    • κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 기본킀에 λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜ 쒅속이 λ˜λ„λ‘ λΆ„ν•΄
      • ν•¨μˆ˜ 쒅속: Xκ°€ κ²°μ •λ˜μ—ˆμ„ λ•Œ Y값이 μ €μ ˆλ‘œ κ²°μ •λ˜λŠ” 관계λ₯Ό ν•¨μˆ˜ 쒅속이라고 ν‘œν˜„ν•¨.(X→Y)

 

  • 제3μ •κ·œν˜•
    • 제2μ •κ·œν˜• 만쑱
    • κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ λͺ¨λ“  속성이 기본킀에 이행적 ν•¨μˆ˜ 쒅속이 λ˜μ§€ μ•Šλ„λ‘ λΆ„ν•΄
      • 이행적 ν•¨μˆ˜ 쒅속: X→Y, Y→Z μ‹œ λ…Όλ¦¬μ μœΌλ‘œ X→Zκ°€ μ„±λ¦½ν•˜λŠ”λ°, 이λ₯Ό 이행적 ν•¨μˆ˜ 쒅속이라고 ν‘œν˜„.

 

μ—­μ •κ·œν™” 이유

  • μ •κ·œν™” 단계가 λ†’μ•„μ§ˆμˆ˜λ‘ 데이터 질의 μ‹œ JOIN이 λ§Žμ•„μ§€λŠ”λ°, μ΄λŠ” 쿼리의 μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λŠ” μš”μΈμ΄κΈ° λ•Œλ¬Έ

SQL Injection 곡격

  • κ³΅κ²©μžκ°€ μ•…μ˜μ μΈ μ˜λ„μ˜ SQL ꡬ문을 μž…λ ₯ν•˜μ—¬ DBλ₯Ό λΉ„μ •μƒμ μœΌλ‘œ μ‘°μž‘ν•˜λŠ” 곡격

 

  • 방지
    • μž…λ ₯κ°’ 검증
    • 쿼리 μ‹€ν–‰ μ „ μž…λ ₯값에 λŒ€ν•œ 검증을 κ±°μΉ¨
    • Prepared Statements 이용
    • 이미 ꡬ문 뢄석이 λλ‚œ 쿼리λ₯Ό λŸ°νƒ€μž„μ— μ‚¬μš©ν•˜λŠ” 방법

RDBMS vs NoSQL

  • RDBMS
    • λͺ¨λ“  데이터λ₯Ό 2차원 ν…Œμ΄λΈ” ν˜•νƒœλ‘œ 관리
    • μž₯점: μŠ€ν‚€λ§ˆλ₯Ό 두고 이λ₯Ό 톡해 데이터λ₯Ό κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— λ°μ΄ν„°μ˜ μ •ν•©μ„± 보μž₯ 용이
    • 단점: μ‹œμŠ€ν…œμ΄ 컀질수둝 쿼리가 λ³΅μž‘ν•΄μ§€κ³  μ„±λŠ₯이 μ €ν•˜λ˜λ©° scale-out이 어렀움(scale-up만 κ°€λŠ₯)

 

  • NoSQL
    • 데이터 κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ§€ μ•ŠλŠ” μŠ€ν‚€λ§ˆλ¦¬μŠ€ ꡬ쑰. 데이터 관리에 μžμœ λ„κ°€ 뢀여됨
    • μž₯점: μŠ€ν‚€λ§ˆ 없이 데이터λ₯Ό κ΄€λ¦¬ν•˜μ—¬ 자유둜운 관리 κ°€λŠ₯. scale-up 뿐 μ•„λ‹ˆλΌ scale-out에도 용이.
    • 단점: λ°μ΄ν„°μ˜ 쀑볡이 λ°œμƒν•  수 있고, μ€‘λ³΅λœ 데이터가 μˆ˜μ •λ  경우 λͺ¨λ“  μ»¬λ ‰μ…˜μ— λŒ€ν•œ μˆ˜μ •μ„ 거쳐야 함.(μ •ν•©μ„± 보μž₯이 어렀움)

νŠΈλžœμž­μ…˜

  • νŠΈλžœμž­μ…˜μ€ μž‘μ—…μ˜ μ™„μ „μ„±(무결성, 일관성)을 보μž₯ν•˜λŠ” 역할을 함. μž‘μ—…λ“€μ΄ λͺ¨λ‘ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λ˜κ±°λ‚˜, ν˜Ήμ€ μž‘μ—… 쀑 μΌλΆ€μ—μ„œ λ¬Έμ œκ°€ λ°œμƒ μ‹œ μž‘μ—… μ€‘μ΄λ˜ λͺ¨λ“  λ³€κ²½ 사항을 일괄 μ·¨μ†Œν•˜μ—¬ 이λ₯Ό 보μž₯.
  • Commit μ—°μ‚°κ³Ό Rollback μ—°μ‚°

 

  • νŠΉμ„±(ACID)
    • μ›μžμ„±(Atomicity)
      • νŠΈλžœμž­μ…˜μ„ κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  연산은 all-or-nothing 방식을 이용.
    • 일관성(Consistency)
      • νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰λœ 후에도 λ°μ΄ν„°λ² μ΄μŠ€κ°€ μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Όν•¨.
    • 격리성(Isolation)
      • ν˜„μž¬ μˆ˜ν–‰ 쀑인 νŠΈλžœμž­μ…˜μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ νŠΈλžœμž­μ…˜μ΄ μƒμ„±ν•œ 쀑간 μ—°μ‚° 결과에 λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ΄ μ ‘κ·Όν•  수 μ—†μŒ.
    • μ˜μ†μ„±(Durability)
      • νŠΈλžœμž­μ…˜μ„ 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ— 반영된 κ²°κ³ΌλŠ” μ˜κ΅¬μ μ΄μ–΄μ•Ό 함.

 

DB 락

  • DB 락은 νŠΈλžœμž­μ…˜ 처리의 μˆœμ°¨μ„±μ„ 보μž₯ν•˜κΈ° μœ„ν•œ 방법

 

  • 곡유락
    • νŠΈλžœμž­μ…˜μ΄ 읽기 μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ‹€ν–‰λ˜λŠ” 락이며, κ³΅μœ λ½λΌλ¦¬λŠ” λ™μ‹œμ— 접근이 κ°€λŠ₯.(단, 곡유락된 데이터에 배타락은 μ ‘κ·Ό λΆˆκ°€)

 

  • 배타락
    • νŠΈλžœμž­μ…˜μ΄ 데이터λ₯Ό λ³€κ²½ν•  λ•Œ μ‹€ν–‰λ˜λŠ” 락. κ°€μž₯ 높은 κ°•λ„μ˜ 락이 μˆ˜ν–‰λ˜λ©°, μ΄μ—λŠ” μ–΄λ– ν•œ μ’…λ₯˜μ˜ 락도 μ ‘κ·Ό λΆˆκ°€.

μ˜΅ν‹°λ§ˆμ΄μ €λž€?

  • SQL을 κ°€μž₯ λΉ λ₯΄κ³  효율적으둜 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ 졜적의 μˆ˜ν–‰ 경둜λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” DBMS의 핡심 엔진.
  • SQL의 μ‹€ν–‰κ³„νšλ“€μ„ 수립 ν›„ κ·Έ 쀑 졜적 μ‹€ν–‰κ³„νšμ„ 톡해 쿼리λ₯Ό μˆ˜ν–‰μ‹œν‚΄.