데이터베이스
데이터베이스를 사용하는 이유?
- 데이터 관리 효율성 : 데이터를 체계적으로 저장하고 관리.
- 데이터 중복 최소화 : 데이터 일관성을 유지하며 저장공간 절약.
- 보안성 : 접근 권한을 통해 데이터 보호
- 데이터 통합 : 여러 애플리케이션에서 일관된 데이터 제공
- 확장성과 성능 : 대용량 데이터 처리 및 분석에 적합
데이터베이스 성능
- Query Optimization : 쿼리 실행 계획 최적화
- Index 사용 : 검색 성능 향상
- Database Partitioning : 데이터 분할로 병렬 처리 지원
- Connection Pooling : 연결 효율성 향상
Index
Index란 무엇인가?
- 데이터 검색 속도를 빠르게 하기 위해 테이블 내 데이터의 위치를 저장한 구조.
- 책의 목차와 같은 역할 수행
Index의 자료구조
- B-Tree : 대부분의 RDBMS에서 사용하는 기본 자료구조
- Hash Table : 특정 검색에 적합한 해시 기반 구조
- Bitmap Index : 대량의 데이터에서 특정 조건 검색에 유리
Primary Index VS Secondary Index
- Primary Index : 기본 키(Primary Key)에 기반한 고유 인덱스
- Secondary Index : 기본 키가 아닌 다른 컬럼에 설정된 인덱스
Composite Index
- 두 개 이상의 컬럼을 결합하여 만든 인덱스
- 다중 조건 검색에 효과적
Index의 성능과 고려해야 할 사항
- 장점 : 데이터 검색 성능 향상
- 단점 : 추가 저장공간 필요, 쓰기 작업(INSERT/UPDATE/DELETE) 속도 저하
- 고려 사항 : 자주 사용되는 검색 조건에 적합한 인덱스를 설계
정규화
탄생 배경
정규화란 무엇인가?
- 데이터를 체계적으로 구성하여 중복을 줄이고 데이터 무결성을 유지하는 과정
종류
- 제1정규화(1NF) : 모든 컬럼의 값이 원자값이어야 함
- 제2정규화(2NF) : 부분 종속성 제거
- 제3정규화(3NF) : 이행적 종속성 제거
- BCNF : 후보 키에만 종속
장단점
- 장점 : 데이터 중복 제거, 저장공간 절약, 무결성 유지
- 단점 : 복잡한 설계, 성능 저하 기능
Transaction
트랜잭션이란 무엇인가?
- 데이터베이스에서 하나의 논리적 작업 단위를 구성하는 명령어 집합
트랜잭션과 Lock
- Lock : 트랜잭션 간 데이터 충돌 방지를 위한 메커니즘
- 종류 : Shared Lock, Exclusive Lock
특성(ACID)
- Atomicity : 트랜잭션은 모두 수행되거나 모두 취소됨.
- Consistency : 트랜잭션 완료 후 데이터 일관성 유지
- Isolation : 트랜잭션 간 간섭 방지
- Durability : 완료된 트랜잭션의 결과는 영구 저장
트랜잭션을 사용할 때 주의할 점
- 교착상태 방지, 적절한 Isolation Level 설정
교착상태
교착상태란 무엇인가?
- 두 개 이상의 트랜잭션이 서로 자원을 대기하며 무한 대기에 빠지는 상태
교착상태의 예(MySQL)
- 트랜잭션 A가 Row1을 잠그고 Row2를 대기하는 동안, 트랜잭션 B가 Row2를 잠그고 Row1을 대기.
교착 상태의 빈도를 낮추는 방법
- 트랜잭션의 순서 정의
- 잠금 범위 최소화
- 타임아웃 설정
Statement VS PreparedStatement
- Statement : 단순 쿼리 실행
- PreparedStatement : 쿼리를 미리 컴파일하여 재사용, SQL Injection 방지 효과
NoSQL
스키마가 고정되지 않고, 관계형 데이터베이스가 아닌 방식으로 데이터를 저장
CAP 이론
- 일관성(Consistency) : 모든 노드가 같은 데이터를 조회
- 가용성(Availability) : 모든 요청에 응답
- 네트워크 분할 허용성(Partition Tolerance) : 네트워크 분할에도 시스템 작동
저장방식에 따른 분류
- Key-Value Model : Redis, DynamoDB
- Document Model : MongoDB, CouchDB
- Column Model : Cassandra, HBase