기타/기술 면접 대비

[신입 개발자 기술 면접] 데이터베이스

배발자 2022. 1. 14.
반응형

 

 

데이터베이스 언어(DDL, DML, DCL)에 대해 설명해주세요.

 

  1. 데이터 정의 언어(Data Definition Language, DDL): 데이터베이스의 구조를 정의하거나 변경하는 데 사용되는 명령어입니다. 주요 DDL 명령어는 다음과 같습니다.

    • CREATE: 데이터베이스, 테이블, 인덱스 등의 객체를 생성합니다.
    • ALTER: 데이터베이스 객체의 구조를 변경합니다. 예를 들어, 테이블에 새로운 열을 추가하거나 제거하는 작업이 포함됩니다.
    • DROP: 데이터베이스 객체를 삭제합니다.
    • TRUNCATE: 테이블의 모든 데이터를 삭제하고 초기 상태로 되돌립니다.

  2. 데이터 조작 언어(Data Manipulation Language, DML): 데이터베이스의 데이터를 검색, 추가, 수정, 삭제하는 데 사용되는 명령어입니다. 주요 DML 명령어는 다음과 같습니다.

    • SELECT: 데이터를 검색하고 결과를 반환합니다. 조건과 정렬, 그룹화 등 다양한 옵션을 사용할 수 있습니다.
    • INSERT: 새로운 데이터를 테이블에 추가합니다.
    • UPDATE: 기존 데이터를 수정합니다.
    • DELETE: 데이터를 삭제합니다.

  3. 데이터 제어 언어(Data Control Language, DCL): 데이터베이스에 대한 접근 권한을 관리하는 데 사용되는 명령어입니다. 주요 DCL 명령어는 다음과 같습니다.

    • GRANT: 사용자에게 특정 권한을 부여합니다.
    • REVOKE: 사용자로부터 특정 권한을 취소합니다.

 

SELECT 쿼리의 수행 순서를 알려주세요.

 

  1. FROM: 해당 테이블에서 데이터를 가져옵니다. 여러 테이블이 조인되어 있는 경우, 이 단계에서 조인이 수행됩니다.
  2. WHERE: FROM 절에서 가져온 데이터에 대해 필터링을 수행합니다. WHERE 절의 조건에 맞는 행만 선택됩니다.
  3. GROUP BY: 필터링된 데이터를 특정 열을 기준으로 그룹화합니다. 이 단계에서 집계 함수(예: COUNT, SUM, AVG 등)를 사용할 수 있습니다.
  4. HAVING: GROUP BY 절을 사용하여 그룹화된 데이터에 대해 추가 필터링을 수행합니다. HAVING 절은 집계 함수를 포함한 조건을 사용할 수 있습니다.
  5. SELECT: 데이터를 가져올 열을 선택합니다. 이 단계에서 별칭(alias)을 지정하거나 연산을 수행할 수 있습니다.
  6. DISTINCT: 선택된 데이터에서 중복된 행을 제거합니다. DISTINCT 키워드를 사용할 경우 이 단계에서 적용됩니다.
  7. ORDER BY: 선택된 데이터를 특정 열을 기준으로 정렬합니다. 오름차순(ASC) 또는 내림차순(DESC)으로 정렬할 수 있습니다.
  8. LIMIT: 결과 데이터의 행 수를 제한합니다. LIMIT 절을 사용할 경우 이 단계에서 적용됩니다.

 

트리거(Trigger)에 대해 설명해주세요.

 

트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다. 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징입니다.

CREATE TRIGGER tr_example
AFTER INSERT ON users
FOR EACH ROW
BEGIN
  INSERT INTO user_audit_log (user_id, action)
  VALUES (NEW.id, 'INSERT');
END;


이 예제에서는 users 테이블에 새로운 데이터가 삽입된 후에 실행되는 트리거 **tr_example**을 생성합니다. 트리거가 실행되면 user_audit_log 테이블에 새로운 로그 데이터를 추가합니다. 이렇게 하면 사용자 데이터의 변경 사항을 추적할 수 있습니다.

 

 

Index에 대해 설명해주시고, 장/단점에 대해 아는대로 말해주세요.

 

