< 데이터베이스 기초 이론 및 개념 >
데이터베이스(Database)
- 체계적으로 구성되고 저장된 관련 데이터의 모음.
- 정보의 중복을 최소화하고 효율적인 검색과 갱신이 가능하도록 설계된 데이터 저장소
- 데이터베이스를 도서관에 비유하자면
n 테이블 = 도서관의 서가(소설, 과학, 역상 등으로 구분)
n 레코드 = 개별 책 한 권
n 인덱스 = 도서 검색 시스템
n SQL = 사서에게 “OO책 어디 있나요?” 물어보는 것 # Structured Query Language
DBMS(Database Management System)
- 데이터베이스를 생성, 관리, 운영하는 소프트웨어 시스템.
- 사용자와 데이터베이스 사이의 중간다리 역할.
데이터베이스 시스템
- 데이터베이스, DBMS, 관련 애플리케이션을 모두 포함하는 통합 환경
데이터베이스 특징
- 실시간으로 저장 가능
n 속도가 중요하다면 메모리DB(Redis 등), 전통적인 DB라면 MySQL, 온디바이스에 보관한다면 로컬DB
- 트랜잭션(Transaction)
n 한 묶음의 작업이 전부 성공하면 commit, 하나라도 끊기면 롤백
데이터베이스의 필요성 및 중요성
1. 데이터 기반 의사결정: 기업이 정확하고 신뢰할 수 있는 데이터를 바탕으로 의사결정을 내릴 수 있게 함.
2. 업무 효율성 향상: 잘 설계된 데이터베이스는 정보의 중복을 줄이고 데이터 접근성을 높여 업무 프로세스의 효율성을 크게 향상시킴.
3. IT 시스템의 신뢰성: 데이터 무결성, 일관성, 보안을 보장하여 전체 IT 시스템의 안정성과 신뢰성을 높임. # 데이터 이중화 → 화재, 정전 등 예방
데이터베이스의 진화
- 1970년대: RDBMS의 탄생. IBM의 Edagar F. Codd가 관계형 모델 제안.
- 1990년대: 웹의 등장. 인터넷 폭발적 성장. RDBMS가 웹 서비스의 표준 데이터베이스로 자리잡음.
- 2000년대 중반: NoSQL의 탄생. 빅데이터 시대 도래
관계형 데이터베이스(RDBMS)
→ 데이터를 테이블(표) 형태로 구조화하고, 테이블 간의 관계를 정의하여 데이터를 관리하는 시스템. SQL을 통해 데이터를 조작하며, 데이터 일관성과 무결성을 보장.
- 기본 구조 요소
n 테이블(Table): 데이터를 저장하는 기본 단위
n 행(Row): 각각의 데이터 레코드/튜플
n 열(Column): 데이터 속성/필드
n 키(Key): 데이터 식별과 테이블 간 관계 설정을 위한 특수 필드
- 주요 특성
n 정규화: 데이터 중복을 최소화하는 설계 원칙
n 트랜잭션 지원: ACID 속성을 통한 안정적인 데이터 처리
n 참조 무결성: 외래키를 사용하여 테이블 간 관계의 일관성 유지
n 스키마 강제: 데이터 구조와 형식의 일관성 보장
- 주요 활용 사례: 인사 관리 및 급여 시스템, 전자상거래 플랫폼, 금융 거래 및 은행 시스템, 기업 ERP 시스템 및 업무 애플리케이션
비관계형 데이터베이스(NoSQL)
→ Not Only SQL의 약자로, RDBMS의 테이블 구조와 SQL 사용을 탈피한 데이터베이스 시스템. 유연한 스키마와 수평적 확장성이 특징이며, 대용량 데이터와 다양한 데이터 형식 처리 최적화.
- 주요 특징
n 스키마 유연성: 구조 변경 없이 새로운 필드 추가 가능
n 분산 아키텍처: 수평적 확장성으로 대용량 처리 용이
n 다양한 데이터 모델: 문서형, 키-값, 컬럼형, 그래프형 등
n CAP 이론: 일관성, 가용성, 분할내성 중 두 가지 특성 보장
CAP이론: NoSQL의 핵심
→ 분산 시스템에서는 3가지 중 2가지만 동시에 만족 가능
1. 일관성(Consistency): 모든 노드가 동일한 시점에 동일한 데이터를 보여야 함
2. 가용성(Availability): 모든 요청에 대해 항상 응답을 받을 수 있어야 함.
3. 분할 내성(Partition Tolerance): 어느 한 지역에 네트워크 장애가 발생해도 시스템이 계속 작동해야 함.
→ NoSQL은 이 중 2가지를 선택하여 특정 용도에 최적화
1. CP: 일관성 + 분할내성 # e. 금융 거래, 재고 관리
A. MongoDB: Primary 노드가 죽으면서 일시적으로 쓰기 불가. 하지만 데이터 정확성 보장.
B. HBase : Region 서버 장애 시 해당 영역 일시 중단. 일관성 우선.
2. AP: 가용성 + 분할내성 # ex. 소셜미디어, 장바구니
A. Cassandra : 노드 장애 시에도 계속 서비스 잠시 후 일관성 확보(최종 일관성)
# 즉시 동시에는 아니더라도 결국에는 일관성을 가짐
B. DynamoDB : 항상 응답 가능. 일시적으로 다른 데이터를 볼 수 있음.
대표적인 NoSQL Document DB: MongoDB # ex. 넷플릭스, 이베이, 뉴욕타임스, 카카오톡
- 핵심 특징
n JSON 형태로 데이터 저장
n 스키마 유연성(Schema-less)
n 수평 확장 용이(=샤딩)
n 강력한 쿼리 기능
트랜잭션과 ACID 원칙
트랜잭션(Transaction): 한 묶음의 작업이 전부 성공하거나, 전부 실패하는 작업이 단위
→ 데이터베이스의 상태를 변화시키는 논리적 작업 단위로, 한 번에 모두 수행되어야 하는 원자적 연산들의 집합. ex. 계좌이체는 출금과 입금이 모두 성공해야 완료되는 트랜잭션.
- 처리 단계
1. 트랜잭션 시작
2. 데이터 조작
3. 데이터 검증
4. 임시 완료
5. 커밋(Commit) or 롤백(Rollback)
ACID – 데이터베이스의 4대 원칙 # 안전한 트랜잭션의 4가지 약속
1. Atomicity (원자성): 트랜잭션의 모든 작업은 완전히 실행되거나, 전혀 실행되지 않거나
2. Consistency (일관성): 트랜잭션의 전후로 데이터베이스의 모든 규칙이 유지되어야 함.
3. Isolation (격리성): 여러 트랜잭션이 동시에 실행되어도 서로 간섭하지 않음.
4. Durability (지속성): 트랜잭션이 성공적으로 완료(커밋)되면 영구적으로 저장.
완벽한 ACID는 100% 안전한 대신 락 대기 시간이 증가하여 느린 문제가 존재.
따라서
강한 ACID 필요 → PostgreSQL, MySQL
대용량+빠른속도 → MongoDB
최고 성능(ACID 최소) → Redis
DBMS 아키텍쳐
싱글티어 아키텍처: 모든 구성 요소가 단일 시스템에 존재. 개인용 DB or 소규모 애플리케이션
클라이언트-서버 아키텍처: 클라이언트는 UI와 비즈니스 로직 담당. 서버는 데이터 관리와 처리 담당.
멀티티어/3계층 아키텍처: 역할별 분리로 유지보수성 향상. 각 계층별 독립적 확장 가능. 엔터프라이즈급 애플리케이션 적합.
- 계층별 주요 기능 # 단일(싱글) 아키텍처 기준
1. 외부 인터페이스 계층: 사용자와 응용 프로그램이 데이터베이스와 상호작용하는 진입점. SQL처리, 연결 관리, 질의 제출 처리.
2. 중간 처리 계층: 쿼리 최적화, 트랜잭션 관리(ACID), 데이터 무결성 보장, 동시성 제어, 로깅과 복구 처리.
3. 저장 관리 계층: 물리적 데이터 저장 및 접근 관리. 파일 시스템, 디스크 I/O, 인덱스 관리, 버퍼링 담당.
- 핵심 구성요소 기능
n 쿼리 옵티마이저: 최적의 실행 계획 수립, 비용 기반 최적화 수행
n 트랜잭션 관리자: ACID 속성 보장, 원자성과 일관성 유지.
n 버퍼/메모리 관리: 데이터 캐싱, 메모리-디스크 간 효율적 데이터 이동
n 로그 관리자: 장애 복수, 트랜잭션 롤백을 위한 변경 기록
- 아키텍처 비교 및 선택 기준
1. 성능 및 확장성: 멀티티어는 각 계층별 확장이 가능. 싱글티어는 확장성이 제한.
2. 보안: 멀티티어는 계층별 보안 정책 정욕이 가능 → 더 높은 보안성
3. 구현 복잡도: 싱클티어는 구현 간단. 멀티티어는 더 복잡
4. 마이크로서비스 연계: 3계층은 마이크로서비스와 결합하여 현대적 분산 시스템을 구축하는 기반이 됨.
5. 클라우드 환경: 멀티티어는 컨테이너화와 클라우드 환경에 적합한 구조로 각광받음
6. IT 컨설턴트 관점: 비즈니스 요구사항과 규모에 따라 적절한 아키텍처 패턴 선정이 중요
< 데이터베이스 운영 >
성능 최적화
1. 쿼리 최적화
- SQL 쿼리를 효율적으로 작성하고 실행 계획을 개선하여 성능을 향상하는 기법
- 요즘엔 LLM 성능이 워낙 좋고 알아서 잘해서 쿼리 최적화는 크게 중요치 않음
2. 데이터베이스 구조 최적화
- 정규화/반정규화: 데이터 중복을 최소화하거나 성능 향상을 위해 데이터를 통합 또는 분리함
- 파티셔닝: 큰 테이블을 작은 파티션으로 분할하여 검색 및 관리 성능을 향상시킴
- 데이터 타입 최적화: 데이터 타입 크기를 최소화하여 저장 공간을 절약하고 검색 성능을 향상시킴
- 테이블 설계 최적화: 테이블 구조를 효율적으로 설계하여 검색 및 삽입/수정/삭제 성능을 향상시킴
3. 시스템 환경 최적화
- 하드웨어 성능 향상: CPU, 메모리, 디스크 등의 성능을 향상시켜 데이터베이스 처리 능력을 향상시킴
- 운영체제 최저화: 운영체제 설정을 최적화하여 데이터베이스 시스템의 자원 활용 효율성을 높임
- 데이터베이스 설정 최적화: 데이터베이스 시스템의 설정 값을 최적화하여 성능을 향상시킴
- 네트워크 최적화: 데이터베이스 서버와 클라이언트 간의 네트워크 성능을 향상시켜 데이터 전송 속도를 높임
4. 데이터베이스 관리 및 유지보수
- 정기적인 백업 및 복구: 데이터 손실에 대비하여 정기적으로 데이터를 백업하고 복구 시스템을 구축함
- 통계 정보 관리: 데이터베이스 통계 정보를 주기적으로 갱신하여 쿼리 최적화에 활용함
- 모니터링 및 진단: 데이터베이스 시스템의 성능을 지속적으로 모니터링하고 문제 발생 시 신속하게 진단 및 해결함
- 보안 관리: 데이터베이스 접근 권한을 관리하고 보안 취약점을 제거하여 데이터 보안을 강화함
5. 기타 방법
- 분산 데이터베이스: 여러 대의 서버에 데이터를 분산하여 처리 능력을 향상시킴 → 이중화(Replication)
- 인메모리 데이터베이스: 데이터를 메모리에 저장하여 검색 속도를 극대화함
- 로드 밸런싱: 데이터베이스 서버에 부하를 분산하여 성능을 향상시킴
동시성 제어
1. 여러 사용자가 동시에 데이터베이스에 접근할 때 데이터의 일관성을 유지하는 기법
2. 동시성과 일관성 관계
- 동시성은 여러 트랜잭션이 동시에 데이터베이스에 접근하여 데이터를 읽거나 수정하는 것을 의미
- 일관성은 데이터베이스의 데이터가 항상 정확하고 유효한 상태를 유지하는 것을 의미
3. 주요목적
- 데이터 일관성 유지
- 교착 상태(Deadlock) 방지
- 성능 저하 최소화
데이터 무결성(Data Integrity)
1. 데이터가 정확하고, 일관성이 있으며, 무결한 상태를 유지하는 것을 보장하는 개념
2. 데이터 무결성이 중요한 이유
- 데이터 오류 방지 (잘못된 값 저장 방지)
- 시스템 신뢰성 향상
- 데이터 일관성 유지
데이터베이스 보안
1. 데이터를 보호하고, 불법적인 접근을 차단, 데이터 무결성을 유지하는 과정
2. 주요 목표
- 기밀성(Confidentiality): 승인된 사용자만 데이터에 접근 가능해야 함
- 무결성(Integrity): 데이터가 훼손되거나 변경되지 않도록 보호해야 함
- 가용성(Availability): 필요한 시점에 데이터에 접근할 수 있어야 함
3. 보안 강화 방법
- 사용자 권한 관리 (Access Control)
n 최소 권한 원칙(Principle of Least Privilege, PoLP) 적용
n GRANT, REVOKE 명령어를 사용하여 권한 제어
- 데이터 암호화 (Encryption)
n 전송 중 암호화: TLS/SSL을 사용하여 네트워크 상에서 데이터 보호
n 저장 시 암호화: AES, SHA 등 암호화 알고리즘 사용
- 감사 로깅 (Audit Logging)
n 모든 데이터베이스 접근 및 변경 사항을 기록하여 보안 이벤트 추적
n 이상 접근 탐지 및 대응 가능