면접 준비를 해보자 - 데이터베이스

americano4ever·2021년 11월 3일
1

인터뷰 질문 및 답변 정리

데이터베이스

  1. 데이터베이스란 무엇이고 왜 쓰는가?

    데이터베이스란 데이터를 여러 사람이 공유하고 사용할 목적으로 통합관리되는 데이터들의 모임입니다.

    데이터베이스를 사용하지 않으면, 프로그램의 종료 시점에 그 전까지 생성한 많은 데이터들이 모두 날아가게됩니다.

    이런 현상을 방지하기 위해서 데이터들을 데이터 베이스에 넣고 보관하는 방법을 사용합니다.

  2. DBMS란?

    데이터베이스 관리 시스템이란 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어들을 의미합니다.

    DBMS는 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템으로 모든 응용 프로그램들이 데이터베이스를 공유할 수 있도록 관리해줍니다.

    DBMS는 데이터베이스의 구성, 접근방법 , 유지관리에 대한 모든 책임을 지게 됩니다.

  3. 기본키와 유일키의 차이점은 무엇인가요?

    유일키는 행의 고유한 식별자 레코드마다 서로 다른 유일한 값을 가지는 키를 말합니다.

    기본키는 이런 유일키 중에서 null이 허용되지 않는 속성을 만족하는 키를 말하고 테이블의 주요 식별자로써 사용됩니다.

  4. 데이터 베이스의 키의 종류와 설명하기

    우선 key란 검색, 정렬시 tuple을 구분할 수 있는 속성값을 의미합니다.

    이런 키 중에서 대표적인 것으로는 후보키, 기본키, 대체키, 슈퍼키, 외래키 등이 있습니다.

    후보키는 유일성과 최소성을 만족하며 tuple을 유일하게 식별하기 위해 사용될 수 있는 속성들의 부분집합을 의미합니다.

    기본키는 위의 후보키들 중 선택한 Main key로 null값이 허용되지 않고 중복또한 허용되지 않는 속성입니다.

    대체키는 후보키들 중 기본키를 제외한 나머지 키를 말합니다.

    슈퍼키는 유일성은 만족하지만, 최소성은 만족하지 못하는 속성의 집합입니다.

    외래키는 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합을 의미합니다.

    키(key)의 개념과 종류 정리

  5. 스키마란 무엇인가요?

    데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조를 의미합니다.

    이러한 스키마에는 외부 스키마, 내부 스키마, 개념 스키마가 있습니다.

    외부 스키마란 프로그래머나 사용자 입장에서 데이터 베이스의 모습으로 조직의 일부분을 정의한 것입니다.

    개념 스키마란 모든 응용 시스템과 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 데이터 구조를 논리적으로 정의한 것입니다.

    내부 스키마란 데이터베이스의 물리적 저장 형태를 기술한 것입니다.

  6. 사용해본 DB와 그 DB를 사용한이유

    제가 사용했던 db로는 mariaDB, mysqlDB, redis가 있습니다.

  7. JOIN에 대해서 설명해 주세요.

    JOIN이란 두 개의 데이터베이스 혹은 테이블을 연결하여 데이터를 검색하는 방법을 말합니다. 조인은 크게 내부조인, 외부조인, 셀프조인으로 나뉩니다.

    중복이 없는 서로 다른 두 칼럼을 inner JOIN한다고 했을 때, 이를 수행하는 것은 A와 B의 교집합을 말합니다.

    동일한 대상을 outer Join한다고 했을 때, 이를 수행하는 것은 A와 B의 합집합을 말합니다.

    셀프 조인은 자기 자신에 대해 조인을 수행하는 것을 말합니다.

  8. 내부 조인과 외부 조인의 차이는 무엇인가요?

    내부 조인은 동일한 값이 있는 행만 반환하는 반면,

    외부조인은 동일한 값이 없는 행도 Null의 형태로 반환해 줍니다.

  9. 트랜잭션이란 무엇인가요? 4가지 원칙을 포함해서 설명해 주세요.

    트랜잭션이란 데이터베이스에서 논리적연산의 단위를 말합니다.

    트랜잭션은 acid 속성을 만족해야합니다. 구체적으로

    • Atomicity(원자성) : 트랜잭션의 연산은 모두 반영되어야하며, 하나라도 실패하면 모두 취소되어야한다.(하나라도 실패하면 rollback된다)

    • Consistency(일관성) : 트랜잭션을 성공하면 언제나 일관성있는 데이터베이스 상태로 변화한다.

        ex) 구체적으로 트랜잭션이 반영된 후에도 기존에 데이터베이스에 걸려있던 제약조건들을 만족한다.
    • Isolation(격리성) : 둘 이상의 트랜잭션이 동시에 수행되는 경우 다른 트랜잭션의 연산에 끼어들수없다.(상호배제)

    • Durability(지속성) : 완료된 트랜잭션은 영구적으로 반영되어야한다.

        ex) 반영된 트랜잭션은 로그형태로 남아 유지되고, 이후에 그 트랜잭션 이전 상태로 돌아갈 수 있다.
  10. 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.

    트랜잭션의 격리 수준이란 여러 트랜잭션끼리 얼마나 고립되어 있어야 하는 지를 나타내는 것이다.

    격리 수준은 총 4가지로 나뉜다. READ UNCOMMITTED, READ COMMITED, REPEATABLE READ, SERIALIZABLE으로 나뉜다.

    READ UNCOMMITTED 격리 수준에서는 다른 트랜잭션의 변경내용이 COMMIT이나 ROLLBACK과 상관없이 보여진다. 데이터 정합성에 문제가 많아 사용되지 않는다.

    READ COMMITED에서는 변경내용이 COMMIT되어야만 다른 트랜잭션에서 조회가 가능하다. 이 경우 다른 트랜잭션 진행과정 중에 COMMIT이 발생하면 REPEATABLE-READ를 보장하지 않는 다는 문제가 있다.

    REPEATABLE READ는 트랜잭션이 시작하기 전에 커밋된 내용만 조회할 수 있다. Mysql db에서 기본적으로 사용하는 격리수준이다. 이 경우 트랜잭션 과정 중에서 새로운 데이터가 삽입되고 이에 대한 업데이트가 진행되면 일관된 데이터를 보장하지 않아 update 부정합과 phantom read가 발생한다.

    SERIALIZABLE의 경우 트랜잭션이 진행중일 경우 다른 트랜잭션의 읽기도 허용되지 않는다. 이러한 특성때문에 부정합은 발생하지 않으나 성능이 떨어진다는 단점이 있다.

    격리수준 정리

  11. DB에서 commit과 rollback의 의미를 설명해주세요

    commit과 rollback은 트랜잭션과 연관된 DB의 연산입니다.

    트랜잭션은 commit되거나 그렇지않으면 rollback 되어야 합니다.

    commit이란 트랜잭션의 내용이 실제 DB에 반영되는 것을 말하고,

    rollback이란 트랜잭션 과정중 문제가 발생하여 실제 DB에 반영되지 않고 변경 내용을 취소하고, 이전 상태로 돌아가는 것을 말합니다.

  12. DB의 무결성에 대해서 설명해주세요

    DB의 무결성이란 데이터의 정확성과 일관성을 유지하고 보증하는 것을 의미한다.

    이러한 무결성에는 대표적으로 개체 무결성, 참조 무결성, 범위 무결성이 있다.

    개체 무결성은 모든 테이블이 기본 키를 가져야 하며, 기본키로 선택된 열은 고유하여야 하며 null값은 허용되지 않음을 의미한다.

    참조 무결성은 외래키를 통해 참조관계에 있는 두 테이블이 항상 일관된 값을 갖도록 유지 되는 것을 의미한다.

    범위 무결성은 정의된 범위내에서 RDB의 모든 열이 선언되도록 규정한다.

  13. DB의 무결성을 유지하려는 이유가 무엇인가요?

    무결성이 유지되어야 DB에 저장된 값과 실제의 값이 일치하는 지를 보장할 수 있기 때문입니다.

  14. DB의 이상현상에는 어떤 것이 있나요?

    이상현상이란 데이터의 중복현상으로 인해 발생하는 부작용을 말합니다.

    이상현상으로는 크게 세가지 삽입 이상, 삭제 이상, 갱신 이상이 있습니다.

    삽입 이상은 DB에 새로운 값을 삽입하려 할 때 필요없는 속성도 함께 추가하여야 하는 것을 의미합니다.

    삭제 이상은 데이터를 삭제하는데 의도하지 않은 것이 함께 삭제되는 경우를 말합니다.

    갱신 이상은 데이터를 갱신한 이후에 일관성이 위반되는 것을 의미합니다.

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

    정규화란 데이터베이스에서 중복을 최소화하기 위해 데이터를 분해하는 작업을 말합니다.

    정규화를 함으로써 중복으로 인한 이상현상을 방지할 수 있다는 장점이 있고, 릴레이션간 연산이 많아질 수 있다는 단점이 있습니다.

  16. 정규화의 종류와 조건에 대해서 설명해주세요.

    1NF

    2NF

    3NF

    BCNF

    4NF

    5NF

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

    반정규화란 데이터베이스의 사용 성능향상을 위해 의도적으로 데이터에 중복을 허용하고,

    데이터를 합치는 것을 의미합니다.

    반정규화를 하면 성능상의 이점은 있으나, 무결성을 깰 수 도 있다는 단점이있습니다.

  18. 파티셔닝과 샤딩에 대해서 설명해 주세요.

    파티셔닝은 일반적으로 DB 테이블을 작은 부분으로 여러 개 나누는 것을 의미합니다.

    파티셔닝은 열에 대해서 수직으로 혹은 행에 대해 수평으로 나누는 두 가지 방법이 존재합니다.

    샤딩은 수평 파티셔닝의 특수한 형태로 shard key로 알려진 특수한 키를 기준으로 데이터를 나눕니다. 그리고 나눈 데이터들을 여러 노드에 나누어 저장하는 방식을 의미합니다.

    샤딩을 하게되면 수평 파티셔닝이기 때문에 데이터 베이스 스키마가 그대로 유지됩니다.

    [파티셔닝, 샤딩, 레플리케이션, 클러스터링]

    [더 자세한 설명]

  19. 커넥션풀이란 무엇인가요?

    커넥션 풀이란 DB와 미리 연결해놓은 connection들을 pool에 저장해두고,

    클라이언트 요청이 오면 connection을 빌려주었다가 사용이 끝나면 반납하는 방식을 의미합니다.

    DB connection이 많은 시간이 소요되고 불필요한 connection 연결과 해제를 할 필요가 없어 성능 상의 이점이 있습니다.

  20. ORM이란 무엇인가요?

    ORM이란 object releational mapping의 약자로 객체와 데이터를 자동으로 매핑해주는 것을 의미합니다.

    객체지향프로그래밍과 DB의 패러다임의 불일치를 해결하기 위한 부분을 객체간의 관계를

    바탕으로 자동으로 sql연산을 수행하여 해결해줍니다.

    대표적인 orm에는 jpa와 hibernate가 있습니다.

  21. NoSQL이란 무엇인가요?

    NoSQL이란 sql이 아닌 나머지 DB전체를 의미합니다.

    NoSQL을 SQL과 비교하여 유연한 데이터 모델링, 수평적 스케일링(분산저장), 빠른 쿼리 지원, 직관적인 이해가 가능하다는 장점이 있습니다.

    No SQL vs SQL

  22. 어떤 상황에서 No SQL을 쓰는 것이 적절한가요?

    No sql은 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우와

    읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우에 사용하면 좋습니다.

  23. 인덱스란 무엇인가요? 어떻게 동작 하나요?

    인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 DB 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 인덱스를 주로 조회연산이 많이 발생하는 열에 대해서 설정합니다.

    항상 정렬된 상태를 유지하는 자료구조에 데이터와 데이터의 위치를 저장해두고, 해당 데이터베이스에 대한 조회가 발생하면 위치정보를 바로 얻어 조회할수 있게 하는 방식으로 동작합니다.

  24. 인덱스의 자료구조에는 어떤 것들이 있나요?

    인덱스의 구현을 위해서는 대표적으로 B+트리와 해쉬테이블이 이용됩니다.

    해쉬 테이블은 (데이터, 데이터의 위치)를 (key, value)로 하여 해시를 생성합니다.

    해시의 특성상 key 값이 조금만 달라져도 완전히 다른 해쉬값을 가지기 때문에 등호연산에만 적합하다는 특징이 있습니다.

    B+트리 자식노드가 2개 이상인 B-Tree를 개선시킨 자료 구조로, 부등호를 이용한 연산이 가능하여 실제 DB에서 인덱스 구성을 위해 활용되고 있습니다.

    꼬리질문

    • B+트리를 이용하는 이유?

    [인덱스]

  25. Clustered-Index vs NonClustered-Index 차이점

    클러스터 인덱스는 데이터 위치를 바로 알기 때문에 그 데이터로 바로 접근하는 방식입니다.

    넌 클러스터 인덱스는 인덱스 페이지를 한번더 거쳐서 데이터에 접근하는 방식입니다.

    [클러스터 인덱스 vs 논클러스터 인덱스]

  26. Table Full Scan과 Index Range Scan 을 설명해주세요.

    둘다 테이블을 읽는 방식을 나타냅니다.

    Table Full Scan은 해당 테이블에 전체 블록을 읽어서 사용자가 원하는 데이터를 찾는 방식입니다.

    그리고 Index Range Scan은 인덱스를 이용하여 데이터를 일정부분읽어서 ROWID로 테이블 레코드를 찾아가는 방식입니다.

    여기서 ROWID이란 데이터베이스가 어디 저장되어 있는 지를 나타내는 정보입니다.

    [Table Full Scan과 Index Range Scan]

  27. 공유 락과 배타 락의 차이는 무엇인가요?

    우선 공유락은 데이터를 읽을 때 사용되어지는 Lock을 의미합니다.

    하나의 데이터를 여러 사용자가 읽는 것만을 허용할 경우, 공유락이 있는 데이터에 대해

    다른 공유락은 접근이 가능하나, 배타락은 허용되지 않습니다.

    배타락(exclusive lock)은 데이터를 변경하고자 할 때 사용되어지는 Lock입니다.

    배타락이 해제될때까지 다른 트랜잭션은 해당 리소스에 접근이 불가능 합니다.

  28. 데드락(교착상태)이란 무엇이며, 어떻게 발생할까요?

    데드락은 상호배제, 점유와 대기, 환형 대기, 비선점이 모두 충족될 경우 발생합니다.

    구체적인 DB에서 예시를 들어보겠습니다.

    트랜잭션1이 Table1을 업데이트 후 Table2를 업데이트 하려고 할 때, 트랜잭션2가 이미 Table2에 업데이트 작업을 진행 중인 경우 해당 작업을 완료할 때까지 대기 후 처리합니다. 

    트랜잭션2가 Table2 업데이트 완료 후 Table1을 업데이트 하려고 할 때 트랜잭션1이 Table1의 작업을 하고 있어서 완료 될 때까지 대기한다. 

    이렇게 두 개의 트랜잭션 작업이 서로 완료 될 때 까지 기다리게 되며 결과적으로 아무것도 완료가 되지 않는 상태가 되어 데드락이 발생하게 됩니다.

    MySql 데드락 예시

  29. SQL injection이란 무엇인가요?

    해커에 의해 조작된 쿼리문이 DB에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법입니다.

    주로 사용자가 입력한 데이터를 제대로 필터링하지 못했을 경우에 발생합니다.

  30. sql의 종류와 각각에 대한 설명

    SQL의 종류에는 크게 3가지 DML,DDL,DCL이 있습니다.

    DML은 데이터에 변형을 가하는 명령어로 select,insert,delete,update가 있습니다.

    DDL은 데이터 구조를 정의하는 명령어로 create, alter, drop 등이 있습니다.

    DCL은 데이터에 대한 접근을 제어하는 명령어로 grant, revoke 등이 있습니다.

  31. DB의 자료구조 중 B-tree와 B+ -tree에 대해 설명할 수 있나요?

    B-트리(B-tree)는 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조입니다.

    B+트리는 B 트리가 변형된 형태로, 모든 레코드들이 트리의 가장 하위 레벨(리프)에 정렬되어 있다는 차이점이 있습니다.

  32. DB에서 클러스터링과 레플리케이션이란 무엇인가요?

    클러스터링이란 여러 개의 DB를 수평적인 구조로 구축하는 방식입니다.

    클러스터링은 분산 환경을 구성하여 Single point of failure와 같은 문제를 해결할 수 있는 Fail Over 시스템을 구축하기 위해서 주로 사용됩니다.

    레플리케이션이란 여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식

    클러스터링과 레플리케이션

  33. N+1 문제를 설명해주세요.

    N+1문제란 연관 관계에서 발생하는 이슈인데요.

    연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 됩니다.

    이를 N+1 문제라고 한다.

    N+1문제

  34. 데이터베이스의 Lock이란 무엇인가요??

    Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법으로

    여러 스레드를 실행하는 환경에서 자원에 대한 접근에 제한을 강제하기 위한 동기화 매커니즘을 의미 합니다.

    Lock은 상황에 따라서 공유락과 배타락으로 나뉩니다.

B-tree / B+-tree : https://potatoggg.tistory.com/174

정규화 쉬운 예시 : https://mr-dan.tistory.com/10

출처

0개의 댓글