728x90
반응형
DB의 기본
용어정리
DB(DataBase)
- 통합하여 관리되는 데이터의 집합체
DBMS(DataBase Management System)
- DB를 관리하고 운영하는 소프트웨어
- 계층형, 망형, 관계형 DBMS 중 대부분의 DBMS가 테이블로 구성된 관계형 DBMS(RDBMS)
- 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야함
SQL(Structured Query Language)
- 구조화된 질의 언어라는 뜻
- 표준 SQL을 배우면 대부분의 DBMS사용 가능
DBMS의 종류
- 계층형(현재 사용x)
- 구성 후 변경하기가 매우 까다로움
망형(현재 사용x)
- 모든 구조를 파악해야 프로그램 작성 가능
- 모든 구조를 파악해야 프로그램 작성 가능
관계형 DBMS
- 테이블안에 행과 열로 이루어져 있음
- 테이블안에 행과 열로 이루어져 있음
✨DB의 특징
- 독립성
- DB는 데이터를 사용하는 응용 프로그램과 독립적으로 데이터를 저장
- 물립적 독립성 :
- DB의 사이즈를 늘리거나 성능 향상을 위해 데이터 파일을 새롭게 추가하더라도 관련 응용프로그램을 수정할 필요가 없다.
- 논리적 독립성
- 논리적인 구조로 다양한 응용 프로그램의 논리적 요구를 만족
- 무결성
- 다양한 제약조건 및 기능을 통해 무결성 유지
- 보안성
- 계정 및 권한 관리를 통해 데이터 보안 유지
- 일관성
- 다양한 제약조건을 통해 일관된 유지
- 어떤 하나의 데이터만 변경했을 경우 발생할 수 있는 데이터의 불일치성 배제
- 작업 중 일부의 데이터만 변경되어 나머지 데이터와 일치하지 않는 경우의 수 배제
- 중복 최소화
- 데이터를 통합해서 관리하여 중복 최소화
SQL이란?
SQL은 DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language)와 같이 세가지로 나눌 수 있습니다.
DDL(데이터 정의어)
입력/수정/삭제/조회
DML(데이터 조작어)
DB 및 테이블 생성/ 구조 변경/ 삭제/ 이름 변경
DCL(데이터 제어어)
DB에 접근하고 객체들을 사용하도록 권한을 주고 회수
TCL(트랙잭션 제어어)
실행 여부를 결정
✨키(Key)란?
- 검색, 정렬 시 튜플(레코드,행)을 구분할 수 있는 기준이 되는 속성
- 후보키(Candidate Key)
- 기본키로 사용할 수 있는 속성들(유일성,최소성)
- 후보키 중 기본키를 제외한 나머지는 모두 보조키
- 유일성 O, 최소성 X ⇒ 슈퍼키
- 기본키(Primary Key)
- 하나의 테이블에서 특정 튜플을 구별할 수 있는 속성
- 개체 무결성에 의해 기본키에는 null값과 중복된 값이 저장되어질 수 없다
- 엔티티를 식별하는 대표 키
- table당 1개
- 외래키(Foreign Key)
- 중복되지 않는 유일한 값
- 기본키와 다르게 Null허용
- 신입사원이 해당 부서가 정해지지 않은 경우
- 대체 키(보조키)
- 후보키 중에서 기본키(Primary Key)로 선택되지 않고 남은 키(Key)를 의미한다. 보
- 후보키(Candidate Key)
✨여러 후보키 중 기본키 선정 조건
- Null값을 가질 수 있는 속성이 포함된 후보키는 부적합 ⇒ 다른 튜플과 구분이 어려움
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 부적합 ⇒ 다른 튜플과 구별되는 값인지 매번 확인해야 함
- 정수, 단순 문자열로 처리 및 이해가 쉬운 값
✨외래키는 Null이 허용되는가?
- 허용된다.
- 예시 : 사원은 하나의 부서를 가진다. 신입사원은 부서가 미정될 수 있다.
- 외래키 값은 Null이거나 부모 테이블의 기본키 값과 동일해야 한다.(참조 무결성 제약 조건)
- 부모 테이블의 기본키, 고유키를 외래키로 지정가능하다.
- 데이터 타입은 같아야 한다.
- 기본키, 고유키가 여러 개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정 가능
✨RDBMS 와 NoSQL은 무엇인가?
- RDBMS
- DB를 이루는 객체들의 릴레이션을 통해서 데이터를 저장
- SQL을 사용해 CRUD 가능
- 중복을 피하고 명확한 데이터 구조를 보장
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우 사용된다.
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 사용된다.
- NoSQL
- 전통적인 관계형 모델에서 벗어나 다양한 데이터 모델을 사용하여 데이터의 관리와 접근을 지원하는 DB
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우 사용
- 일기를 자주 하지만 변경은 자주 없는 경우 사용
- DB를 수평으로 확장해야 하는 경우(막대한 양의 DB처리)
- DB마다 사용하는 데이터의 모델이 다르기 때문에 해당 DB를 잘 이해하고 있어야 함
- 엄격한 제한 조건이 없기 때문에 수정,삭제를 수행하는 경우 모든 컬렉션에 거쳐서 이를 반영해야 한다.
- 종류
- Key-Value Data Model: 하나의 키에 하나의 데이터 저장 -> ex. Redis, Memcached, Redis, DynamoDB
- Document Data Model: Key-Value 모델을 개념적으로 확장해서 하나의 키에 하나의 구조화된 문서를 저장 -> ex. MongoDB
- Column-Family: Cassandra
- Graph Model
❓ RDBMS의 한계와 NoSQL을 사용하는 이유 - CAP, PACELC 이론
CAP 이론
: 분산 환경에서 모두를 만족하는 시스템은 없다는 이론입니다.- Consistency(일관성)
- 모든 노드들이 동일 시간에 동일 데이터를 사용자에게 보여줘야 하는 것을 의미합니다.
- ACID Consistency와는 조금 다릅니다. (데이터는 항상 일관성 있는 상태를 유지, 데이터 조작 후에도 헤치지 말아야 한다는 속성)
- 쓰기 동작 완료 후 발생하는 읽기 동작은 마지막으로 쓰여진 데이터를 리턴합니다.
- 동시성, 동일성이라고도 하며 다중 클라이언트 환경에서 같은 시간에 조회하는 데이터는 항상 동일해야 한다는 보증을 하는 것입니다.
- RDBMS가 지원하는 가장 기본적인 기능입니다.
- NoSQL은 데이터의 일관성이 느슨하게 처리(데이터의 변경이 시간에 흐름에 따라 여러 노드에 전파)되어 동일한 데이터가 나타나지 않을 수 있습니다.
- Availability(가용성)
- 특정 노드에 장애가 발생해도 성공적으로 서비스를 지속하는 것을 의미합니다.
- 모든 동작에 대한 응답이 리턴되어야 합니다.
- Partition Tolerance(분할 내성)
- 시스템 일부가 네트워크에서 연결이 끊기더라도 동작해야 하는 것을 의미합니다.
- 파티션 허용, 분산화 가능 물리적인 네트워크 분산 환경에서도 시스템이 잘 동작해야 하는 것을 의미합니다.
- 분산 시스템에서 2가지만 만족할 수 있는데 단순히 특정 데이터베이스가 CA, CP, AP라고 확정지을 수는 없습니다. => 어떻게 클러스터링 하느냐에 따라 달라질 수 있음
- RDBMS는 일반적으로 CA를 만족하는데 분산화보다는 데이터의 일관성과 가용성에 중점을 주기 때문, 시스템의 신뢰성이 높습니다.
- NoSQL은 일반적으로 CP(MongoDB, Redis)나 AP(DynamoDB, cassandra, CouchDB)형태를 선호하는데 데이터의 신뢰성보다는 분산에 중점을 둔 방식이기 때문입니다.
- ⚠️ 한계
- 완벽한 AP, CP 시스템은 사용할 수 없고 대부분의 분산 시스템은 CP와 AP의 중간이 됩니다.
- 모든 분산 시스템이 파티션을 사용하지는 않습니다.
PACELC 이론
: CAP로 부족한 부분을 보완하기 위해 네트워크 장애 상황(Partition)과 정상 상황(Else)을 나눠서 설명하는 이론입니다.- 네트워크 장애 상황 시 분산시스템은 가용성(A;Availability)과 일관성(C;Consistency)이 상충됩니다.
- 정상 상황 시 지연 시간(L; Latency)과 일관성(C; Consistency)이 상충됩니다.
- cf.) Eventual Consistency: Consistency를 보장해주지 못하기 때문에 나온 개념으로, Consistency를 완전히 보장하지는 않지만, 결과적으로 언젠가는 Conssistency가 보장됨을 의미합니다.
728x90
반응형
'면접 준비' 카테고리의 다른 글
백엔드 자바 CS 면접 빈출 질문 대비하기 - Security (0) | 2024.08.01 |
---|---|
백엔드 자바 면접 빈출 질문 대비하기 - 리스트 업 (0) | 2024.08.01 |
[CS면접 및 자바 면접 준비] Generic 및 쓰레드 면접 질문 정리 (0) | 2024.03.27 |
[CS면접 및 자바 면접 준비] Network (1) | 2024.03.26 |
[CS면접 및 자바 면접 준비] 컬렉션 프레임워크 (3) | 2024.03.23 |