데이터 베이스

1. DB 구조 & 설계

1) Primary key가 무엇인지 설명해 주세요.

candidate key 중 선택한 main key로써, 각 row를 unique하게 구분하는 column(또는 column의 집합)을 말합니다. 그래서 기본키는 Null 값을 가질 수 없고, 중복된 값을 가질 수 없습니다. 기본키는 table당 1개만 지정해야합니다.

  • Primary key와 Foreign key에 대해 설명하시오

  • Candidate key에 대해 설명하시오

  • Alternate Key에 대해 설명하시오

  • Composite Key에 대해 설명하시오

추가 내용

2) 슈퍼키와 후보키의 차이점을 설명해 주세요.

슈퍼키후보키 모두 튜플을 식별할 수 있는, 유일성을 만족하는 키 입니다.

하지만 슈퍼키는 최소성을 만족하지 않아도 되기 때문에, 튜플을 식별할 수 없는 속성이 포함될 수 있습니다.

반면에 후보키는 최소성을 만족해야 하기 때문에, 튜플을 식별하는 데 필요한 속성으로만 구성되어야 합니다.

3) 데이터베이스의 무결성에 관해 설명해 주세요.

무결성은 데이터베이스에 저장된 데이터와 실제 데이터가 일치하는지에 대한 정확성과 데이터의 일관성을 의미합니다.

데이터베이스의 무결성으로는 기본 키가 고유한 값을 가져야 한다는 개체 무결성, 속성 값이 도메인에 속해야한다는 도메인 무결성, 외래 키 값은 참조하는 테이블의 기본 키 값이어야 한다는 참조 무결성이 있습니다.

4) 관계형 데이터베이스의 N:M 관계에 대해서 설명해 주세요.

관계형 데이터베이스에서 양쪽 Entity 모두가 서로에게 1:N 관계를 갖는 구조를 말합니다.

  • 1:N 관계에 대해서 설명해 주세요.

추가 내용

5) left outer join, inner join 차이를 설명해 주세요.

Join이란 두 개 이상의 테이블을 서로 연결하여 하나의 결과를 만들어 보여주는 것을 말합니다.

inner join(또는 join)은 내부 조인으로 두 테이블에 모두 있는 내용만 join되는 방식입니다.

left outer join(또는 left join)은 왼쪽 테이블의 모든 행에 대해서 join을 진행합니다.

6) RDB와 NoSQL를 비교 설명해 주세요.

RDB(관계형 데이터베이스)는 사전에 엄격하게 정의된 DB schema를 요구하는 table 기반 데이터 구조를 갖습니다.

NoSQL(비관계형 데이터베이스)은 테이블 형식이 아닌 비정형 데이터를 저장할 수 있도록 지원합니다.

도큐먼트, 키-값, 그래프 등 다양한 형태로 데이터를 저장할 수 있습니다. -

RDB는 엄격한 schema로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리합니다.

NoSQL의 경우 데이터 중복으로 인해 데이터 update 시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많을 때 유리합니다.

구분
관계형 데이터베이스
NoSQL 데이터베이스

데이터 저장

2차원 테이블로 저장

분산형 구조임. 도큐먼트, 키-값, 그래프 등 다양한 형태로 저장

데이터 중복

중복 없음

중복 데이터가 있어서 데이터 갱신 시 이를 처리해야 함

스키마

스키마가 있어서 데이터의 무결성 보장

스키마가 없고 유연한 데이터 처리 가능

DBMS

Oracle, MySQL, SQLite

MongoDB

2. Transaction

1) 트랜잭션을 설명해 주세요.

트랜잭션은 데이터베이스 내에서 수행되는 작업의 최소 단위로, 데이터베이스의 무결성을 유지하며 DB의 상태를 변화시키는 기능을 수행합니다. 트랜잭션은 하나 이상의 쿼리를 포함해야 하고, ACID라고 칭해지는 원자성, 일관성, 고립성, 지속성의 4가지 규칙을 만족해야 합니다.

  • 원자성/일관성/고립성/지속성이 뭔가요?

추가 내용

2) 데이터베이스의 트랜잭션 수행 과정 중 오류가 발생하면 어떻게 처리해야 할까요?

데이터베이스에서 트랜잭션 수행 과정 중 오류가 발생하면 ROLLBACK을 통해 트랜잭션을 수행하기 전 상태로 데이터베이스를 복구해야합니다. 이렇게 처리하는 이유는 트랜잭션 수행 결과가 데이터베이스에 완전히 반영되거나 아예 반영되지 않아야하기 때문입니다. (원자성)

3) 데이터베이스에서 락은 무엇인가요?

락은 트랜잭션이 처리되는 순서를 보장해 무결성을 유지하는 방법입니다.

락에는 공유 락과 베타 락이 있습니다.

공유 락은 데이터를 읽기 위한 락으로, 데이터를 수정하지 않기 때문에 특정 트랜잭션을 수행 중일 때 공유 락을 가진 다른 트랜잭션이 동시에 접근할 수 있습니다.

