[CS : DB] BE 면접 대비 질문 리스트(1)

2022. 4. 27. 21:35CS 스터디

참고링크 : https://github.com/ksundong/backend-interview-question

1. DB에서 인덱스를 사용하는 이유와 그 장/단점

  • 이유 : 검색 성능을 향상시키기 위해서(실제 성능 개선을 위해서는 index 사용여부, 카디널리티, Selectivity 같은 요소를 고려해야함.)

  • 장점 : 빠른 검색 성능

  • 단점 : 인덱스 구성 비용(추가, 수정, 삭제 연산 시에 인덱스를 형성하기 위한 추가적인 연산)

2. 트랜잭션이란?

  • DB의 상태를 변화시키는 하나의 논리적인 작업 단위.

  • 하나의 트랜잭션에는 여러개의 연산이 수행될 수 있다.

  • 수행중에 한 작업이라도 실패하면 전체 트랜잭션이 실패하고, 모두 성공해야 성공이라고 할 수 있음.(Atomicity : 원자성)

3. ACID에 대해 설명하시오

  • 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질

  • Atomicity(원자성)

  • Consistency(일관성) : 트랜잭션은 유효한 상태로만 변경될 수 있다.

  • Isolation(고립성) : 동시에 트랜잭션이 실행되는 경우 다른 tx에 영향 받지 않고 독립적으로 실행되어야한다.

  • Durability(내구성) : 커밋 이후에는 시스템 에러가 발생해도 커밋된 상태 유지를 보장해야한다.(비휘발성 메모리에 데이터가 저장되는 것을 의미)

4. 트랜잭션 격리 수준이란

  • 고립도와 성능의 트레이드 오프를 조절한다.

  • READ UNCOMMITTED : 다른 TX에서 커밋되지 않은 내용도 참조할 수 있다.

  • READ COMMITTED : 다른 TX에서 커밋된 내용만 참조할 수 있다.

  • REPEATABLE READ : TX에 진입하기 이전에 커밋된 내용만 참조할 수 있다.

  • SERIALIZABLE : TX에 진입하면 락을 걸어 다른 TX가 접근하지 못하게 한다.(성능 저하)

5. 정규화에 대해 설명하시오.

  • 데이터의 중복을 허용하지 않는 것 => 무결성을 보장하고 DB 저장 용량을 줄일 수 있다.

  • 제 1 정규화 : 테이블의 컬럼이 원자값을 갖도록 분해하는 것( EX: A - (B, C) => A - B, A - C )

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

  • 제 3 정규화 : 제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것 ( 이행적 종속 : A -> B, B -> C 일 때, A -> C가 성립되는 것 )

완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안된다.

참고자료 링크 : https://mangkyu.tistory.com/110

6. JOIN이란?

  • 분리된 테이블에서 원하는 결과를 도출하기 위해 여러 테이블의 레코드를 조합하여 하나의 열로 표현하는 것이다.

  • SQL에서 실제로 JOIN이 어떤 방식으로 동작하는지를 알아야 한다.

  • INNER JOIN : 기본 조인 형식

  • EQUAL JOIN : 비교자 기반의 조인으로, 동등비교만을 사용한다.

  • NATURAL JOIN : 조인된 테이블에서 동일한 컬럼명을 가진 2개의 테이블에서 모든 컬럼을 비교함으로써 암시적으로 일어나는 구문.

  • CROSS JOIN : 조인되는 두 테이블에서의 곱집합을 반환한다.

  • OUTER JOIN : 조인 테이블에서 특정 테이블의 데이터가 모두 필요한 상황에 사용한다. (LEFT, RIGHT 존재)

참고자료 링크 : https://velog.io/@ragnarok_code/DataBase-%EC%A1%B0%EC%9D%B8Join%EC%9D%B4%EB%9E%80

7. RDBMS와 NOSQL

  • RDBMS : 관계형 데이터베이스. 객체들의 릴레이션을 통해 데이터를 저장한다. SQL을 활용하여 CRUD를 수행하고 구조화가 굉장히 중요하다.

  • NOSQL : 자유로운 형태로 데이터를 저장한다. 수평확장(SCALE OUT)을 할 수 있고 분산 처리를 지원한다. 일관성이 약하다는 단점이 있다. 성능 향상을 위해 RDBMS에서 캐싱을 하거나 대용량 객체를 저장할 때도 사용한다.