on my way

CS 스터디 01-6 전산기초: 데이터베이스 본문

Computer Science

CS 스터디 01-6 전산기초: 데이터베이스

wingbeat 2024. 10. 21. 18:31
반응형

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy: Technical-Interview guidelines written for those who started studying

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy:...

github.com

 

 

데이터베이스 Link

  • 데이터베이스
    • 데이터베이스를 사용하는 이유
    • 데이터베이스 성능
  • Index
    • Index 란 무엇인가
    • Index 의 자료구조
    • Primary index vs Secondary index
    • Composite index
    • Index 의 성능과 고려해야할 사항
  • 정규화에 대해서
    • 정규화 탄생 배경
    • 정규화란 무엇인가
    • 정규화의 종류
    • 정규화의 장단점
  • Transaction
    • 트랜잭션(Transaction)이란 무엇인가?
    • 트랜잭션과 Lock
    • 트랜잭션의 특성
    • 트랜잭션의 상태
    • 트랜잭션을 사용할 때 주의할 점
  • Statement vs PreparedStatement
  • NoSQL
    • 정의
    • CAP 이론
      • 일관성
      • 가용성
      • 네트워크 분할 허용성
    • 저장방식에 따른 분류
      • Key-Value Model
      • Document Model
      • Column Model

추가자료


1. 데이터베이스

1-1. 데이터베이스를 사용하는 이유

질문: 데이터베이스를 사용하는 이유는 무엇인가요?
답변: 데이터베이스는 데이터를 체계적으로 저장하고, 쉽게 검색하고, 여러 사용자가 동시에 데이터를 안전하게 관리할 수 있도록 도와줍니다. 파일 시스템을 사용해 데이터를 관리할 경우, 중복된 데이터가 발생하거나 데이터의 일관성을 유지하는 것이 어렵습니다. 반면, 데이터베이스는 데이터 중복을 최소화하고, 데이터를 안전하게 보호하며, 효율적으로 관리할 수 있는 방법을 제공합니다.

1-2. 데이터베이스 성능

질문: 데이터베이스 성능을 높이기 위한 방법은 무엇인가요?
답변: 데이터베이스 성능을 높이기 위해서는 인덱스 최적화, 쿼리 최적화, 캐싱 사용과 같은 방법을 사용할 수 있습니다. 또한 데이터베이스 구조를 설계할 때 정규화를 적절히 적용하여 중복을 줄이고, 불필요한 데이터 접근을 최소화하는 것이 중요합니다. 하드웨어 리소스(메모리, CPU)와 데이터베이스 서버의 I/O 처리 능력을 최적화하는 것도 성능에 큰 영향을 미칩니다.


2. Index

2-1. Index란 무엇인가?

질문: 인덱스란 무엇인가요?
답변: 인덱스는 데이터베이스에서 데이터를 빠르게 검색할 수 있도록 돕는 자료구조입니다. 마치 책의 색인처럼, 데이터가 저장된 위치를 빠르게 찾을 수 있게 도와주며, 데이터베이스 성능을 크게 향상시킵니다. 하지만 인덱스가 많아지면 추가적인 저장 공간이 필요하고, 데이터 삽입, 수정, 삭제 시 인덱스를 관리하는 비용이 발생할 수 있습니다.

2-2. Index의 자료구조

질문: 인덱스에 주로 사용하는 자료구조는 무엇인가요?
답변: 데이터베이스 인덱스는 주로 B-treeB+tree 자료구조를 사용합니다. B-tree는 균형 잡힌 트리 구조로, 데이터베이스가 효율적으로 데이터를 검색하고 삽입, 삭제할 수 있게 돕습니다. 또한 B+tree는 B-tree의 변형으로, 모든 리프 노드가 동일한 깊이에 있고, 리프 노드들 간 연결리스트로 연결되어 있어 순차 검색이 빠릅니다.

2-3. Primary index vs Secondary index

질문: Primary index와 Secondary index의 차이점은 무엇인가요?
답변: Primary index는 테이블의 기본 키(Primary Key)를 기반으로 생성되는 인덱스입니다. 기본 키는 각 레코드가 고유하도록 보장되며, 데이터를 정렬하여 빠르게 접근할 수 있게 합니다. 반면, Secondary index는 기본 키 외에 다른 열(column)을 기준으로 생성된 인덱스로, 기본 키가 아닌 값을 빠르게 검색하는 데 사용됩니다.