데이터베이스에서 데이터를 빠르게 검색하고 조회하기 위한 자료구조입니다. 인덱스는 주로 테이블의 열(column)에 생성되며, 해당 열의 값과 해당 레코드의 위치를 매핑합니다. 인덱스는 책의 색인과 비슷하게 작동하여, 데이터를 찾을 때 전체 테이블을 스캔하지 않고 빠르게 검색할 수 있습니다. 인덱스는 B-트리, 비트맵 인덱스, 해시 인덱스 등 다양한 자료구조로 구현될 수 있습니다.

[장점]

  1. 검색 속도 향상: 인덱스를 사용하면 테이블 전체를 스캔할 필요 없이 빠르게 데이터를 찾을 수 있습니다. 이로 인해 데이터 검색 성능이 크게 향상됩니다.
  2. 정렬 속도 향상: 인덱스를 사용하여 데이터를 정렬된 상태로 유지할 수 있으므로, 정렬 작업의 성능이 향상됩니다.
  3. 효율적인 조인: 인덱스를 사용하면 조인 작업의 성능이 개선되어, 두 개 이상의 테이블을 결합하는 작업이 더 효율적으로 수행됩니다.

[단점]

  1. 저장 공간 사용: 인덱스는 추가적인 저장 공간을 사용합니다. 인덱스가 많아질수록 데이터베이스의 저장 공간 요구량이 증가합니다.
  2. 삽입, 수정, 삭제 성능 저하: 인덱스가 있는 테이블에서 데이터를 삽입, 수정, 삭제할 때 인덱스도 함께 업데이트해야 합니다. 이로 인해 쓰기 작업의 성능이 저하될 수 있습니다.
  3. 인덱스 관리: 인덱스를 효율적으로 사용하려면 적절한 유지 보수가 필요합니다. 인덱스가 최적화되지 않거나 낙후되면 성능 저하의 원인이 될 수 있습니다.

인덱스의 장단점을 고려하여 데이터베이스 설계 시 적절한 인덱스 전략을 선정해야 합니다. 일반적으로 읽기 작업이 많고 데이터 변경이 적은 경우 인덱스를 사용하면 성능이 크게 향상됩니다. 반면, 쓰기 작업이 빈번한 경우 인덱스를 신중하게 사용해야 합니다.

 

 

B-트리 vs B+트리

 

B-트리와 B+트리는 데이터베이스 인덱스에서 사용되는 자료구조로, 데이터를 정렬된 순서로 저장하고 효율적인 검색, 삽입, 삭제를 가능하게 합니다. 이 두 자료구조는 여러 가지 면에서 비슷하지만, 몇 가지 차이점이 있습니다.

 

B-트리(B-Tree)

  • B-트리는 균형잡힌 (balanced) 트리 자료구조로, 각 노드에 여러 개의 키와 자식 노드가 있을 수 있습니다.
  • B-트리의 각 노드에는 최소 (m/2) - 1개에서 최대 m - 1개의 키가 저장됩니다. 여기서 m은 B-트리의 차수입니다.
  • B-트리의 모든 노드는 정렬된 순서로 키를 저장하며, 내부 노드에도 실제 데이터를 포함할 수 있습니다.
  • 검색, 삽입, 삭제 작업의 시간 복잡도는 O(log n)입니다.
  • 자주 access 되는 노드를 루트 노드 가까이 배치할 수 있고, 루트 노드에서 가까울 경우, 브랜치 노드에도 데이터가 존재하기 때문에 빠름
  • 풀스캔시, 모든 노트를 탐색한다.

 

B+트리(B+-Tree)

  • B+트리는 B-트리의 변형으로, 각 노드에 여러 개의 키와 자식 노드가 있을 수 있습니다.
  • B+트리는 리프 노드에만 실제 데이터를 저장하며, 내부 노드는 키 값과 자식 노드의 참조만 저장합니다.
  • B+트리의 리프 노드는 서로 연결되어 있어, 범위 검색이 빠르고 효율적으로 수행됩니다.
  • 검색, 삽입, 삭제 작업의 시간 복잡도는 O(log n)입니다.
  • 리프 노드까지 가야 데이터가 존재.
  • 풀 스캔 시, 검색속도는 리프 노드에서 선형 탐색한다.