반면에 베타 락은 데이터를 수정하는 락으로, 하나의 트랜잭션을 수행 중일 때 다른 트랜잭션이 접근할 수 없습니다.

+ 락을 이용할 때 트랜잭션이 교착상태에 빠질 수도 있습니다.

4) 락의 목적은 무엇인가요?

락의 목적은 데이터베이스의 무결성을 유지하는 것입니다.

5) 데이터베이스의 교착상태(DeadLock)이란 무엇인지 설명해주세요.

데이터베이스 데드락(교착 상태)이란, 여러 트랜잭션들이 각각 자신의 데이터에 대하여 lock을 획득한 상태에서 상대방 데이터에 대하여 접근하고자 대기를 할 때 교차 대기를 하게 되면서 서로 영원히 기다리는 상태를 말합니다.

6) 데드락을 해결하려면 어떻게 해야 하나요.

교착 상태를 해결하는 방법으로는 예방 기법과 회피 기법이 있습니다.

예방 기법은 트랜잭션을 수행하기 전에 미리 락을 획득하는 방식이고,

회피 기법은 트랜잭션이 들어온 순서에 따라 락을 획득하거나 트랜잭션을 종료하는 방식입니다.

데드락 더 알아보기

3. Index

1) 인덱스가 무엇인가요

검색 성능을 향상하기 위해 속성값과 튜플이 저장된 주소를 인덱스 테이블에 저장하는 방식입니다.

인덱스 테이블은 정렬된 상태를 유지하므로 데이터베이스로 튜플을 검색하는 것보다 검색 속도가 빠르다는 장점이 있습니다.

하지만 데이터의 추가, 수정, 삭제 시 정렬 과정이 필요해 속도가 느린 단점이 있습니다.

+ SELECT ~ WHERE 쿼리를 통해 특정 조건을 만족하는 데이터를 찾을 때, full table scan 할 필요 없이 정렬되어있는 index에서 훨씬 빠른 속도로 검색을 할 수 있게 됩니다.

+일반적인 RDBMS(관계형DB)에서는 B+Tree구조로 된 인덱스를 사용하여 검색 속도를 향상시킵니다.

쉽게 설명하기 인덱스는 책마다 마지막 페이지에 있는 색인(index)와 같은 역할을 하는 자료구조입니다. 책에서 어떤 용어나 단어를 찾기 위해 첫 페이지부터 끝 페이지까지 전체를 훓지 않아도 인덱스를 찾아보면 몇 페이지에 적혀 있는지 바로 찾을 수 있는 것과 비슷합니다.

2) 인덱스가 왜 필요한가요?

인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주기 위함입니다.

3) 인덱스를 어떤 컬럼에 사용하는 것이 좋을까요?

인덱스는 where절에서 자주 조회되고, 수정 빈도가 낮으며, 카디널리티는 높고, 선택도가 낮은 column을 선택해서 설정하는 것이 가장 좋습니다.

기준
적합성

카디널리티

높을수록 적합(데이터 중복이 적을수록 적합)

선택도

낮을수록 적합

조회 활용도

높을수록 적합(where 절에서 많이 사용되면 적합)

수정 빈도

낮을수록 적합

4) 인덱스를 사용 중일 때 데이터를 삭제하면 발생할 수 있는 문제는 무엇일까요?

데이터 삭제가 잦을 경우 저장 공간을 낭비할 수 있다는 문제점이 있습니다.

+ 인덱스는 데이터베이스의 검색 효율을 높이기 위해 인덱스 테이블을 사용합니다.

삭제 연산이 일어나면 데이터베이스에서는 해당 튜플이 삭제되지만, 인덱스 테이블에서는 해당 튜플을 '사용하지 않음'으로 처리하고 실제로 데이터는 삭제하지 않습니다. 그래서 잦은 데이터 삭제가 일어나면 인덱스 테이블에 불필요한 데이터가 남아 저장 공간을 낭비하게 됩니다.

5) 데이터를 검색할 때 해시테이블의 시간 복잡도는 0(1)이고 b+tree는 O(logn)으로 더 느린데, 왜 인덱스는 해시테이블이 아닌 b+tree로 구현되나요?

해시 테이블을 사용하면 하나의 테이블을 탐색하는 시간은 O(1)로 b+tree보다 빠르지만, 값이 정렬되어있지 않기 때문에 부등호를 사용하는 query에 대해서는 매우 비효율적이게 되어 데이터를 정렬해서 저장하는 b+tree를 이용합니다.

추가 내용

4. 이상 현상

1) 데이터베이스의 이상 현상이란 무엇이며 어떻게 해결할 수 있나요?

이상 현상이란 트랜잭션을 처리하는 중 발생하는 문제로 속성 간 종속이나 데이터의 중복으로 발생합니다.

삽입이상, 갱신이상, 삭제이상이 있으며, 속성 간 종속을 해제하고 데이터베이스의 중복을 제거하기 위해 테이블을 분해하는 데이터베이스 정규화를 진행하게 됩니다.

Last updated