2-4. Composite index

질문: Composite index란 무엇인가요?
답변: Composite index는 두 개 이상의 열(column)로 구성된 인덱스입니다. 여러 열의 값을 동시에 고려하여 데이터를 검색할 때 효율적입니다. 하지만 Composite index는 인덱스가 정의된 순서대로만 효율적으로 사용할 수 있으며, 첫 번째 열에 대한 조건이 없다면 성능이 저하될 수 있습니다.

2-5. Index의 성능과 고려해야 할 사항

질문: 인덱스는 성능에 어떻게 영향을 미치며, 고려해야 할 사항은 무엇인가요?
답변: 인덱스는 데이터 검색 속도를 크게 향상시키지만, 데이터 삽입, 수정, 삭제 작업 시 성능에 부정적인 영향을 미칠 수 있습니다. 또한 인덱스를 너무 많이 생성하면 오히려 성능을 저하시킬 수 있으므로, 자주 검색되는 열에만 인덱스를 설정하는 것이 좋습니다.


3. 정규화

3-1. 정규화 탄생 배경

질문: 정규화는 왜 탄생했나요?
답변: 정규화는 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위해 등장했습니다. 중복된 데이터는 수정 및 삭제 시 일관성 문제를 유발할 수 있기 때문에, 이를 해결하기 위해 데이터를 여러 테이블로 나누고, 각 테이블 간 관계를 정의하는 방식으로 데이터베이스를 설계하게 되었습니다.

3-2. 정규화란 무엇인가?

질문: 정규화란 무엇인가요?
답변: 정규화는 데이터베이스의 데이터를 중복 없이 저장하고, 데이터의 일관성을 유지하기 위해 테이블을 분리하고 구조화하는 과정입니다. 이를 통해 데이터의 무결성을 유지하고, 데이터 삽입, 수정, 삭제 시 발생할 수 있는 이상현상(Anomaly)을 방지할 수 있습니다.

3-3. 정규화의 종류

질문: 정규화의 단계는 무엇이 있나요?
답변: 정규화는 크게 1NF(제1정규형), 2NF(제2정규형), 3NF(제3정규형) 등의 단계로 나뉩니다.

  • 1NF: 각 컬럼에 원자 값만을 저장, 중복된 데이터가 없도록 보장.
  • 2NF: 1NF를 만족하면서 부분 함수 종속 제거.
  • 3NF: 2NF를 만족하면서 이행적 함수 종속 제거.

3-4. 정규화의 장단점

질문: 정규화의 장단점은 무엇인가요?
답변: 정규화의 장점은 데이터 중복을 줄이고, 데이터의 무결성과 일관성을 보장할 수 있다는 점입니다. 하지만 과도한 정규화는 데이터를 여러 테이블에 분산시켜 조인이 많아지므로, 조회 성능이 저하될 수 있습니다. 이럴 때는 적절히 비정규화를 통해 성능을 개선할 수 있습니다.


4. Transaction

4-1. 트랜잭션(Transaction)이란?

질문: 트랜잭션이란 무엇인가요?
답변: 트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 작업 단위로, 여러 작업을 하나의 단위로 묶어 모두 성공하거나, 모두 실패하도록 보장합니다. 트랜잭션은 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 따르며, 이를 통해 데이터의 무결성을 보장할 수 있습니다.

4-2. 트랜잭션과 Lock

질문: 트랜잭션과 Lock의 관계는 무엇인가요?
답변: 트랜잭션이 실행되는 동안, 여러 사용자가 동일한 데이터를 동시에 수정하는 것을 방지하기 위해 Lock이 필요합니다. Lock은 데이터베이스 자원에 대한 동시 접근을 제어하여, 데이터 무결성을 보장합니다. 그러나 Lock을 잘못 관리하면 교착상태(Deadlock)가 발생할 수 있습니다.

4-3. 트랜잭션의 특성