차이점

  1. B-트리는 내부 노드와 리프 노드 모두 데이터를 저장하지만, B+트리는 리프 노드에만 실제 데이터를 저장합니다.
  2. B+트리는 리프 노드간에 연결이 있어, 범위 검색이 더 빠르고 효율적입니다.
  3. B+트리에서 노드당 저장되는 키의 수가 더 많아져, 트리의 높이가 낮아지고 디스크 I/O 연산이 줄어듭니다.

데이터베이스 인덱스에서 B+트리가 더 자주 사용됩니다. 이는 B+트리가 범위 검색에 유리하고, 디스크 I/O 작업을 최소화하는데 도움이 되기 때문입니다. 그러나 상황에 따라 B-트리가 더 적합한 경우도 있습니다.

 

 

인덱스 설정을 어떻게 해야할까요?

 

  1. 검색 빈도: 자주 사용되는 열(column)에 인덱스를 설정해 검색 성능을 향상시킬 수 있습니다. 예를 들어, 고객의 성(last name)이나 이메일 주소와 같은 정보를 자주 검색하는 경우 해당 열에 인덱스를 설정하는 것이 좋습니다.
  2. 카디널리티(Cardinality): 카디널리티가 높은 열에 인덱스를 설정하면 더 효율적인 검색이 가능합니다. 카디널리티는 열의 고유한 값의 수를 나타냅니다. 예를 들어, 성별 열은 낮은 카디널리티를 가지고 있고, 주민등록번호 열은 높은 카디널리티를 가집니다.
  3. 데이터 변경 빈도: 빈번한 삽입, 수정, 삭제가 발생하는 열의 경우 인덱스 설정 시 주의해야 합니다. 데이터가 변경될 때마다 인덱스도 함께 업데이트되어야 하므로, 쓰기 성능이 저하될 수 있습니다.
  4. 범위 검색: 범위 검색이 빈번한 열에 인덱스를 설정하면 성능 향상에 도움이 됩니다. 인덱스가 설정된 열을 기준으로 정렬된 상태로 데이터를 저장하므로, 효율적인 범위 검색이 가능해집니다.
  5. 조인 연산: 두 테이블을 조인할 때 사용되는 열에 인덱스를 설정하면 조인 성능이 향상됩니다. 인덱스가 설정된 열을 기준으로 빠르게 매칭되는 레코드를 찾을 수 있습니다.
  6. 인덱스 종류: 사용하는 데이터베이스 시스템에 따라 다양한 인덱스 종류를 사용할 수 있습니다. B-트리, B+트리, 비트맵 인덱스, 해시 인덱스 등의 인덱스 종류가 있으며, 각 인덱스의 특성을 고려하여 적절한 인덱스를 선택해야 합니다.

 

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

 

정규화(Normalization)는 데이터베이스 설계 과정에서 중복 데이터를 최소화하고 데이터 구조를 효율적으로 구성하기 위한 과정입니다. 정규화를 통해 데이터베이스의 무결성과 일관성을 유지할 수 있으며, 데이터 변경, 추가, 삭제 시 발생할 수 있는 이상(Anomaly)을 줄입니다. 정규화는 여러 단계의 정규 형태(Normal Form)로 구분되며, 각 단계에서 데이터 구조의 개선을 수행합니다.

 

  1. 제1정규형(1NF): 제1정규형은 각 테이블의 모든 열이 원자 값(Atomic Value)으로 구성되어야 한다는 원칙입니다. 즉, 각 열의 값이 유일하게 식별되어야 하며, 반복되는 데이터나 그룹 데이터가 없어야 합니다.
  2. 제2정규형(2NF): 제2정규형은 제1정규형을 만족하면서 부분 함수 종속(Partial Functional Dependency)을 제거하는 원칙입니다. 부분 함수 종속이란, 복합 기본키(Primary Key)가 있는 경우, 일부 열이 기본키의 일부분에만 종속되는 현상을 말합니다. 이를 해결하기 위해 해당 열을 별도의 테이블로 분리하고, 새로운 기본키를 부여합니다.
  3. 제3정규형(3NF): 제3정규형은 제2정규형을 만족하면서 이행적 함수 종속(Transitive Functional Dependency)을 제거하는 원칙입니다. 이행적 함수 종속이란, A -> B, B -> C의 관계에서 A -> C의 종속 관계가 발생하는 현상을 말합니다. 이를 해결하기 위해 이행적 종속이 발생하는 열을 별도의 테이블로 분리하고, 새로운 기본키를 부여합니다.

 

 

