본문 바로가기

CS/데이터베이스

(1) 데이터베이스에 관해서

TRANSCATION에 대해서 설명해주세요.

데이터베이스의 논리적 연산 단위입니다. 또한 분할할 수 없는 최소의 단위입니다.

TRANSACTION의 특성에 대해서 설명해주세요.(ACID)

원자성입니다. 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되던지, 아니면 전혀 실행되지 않은 상태로 남아 있어야 합니다.
일관성입니다. 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안됩니다.
고립성입니다. 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안됩니다.
지속성입니다. 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장됩니다.

DB에서 rollback과 commit에 대해서 설명해주세요.

COMMIT은 트랜잭션을 실행, ROLLBACK은 실행취소하는 명령문입니다.
트랜잭션인 성공적으로 실행되면 COMMIT문은 DB의 트랜잭션에 의해 수정된 내용을 영구적으로 유지합니다.
ROLLBACK은 트랜잭션 실행중 오류가 발생되면 이전 상태로 되돌리는 명령문입니다.

COMMIT에 대해서 설명해주세요.

트랜잭션의 성공적인 완료를 알리는 명령문입니다. 변경된 내용을 모두 영구적으로 저장하고, 실행되면 하나의 트랜잭션 과정을 종료하게 됩니다. 이전 데이터가 완전이 UPDATE되어 모든 사용자가 변경한 결과를 볼 수 있게 됩니다.

ROLLBACK에 대해서 설명해주세요.

트랜잭션이 성공적으로 완료되지 않았음을 알리는 명령문입니다. 트랜잭션 실행 중 오류가 발생하게 되어 중단되면 트랜잭션이 수행한 변경사항을 실행 취소합니다. 또한, 실행한 후에는 현재 트랜잭션에 수행된 수정이 유지되지 않습니다.

COMMIT과 ROLLBACK의 차이점에 대해서 설명해주세요.

COMMIT은 영구적으로 저장하기 위한 명령문입니다. ROLLBACK은 이전까지 수행했던 명령문들을 다시 이전 상태로 복구하는 명령문입니다. 또한 ROLLBACK문이 실행되면 DB는 이전 상태가 되며, COMMIT이 실행되기 전인 상황으로 돌아가게 됩니다. COMMIT이 실행되면 수행된 수정은 ROLLBACK될 수 없습니다.


이상의 종류에 대해서 설명해주세요.

삽입 이상은 원하지 않은 자료가 삽입되거나, 삽입시 자료가 부족해 삽입이 되지 않아 발생하는 문제입니다.
삭제 이상은 하나의 자료만 삭제해야 하지만, 원치 않는 정보 손실이 발생하는 문제입니다.
수정 이상은 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제입니다.

정규화에 대해서 설명해주세요.

정규화는 두가지 목적이 있습니다. 첫째는 불필요한 데이터를 제거해 불필요한 중복을 최소화 합니다. 하나의 테이블에 모든 정보를 다 넣게 되면 동일한 정보들이 불필요하게 중복되어 저장됩니다. FK로 PK를 연결해 사용하게 되면 디스크 공간을 훨씬 효율적으로 사용할 수 있습니다.
둘째는 중복된 정보로 인해 삽입/수정/삭제시 발생할 수 있는 각종 이상 현상을 방지하기 위해 사용합니다.

정규화의 단계에 대해서 설명해주세요.

제1정규화는 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것입니다.
제2정규화는 제1정규화가 진행된 테이블에 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다. 완전 함수 종속이란 기본키의 부분 집합이 결정자가 되어서는 안된다는 것을 의미합니다.
제3정규화는 제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 이행적 종속이란 A->B, B->C가 성립할 때, A->C가 성립되는 것을 의미합니다.
BCNF는 제3정규화를 진행한 테입르에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것입니다.

반정규화에 대해서 설명해주세요.

정규화된 시스템을 성능 향상 및 개발과 운영의 단순화를 위해 역으로 정규화를 수행하는 것을 의미합니다.

일반적으로 join을 많이 사용해야 할 경우, 대량의 범위를 자주 처리하는 경우 등 조회에 대한 처리가 중요하다고 판단될 때 부분적으로 반정규화를 합니다.


RDBMS에 관해서

DBMS는 무엇인지 설명해주세요.

데이터베이스에서 데이터를 작성, 조작 및 검색하는 데 사용되는 소프트웨어를 뜻합니다. 데이터를 계층 또는 탐색 형식으로 저장해 테이블 간에 관계가 없습니다. 또한, DBMS는 레코드 삽입, 업데이트 및 삭제와 같은 작업을 수행합니다. 하지만, 데이터에 대한 적절한 보안을 제공하지 않으며 정규화를 수행할 수 없습니다.

