포스트

10/10 면접 준비


CS 관련 지식

데이터베이스

1. 데이터 베이스란
  • 데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 데이터베이스 관리 시스템, DBMS에 의해 제어됩니다.
2. 데이터베이스에서 인덱스를 사용하는 이유와 장단점
  • 데이터베이스에서 인덱스를 사용하는 이유는 검색성능을 향상시키기 위함입니다.
  • 검색 성능을 실질적으로 향상시키기 위해서 해당 쿼리가 index를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야 합니다.
  • 일반적인 경우의 장점으로는 빠른 검색 성능을 들 수 있습니다.
  • 반대로 단점으로는 인덱스를 구성하는 비용, 다시 말해, 추가, 수정, 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행됩니다.
  • 따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야합니다.
  • 인덱스를 항상 사용할 수는 없습니다.
  • 인덱스를 생성하면 추가적인 저장공간이 필요하고 인덱스 관리를 위한 오버헤드가 발생할 수 있습니다.
  • 인덱스가 존재하는 경우, 데이터 삽입, 수정, 삭제 시에도 인덱스가 함께 업데이트 됩니다.
  • 따라서, 인덱스 수가 많아질 수록 쓰기 성능이 감소할 수 있습니다.
  • 만약 쿼리에 사용하지 않는 인덱스가 존재할 경우, 시스템 리소스 공간을 불필요하게 차지하기 때문에 시스템 전체 성능에 부정적인 영향이 있을 수 있습니다.
  • 인덱스를 관리하는 것 자체가 비용이 드는 작업이기 떄문에 인덱스가 많아지면 그 비용이 늘어납니다.
  • 따라서, 인덱스를 생성하기 전에 충분한 분석과 검토가 필요합니다.
3. 트랜잭션
  • 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 가장 작은 논리적인 작업 단위라고 할 수 있고, 트랜잭션에는 여러개의 연산이 수행될 수 있습니다.
  • 트랜잭션은 수행중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.
4. ACID
  • ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질입니다.
  • A (Atomicity)는 원자성으로 트랜잭션의 연산은 모든 연산이 완벽히 수행되어야 하며, 한 개의 연산이라도 실패하면 트랜잭션 내의 모든 연산을 실패해야함을 의미합니다.
  • C (Consistency) 는 일관성으로 트랜잭션은 유효한 상태로만 변경될 수 있다는 것을 의미합니다.
  • I (Isolation) 은 고립성으로 모든 트랜잭션은 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고 독립적으로 실행되어야 함을 의미합니다.
  • D (Durability) 는 내구성으로 트랜잭션이 커밋된 이후에는 시스템 오류가 발생하더라도 커밋된 상태로 유지되는 것을 보장해야 함을 의미합니다. 일반적으로 비휘발성 메모리에 데이터가 저장되는 것을 의미합니다.
5. 트랜잭션 격리 수준
  • 트랜잭션 격리 수준은 고립도와 성능의 트레이드 오프를 조절합니다.
  • READ UNCOMMITED 는 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다는 의미입니다.
  • READ COMMITED 는 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다는 뜻입니다.
  • REPEATABLE READ 는 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있음을 의미합니다.
  • SERIALIZABLE 은 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 하는 것을 뜻합니다.
  • 일반적으로는 REPEATABLE READ 수준으로 두며, SERIALIZABLE은 성능이 매우 저하되는 경향이 있습니다.
6. 정규화 + 정규화 절차
  • 데이터 베이스 정규화는 중복된 데이터를 제거하여 저장 공간의 효율성을 증가시키고, 일관된 데이터를 유지하여 무결성을 보장하는 동시에, 삽입/삭제/갱신 이상 현상을 방지함으로써 데이터의 정확성과 신뢰성을 확보하는 설계 과정입니다.
  • 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있습니다.
  • 정규화 절차는 제 1,2,3 정규화, BCNF, 제4, 5 정규화로 구성되어 있습니다.
  • 제 1 정규화는 속성의 원자성을 확보하고 원자값이 아닌 도메인을 분해합니다.
  • 제 2정규화는 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거합니다.
  • 제 3 정규화는 기본키를 제외한 컬럼간의 종속성을 제거합니다.
  • BCNF는 기본키를 제외하고 후보키가 있는 경우 후보기가 기본키를 종속시키면 분해합니다.
  • 제 4 정규화는 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거합니다.
  • 제 5 정규화는 조인에 의해 종속성이 발생하는 경우 분해합니다.
  • 이 중 실질적으로는 제 3 정규화까지만 수행합니다.
7. JOIN + 종류
  • SQL에서 Join은 두 개 이상의 테이블에서 행을 결합하는 방법입니다.
  • 주로 공통된 열을 기준으로 테이블들을 연결합니다.
  • Join은 Inner Join과 Outer Join으로 나눌 수 있습니다.
  • Inner Join은 두 테이블에 모두 존재하는 데이터만 반환합니다.
  • Outer Join은 LEFT, RIGHT JOIN으로 분리할 수 있고
  • 각각 왼쪽, 오른쪽 모든 데이터와 반대 방향의 데이터 중 일치하는 데이터를 가져옵니다.
  • 만약 데이터가 한쪽에만 있는 경우에는 NULL이 반환됩니다.
  • 또한 Outer Join 중 Full Join이 있는데, 이는 양 쪽 모든 데이터를 반환하고, 한 쪽에만 존재하는 데이터는 다른 한 쪽을 Null로 반환합니다.
8. RDBMS vs NOSQL
  • RDBMS는 데이터베이스를 이루는 객체들의 관계를 통해서 데이터를 저장하는 데이터베이스입니다. SQL을 사용하여 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요합니다.
  • 장점으로는 명확한 데이터 구조를 보장하고, 중복을 피할 수 있다는 것이 있습니다.
  • NOSQL은 RDBMS에 비해 자유로운 형태로 데이터를 저장합니다.
  • 또한 수평확장을 할 수 있고 분산처리를 지원합니다.
  • 다양한 형태의 NOSQL 데이터베이스가 있고, 대표적으로 Key-Value Store, BigTable, Dynamo, Document DB, Graph DB 등이 있습니다.
  • 이 둘은 서로 대체될 수 있는 것이 아니고, 각각 필요한 시점에 적절히 선택하여 사용해야 합니다.
  • 둘 다 상호보완적으로 함께 사용할 수 있습니다.
9. CAP 이론 + Eventual Consistency
  • CAP 이론은 분산 환경에서 모두를 만족하는 시스템은 없다는 이론입니다.
  • C (Consistency)는 일관성으로 ACID와의 일관성과는 약간 다른데, 모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다는 것입니다.
  • A (Availability)는 가용성으로 모든 동작에 대한 응답이 리턴되야 함을 의미합니다.
  • P (Partition Tolerance)는 분할 내성으로 시스템 일부가 네트워크에서 연결이 끊기더라도 동작해야함을 의미합니다.
  • CAP은 어떻게 클러스터링 하느냐에 따라 달라질 수 있습니다. 그렇기 때문에 전략을 취할 때 어떤 것을 선택했는가를 알아야 합니다.
  • Eventual Consistency는 이 Consistency를 보장해주지 못하기 때문에 나온 개념으로,
  • Consistency를 완전히 보장하지는 않지만, 결과적으로 언젠가는 Consistency가 보장됨을 의미합니다.
이 블로그는 저작권자의 CC BY 4.0 라이센스를 따릅니다.