정규화에는 어떤 장점이 있고 어떤 단점이 있는지 아는대로 설명해주세요.


[장점]

  1. 데이터 무결성(Data Integrity): 정규화를 통해 데이터 중복을 최소화하고 일관된 데이터 구조를 만들어 데이터의 무결성을 유지합니다.
  2. 삽입, 수정, 삭제 이상(Anomaly) 감소: 중복 데이터가 제거되면 삽입, 수정, 삭제 시 발생할 수 있는 이상 현상이 줄어들게 됩니다. 이로 인해 데이터의 일관성이 향상됩니다.
  3. 공간 효율성 증가: 중복 데이터가 줄어들어 디스크 공간 사용이 효율적으로 이루어집니다. 이는 디스크 I/O 작업이 줄어들고 성능이 향상될 수 있는 효과를 가져옵니다.
  4. 데이터베이스 구조의 단순화: 정규화를 통해 데이터베이스 구조가 단순화되어 관리와 유지 보수가 용이해집니다.

[단점]

  1. 조인 연산 증가: 정규화로 인해 테이블 간의 관계가 복잡해지면서, 필요한 데이터를 얻기 위해 조인 연산이 빈번하게 발생할 수 있습니다. 이로 인해 성능 저하가 발생할 수 있습니다.
  2. 복잡한 쿼리: 정규화된 테이블에서 데이터를 추출하려면 복잡한 쿼리를 작성해야 할 수 있습니다. 이는 개발 및 유지 보수에 어려움을 줄 수 있습니다.


* 데이터 무결성 : 데이터의 정확성, 일관성

 

역정규화를 하는 이유에 대해 아는대로 설명해주세요.


역정규화(Denormalization)는 정규화된 데이터베이스의 성능을 개선하기 위해 일부 중복 데이터나 그룹 데이터를 허용하는 과정입니다. 역정규화의 주요 목적은 데이터베이스의 읽기 성능을 향상시키는 것입니다. 역정규화의 주요 이유는 다음과 같습니다.

  1. 조인 연산 감소: 정규화로 인해 테이블 간의 관계가 복잡해지면서, 데이터를 조회할 때마다 조인 연산이 빈번하게 발생할 수 있습니다. 역정규화를 통해 테이블 간의 관계를 단순화하고 조인 연산을 줄일 수 있어, 데이터 조회 성능이 향상됩니다.
  2. 읽기 성능 향상: 역정규화를 통해 여러 테이블에서 데이터를 조회하는 경우를 줄이고, 단일 테이블에서 필요한 정보를 얻을 수 있게 함으로써 읽기 성능을 개선합니다. 이로 인해 사용자 응답 시간이 빨라지고 전체 시스템 성능이 향상됩니다.
  3. 복잡한 쿼리 간소화: 역정규화를 통해 데이터 조회를 위한 복잡한 쿼리를 간소화할 수 있습니다. 이는 개발자가 더 간단한 쿼리를 작성할 수 있게 하여 개발 및 유지 보수를 용이하게 합니다.

역정규화는 성능 개선을 위해 사용되지만, 이로 인해 데이터 무결성과 일관성에 문제가 발생할 수 있습니다. 또한, 쓰기 성능이 저하될 수도 있습니다. 따라서 역정규화를 적용할 때는 성능 향상과 데이터 무결성 간의 균형을 적절히 고려해야 합니다.

이상 현상의 종류에 대해 설명해주세요.


