본문 바로가기
개인 공부/TIL

[ TIL - CS ] 면접을 위한 CS 공부 6편 - 데이터베이스 -

by 킴도비 2024. 11. 15.

🚌 2024년 11월 11일~ 2024년 11월 18일까지의 주제는 데이터베이스다.

 

💡 공통으로 준비한 질문

1️⃣ 첫번째 접은 글은 내 말로 풀어쓴 정답
2️⃣ 두번째 접은 글은 해석 또는 공부한 내용 또는 추가적으로 궁금한 내용

 

1. DB 인덱스와 B+ 트리 인덱스의 구조 및 장단점에 대해 설명해주세요.

더보기
  • DB 인덱스란?
    • 목적 : RDBMS에서 검색 속도를 높이기 위한 기술
    • Table의 Column을 색인화 함(따로 파일 저장)
    • 장점
      • Table의 Record를 Full Scan하지 않고, 색인화 된(B+ Tree 구조로) Index 파일 검색으로 검색 속도 향상
    • 단점
      • Index 생성시 .mdb 파일 크기 증가
      • 한 페이지를 동시에 수정할 수 있는 병행성이 줄어듬
      • 인덱스 된 field에서 data를 업데이트하거나, Record를 추가 또는 삭제 시 성능이 떨어짐
      • 데이터 변경 작업이 자주 일어나는 경우, Index를 재작성해야 하므로, 성능에 영향을 미침
  • B+ 트리 인덱스란?
    • 효율적인 검색과 정렬을 위해 사용된다.
    • 다분기 트리의 일종으로 각 노드에는 여러 개의 키 값이 저장된다.
    • 장점
      • 어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있다.
      • 트리의 높이를 줄이기 위해 많은 수의 키 값을 가진 노드를 사용한다.
    • 단점
      • 정렬된 상태를 유지하기 위해서는 삽입과 삭제시 정렬이 발생
더보기

 

2. SQL Injection 방어 기법에 대해 설명해주세요.

더보기
  • SQL Injection이란?
    • 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법
  • 방어 방법 
    • Input 값을 받을 때, 특수문자 여부 검사하기(로그인 전 검증 로직 추가)
    • SQL 서버 오류 발생 시, 해당하는 에러 메시지 감추기(view 사용)
    • preparestatement 사용하기(preparestatement를 사용하면, 특수 문자를 escaping 해줌)

 

3. JOIN과 Inner Join, Outer Join의 차이에 대해 설명해주세요.

더보기
  •  Join이란?
    • 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법
  •  Inner Join이란?
    • 교집합으로, 기존 테이블과 Join 테이블의 중복된 값을 보여준다.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
  • Outer 조인기존 테이블값과 조인 테이블의 중복된 값을 보여준다.
  • 종류는 3가지가 있다.
  • Left Outer Join
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
  • Right Outer Join
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
  • Full Outer Join(합집합 : 모든 데이터 출력)
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

 

4. DB 인덱스에 대해 설명해주세요.

더보기
  • 위에서 설명했으므로 생략..

 

 

5. 해시 인덱스 방식과 B+ 트리 인덱스 방식의 차이에 대해 설명해주세요.

더보기
  • 해시 인덱스 
    • 정렬되어 있지 않다.
    • 해싱된 데이터 값에 따라 저장될 버킷 위치를 정하기 때문에 빠른 속도로 검색영역을 제한할 수 있다.
    • 동등 비교에서 효과적이다.
    • 정렬할 필요가 없으니 삽입/삭제가 빠를 수 있다.
  • B+ 트리 인덱스
    • 항상 정렬되어 있다.
    • 정렬된 상태로 검색 범위를 제한시킨다.

 

❔ 개인으로 준비한 질문

1. 레디스에 대해 설명해 주세요.

더보기
  • Redis란?
    • 빠른 오픈 소스인 메모리 키 값 데이터 구조 스토어이다.
    • 보통 데이터베이스는 하드 디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠르다는 장점이 있다.
    • 캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용된다.
    • RAM의 휘발성을 막기 위해 snapshot(특정 지점을 설정하고 디스크 백업)과 AOF(쿼리들을 저장해두고, 서버가 셧다운 되면 재실행해서 다시 만들어놓는것)의 과정이 있다.
    • Value 5가지
      • String(text, binary data) - 512MB까지 저장이 가능함
      • set(String 집합)
      • sorted set(set을 정렬해둔 상태)
      • Hash
      • List(양방향 연결리스트도 가능_

 

 

2. 저장 프로시저에 대해 설명해 주세요.

 

 

3. 옵티마이저에 대해 아는 대로 설명해 주세요.

 

 

4. DB 클러스터링에 대해 설명해 주세요.