면접을 준비하는 과정에서 가장 중요한 것은 무엇일까요?

 바로 “면접 예상 질문”에 대한 답변을 스스로 작성해보고, 계속 연습해보는 것입니다.

 스스로에게 납득이 될 수 있을 정도로 충분히 연습해서 최종 합격까지 하시길 기원합니다! 😁

<aside> 🤓 인성면접 예상질문 (20개)

</aside>

<aside> 🤓 기술면접 예상질문 - CS기초 지식 (26개)

</aside>

  1. 인덱스란 무엇이고 일반적인 원리는 어떠한지 설명해주실 수 있을까요?

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키는 자료구조입니다. 인덱스는 보통 B-트리라는 자료구조를 활용하여 검색 속도를 상승시킵니다.

B-Tree는 트리 자료구조의 일종으로, 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조입니다. 이는 루트 노드, 리프 노드, 그리고 루트 노드와 리프 노드 사이에 있는 브랜치 노드로 나뉩니다. 트리 탐색은 맨 위 루트 노드부터 탐색이 일어나며 브랜치 노드를 거쳐 리프 노드까지 내려오는 하향식 탐색 기법이 적용되어 있습니다.

  1. 루트 노드에서 탐색을 시작한다.

  2. K를 찾았다면 탐색을 종료한다.

  3. K와 노드의 key값을 비교해 알맞은 자식 노드로 내려간다.

  4. 해당 과정을 리프 노드에 도달할 때까지 반복한다.

  5. 리프 노드에서도 K를 찾지 못한다면 트리에 값이 존재하지 않는 것이다.

  6. 모든 요소에 인덱스를 걸지 않는 이유는 무엇일까요?

인덱스는 테이블을 조회하는 속도와 그에 따른 성능을 향상 시킬 수 있고, 전반적인 시스템의 부하를 줄일 수 있다는 장점이 있지만, 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하며, 또한 추가 작업이 필요합니다.

그리고 인덱스를 생성해두면 해당 테이블의 Insert, Update, Delete 작업 진행 시, 인덱스에도 수정 작업이 동시에 발생하기 때문에 인덱스를 너무 많이 만들면 오히려 성능이 저하될 수 있습니다.

  1. 복합 인덱스란 무엇인지 원리를 설명해주실 수 있을까요?

Composite Index는 데이터베이스에서 여러 개의 컬럼(열)들을 조합하여 인덱스를 생성하는 것을 의미합니다. 주로 단일 컬럼으로는 나쁜 분포도를 가지지만 여러 개의 컬럼을 합친다면 좋은 분포도를 가지고, Where절에서 AND 조건에 많이 사용되는 컬럼들을 복합 인덱스로 구성합니다. index Table에서 where에 포함된 값을 찾아옵니다. 해당 값의 table_id[PK]을 가져옵니다. 가져온 table_id [PK] 값으로 원본 테이블에서 값을 조회해옵니다.

  1. 트랜잭션이란 무엇이고 원자성, 일관성, 고립성, 지속성이란 무엇인지 설명해주실 수 있을까요?

Transaction이란 데이터 베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위입니다. 즉, 여러 단계의 처리를 하나의 처리처럼 다루는 기능입니다.

트랜잭션을 쓰는 이유는 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위해서입니다.

원자성은 Transaction이 실행되는 쿼리문이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것을 의미합니다.

일관성은 Transaction의 작업 처리 결과가 항상 일관성이 있어야 한다는 것을 의미합니다. 이는 작업이 실패하더라도 실패한 상태로 데이터를 방치하지 않는 특징을 의미합니다.

고립성은 둘 이상의 Transaction이 동시에 병행 실행되고 있을 경우에 어느 하나의 Transaction이라도 다른 Transaction의 연산에 끼어들 수 없는 것을 의미합니다.

지속성은 Transaction이 성공적으로 완료되었을 경우, 영구적으로 반영되어야 한다는 점입니다.

  1. 정규화란 무엇이고 대표적인 장점과 단점은 무엇이 있을까요?

정규화란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스입니다.

정규화의 장점은 데이터베이스의 변경 시 이상 현상을 제거할 수 있으며, 데이터 베이스 구조 확장 시 재 디자인을 최소화 시킬 수 있습니다.

또한 저장 공간을 효율적으로 사용할 수 있다는 장점도 존재합니다.

정규화 절차는 제 1~5 정규화 과정으로 순차적으로 진행되며, 대표적으로 제1~3 정규화 까지 진행됩니다.

간단하게 설명하면

제 1정규화는 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼이 존재할 때, 해당 컬럼을 제거하고 기본테이블의 PK를 추가해 새로운 테이블을 생성하고, 기존의 테이블과 1:N 관계를 형성하는 것입니다.

제 2정규화는 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다.

제 3정규화는 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미합니다.

그러나 단점으로는 정규화 과정 자체가 복잡하며, 너무 많은 테이블로 분해되면 Join 연산이 늘어나 쿼리의 성능이 저하될 수 있습니다.