이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입,삭제,수정할 때 생기는 논리적 오류를 말합니다.

  1. 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
  2. 갱신 이상 : 데이터를 수정할 때 일부 행만 수정되어 데이터 일관성이 깨지는 현상입니다.
  3. 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상


RDBMS와 NoSQL의 차이에 대해 설명해주세요

 

관계형 데이터베이스는 정해진 스키마와 관계를 사용하여 데이터를 저장하며, 주로 테이블 형태로 구성됩니다. 
비관계형 데이터베이스는 고정된 스키마가 없고, 다양한 데이터 모델(키-값, 문서, 그래프 등)을 사용하여 저장할 수 있습니다. NoSQ은 수평적 확장성과 높은 성능을 제공하며, 대량의 비정형 데이터 처리에 적합니다. 

 


[RDBMS]

장점

  1. 구조화된 데이터를 다루기에 적합하며, 데이터의 무결성과 일관성을 보장합니다.
  2. 테이블 간의 관계를 통해 복잡한 쿼리를 작성하고, 데이터를 분석하는 데 용이합니다.
  3. ACID 속성을 지원하여 트랜잭션 관리가 가능합니다.
  4. 널리 사용되는 SQL을 통해 데이터 처리를 할 수 있어, 개발자들이 학습하기 쉽고 지원이 잘 되어 있습니다.

단점

  1. 수직 확장에는 유리하지만, 수평 확장이 어려워 대용량 데이터나 높은 트래픽을 처리하기 어렵습니다.
  2. 고정된 스키마로 인해 데이터 구조 변경이 어렵고, 유연성이 떨어집니다.
  3. 관계형 데이터베이스가 아닌 데이터 모델 (예: 계층형, 그래프)을 표현하기 어렵습니다.

[NoSQL]

장점

  1. 스키마가 없거나 유연한 스키마를 지원하여, 데이터 구조의 변경이 용이합니다.
  2. 수평 확장이 가능하며, 대용량 데이터와 높은 트래픽 처리에 적합합니다.
  3. 다양한 데이터 모델을 지원하여, 관계형 데이터뿐 아니라 계층형, 그래프 등의 데이터 구조를 표현하기 쉽습니다.
  4. BASE 속성을 지원하여 가용성과 분할 허용성이 높습니다.

단점

  1. ACID 속성을 완화하거나 포기하기 때문에, 데이터의 무결성과 일관성이 상대적으로 낮습니다.
  2. RDBMS에 비해 쿼리와 분석 기능이 제한적일 수 있습니다.
  3. 각 NoSQL 데이터베이스마다 고유한 쿼리 언어와 API를 사용하여, 학습 곡선이 높을 수 있습니다.

RDBMS와 NoSQL은 각각의 장단점이 있기 때문에, 데이터의 특성, 애플리케이션 요구 사항, 성능, 확장성 등을 고려하여 적절한 데이터베이스를 선택해야 합니다.

 

 

RDBMS와 NoSQL은 어느 경우에 적합한가요?


RDBMS와 NoSQL은 데이터 저장 및 관리 방식에 큰 차이가 있기 때문에, 다음과 같은 상황에 따라 적합한 데이터베이스 유형이 다를 수 있습니다.

RDBMS (관계형 데이터베이스 관리 시스템)

  • 구조화된 데이터를 저장하고 관리해야 할 때 (ex: 계산 테이블, 회원 정보 등)
  • 트랜잭션 처리를 해야 할 때 (ex: 은행 업무, 주문 처리 등)
  • 데이터 구조 변경이 적고, 안정적인 데이터 관리가 필요한 경우
  • 데이터 분석 및 복잡한 쿼리가 필요한 경우

NoSQL (Not only SQL)

  • 대용량 데이터 처리가 필요한 경우 (ex: 대규모 사용자 정보, 로그 데이터 등)
  • 데이터 구조가 자주 변경되는 경우
  • 수평 확장이 필요한 경우 (ex: 클라우드 컴퓨팅)
  • 관계형 데이터베이스에 비해 비정형 데이터나 계층적 데이터를 저장해야 할 때 (ex: SNS, 로그 데이터, IoT 등)