RDB는 무엇인지 설명해주세요.

관계형 데이터 모델에 기초를 둔 DB입니다. 모든 데이터를 2차원의 테이블 형태로 표현해줍니다. 테이블은 행과 열로 이루어진 기본 데이터 저장단위를 갖고있고, 테이블을 만들거나 이용하기 비교적 쉬우며 확장이 용이합니다.

RDBMS의 특징에 대해서 설명해주세요.

데이터는 정해진 데이터 스키마에 따라 테이블에 저장됩니다. 데이터는 관계를 통해 여러 테이블에 분산되는데 각 테이블마다 명확하게 정의된 구조가 있습니다. 또한, 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없습니다.
즉, 스키마를 수정하지 않는 이상 정해진 구조에 맞는 레코드만 추가가 가능합니다.
또한, 관계를 이용해 중복을 피합니다. 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어집니다.

RDBMS의 장점과 단점에 대해서 설명해주세요.

RDBMS는 다용도로 사용이 가능하기 때문에 범용적입니다. 데이터의 분류, 정렬, 탐색 속도가 빨라 성능이 뛰어납니다. 또한 데이터의 일관성을 보증하며, 정규화에 따른 갱신 비용이 최소화 됩니다.

대신, 단점은 스키마 규격에 반드시 맞춰야 합니다. 또한 테이블에 가변성이 있는 데이터의 저장이 어려우며, 조인이 필요한 경우 확장성이 제약됩니다.

스키마(Schema)에 대해서 설명해주세요.

데이터 베이스의 설계도입니다. 데이터베이스의 테이블 구조 및 형식, 관계 등의 정보를 형식 언어로 기술한 것을 의미합니다. 관계형 데이터베이스를 사용하여 데이터를 저장할 때, 데이터의 공통 속성을 식별하여 열(Col)로 정의하고 테이블을 생성하는 것이 가장 먼저 해야하는 과정입니다.


SQL의 장점에 대해서 설명해주세요.

SQL은 명확하게 정의된 스키마를 통해 무결성을 보장합니다. 또한, 각 데이터를 중복없이 한번만 저장합니다.

SQL의 단점에 대해서 설명해주세요.

스키마를 꼭 준수해야하기 때문에 유연성이 떨어집니다. 데이터 스키마를 사전에 계획하고 알려야하기 때문에 추후에 수정도 힘듭니다. 관계를 맺고 있어 조인문이 많은 복잡한 쿼리가 만들어 질 수 있습니다.

복잡한 JOIN문을 만들지 않도록 설계해 단점을 없애야 합니다. 

NoSQL에 대해서 설명해주세요.

스키마와 관계가 없는 것이 특징입니다. SQL에서는 정해진 스키마를 따르지 않으면 데이터 추가가 불가능하지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능합니다.

또한 문서는 JSON과 비슷한 형태로 가지고 있어 RDBMS처럼 여러 테이블에 나눠 담지 않고, 관련 데이터를 동일한 컬렉션에 담게 됩니다. 

NoSQL의 장점에 대해서 설명해주세요.

스키마가 없어서 유연합니다. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가 가능합니다. 데이터를 읽어오는 속도가 빠르며, 스케일 아웃,업이 가능하기 때문에 애플리케이션/웹이 발생시키는 모든 읽기 쓰기 요청처리가 가능합니다.

NoSQL의 단점에 대해서 설명해주세요.

데이터 구조를 결정하기 쉽지 않습니다. 데이터 중복을 계속해서 업데이트 해야하기 때문에 데이터가 여러 컬렉션에 중복되어 있어 수정시 모든 컬렉션을 건드려야 합니다. 중복되는 데이터를 줄이는 방법으로 설계해 단점을 없애야 합니다.

SQL보다 NoSQL DB 사용이 더 좋을 때는 언제인가요?

정확한 데이터 구조를 알 수 없거나, 변경 확장될 수 있는 경우에 사용됩니다. 또한 읽기를 자주 하지만 데이터 변경은 자주 없을 때, 데이터 베이스를 수평적으로 확장해 빅데이터와 같은 큰 데이터를 다루어야 할 때 사용됩니다.

NoSQL의 조인에 대해서 설명해주세요.

컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출합니다. 하지만 이렇게 되면 데이터가 중복되어 서로 영향을 줄 위험이 있습니다.

NoSQL에서 정규화를 할 수 있나요?

 


JOIN에 대해서