질문: 트랜잭션의 특성(ACID)에 대해 설명해 주세요.
답변: 트랜잭션은 ACID 특성을 가집니다:

  • Atomicity(원자성): 트랜잭션 내의 모든 작업이 완료되거나, 하나도 완료되지 않아야 합니다.
  • Consistency(일관성): 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관된 상태를 유지해야 합니다.
  • Isolation(고립성): 트랜잭션이 실행되는 동안 다른 트랜잭션이 영향을 미치지 않아야 합니다.
  • Durability(지속성): 트랜잭션이 완료된 후에는, 시스템 오류가 발생하더라도 데이터가 유지되어야 합니다.

4-4. 트랜잭션의 상태

질문: 트랜잭션의 상태에는 어떤 것이 있나요?
답변: 트랜잭션은 다음과 같은 상태를 가집니다:

  • Active: 트랜잭션이 실행 중인 상태.
  • Partially Committed: 모든 명령이 실행되었으나 아직 완료되지 않은 상태.
  • Committed: 트랜잭션이 성공적으로 완료된 상태.
  • Failed: 트랜잭션 실행 중 오류가 발생한 상태.
  • Aborted: 트랜잭션이 취소되고, 이전 상태로 롤백된 상태.

4-5. 트랜잭션을 사용할 때 주의할 점

질문: 트랜잭션을 사용할 때 주의해야 할 점은 무엇인가요?
답변: 트랜잭션을 사용할 때는 교착 상태(Deadlock)를 방지하기 위해 Lock을 적절히 관리해야 합니다. 또한 트랜잭션이 너무 오래 지속되지 않도록 주의하여, 데이터베이스 성능 저하와 자원 낭비를 방지하는 것이 중요합니다.


5. Statement vs PreparedStatement

질문: Statement와 PreparedStatement의 차이점은 무엇인가요?
답변: Statement는 SQL 쿼리를 실행할 때마다 새롭게 파싱과 컴파일을 수행하기 때문에, 같은 쿼리를 여러 번 실행할 경우 성능이 저하될 수 있습니다. 반면 PreparedStatement는 SQL 쿼리를 미리 컴파일해 두고, 실행할 때마다 파라미터만 바꿔서 사용할 수 있어 성능이 더 좋고, SQL 인젝션 공격을 방지하는 데에도 유리합니다.


6. NoSQL

6-1. NoSQL의 정의

질문: NoSQL이란 무엇인가요?
답변: NoSQL관계형 데이터베이스가 아닌 형태의 데이터 저장소를 의미합니다. NoSQL은 주로 스키마가 유연하고, 대규모 데이터 처리에 적합한 특성을 가집니다. Key-Value, Document, Column 모델과 같은 다양한 데이터 모델을 지원하며, 특히 수평적 확장이 용이합니다.

6-2. CAP 이론

질문: CAP 이론이란 무엇인가요?
답변: CAP 이론일관성(Consistency), 가용성(Availability), 네트워크 분할 허용성(Partition Tolerance) 세 가지 속성을 설명하는 이론입니다. CAP 이론에 따르면, 분산 시스템에서는 세 가지 속성 중 두 가지만 만족시킬 수 있습니다.

  • 일관성(Consistency): 모든 노드에서 동일한 데이터를 볼 수 있는 성질.
  • 가용성(Availability): 모든 요청이 응답을 받을 수 있는 성질.
  • 네트워크 분할 허용성(Partition Tolerance): 네트워크 분할이 발생하더라도 시스템이 계속 동작할 수 있는 성질.

6-3. 저장 방식에 따른 NoSQL 분류

질문: NoSQL은 저장 방식에 따라 어떻게 분류되나요?
답변:

  • Key-Value Model: 데이터를 키-값 쌍으로 저장하는 방식입니다. 간단한 구조이지만 확장성이 뛰어나며, Redis가 대표적인 예입니다.
  • Document Model: 데이터를 JSON과 같은 문서 형태로 저장하는 방식입니다. MongoDB가 대표적인 예로, 복잡한 데이터를 쉽게 저장하고 조회할 수 있습니다.
  • Column Model: 데이터를 컬럼 패밀리 구조로 저장하는 방식입니다. 대규모 데이터를 처리할 때 유리하며, 대표적으로 HBase가 있습니다.
반응형