RDBMS와 NoSQL은 각각 장단점이 있으며, 데이터 구조, 애플리케이션 요구 사항, 성능, 확장성 등의 요인을 고려하여 적절한 데이터베이스를 선택해야 합니다

 

트랜잭션이란 무엇인지 설명해주세요.


트랜잭션(Transaction)은 데이터베이스(Database)에서 수행되는 작업의 단위를 말합니다. 보통 하나의 작업이 여러 개의 쿼리문으로 이루어질 때, 이를 하나의 트랜잭션으로 묶어서 처리합니다. 
트랜잭션은 ACID 원칙을 따릅니다. ACID 원칙은 다음과 같습니다.

  • 원자성(Atomicity) : 트랜잭션은 모두 성공하거나 모두 실패합니다.
  • 일관성(Consistency) : 트랜잭션이 끝난 후 데이터베이스는 일관된 상태를 유지해야 합니다.
  • 격리성(Isolation) : 트랜잭션은 다른 트랜잭션과 독립적으로 실행되어야 합니다.
  • 지속성(Durability) : 트랜잭션이 성공했을 경우 그 결과는 영구적으로 반영되어야 합니다.

 

* 일관성
예를들면, 마이너스 잔액을 허용하지 않는다고 가정을 했을 때 제약 조건은 "마이너스 잔액을 허용하지 않음"입니다. 즉, 잔액은 0원 미만이 될 수 없습니다. 이러한 조건이 데이터의 일관성을 의미합니다. 즉, 트랜잭션이 제약 조건을 위반하는 경우 일관성을 통해 트랜잭션이 실행되지 않고 이전의 상태로 돌아갑니다. 

 

 

트랜잭션 상태에 대해서 설명해보세요.

 

트랜잭션 상태는 데이터베이스 트랜잭션의 진행 과정 중에 발생하는 다양한 상태들을 나타냅니다. 트랜잭션은 여러 데이터베이스 연산들의 묶음으로, ACID 속성(원자성, 일관성, 고립성, 지속성)을 충족해야 합니다. 트랜잭션은 실행 과정에서 다음과 같은 상태들을 거칩니다.

 

  1. 활동 (Active): 트랜잭션이 실행 중이며 연산들이 정상적으로 실행되고 있는 상태입니다.
  2. 장애 (Failed): 트랜잭션이 실행 중 오류가 발생하여 중단된 상태입니다. 이 상태에서는 트랜잭션을 롤백하거나 복구 작업을 수행해야 합니다.
  3. 철회 (Aborted): 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태입니다. 롤백 후에는 트랜잭션 시작 이전의 데이터 상태로 되돌립니다.
  4. 부분 완료 (Partially Committed): 트랜잭션이 마지막 연산까지 실행했지만, 커밋 연산이 실행되기 직전의 상태입니다. 이 상태에서는 데이터베이스의 일관성을 확인하여 커밋 여부를 결정합니다.
  5. 완료 (Committed): 트랜잭션이 성공적으로 종료되어 커밋 연산을 실행한 후의 상태입니다. 이 상태에서는 트랜잭션에 의한 변경 사항이 데이터베이스에 반영되며, 다른 트랜잭션에서 조회 가능합니다.

 

트랜잭션 상태는 데이터베이스 트랜잭션의 실행 과정을 관리하고, 오류 발생 시 복구 작업을 가능하게 하며, ACID 속성을 보장하는 데 중요한 역할을 합니다.

 

 

HAVING과 WHERE의 차이를 설명해주세요.

 

having은 그룹을 필터링 하는데 사용되고, where은 개별 행을 필터링하는데 사용됩니다. 집계 함수(COUNT, SUM, AVG, MAX, MIN 등)는 having절과 함께 사용할 수 있으나, where절은 사용할 수 없습니다.( 집계함수를 사용할 수 있는 GROUP BY 절보다 WHERE절이 먼저 수행)

 

having은 그룹화 또는 집계가 발생한 후 필터링하는데 사용되고,

where은 그룹화 또는 집계가 발생하기 전에 필터링하는데 사용됩니다.

 

 

뷰(View)란 무엇인가요? 그리고 뷰의 장단점은 무엇인가요?

 

 

뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블입니다. 뷰는 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게는 있는 것처럼 간주됩니다.

 

[특징]

  • 뷰는 가상 테이블이기 때문에 물리적으로 구현되어 있지 않다.
  • 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.

[장점]

  • 논리적 데이터 독립성을 제공한다.
  • 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해준다.
  • 사용자의 데이터 관리를 간단하게 해준다.
  • 접근 제어를 통한 자동 보안이 제공된다.

[단점]

  • 독립적인 인덱스를 가질 수 없다.
  • 뷰로 정의를 변경할 수 없다.
  • 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다.

 

Primary Key와 Foreign Key의 차이점은 무엇인가요?

 

Primary Key는 테이블의 각 행(row)을 고유하게 식별하는 데 사용되는 키로, NULL 값이나 중복 값을 가질 수 없습니다.

 

Foreign Key는 다른 테이블의 Primary Key를 참조하는 키로, 관계형 데이터베이스에서 테이블 간의 관계를 정의하고 관리하는 데 사용됩니다. Foreign Key는 참조하는 테이블의 Primary Key와 일치해야 하며, 참조되는 기본 키 값이 변경되거나 삭제될 경우 외래 키 값을 함께 변경하거나 삭제해야 합니다.

 

 

INNER JOIN과 OUTER JOIN의 차이점은 무엇인가요?

 

INNER JOIN은 두 테이블에서 일치하는 값이 있는 경우에만 결과를 반환합니다. 즉, 조인 조건에 맞는 데이터가 양쪽 테이블에서 모두 존재해야 결과에 포함됩니다. (교집합)

OUTER JOIN은 한쪽 테이블에만 존재하는 데이터도 결과에 포함됩니다. OUTER JOIN은 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분됩니다.

  • LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 일치하는 데이터를 반환하며, 일치하지 않는 경우 NULL 값을 반환합니다.
  • RIGHT OUTER JOIN은 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 일치하는 데이터를 반환하며, 일치하지 않는 경우 NULL 값을 반환합니다.
  • FULL OUTER JOIN은 양쪽 테이블의 모든 데이터를 반환하며, 일치하지 않는 경우 NULL 값을 반환합니다.

 

옵티마이저(Optimizer)에 대해 아는대로 말해주세요.

 

  • 옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진입니다.
  • 컴퓨터의 두뇌가 CPU인 것처럼 DBMS의 두뇌는 옵티마이저라고 할 수 있습니다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저라는 곳에서 “이 쿼리문을 어떻게 실행시키겠다!”라는 여러가지 실행 계획을 세우고, 최고의 효율을 갖는 실행계획을 판별한 후 그 실행계획에 따라 쿼리를 수행하게 되는 것입니다.

SELECT *
FROM customer
WHERE age > 25


이 쿼리를 실행할 때, DBMS의 옵티마이저는 다음과 같은 최적화 작업을 수행할 수 있습니다.

 

  1. 적절한 인덱스 사용: customer 테이블에 age 열에 대한 인덱스가 있을 경우, 옵티마이저는 해당 인덱스를 사용하여 쿼리의 실행 속도를 높일 수 있습니다.
  2. 조건 순서 변경: 옵티마이저는 WHERE 절의 조건 순서를 변경하여, 가장 먼저 수행하는 조건이 가장 효율적인 인덱스를 사용할 수 있도록 할 수 있습니다.
  3. 조인 순서 변경: 쿼리에 조인이 포함될 경우, 옵티마이저는 조인 순서를 변경하여 불필요한 중간 결과를 줄이고 실행 속도를 높일 수 있습니다.
  4. 쿼리 실행 계획 결정: 옵티마이저는 위와 같은 최적화 작업을 수행한 뒤, 최종적으로 쿼리 실행 계획을 결정합니다. 이 계획은 최적화된 실행 순서, 사용되는 인덱스, 조인 방법 등을 포함합니다.

위와 같이 옵티마이저는 SQL 쿼리를 실행할 때, 최적의 실행 계획을 결정하여 데이터베이스의 성능을 최대화합니다.

 

 

데이터베이스에서 프로시저란 무엇인가요? 

 

