Q # 1) DBMS를 정의하십시오.
답변 : DBMS는 데이터베이스 관리 시스템을 나타냅니다. 사용자가 데이터에 관한 정보를 가능한 한 효율적이고 효과적으로 구성, 복원 및 검색 할 수 있도록하는 응용 프로그램 모음입니다.
널리 사용되는 DBMS 중 일부는 MySql, Oracle 등입니다.
Q # 1-1) RDBMS를 정의하십시오.
답변 : 관계형 데이터베이스 관리 시스템 (RDBMS)은 데이터베이스에 별도의 테이블에 저장된 관계형 데이터 모델을 기반으로하며 공통 열의 사용과 관련이 있습니다. SQL (Structured Query Language)을 사용하여 관계형 데이터베이스에서 데이터에 쉽게 액세스 할 수 있습니다.
Q # 1-2) DBMS의 장점에 대해 설명하세요.
답변 : DBMS의 장점은 다음과 같습니다.
- 데이터는 구조적으로 저장되므로 중복성이 제어됩니다.
- 입력 한 데이터의 유효성을 검사하고 데이터베이스에 대한 무단 액세스에 대한 제한을 제공합니다.
- 필요한 경우 데이터 백업 및 복구를 제공합니다.
- 여러 사용자 인터페이스를 제공합니다.
Q # 2) 데이터베이스에서 다양한 유형의 관계는 무엇입니까?
답변 : 데이터베이스에는 3 가지 유형의 관계가 있습니다.
- 일대일 : 한 테이블은 비슷한 종류의 열을 가진 다른 테이블과 관계가 있습니다. 각 기본 키는 관련 테이블에서 하나의 레코드 또는 하나의 레코드와 관련이 없습니다.
- 일대다 : 한 테이블은 기본 및 외래 키 관계가있는 다른 테이블과 관계가 있습니다. 기본 키 테이블에는 관련 테이블에없는 하나 또는 여러개의 레코드와 관련된 하나의 레코드 만 포함됩니다.
- 다대다 : 두 테이블의 각 레코드는 다른 테이블의 여러 레코드와 관련 될 수 있습니다.
Q # 3) SQL 을 설명하세요.
답변 : SQL 문은 기본적으로 DDL, DML 및 DCL의 세 가지 범주로 나뉩니다.
다음과 같이 정의 할 수 있습니다.
DDL (데이터 정의 언어) 명령은 데이터를 보유하는 구조를 정의하는 데 사용됩니다. 이 명령은 자동 커밋됩니다. 즉, 데이터베이스의 DDL 명령에 의해 수행 된 변경 사항이 영구적으로 저장됩니다.
DML (데이터 조작 언어) 명령은 데이터베이스의 데이터를 조작하는 데 사용됩니다. 이 명령은 자동 커밋되지 않으며 롤백 할 수 있습니다.
DCL (데이터 제어 언어) 명령은 데이터베이스에서 데이터를 사용하기위한 액세스 권한 취소와 같이 데이터베이스에서 데이터의 가시성을 제어하는 데 사용됩니다.
Q # 4) 정규화와 비정규화를 설명하십시오.
답변 :
정규화 는 데이터 무결성을 유지하기 위해 잘 정의 된 방식으로 테이블을 분할하여 데이터베이스에서 중복 데이터를 제거하는 프로세스입니다. 즉, 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업입니다. 이 프로세스는 많은 저장 공간을 절약합니다.
비정규화 는 복잡한 쿼리 속도를 높이고 성능을 향상시키기 위해 테이블에 중복 데이터를 추가하는 프로세스입니다.
Q # 4-1) 정규화의 장점은?
답변: 데이터베이스 변경 시 이상 현상을 제거하고, 데이터베이스 구조 확장 시 재디자인을 최소화합니다.
Q # 4-2) 정규화의 단점은?
답변: 릴레이션 분해로 인해 릴레이션 간의 연산(join)이 많아집니다. 이로 인해 응답 시간이 느려질 수 있습니다.
Q # 5) 데이터베이스 뷰란?
답변 : 허용된 데이터를 제한적으로 보여주기 위해 하나 이상의 테이블에서 유도된 가상 테이블입니다.
Q # 5-1) 데이터베이스 뷰의 장점과 단점은 무엇입니까?
답변 :
뷰의 장점 )
- 뷰의 데이터가 저장되는 물리적 위치가 없으므로 리소스를 낭비하지 않고 출력을 생성합니다.
- 삽입, 업데이트 및 삭제와 같은 명령을 허용하지 않으므로 데이터 액세스가 제한됩니다.
뷰의 단점 )
- 해당 뷰와 관련된 테이블을 삭제하면 뷰가 관련이 없습니다.
- 큰 테이블에 대해 뷰를 만들 때 더 많은 메모리가 사용됩니다.
Q # 6) ER 모델은 무엇입니까?
답변 : ER 모델은 데이터베이스의 개념적 뷰를 정의하는 엔터티-관계 모델입니다.
ER 모델은 기본적으로 실제 실체와 그 연관 / 관계를 보여줍니다. 여기서 엔티티는 데이터베이스의 속성 세트를 나타냅니다.
Q # 6-1) 엔터티(Entity), 엔터티 타입(Entitiy type) 및 엔터티 집합(Entitiy set)을 정의하십시오.
답변 : 엔터티는 실세계에서 독립적으로 존재하는 장소, 클래스 또는 객체 일 수 있습니다.
엔터티 타입은 유사한 특성을 가진 엔터티 집합을 나타냅니다.
데이터베이스에 설정된 엔티티는 특정 엔티티 유형을 갖는 엔티티의 집합을 나타냅니다.
Q # 7) 데이터베이스 트랜잭션이란 무엇입니까?
답변 : 데이터베이스의 일관성있는 상태를 다른 것으로 변경하는 작업 순서를 데이터베이스 트랜잭션이라고합니다. 트랜잭션 완료 후 성공적인 완료가 시스템에 반영되거나 트랜잭션이 실패하고 변경 사항이 반영되지 않습니다.
Q # 7-1) 트랜잭션의 4가지 성질에 대해 설명해보세요.
답변 : 총 네가지 성질을 가지고있습니다.
Atomicity(원자성) 는 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이되지 않던지 둘중에 하나만 수행해야한다.
Consistency(일관성) 는 트랜잭션이 성공적으로 완료된 후에는 언제나 일관성 있는 DB상태로 변환되어야한다.
Isolation(독립성) 은 수행중인 트랜잭션이 완전히 완료되기 전에는 다른 트랙잭션에서 수행 결과를 참조할 수 없다.
Durablility(지속성) 는 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
Q # 8) 인덱스 란?
답변 : 인덱스는 데이터분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 말합니다. 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있습니다. 고속의 검색 동작 뿐만 아니라 레코드 접근과 관련하여 효율적인 순서 매김 동작에 대한 기초를 제공합니다.
인덱스를 사용해야 하는 경우
- 데이터의 양이 많고 검색이 변경보다 빈번한 경우
- 인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우
인덱스를 사용할 시 단점
- DB의 10%정도 공간이 요구됩니다.
- 인덱스를 생성하는 시간이 크게 요구됩니다.
- INSERT, DELETE, UPDATE 쿼리문을 실행할 때 별도의 과정이 추가적으로 발생하기 때문에 DB의 변경작업이 잦으면 성능이 저하됩니다.
인덱스 헌팅은 인덱스 수집을 향상시켜 데이터베이스 성능뿐만 아니라 쿼리 성능을 향상시키는 프로세스입니다.
Q # 8-1) 인덱스 헌팅을 사용하여 쿼리 성능을 향상시키는 방법은 무엇입니까?
답변 : 인덱스 헌팅은 다음을 통해 쿼리 성능을 향상시킵니다.
- 쿼리 최적화 프로그램을 사용하여 워크로드와 쿼리를 조정합니다.
- 인덱스 및 쿼리 배포의 성능 및 효과 관찰
Q # 9) 검사점(Checkpoint)를 정의하십시오.
답변 : Checkpoint는 모든 로그가 저장 디스크에 영구적으로 저장되고 일관성이없는 지점을 선언합니다. 충돌이 발생하면 시스템이 검사 점에서 다시 시작할 수 있으므로 작업량과 시간이 절약됩니다.
Q # 10) 데이터 사전(Data dictionary)을 설명하십시오.
답변 : 데이터 사전은 테이블과 데이터베이스 개체의 내용과 구조를 설명하는 정보 집합입니다. 데이터 딕셔너리에 저장된 정보의 작업은 데이터베이스 요소 간의 관계를 제어, 조작 및 액세스하는 것입니다.
Q # 11) 기본 키(Primary key)와 복합 키(Compound key)를 설명하십시오.
답변 : 기본 키 는 모든 행 데이터가 고유하게 식별되는 테이블의 해당 열입니다. 테이블의 모든 행에는 기본 키가 있어야하며 두 행은 동일한 기본 키를 가질 수 없습니다. 기본 키 값은 절대로 null이거나 수정하거나 업데이트 할 수 없습니다. 복합 키 는 열 세트가 테이블의 모든 행을 고유하게 식별하는 후보 키의 양식입니다.
Q # 12) Unique 키로 무엇을 이해하십니까?
답변 : Unique 키는 유일성을 가지기 위해 설정해 놓은 키로 중복이 되는 것을 방지합니다. Primary 키는 오직 하나만 생성할 수 있지만, Unique키는 여러개 생성이 가능합니다. Primary키의 경우 NULL 값을 허용하지 않지만, Unique 키는 NULL 값을 허용합니다.
Q # 13) 데이터베이스 트리거로 무엇을 이해하십니까?
답변 : 테이블에서 삽입 전, 삽입 후, 업데이트시, 행 삭제시와 같은 이벤트가 발생할 때 자동으로 실행되는 명령 세트를 데이터베이스 트리거라고합니다.
Q # 14) 저장 프로 시저를 정의하십시오.
답변 : 저장 프로시저는 사전 컴파일 된 SQL 쿼리의 모음으로, 사전에 준비해 둔 많은 명령을 자동으로 실행할 수 있기 때문에 작업의 효율성도 높일 수 있습니다.
Q # 15) 'DELETE', 'TRUNCATE'및 'DROP'명령을 구분하십시오.
답변 : 'DELETE' 연산을 실행 한 후 손실 된 데이터를 검색하기 위해 COMMIT 및 ROLLBACK 문을 수행 할 수 있습니다.
'TRUNCATE' 조작을 실행 한 후 손실 된 데이터를 검색하기 위해 COMMIT 및 ROLLBACK 문을 수행 할 수 없습니다.
'DROP' 명령은 기본 키 / 외래 키와 같은 테이블 또는 키를 삭제하는 데 사용됩니다.
Q # 16) 이상현상이란?
답변 : 릴레이션에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하는 것을 말합니다.
Q # 16-1) 이상의 종류에 대해 말하세요.
답변 :
삽입 이상 은 원하지 않는 자료가 삽입된다든지, 삽입하는데 자료가 부족해 삽입이 되지 않아 발생하는 문제점을 말한다.
삭제 이상 은 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점을 말한다.
갱신 이상 은 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점을 말한다.
Q # 17) 트리거에 대해 설명하고, 트리거를 쓰는 이유에 대해 말하세요.
답변 : 자동으로 실행되도록 정의된 저장 프로시저입니다. INSERT/UPDATE/DELETE문에 대한 응답으로 자동 호출합니다.
트리거를 사용하는 이유
- 업무 규칙을 보장
- 업무 처리 자동화
- 데이터 무결성 강화(변경, 생성, 제거, 복구 시)
Q # 18) 데이터베이스 무결성이란?
답변 : 데이터 베이스에 저장된 데이터 값과 그것이 표현하는 현실 세계의 실제값이 일치하는 정확성을 말합니다.
개체 무결성 은 릴레이션에서 기본키를 구성하는 속성은 NULL값이나 중복값을 가질 수 없다.
참조 무결성 은 외래키 값은 NULL이거나 참조 테이블의 기본키 값이어야함
Q # 19) 조인에 대해 설명하고 조인의 종류에 대해 말하세요.
답변 : 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입니다.
Inner Join 은 2개 이상의 테이블에서 교집합만을 추출
Left Join 은 2개 이상의 테이블에서 from에 해당하는 부분을 추출
Right Join 은 2개 이상의 테이블에서 from과 join하는 테이블에 해당하는 부분을 추출
Outer Join 은 아웃터 조인 또는 풀 조인이라고 말함, 2개 이상의 테이블에서 모든 테이블에 해당하는 부분을 추출
Q # 20) 교착상태란?
답변 : 2개 이상의 트랜잭션이 특정 자원(테이블 또는 행)의 잠금(Lock)을 획득한 채 다른 트랜잭션이 소유하고 있는 잠금을 요구하면 아무리 기다려도 상황이 바뀌지 않는 상태가 되는데 이를 교착상태 라고 합니다.
Q # 20-1) 교착상태를 방지하기 위한 방법에 대해 설명하세요.
답변 :
- 트랜잭션을 자주 커밋한다.
- 정해진 순서로 테이블에 접근한다.
- SELECT ~ FOR UPDATE 의 사용을 피한다.
Q # 21) NoSQL이 기존 RDBMS와 다른 점은?
답변 : NoSQL 은 스키마가 없습니다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없습니다.
관계 정의가 없으니 Join이 불가능하고 (하지만 reference와 같은 기능으로 비슷하게 구현은 가능) 트랜잭션을 지원하지 않습니다.
분산처리(수평적 확장)의 기능을 쉽게 제공한다는 장점이 있습니다.
대부분의 NoSQL DB는 분산처리기능을 목적으로 나왔기 때문에 분산처리 기능을 자체 프레임워크에 포함하고 있다.
Q # 21-1) 어떤상황에서 NoSQL을 쓰는 것이 더 적합한가?
답변 : 비정형 데이터를 저장해야할 때 가장 적합합니다.
Q # 22) 테이블을 드롭(DROP)하는 것과 자르는 것(Truncate), 그리고 테이블 내 모든 레코드를 삭제(Delete)하는 것의 차이점은 무엇입니까?
답변 : DELETE TABLE은 로그되는 작업이기 때문에 삭제되는 각 행은 트랜잭션 로그에 기록되고 이것은 작업을 느리게 합니다. TRUCATE TABLE 역시 테이블 내 행들을 삭제하지만 삭제되는 각 행을 기록하지 않고 대신 테이블의 데이터베이스 할당 해제를 기록하여 작업이 빠릅니다. TRUNCATE TABLE는 롤백할 수 없습니다.
DELETE 명령어는 데이터는 지워지지만 테이블 용량은 줄어들지 않는다. 원하는 데이터만 지울 수 있다. 삭제 후 RollBack 가능하다.
TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제된다. 테이블은 삭제하지는 않고 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.
DROP 명령어는 테이블 전체를 삭제,공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.
'TIL > 개발상식' 카테고리의 다른 글
[자바(JAVA)] 면접 예상 질문과 답변 (0) | 2022.04.04 |
---|---|
Agile이 뭔데! (0) | 2022.04.04 |