1. 파일시스템과 데이터베이스의 차이점에 대해서 설명해주세요.
파일시스템에서는 데이터를 파일로 관리합니다. 데이터를 파일로 관리할 경우 중복이 발생할 수 있고 일관성이 깨질 수 있습니다.
반면, 데이터베이스에서는 데이터를 DBMS을 통해 관리합니다. DBMS를 통해 데이터의 중복을 방지하고 일관성을 유지할 수 있습니다. 또한 여러 사용자가 동시 사용할 수 있고 데이터 복구나 보안성까지 제공합니다.
파일 시스템 | 데이터베이스 시스템 | |
데이터 구조 | 데이터를 계층 구조의 디렉토리와 파일로 구조화 | 논리적으로 연관된 데이터를 모아 구조화하며, DBMS를 사용하여 데이터를 관리 |
일관성과 무결성 | 또한 각 응용 프로그램 별로 독립된 파일을 가지므로 제이터의 중복 저장이 불가피하며, 데이터가 수정될 때 이로 인한 불일치 발생 가능 | ACID 트랜잭션을 지원하여 무결성 보장 ACID(원자성, 일관성, 독립성, 지속성) |
동시성 제어 | 다수의 사용자가 동시에 수정할 시, 동시성 문제 발생 | 다수의 사용자가 동시에 DB에 접근 및 수정 가능 |
검색 및 질의 | 파일 및 폴더 구조를 탐색하고 원하는 데이터를 직접 찾아야 함 | SQL 같은 질의 언어 통해, 쉽게 데이터 수정∙접근 가능 |
보안 | 파일 레벨에서 보안이 관리되므로, 파일 자체의 보호 및 접근 제어에 한정 |
데이터베이스 레벨에서 보안이 관리되므로, 사용자 및 역할 기반의 접근 제어가 가능 |
확장성 | 데이터 중복 저장으로 인한 스토리지 부담, 그리고 파일 직접 접근 방식으로 인해 효율적인 검색이 불가하다. 대규모 데이터 저장에 부적합하다. |
효율적인 데이터 저장과, 테이블을 기반으로 하는 인덱싱으로 데이터를 효율적으로 검색이 가능 이로 인해, 대규모 데이터를 효율적으로 저장 및 관리 가능 |
*무결성 : 데이터 값이 정확하고 완전한 상태
*트랜잭션 : DB의 상태를 변경(Select, Update, Insert, Delete)시키기 위해 수행되는 작업 단위
- 원자성 (Atomicity)
: 트랜잭션은 원자적인 단위로 간주된다. 이것은 트랜잭션 내의 모든 데이터 조작이 성공적으로 완료되거나 실패할 때 원자적으로 처리되어야 함을 의미하며, 실패한 경우 데이터베이스는 이전 상태로 롤백되어야 한다.
- 일관성 (Consistency)
: 트랜잭션을 수행하면 데이터베이스는 일관된 상태로 유지되어야 한다. 즉, 트랜잭션이 시작하기 전과 끝난 후의 데이터베이스 상태는 일관성이 있어야 한다.
- 고립성 (Isolation)
: 동시에 여러 트랜잭션이 실행 중인 경우 각 트랜잭션은 다른 트랜잭션의 작업에 영향을 미치지 않고 독립적으로 실행되는 것처럼 처리되어야 한다. 이것은 다른 트랜잭션의 작업을 볼 수 없어야 함을 의미한다.
- 지속성 (Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 저장되어야 한다. 이것은 시스템 장애 또는 전원 손실과 같은 문제가 발생해도 데이터가 유실되지 않음을 의미한다.
2. 데이터베이스의 특징에 대해 설명해주세요.
데이터베이스는 데이터가 저장되는 공간을 뜻합니다. 관계형 데이터베이스의 경우 데이터를 테이블 형태로 저장하며 중복없는 데이터를 일관성 있게 유지합니다.
1) 실시간 접근성
- 사용자가 데이터에 실시간으로 접근할 수 있게 한다.
2) 지속적인 변화
- 데이터의 추가∙갱신∙삭제와 같은 변화를 처리하고, 무결성을 유지한다.
3) 동시 공유
- 여러 사용자 or 응용 프로그램이 동시에 접근하고 공유할 수 있는 환경을 제공한다.
4) 내용에 대한 참조
- 물리적인 위치가 아닌, SQL과 같은 질의 언어를 사용하여 데이터를 검색하고 필터링할 수 있도록 한다.
5) 데이터 논리적 독립성
- 데이터의 논리적 구조와 물리적 구조를 분리함으로써, 논리적 독립성을 제공한다.
데이터 모델(ex. RDBMS)을 변경하지 않고 데이터의 물리적 구조를 최적화하거나 변경할 수 있다.
3. DBMS는 뭘까요? 특징에 대해 설명해주세요.
DBMS는 사용자 또는 애플리케이션으로부터 데이터베이스를 생성하거나 데이터베이스에 데이터를 저장, 수정, 삭제 등의 작업을 수행할 수 있게 해주는 소프트웨어입니다.
DBMS
: 데이터베이스를 운영하고 관리하는 소프트웨어
계층형(tree), 망형(graph), 관계형(table) 중 대부분의 DBMS가 table로 구성된 관계형 DBMS 형태로 사용된다.
1) 데이터 독립성
- 데이터의 논리적 구조와 물리적 구조를 분리하는 성질
2) 데이터 무결성
- 제약 조건(PK, FK, Unique..)을 적용해 동일한 내용에 대해 서로 다른 데이터가 저장되는 것을 허용하지 않는 성질
3) 데이터 일관성
- 삽입, 삭제, 갱신, 생성 후에도 저장된 데이터가 모순이 없고 동일한 규칙내에 일정해야 하는 성질
4) 데이터 보안성
- 접근 제어, 사용자 인증, 암호화 같은 다양한 보안 기능을 제공한다.
5) 성능 최적화
- 인덱싱, 쿼리 최적화, 캐싱과 같은 성능을 최적화하기 위한 다양한 기술들을 제공한다.
4. 스키마가 뭘까요? 3단계 데이터베이스 구조에 대해 설명해주세요.
스키마는 데이터베이스의 구조나 제약 조건등에 대한 명세라고 말할 수 있습니다.
데이터베이스는 3단계 구조로 설명할 수 있습니다.
외부스키마는 사용자단에서 데이터베이스를 바라보는 뷰를 정의합니다.
개념스키마는 전체 데이터베이스의 구조를 정의합니다.
내부스키마는 데이터의 물리적 저장구조를 정의합니다.
데이터베이스 스키마
: 데이터베이스에 저장되는 데이터 구조와 제약조건
ex. Student(id Integer, name Varchar(10), age Integer)
1) 외부 스키마 [사용자 관점]
- 사용자 or 응용프로그램에게 필요한 부분의 데이터만을 제한적으로 노출
- 논리적 구조로 사용자마다 다르다.
- ex. 학교 DB에서 학생 관점, 교직원 관점
2) 개념적 스키마 [조직 전체 관점]
- 전체 데이터베이스의 논리적인 구조를 정의
- 개체 관계, 데이터 타입, 관계, 제약조건 등 정의
→ 물리적 저장 구조의 세부 구조는 고려하지 않음
- 하나의 개념 스키마만 존재
3) 내부 스키마 [저장 장치 관점]
- 전체 데이터베이스가 저장 장치에 실제로 저장되는 방법 정의
- 레코드 구조, 필드 크기 등 물리적인 저장 구조 정의
- 하나의 내부 스키마만 존재
5. 데이터 독립성에 대해서 설명해주세요.
데이터 독립성은 3단계 데이터베이스 구조의 특징입니다.
논리적 데이터 독립성은 개념 스키마가 변경되어도 외부 스키마에 영향을 주지 않는 것을 뜻합니다.
애플리케이션에 영향을 주지 않고 데이터베이스의 논리적 구조를 변경할 수 있는 것을 뜻합니다.
물리적 데이터 독립성은 내부 스키마가 변경되어도 개념 스키마에 영향을 주지 않는 것을 뜻합니다.
데이터베이스의 논리적 구조에 영향을 주지 않고 물리적 저장 장치를 변경할 수 있는 것을 뜻합니다.
하위 스키마가 변경되어도 상위 스키마는 영향을 받지 않음
- 논리적 데이터 독립성
- 개념 스키마(하위)가 변경되어도 외부 스키마(상위)는 영향을 받지 않는다.
- 즉, 데이터베이스의 전체 구조가 변경되더라도 외부 애플리케이션 or 사용자 뷰는 변하지 않는다.
- 그러나, 변경되는 개념 스키마와 관련된 외부/개념 사상(mapping)의 수정이 필요하다.
- 물리적 데이터 독립성
- 내부 스키마(하위)가 변경되어도 개념 스키마(상위)는 영향을 받지 않는다.
- 즉, 물리적인 저장 구조가 변경되더라도 데이터베이스의 논리적 구조가 변하지 않는다.
- 그러나, 변경되는 내부 스키마와 관련된 개념/내부 사상(mapping)의 수정이 필요하다.
사상(mapping)
: 다양한 스키마 간의 관계를 나타냄.
데이터의 논리적 구조를 물리적 구조로 변환하거나, 한 스키마의 데이터를 다른 스키마로 변환하는 과정
6. RDBMS(관계형 데이터베이스 관리시스템)은 뭘까요?
RDBMS는 관계 데이터 모델을 기반으로 데이터를 구조화하고 관리하는 DBMS입니다.
데이터는 릴레이션(테이블) 표현되며 릴레이션(테이블) 간에는 관계를 맺을 수 있습니다.
'관계형 데이터베이스 관리 시스템'으로, 데이터를 테이블 형태로 저장하고 관리하는 DBMS이다.
이러한 시스템은 데이터를 관련성 있는 행과 열로 구성된 테이블에 저장된다.
테이블 간의 관계를 통해 데이터를 구조화하고 쉽게 검색 및 조작할 수 있다.
또한 SQL(Structured Query Language)을 사용하여 데이터를 검색, 수정, 추가 및 삭제할 수 있다.
이러한 특징은 데이터의 일관성과 무결성을 유지하고 데이터 관리를 단순화한다.
7. 릴레이션 스키마와 릴레이션 인스턴스에 대해서 설명해주세요.
릴레이션 스키마는 릴레이션의 속성, 도메인, 차수등을 정의한 것입니다.
릴레이션 인스턴스는 릴레이션 스키마에 정의된대로 저장된 데이터를 뜻합니다.
릴레이션에 저장된 하나의 행을 튜플이라고 부릅니다.
*릴레이션(=테이블)
릴레이션 스키마
- 데이터베이스에서 테이블의 구조를 정의하는데 사용
- 테이블의 이름, 각 속성의 이름과 타입, 속성값의 도메인과 같은 테이블의 구조적인 특성을 설명한다
릴레이션 인스턴스
- 릴레이션 스키마의 정의를 기반으로 하며, 스키마에 따라 행(튜플)과 열(속성)의 데이터 값이 채워져 있는 실제 데이터 집합
- 데이터베이스 시스템에서 쿼리를 실행하고 정보를 추출하는데 사용
8. 릴레이션의 차수와 카니덜리티에 대해 설명해주세요.
릴레이션에서 차수란 속성의 개수를 뜻합니다.
예를들어 학생 릴레이션에 나이, 이름, 학교 등의 속성이 있다면 차수는 3입니다.
카디널리티는 릴레이션에 저장된 튜플의 수를 뜻합니다.
튜플들은 서로 중복되지 않는 특징이 있습니다.
릴레이션 차수(arity)
- 테이블의 열(속성)의 수
- 즉, 릴레이션의 스키마에 정의된 열의 수
릴레이션 카디널리티(cardinality)
- 테이블에 저장된 행(튜플)의 수
- 즉, 릴레이션 인스턴스에 포함된 실제 데이터 레코드의 수
ex. 학생 릴레이션의 차수 : 학생 정보를 나타내는 열의 수
학생 릴레이션의 카디널리티 : 학생 레코드의 수
9. 키(Key)에 대해서 설명해주세요. (슈퍼키, 후보키, 기본키, 대리키, 외래키)
키는 릴레이션에서 특정한 튜플을 식별할때 사용하는 것입니다.
키의 종류에는 슈퍼키, 후보키, 기본키, 대체키, 외래키, 대리키 등이 있는데,
이중 기본키와 외래키에 대해서 설명 드리겠습니다.
기본키는 후보키중 하나가 선택되어 튜플의 식별자로 쓰이는 대표키 입니다.
외래키는 다른 릴레이션의 기본키는 참조하는 키입니다.
외래키를 통해 릴레이션(테이블)간 관계를 맺을 수 있습니다.
(꼬리질문) 나머지 키에 대해서도 설명해줄래요?
- 후보키는 튜플을 유일하게 식별할 수 있는 최소 속성 집합입니다.대리키는 마땅한 기본키가 없을때 일련번호와 같이 속성을 추가하여 그것을 키로 삼는 키입니다. 인조키라고도 불립니다.
- 대체키는 기본키로 선정되지 않은 키입니다.
- 슈퍼키는 튜플을 유일하게 식별할 수 있는 모든 속성 집합입니다.
1) 슈퍼키
- 릴레이션의 행(튜플)을 고유하게 식별하는데 사용되는 열(속성)의 집합
- 릴레이션 내에서 데이터를 식별하는데 사용될 수 있지만, 최소성 요구 조건을 만족하지 않을 수 있다.
- 즉, 슈퍼키 중 하나는 다른 슈퍼키의 부분집합일 수 있다.
ex. <학생> 릴레이션에서는 학번, 주민등록번호, (학번, 주민등록번호), (학번, 주민등록번호, 이름) 등이 슈퍼키이다.
- 유일성: 슈퍼키는 그 속성의 조합으로 인해 모든 행을 고유하게 식별할 수 있어야 합니다. 즉, 중복된 값을 가지는 행이 없어야 합니다.
- 최소성: 슈퍼키는 가능한 한 최소한의 속성으로 이루어져야 합니다. 즉, 슈퍼키를 구성하는 어떤 속성도 제거할 경우 유일성을 잃어서는 안 됩니다.
2) 후보키
- 슈퍼키 중에서 최소성과 유일성을 만족하는 키
- 즉, 후보키는 릴레이션의 모든 튜플을 고유하게 식별하고, 다른 후보키와 비교했을 때 불필요한 열(속성)이 없어야 한다.
- RDB에서 후보키 중에서 일반적으로 하나를 기본키로 선택한다.
ex. <학생> 릴레이션에서 학번이나 주민등록번호는 유일성과 최소성을 만족하므로 후보키가 된다.
<수강> 릴레이션에서는 (학번, 과목명)으로 조합해야 유일성과 최소성을 만족하기 때문에 (학번, 과목명)으로 조합된 것이 후보키가 된다.
※ (학번, 과목명)과 같이 2개 이상의 필드를 조합하여 만든 키를 복합키(Comoisite Key)라고 한다.
3) 기본키
- 후보키 중에서 선택된 주요 식별자로, 릴레이션의 모든 튜플을 고유하게 식별하는 열(속성)
- 중복된 값이나 NULL 값을 가질 수 없으며, 테이블에서 하나의 기본키만 가질 수 있다.
ex. <학생> 릴레이션에서 후보키인 학번이나 주민등록번호 중에서 선택하여 기본키로 설정할 수 있고, <수강> 릴레이션에서는 (학번, 과목명)을 조합해서 기본키로 설정할 수 있다.
학번이 <학생> 릴레이션의 기본키로 정의되면 이미 입력된 학번 '190001'은 다른 튜플의 학번 속성 값으로 입력할 수 없다.
4) 대리키
- 기본키를 대체하거나 보조하는 열(속성)으로, 대개 일련 번호 또는 GUID와 같은 자동으로 생성된 값
- 자체적으로 의미가 없으며, 데이터를 고유하게 식별하기 위해 사용된다.
ex. <학생> 릴레이션에서 학번이 기본키로 설정되면 주민등록번호는 대체키가 된다.
ex. 주문 테이블의 주문 번호
5) 외래키
- 다른 테이블과의 관계를 정의하기 위해 사용되는 열(속성)로, 다른 테이블의 기본키와 연결
- 릴레이션 간의 관계를 설정하고, 이를 통해 데이터 무결성을 유지하고 참조 무결성을 보장한다.
ex. <수강> 릴레이션의 학번은 <학생> 릴레이션의 기본키인 학번을 참조하고 있으므로 <수강> 릴레이션에서 학번은 외래키가 된다.
<수강> 릴레이션의 학번 속성에는 <학생> 릴레이션의 학번 속성에 없는 값을 입력할 수 없다.
<학생> 릴레이션과 <수강> 릴레이션은 학번을 기준으로 관계가 설정된 것이다.
10. 무결성 제약조건에 대해서 설명해주세요. (도메인 무결성, 개체 무결성, 참조 무결성)
무결성 제약조건이란 DB에 저장된 데이터들이 일관성있고 정확하게 관리되기 위한 규칙입니다.
도메인 무결성 제약 조건은 튜플의 값은 속성의 도메인에 해당하는 값만을 가져야하는 조건입니다.
개체 무결성 제약 조건은 기본키는 null값을 가져서는 안된다는 조건입니다.
참조 무결성 제약 조건은 외래키는 참조하는 테이블의 기본키와 일치해야한다는 조건입니다.
1) 도메인 무결성
- 각 열(속성)의 데이터 유형과 범위를 정의하고, 데이터 값이 그에 따라 유효한지 확인
- 제약조건은 데이터 값이 정의된 데이터 유형과 도메인 내에서 유효한 값을 가져야 함을 의미한다.
ex. 양수의 숫자 값이 있는 열에 음수 값을 저장 x
2) 개체 무결성
- 기본키(PK) 값의 고유성을 보장
- 기본키는 중복된 값이나 NULL 값을 가질 수 없으며, 각 행(튜플)은 고유한 기본키 값을 가져야 한다.
3) 참조 무결성
- 릴레이션 간의 관계를 정의하고 관리
- 외래키(FK)를 사용하여 다른 테이블의 기본키와 연결하고, 관계를 설정하여 데이터의 무결성을 보장한다.
외래키는 참조하는 테이블에 존재하는 값만을 참조해야 하며, 삭제 or 갱신 시에 일관성을 유지해야 한다.
11. 사용했던 데이터베이스에 대해서 설명해주세요.
(OracleDB, MySQL, MariaDB, MongoDB..)
주로 MySQL을 사용했습니다. MySQL 서버는 MySQL 엔진, 스토리지 엔진으로 이루어져 있습니다.
비지니스 로직 구현시 트랜잭션 처리가 필요했기에, 스토리지 엔진으로 innoDB 엔진을 사용했었습니다.
1) MySQL 엔진에 대해서 설명해주세요.
MySQL 엔진은 사용자가 요청한
파서를 통해 SQL을 분석, 파싱하고,
옵티마이저를 통해 SQL 실행 계획을 최적화한 다음,
스토리지 엔진을 호출하여 데이터를 읽고 쓰는 역할을 합니다.
- MySQL 엔진
- 클라이언트가 Query 요청 시, 쿼리를 파싱하여 최적화로 처리하고 스토리지 엔진 데이터를 요청하는 작업을 수행한다.
- Connection Handler : 커넥션 및 쿼리 요청을 처리 담당
- SQL 인터페이스 : DML, DDL, Procedure, View 등 SQL 인터페이스 제공 담당
- SQL 파서(parser) : SQL문법 오류 탐지 및 SQL 쿼리 문장을 MySQL이 처리하기 좋은 토큰 단위로 나눠서 트리 형태로 파싱 하는 작업 담당
- SQL 옵티마이저(optimizer) : 쿼리의 최적화된 실행 담당
- 캐시와 버퍼 : 성능 향상을 위한 보조 저장소 기능 담당
2) InnoDB에 대해서 설명해주세요.
InnoDB는 레코드를 기본키 순으로 정렬해서 저장하고,
기본키에 대한 인덱스를 자동 생성해주기 때문에,
기본키를 통한 범위 검색에 유리합니다.
또한 InnoDB는 레코드의 여러 버전을 유지할 수 있게 해주는 MVCC라는 기술을 통해
트랜잭션이 가능하게 해줍니다.
추가로 버퍼풀이라는 공간에 인덱스 정보를 캐싱 해두거나
쓰기 지연 용도로도 사용하기에 I/O를 줄일 수 있다는 장점이 있습니다.
출처: https://velog.io/@yangsijun528/MySQL-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EC%97%94%EC%A7%84
- InnoDB
- MySQL 5.5부터 기본 스토리지 엔진
- 특징
- 커밋, 롤백 및 충돌 복구 기능을 가진다.
- 트랜잭션 제공 및 트랜잭션 안전(ACID 호환)을 보장한다.
- Row-level lock을 제공한다.
- 외부키(foreign key)를 지원한다.
- MVCC/Snapshot read를 지원한다.
- 장점
- 커밋, 롤백 및 충돌 복구 기능이 MyISAM 보다 뛰어나다.
- Row-level Lock (행 단위 Lock) 을 사용하기 때문에 갱신 작업 속도가 빠르다.
- MVCC를 지원해 다중 사용자 동시성이 좋다.
- 단점
- 시스템 자원을 많이 사용한다.
'CS > 데이터베이스' 카테고리의 다른 글
5주차. DB 트랜잭션, 회복 (0) | 2023.12.04 |
---|---|
4주차. 이상현상, 함수적 종속성, 정규화 (0) | 2023.11.26 |
3주차. Index (0) | 2023.11.22 |
2주차. SQL (0) | 2023.11.12 |