ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CS - 데이터베이스 정리
    CS 2023. 10. 19. 02:53

    그동안 CS 스터디를 몇 달간 지속하면서, 팀원들과 집단 지성으로 공부했던 내용들을 정리 해보려 한다. 

     

     

    📝 Database 기본

    Q : 데이터베이스 Key에는 어떤 것들이 있나요? 

    - 후보키 : 유일성(key로 하나의 행 구분 가능) 최소성(최소 개수의 속성들로 구성)만족하는 속성들의 집합

    - 기본키 : 후보키 중 선택한 키, 테이블에서 기본키는 오직 1개, Null 및 중복값 불가 

    - 대체키 : 후보키가 2개이상일 경우 기본키 외 다른 후보키들 

    - 외래키 : 다른 테이의 데이터를 참조하여 테이블의 관계를 연결하는 키, 참조될 테이블 A의 기본키 == 참조할 테이블 B의 외래키 

    - 슈퍼키 : 유일성은 만족하나 최소성을 만족하지 못하는 키 집합

     

    Q : 데이터베이스 Schema란 무엇인가요? 

    데이터베이스를 구성하는 데이터 개체(Entity), 개체의 특성을 나타내는 속성(Attribute), 개체 사이에 존재하는 관계 및 데이터 조작시 데이터 값들이 갖는 제약조건 등을 기술한 것

     

    Q : RDBMS와 NoSQL 데이터베이스의 차이가 무엇인가요? 

    관계형 데이터베이스는, 데이터를 정해진 데이터 스키마에 따라 테이블에 저장하고, 관계를 토대로 저장됩니다. 하나의 테이블에서 중복 없이 하나의 데이터 관리, 스키마를 준수하지 않는 데이터는 저장이 불가합니다. 관계를 맺고 있는 데이터가 자주 변경되거나, 스키마가 명확한 경우에 사용하면 좋습니다. 

     

    NoSQL 데이터베이스는, 비 관계형 데이터베이스로 느슨한 스키마, 또는 스키마 없이 사용하며 데이터 저장하는 칼럼들이 각기 다른 이름, 데이터타입을 갖는 것이 허용됩니다. 비정형 데이터, 막대한 양의 데이터를 다루고 읽되, 데이터 변경은 자주 일어나지 않는 경우 사용하면 좋습니다. 

     

    Q : 데이터베이스의 view는 무엇인가요? 

    가상의 테이블, 데이터는 없고 SQL만 저장되어 있는 object를 의미합니다.

    view 를 select 하게되면 view가 가지고 있는 SQL 문이 실행되는 것과 같으며,  필요한 데이터만 뷰로 정의하여 사용하기 때문에 SQL 명령문이 간단해지고, 보안의 효과도 있습니다. 

     

    Q : 데이터베이스에서 무결성이란 어떤 의미인가요? 

    데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미합니다. 무결성이 지켜져야만 데이터베이스의 값과 실제 값이 일치하는지에 대한 신뢰가 생깁니다. 개체 무결성, 참조 무결성, 고유 무결성, null 무결성 등이 있습니다.

     

     

    🗂 Database 정규화

    Q : 정규화는 무엇이고, 어째서 필요할까?

    하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정을 의미합니다. 데이터베이스 이상현상을 방지할 수 있으며, 정규화 원칙에 따라 설계된 데이터베이스는 중복을 최소화하고 확장에 용이하기 때문에 정규화 작업을 수행합니다.  

     

    Q : 데이터베이스 이상현상이 무엇인가요? 

    테이블 설계 단계에서 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 의미합니다. 

    데이터 삽입 시 불필요한 자료까지 추가하여야 데이터 삽입이 가능한 삽입 이상

    중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상 갱신 이상

    특정 데이터 삭제로 인해 의도하지 않은 다른 데이터들까지 함께 삭제되어 버리는 삭제 이상이 있습니다. 

     

    Q : 정규화의 종류에는 어떤 것이 있나요? 

    제 1 정규화 : 테이블의 컬럼이 하나의 값(원자값)만을 갖도록 분해

    제 2 정규화 : 테이블의 모든 컬럼이 완전 함수적 종속을 만족하도록 분해 

    제 3 정규화 : 이행적 종속을 없애는 과정 / 이행적 종속 A->B, B->C 면 A -> C 성립

     

    Q : 완전 함수적 종속을 만족한다는 것은 어떤 의미인가요? 

    두개의 키 중 하나의 키만으로 다른 컬럼을 결정 지을 수 있는 부분함수적 종속을 제거한 상태를 의미합니다. 

     

     

    📑 Databse Index 

    Q : 데이터베이스의 Index란 무엇인가요? 

    데이터베이스 전체를 다 스캔하지 않고 인덱스 파일 검색을 통해 데이터를 빠르게 검색할 수 있게 해주는 객체입니다.

    지정한 컬럼들을 기준으로 메모리 영역에 목차를 생성하는 것으로, 삽입, 삭제, 수정 시의 성능과 메모리 공간 일부를 희생하는 대신 조회 성능을 향상시키기 위해 사용합니다. 

     

    Q : Index의 자료구조는 어떻게 되어있나요? 

    MySQL 기준으로, 대부분은 B-Tree(log2N)로 되어있으며 일부 공간 관련 데이터들은 R-Tree를, MEMORY 테이블들은 또한 hash index를 지원하며 InnoDB는 역 색인을 사용합니다. 

    주로 B-Tree 구조를 사용하는 이유는 해시 테이블이 검색 속도는 더 빠르지만, 해시 테이블은 부등호 비교 등 연속적인 데이터를 위한 순차 검색이 불가능하기 때문입니다. 

    더보기

    Most MySQL indexes (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) are stored in B-trees. Exceptions: Indexes on spatial data types use R-trees; MEMORY tables also support hash indexes; InnoDB uses inverted lists for FULLTEXT indexes. 
    출처 : https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html

    Q : 그렇다면, 어떤 컬럼에 index를 설정하면 좋은가요? 

    Where, Order by, join등에 많이 사용되어 조회 활용도가 높으며 수정 빈도가 낮고, 유니크한 값들이 많은 (Cardinality가 높은) 컬럼에 설정하는 것이 좋습니다. 

     

    Q : clustered Index와 Non clustered Index의 차이가 무엇인가요? 

    clustered index는 특정 컬럼을 기준으로 데이터를 정렬시켜 저장되는 순서를 정의합니다. 테이블 당 1개만 존재 가능하며, PK의 제약조건은 clustered index를 자동으로 생성합니다.

    non clustered index는 별도의 장소에 저장되며, 순차적으로 정렬되어 있지 않아도 되고(순서와 상관 없음), 테이블 당 여러 개 존재가 가능합니다. 

     

     

     

    📈 DB Transaction

     

    Q : 트랜잭션이 무엇인가요? 

    데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위를 의미합니다. 

     

    Q : 트랜잭션의 기능이 무엇일까요? 

    작업의 완전성을 보장합니다. 쿼리를 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상을 발생하지 않게 합니다. 

     

    Q : 트랜잭션의 특징에 대해 설명해주세요 

    원자성 : 트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 한다.

    일관성 : 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기 전의 상황과 동일하게 데이터의 일관성을 보장해야 한다.

    = 데이터에 변경이 가해졌을 때 미리 정의된, 예측 가능한 방식을 취하기 

    고립성 : 각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 한다.

    지속성 : 트랜잭션이 정상적으로 종료된 후에는 영구적으로 데이터베이스에 작업 결과가 저장되어야 한다.

     

    Q : 트랜잭션의 격리수준에 대해 설명해주세요.

    Read Uncommited : 아직 커밋되지 않은 내용들도 다른 트랜잭션이 볼 수 있는 가장 낮은 격리 수준으로 Dirty Read 문제가 발생합니다. 

    Read Commited : 커밋이 이루어진 트랜잭션만 볼 수 있으며, 오라클의 기본 격리 수준으로, Non Repeatable Read라는, 동일 쿼리에 대한 결과가 다르게 나올 수 있는 문제가 있습니다. 

    Repeatable Read : 트랜잭션이 시작되기 전 커밋된 내용에 대해서만 조회하는 mysql 기본수준, Phantom Read라는 없던 데이터가 새롭게 생기는 현상이 발생할 수 있습니다.

    Serializable : 완벽한 읽기 일관성 모드로 수정 입력 작업이 모두 제한되는 가장 엄격한 격리 수준입니다. 

     

     

    Q : DB 락에 대해 설명해주세요 

     

    트랜잭션 처리의 순차성을 보장하기 위해 사용하는 것으로, 데이터베이스, 파일, 테이블, 컬럼, 락 등의 범위로 락을 걸 수 있습니다.

    읽기 작업시 사용하는 READ Lock은 같은 Read Lock끼리는 동시 접근이 가능합니다. 

    쓰기 작업시 사용하는 Write Lock은 다른 트랜잭션의 접근을 허용하지 않습니다. 

     

     

     

     

    🔖 기타 

     

    Q : SQL injection이란 무엇이고 어떻게 방어할 수 있을까요? 

     

    악의적인 목적을 가진 임의의 SQL문을 주입, 실행하게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 공격을 의미합니다. 

    사용자의 입력값을 그대로 쿼리로 사용하지 않고, 특수 문자, 데이터 베이스 예약어(UNION) 등을 필터링 하거나, 

    prepared statement를 사용하여 실행되는 SQL 문을 숨깁니다. 

    DB에 대한 에러 메시지를 노출하지 않는 것입니다. 데이터베이스의 테이블 명, 컬럼 명 등을 숨깁니다.

     

     

    Q : CAP 이론에 대해 설명해주세요 

    분산 데이터베이스 환경에서 사용되는 이론, Consistency, Availability, Partition Tolerance의 이니셜들이다. 

    C : 모든 시스템의 데이터는 항상 같은 데이터를 가질 것 

    A : 분산 시스템에 대한 모든 요청은 항상 응답을 반환할 것 

    P : 장애 상황에서도 시스템의 작동은 계속 될 것 

    세 가지 속성을 모두 만족시키는 분산 시스템을 구성할 수는 없습니다.

    하나의 시스템이 장애가 났을 경우, 

    다른 애들끼리 정상적으로 요청을 처리해 일관성을 희생하고 가용성을 높이던지(AP),

    잠시 요청 처리를 중단하고 재실행될 때까지 기다려 가용성 희생하고 일관성을 지키던지(CP)를 선택한다. 

    몽고디비와 레디스는 CP, 아파치 카산드라의 경우 AP

     

     

    Q : SELECT 쿼리는 어떤 순서대로 수행됄까요? 

    From, on, Join > Where, Group By , Having > Select > Distinct > OrderBy > Limit

     

    Q : MySQL 쿼리 튜닝을 위해 사용할 명령어 

    Explain 명령어를 활용한다. 

    Explain 명령어는 쿼리 실행 계획에 대한 정보를 얻을 수 있습니다.

    여러 출력결과가 나오지만, 그 중 사용된 인덱스인 key, 읽어야 할 행 수인 rows, 어떻게 table들이 join되었는지를 나타내는 type 등의 요소를 보고 튜닝 방향을 결정할 수 있습니다. 

     

    'CS' 카테고리의 다른 글

    CS - 운영체제 정리  (0) 2023.11.02
    CS - 네트워크 정리  (0) 2023.10.26
    CS 스터디 운영체제 Q&A (2)  (0) 2023.10.04
    소프트웨어 공학 및 알고리즘 Q&A  (0) 2023.09.27
    CS 스터디 - 네트워크 Q&A (2)  (0) 2023.09.20
Designed by Tistory.