데이터베이스 프로시저는 데이터베이스 관리 시스템(DBMS) 내에 저장되어 있는, 특정 작업을 수행하기 위해 작성된 일련의 SQL 명령문을 포함하는 코드 블록입니다. 이러한 프로시저는 Stored Procedure(저장 프로시저)라고도 불립니다. 데이터베이스 프로시저는 클라이언트 어플리케이션에서 호출할 수 있으며, 데이터 처리와 관련된 논리를 캡슐화하고 코드 재사용성을 높이는 데 도움이 됩니다.

 

데이터베이스 프로시저의 주요 특징은 다음과 같습니다.

 

  1. 효율성: 데이터베이스 프로시저는 DBMS 내부에서 실행되므로 네트워크 트래픽을 줄이고 처리 시간을 단축시킬 수 있습니다.
  2. 보안: 특정 사용자가 프로시저를 호출할 수 있는 권한만 부여하면 데이터 접근을 제한할 수 있습니다.
  3. 일관성: 데이터 처리와 관련된 논리를 한 곳에 모아두고 프로시저를 호출함으로써 여러 클라이언트 애플리케이션에서 일관된 데이터 처리를 보장할 수 있습니다.
  4. 유지 관리: 프로시저를 수정하면 변경 사항이 데이터베이스에 저장되고, 모든 클라이언트 애플리케이션에서 즉시 적용되므로 유지 관리가 용이합니다.

 

데이터베이스에서 'DELETE', 'TRUNCATE'및 'DROP' 차이점이 무엇인가요?

 

DELETE: 테이블에서 특정 행을 조건에 따라 삭제하며, 롤백이 가능합니다.

TRUNCATE: 테이블의 모든 행을 빠르게 삭제하고 저장 공간을 초기화합니다.

DROP: 테이블과 관련된 모든 데이터 및 구조를 완전히 삭제하며, 롤백이 불가능합니다.

 

 

무결성의 종류가 무엇이 있나요? 

 

데이터베이스의 무결성은 데이터베이스에 저장된 데이터의 정확성, 일관성 및 신뢰성을 보장하는 규칙과 제약 조건을 의미합니다. 무결성은 데이터베이스 설계 및 관리의 중요한 측면으로, 다양한 종류의 무결성 제약 조건이 있습니다. 주요 무결성 종류는 다음과 같습니다.

 

  1. 개체 무결성 (Entity Integrity): 개체 무결성은 테이블의 기본 키(primary key)에 관한 제약 조건입니다. 기본 키는 각 행을 고유하게 식별할 수 있어야 하며, NULL 값을 가질 수 없습니다.
  2. 참조 무결성 (Referential Integrity): 참조 무결성은 외래 키(foreign key)와 관련된 제약 조건입니다. 외래 키는 다른 테이블의 기본 키를 참조하며, 참조하는 테이블의 값이 존재하는지 확인합니다. 참조 무결성은 부모 테이블과 자식 테이블 간의 관계를 유지하고, 연관된 데이터의 일관성을 보장합니다.
  3. 도메인 무결성 (Domain Integrity): 도메인 무결성은 테이블의 각 열(column)에 저장된 데이터의 유효성과 타입을 확인하는 제약 조건입니다. 이는 데이터의 형식, 범위, 길이, 값 등을 검사하여 데이터의 정확성을 보장합니다.
  4. 사용자 정의 무결성 (User-Defined Integrity): 사용자 정의 무결성은 특정 비즈니스 규칙이나 애플리케이션 요구 사항에 따라 생성된 제약 조건입니다. 사용자 정의 무결성 규칙은 데이터베이스 관리자(DBA)나 개발자가 데이터베이스에 적용할 수 있는 추가적인 규칙입니다.

 

무결성 제약 조건은 데이터베이스의 신뢰성을 높이고, 오류를 줄이며, 데이터 일관성을 유지하는 데 도움이 됩니다. 이러한 제약 조건들은 데이터베이스 설계 및 구현 과정에서 적용되며, 데이터베이스 관리 시스템(DBMS)에서 관리됩니다.

 

반응형

댓글