3. 데이터베이스 구축 - 물리 데이터베이스 설계(데이터베이스 이중화 ~ 데이터베이스 백업)
99. 데이터베이스 이중화 / 서버 클러스터링
1) 데이터베이스 이중화 (Database Replication)
: 데이터베이스 서비스 중단이나 물리적 손상 발생 시 이를 복구하기 위해 동일한 데이터베이스를 복제하여 관리하는 것
- 하나 이상의 데이터베이스가 항상 같은 상태를 유지 -> 문제 발생 시 복제된 DB를 이용해 즉각적인 해결이 가능
- 여러 데이터베이스를 동시에 관리 -> 사용자가 수행하는 작업은 복제된 데이터베이스에도 동일하게 적용
- 애플리케이션의 작업을 여러 데이터베이스로 분산시켜 처리 -> 데이터베이스 부하 감소
- 이중화를 통해 백업 서버를 쉽게 운영할 수 있음
https://aws.amazon.com/ko/rds/features/read-replicas/
Amazon RDS 읽기 전용 복제본 | 클라우드 관계형 데이터베이스 | Amazon Web Services
Amazon RDS for MySQL, MariaDB, PostgreSQL, Oracle 및 SQL Server의 읽기 전용 복제본을 생성할 때, Amazon RDS는 리전 간에 복제하더라도 원본 DB 인스턴스와 읽기 전용 복제본 간에 퍼블릭 키 암호화를 사용하여
aws.amazon.com
- Amazon에서 제공하는 관계형 데이터베이스의 이중화 방식
- Primary 데이터베이스 : read/write가 모두 이루어지는 데이터베이스
- Read Replica : Primary 데이터베이스의 데이터를 비동기적으로 복제하여 저장하고 Read만 가능한 데이터베이스
1. 데이터베이스 이중화의 분류
- 변경 내용 전달 방식에 따라
- Eager 기법 : 트랜잭션 수행 중 데이터 변경이 발생하면 즉시 이중화된 데이터베이스에 전달하여 적용
- Lazy 기법 : 트랜잭션 수행이 종료되면 데이터 변경 사실을 새로운 트랜잭션으로 작성하여 이중화된 데이터베이스에 전달
-> 각 데이터베이스 마다 동일한 내용의 새로운 트랜잭션이 수행
- 이중화 구성 방법에 따라
- 활동-대기 방법 (Active-Standby)
- 한 DB가 활성 상태로 서비스하고 있으면 다른 DB는 대기 상태 유지
- 활성 DB에 문제가 발생하면 대기 상태 DB가 활성화되어 자동으로 모든 서비스를 대신 수행
- 구성과 관리가 쉬운 방식 -> 많은 기업에서 채택
- 활동-활동 방법 (Active-Active)
- 두 DB가 모두 활성 상태로 서로 다른 서비스를 제공
- 한쪽 DB에 문제가 발생하면 나머지 DB가 서비스를 대신 제공
- 처리율이 높지만 구성 및 설정이 복잡함
2) 클러스터링 (Clustering)
: 두 대 이상의 서버를 한 서버처럼 운영하는 기술
- 서버 이중화와 공유 스토리지를 이용해 서버의 고가용성 제공
※ 공유 스토리지
: 데이터 저장소를 네트워크로 연결해 다수의 사용자나 서버가 파일 및 데이터를 공유하는 방식
※ 고가용성
: 시스템이 오랜 시간동안 지속적으로 정상 운영될 수 있는 성질
- 클러스터링의 분류
- 고가용성 클러스터링 : 한 서버에 문제 발생 시 다른 서버가 대신 서비스를 처리하여 서비스 중단을 방지하는 방식
- 병렬 처리 클러스터링 : 전체 처리율을 높이기 위해 하나의 작업을 여러 서버에 분산시켜 처리하는 방식
100. 데이터베이스 보안 - 암호화
: 데이터베이스 일부 또는 전체에 대해 권한이 없는 사용자가 접근하는 것을 금지하기 위해 사용되는 기술
- 보안의 대상이 되는 데이터는 특정 셀의 데이터 값부터 테이블 전체에 이르기까지 다양
- 일반적으로 데이터베이스 사용자들은 서로 다른 객체에 대해 서로 다른 접근 권한을 가짐
1) 암호화 (Encryption)
: 데이터를 보낼 때 송신자가 지정한 수신자 외에는 내용을 알 수 없도록 평문을 암호문으로 변환하는 것
- 개인 키 암호 방식 (Private Key Encryption, 비밀 키 암호 방식)
: 데이터 송신자와 수신자가 공유하는 동일한 키로 데이터를 암호화/복호화하는 방식
- 대칭 암호 방식, 단일 키 암호화 방식
- 비밀 키(대칭 키)는 권한이 있는 사용자만 나누어 가지고 제 3자에게는 노출하지 않음
- ex) 전위 기법, 대체 기법, 대수 기법, 합성 기법(DES, LUCIFER)
- 공개 키 암호 방식 (Public Key Encryption)
: 암호화와 복호화에 사용되는 키가 서로 다른 방식
- 비대칭 암호 방식
- 공개 키 (Public Key) : 데이터 암호화에 사용하는 키, 사용자에게 공개됨
- 비밀 키 (Private Key) : 데이터 복호화에 사용하는 키, 공개하지 않고 비밀리에 관리
- ex) RSA (Rivest Shamir Adleman)
101. 접근 통제
: 데이터가 저장된 객체와 이를 사용하려는 주체 사이의 정보 흐름을 제한하는 것
- 비인가된 사용자의 접근 감시
- 접근 요구자의 사용자 식별
- 접근 요구의 정당성 확인 및 기록
- 보안 정책에 근거한 접근 승인/거부
1) 접근 통제 기술
1. 임의 접근 통제 (DAC; Discretionary Access Control)
: 데이터에 접근하는 사용자의 신원에 따라 접근 권한 부여
- 데이터 소유자가 접근 통제 권한을 지정 및 제어
- 객체를 생성한 사용자는 생성된 객체에 대한 모든 권한을 가짐 -> 다른 사용자에게 허가 가능
- ex) SQL 명령어 GRANT(권한 부여) / REVOKE(권한 취소)
2. 강제 접근 통제 (MAC; Mandatory Access Control)
: 주체와 객체의 등급을 비교해 접근 권한 부여
- 시스템이 접근 통제 권한을 지정
- 데이터베이스 객체는 보안 등급, 사용자는 인가 등급을 부여받음
- 접근 방식
- 주체의 인가 등급 < 객체의 보안 등급 : 읽기, 수정, 등록 불가
- 주체의 인가 등급 = 객체의 보안 등급 : 읽기, 수정 ,등록 가능
- 주체의 인가 등급 > 객체의 보안 등급 : 읽기만 가능
- MAC의 보안 모델
3. 역할기반 접근 통제 (RBAC; Role Based Access Control)
: 사용자의 역할에 따라 접근 권한 부여
- 중앙 관리자가 접근 통제 권한 지정
- DAC와 MAC의 단점을 보완
- 다중 프로그래밍 환경에 최적화된 방식
- 중앙 관리자가 역할마다 권한을 부여하고 -> 사용자는 할당받은 역할에 해당하는 권한을 사용 가능
2) 접근 통제의 3요소 : 접근 통제 정책, 접근 통제 매커니즘, 접근 통제 보안 모델
1. 접근 통제 정책
: 어떤 주체(Who)가 언제(When), 어디서(Where), 어떤 객체(What)에게 어떤 행위(How)를 하는지에 대한 허용 여부를 정의
- 신분 기반 정책 : 주체나 그룹의 신분에 근거하여 객체에 대한 접근을 제한
- Individual-Based Policy (IBP) : 단일 주체에게 하나의 객체에 대한 허가를 부여, 최소 권한 정책
- Group-Based Policy (GBP) : 여러 주체에게 하나의 객체에 대한 허가를 부여
- 규칙 기반 정책 : 주체가 갖는 권한에 근거해 객체에 대한 접근을 제한
- Multi-Level Policy (MLP) : 사용자 및 객체별로 지정된 기밀 분류 정책
- Compartment-Based Policy (CBP) : 집단별로 지정된 기밀 허가 정책
- 역할 기반 정책 : GBP의 변형으로 주체의 신분이 아니라 역할에 근거하여 객체에 대한 접근을 제한
2. 접근 통제 매커니즘
: 정의된 접근 통제 정책을 구현하는 기술적 방법
- 접근 통제 목록 (Access Control List) : 객체를 기준으로 어떤 주체가 어떤 행위를 할 수 있는지를 기록한 목록
- 능력 리스트 (Capability List) : 주체를 기준으로 허가된 자원 및 권한을 기록한 목록
- 보안 등급 (Security Level) : 주체나 객체에 부여된 보안 속성의 집합
- 패스워드 : 주체가 신원 증명시에 사용하는 인증 방법
- 암호화
3. 접근 통제 보안 모델
: 보안 정책 구현을 위해 정형화된 모델
1) 기밀성 모델 : 군사 목적 등 특수 환경에서 주로 사용되는 기밀성 보장을 최우선으로 하는 모델
- 제약 조건
- 단순 보안 규칙 : 주체는 자신보다 높은 등급의 객체에 Read 불가
- 스타 보안 규칙 : 주체는 자신보다 낮은 등급의 객체에 Write 불가
- 강한 스타 보안 규칙 : 주체는 자신과 다른 등급의 객체에 Read/Write 불가
2) 무결성 모델 : 불법적인 정보 변경 방지를 위해 데이터 무결성을 기반으로 개발된 모델
- 데이터의 일관성 유지에 중점을 둠
- 제약 조건
- 단순 무결성 규칙 : 주체는 자신보다 낮은 등급의 객체에 Read 불가
- 스타 무결성 규칙 : 주체는 자신보다 높은 등급의 객체에 Write 불가
3) 접근 통제 모델 : 접근 통제 매커니즘을 보안 모델로 발전시킨 모델
- 접근 통제 행렬 (Access Control Matrix) : 접근 통제 관리를 위해 테이블을 사용하는 보안 모델
- 행 : 주체 또는 사용자
- 열 : 객체 (테이블, 컬럼, 뷰, etc.)
- 셀 : 행의 주체가 열의 객체에 수행할 수 있는 조작 (ALL, R/W, R, W)
3) 접근 통제 조건
: 접근 통제 매커니즘의 취약점 보완을 위해 접근 통제 정책에 부가할 수 있는 조건
- 값 종속 통제 (Value-dependent Control) : 객체에 저장된 값에 따라 접근 통제를 다르게 허용
- ex) 객체의 회원가입 비용에 따라 다른 등급을 부여
- 다중 사용자 통제 (Multi-user Control) : 지정된 객체에 여러 사용자가 동시에 접근하는 경우 사용
- ex) 팀 내 구성원의 투표 결과에 따라 접근 여부를 결정
- 컨텍스트 기반 통제 (Context-based Control) : 특정 시간, 네트워크 주소, 접근 경로 등의 상황에 따라 접근 제어
- ex) 은행에서 00:00 ~ 06:00 사이에는 접근을 금지하는 경우
4) 감사 추적
: 사용자나 애플리케이션이 데이터베이스에 접근해 수행한 모든 활동을 기록하는 기능
- 오류가 발생한 데이터베이스 복구나 부적절한 데이터 조작 파악에 이용
- 실행한 프로그램, 사용자, 날짜 및 시간, 접근한 데이터의 이전 값/이후 값 등을 기록
102. 데이터베이스 백업
: 전산 장비 문제에 대비해 데이터베이스에 저장된 데이터를 보호하고 복구하기 위한 작업
- 치명적 데이터 손실을 막기위해 주기적 백업이 필요
- DBMS는 데이터베이스의 파괴, 실행 중단 시에 사용가능한 복구 기능 제공
1) 데이터베이스 장애 유형
- 사용자 실수 : 사용자의 실수로 데이터가 삭제되거나 잘못된 트랜잭션이 처리되는 등의 문제
- 미디어 장애 : 하드웨어에서 발생한 장애나 데이터 파손
- 구문 장애 : 프로그램 오류나 사용 공간 부족으로 발생
- 사용자 프로세스 장애 : 프로그램의 비정상적 종료, 네트워크 이상으로 인한 세션 종료 등으로 발생하는 오류
- 인스턴스 장애 : 비정상적 요인으로 인한 메모리나 데이터베이스 서버의 프로세스 중단
2) 로그 파일
: 데이터베이스의 상태 변화를 시간 흐름에 따라 모두 기록한 파일. 데이터베이스 복구를 위해 필요한 가장 기본적 자료
- 로그 파일을 기반으로 UNDO나 REDO를 실행하여 데이터베이스의 일관성을 유지
- UNDO : 트랜잭션을 실행 취소하여 데이터베이스를 과거 상태로 복귀
- REDO : 트랜잭션을 재실행하여 데이터베이스를 현재 상태로 재생
- 로그 파일 기록 시점 : 트랜잭션 시작 시, Rollback 시, 데이터 입력/수정/삭제 시, etc
- 로그 파일 내용 : 트랜잭션이 작업한 모든 내용, 트랜잭션 식별값, 레코드 및 데이터 식별자, 갱신 이전 값/이후 값, etc.
3) 데이터베이스 복구 알고리즘
: 동기적/비동기적 갱신에 따라 분류
- 동기적 갱신 : 트랜잭션 완료 전에도 데이터베이스 버퍼의 내용을 데이터베이스에 기록
- 비동기적 갱신 : 트랜잭션 완료 후 일정 주기나 작업량을 기준으로 버퍼의 내용을 데이터베이스에 기록
4) 백업 종류
: 복구 수준에 따라 물리 백업과 논리 백업으로 분류
- 물리 백업 : 운영체제를 이용해 데이터베이스 파일을 백업하는 방식
- 장점 : 백업 속도가 빠르고 작업이 단순하다
- 단점 : 문제 발생 시 원인 파악과 문제 해결이 어렵다
- 논리 백업 : DBMS 유틸리티를 이용해 데이터베이스 내 논리 객체를 백업하는 방식
- 장점 : 복원 시 데이터 손상을 막는다. 문제 발생 시 원인 파악 및 문제 해결이 수월하다
- 단점 : 백업/복원 시에 시간 소모가 크다