RDBMS에서 INDEX란 무엇인가요?

검색속도를 높이기 위해 테이블 컬럼에 대해 색인을 부여하는 기술을 뜻합니다.

INDEX를 사용하는 이유는 무엇인가요?

SELECT절 수행시 테이블의 처음부터 끝까지 모두 검색을 하는 불필요성이 있습니다. 이것을 풀스캔이라고 합니다. 대신, INDEX를 선언해두면 INDEX 파일을 통해 좀 더 빠르게 검색이 가능합니다.

데이터가 정렬되어있어 검색영역에서 장점이 되기 때문입니다. 테이블이 정렬되어있고 물리적 주소가 저장되어있기 때문에 해당 조건에 맞는 데이터를 빠르게 찾아낼 수 있습니다.

MIN,MAX의 효율적인 처리가 가능합니다. 데이터가 정렬되어 있기 때문에 레코드의 시작값과 끝값 한 건씩만 가져오면 됩니다.

* ORDER BY는 부하가 많이 걸리는 작업입니다. 정렬과 동시에 1차적으로 메모리에서 정렬이 이루어지고, 큰 작업이 필요해 디스크 I/O도 추가적으로 발생하게 됩니다.

INDEX의 동작방식에 대해서 설명해주세요.

특정 컬럼에 인덱스를 생성하게 되면, 헤당 컬럼의 데이터들을 정렬해 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다.
쿼리문에서 인덱스가 생성된 컬럼에 조건을 거는 작업을 통해 생성된 인덱스에 저장되어있는 데이터 물리적 주소로 넘어가 데이터를 가져올 수 있습니다.

INDEX의 단점에 대해서 설명해주세요.

단점은 정렬된 상태를 계속해서 유지해야합니다. 이러한 이유로, INSERT,UPDATE,DELETE를 통해 데이터가 추가 되거나 값이 바뀌면 INDEX 테이블 내에 있는 값을 다시 정렬해준 후, 원본 테이블 두 군데 데이터를 수정 작업해야하는 단점이 존재합니다.

또한, INDEX는 테이블의 10~15퍼 이하의 데이터를 처리하는 경우에만 효율적입니다. INDEX를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 추가로 필요하기 때문입니다.

INSERT, UPDATE, DELETE가 수행되면 계속해서 정렬해줘야 합니다. 이러한 부하는 최소화하기 위해 INDEX는 데이터 삭제라는 개념에서 INDEX를 사용하지 않습니다.

INSERT : 새로운 데이터에 대한 인덱스를 추가합니다

DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행합니다

UPDATE : 기존의 인덱스를 사용하지 않음 처리, 갱신된 데이터에 대해 인덱스를 추가

INDEX는 어떤 상황에서 적절하게 생성해야 될까요?

조건절이 자주 등장하는 컬럼, 중복되는 데이터가 최소한인 컬럼, ORDER BY가 자주 사용되는 컬럼, 조인 조건으로 자주 사용되는 컬럼에 생성해야합니다.


무결성이란 무엇인가요?

DB에서 저장된 값들에 대하여 여러가지 제한을 통해 데이터에 대한 신뢰를 보장하게 하여 일관성을 유지시켜 주는 것입니다.

영역 무결성이란 무엇인가요?

한 컬럼에 대해 NULL의 허용 여부와 타당한 데이터 값들을 지정합니다. 자료형 규칙과 제약 값 범위 등을 제한합니다.

참조 무결성이란 무엇인가요?

기본 키와 참조 키 간의 관계가 항상 유지됨을 보장합니다. 참조되는 테이블의 행을 이를 참조하는 참조키가 존재하는 한 삭제될 수 없고 기본키도 변경될 수 없다.

관련된 테이블의 레코드 간의 관계를 유효하게 하는 규칙, 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아줍니다. 참조 무결성을 설정할 수 있는 조건은 기본 테이블에서 일치하는 필드가 기본 키이거나 고유 인덱스를 갖고 있거나, 관련 필드의 데이터 형식이 같아야 한다.

개체 무결성이란 무엇인가요?

테이블에 있는 모든 행들이 유일한 식별자를 가질 것을 요구합니다.

'CS > 데이터베이스' 카테고리의 다른 글

정규화(Normalization)  (0) 2022.01.20
트랜잭션(Transaction)의 격리수준(Isolation)에 대해서 알아봅시다  (0) 2022.01.19
트랜잭션(Transaction)이란??  (0) 2022.01.18
인덱스(index)?  (0) 2022.01.17
이상(Anomaly)  (0) 2022.01.15