[면접질문] 데이터베이스 면접 질문 (면접 예상 질문 및 답변)
예상 질문과 답안은 책에서 직접 찾은 내용과 실무, 그리고 타사이트의 중복 질문에서 약간 참조하여 작성하였습니다.
보통 질문은 '~는 무엇이냐'로 할 것이고, 답안은 설명을 숙지하여 답변하면 됩니다.
설명은 면접질문에 대해 답변할 수 있을 정도의 깊이로만 추려서 만들었습니다.
1. 트리거
- 생성 후 자동으로 실행
- 트리거 내부에 commit, rollback 불가능
- 작업대상 : 테이블, 뷰, 데이터베이스 작업
- 트리거란 방아쇠로써, 방아쇠를 당기면 총알이 나가는 것과 같은 의미
- 테이블에 트리거를 생성하여 어떠한 이벤트가 발생할 시 그에 대한 작업을 실행
- 작업테이블에 트리거를 생성하여 이벤트 발생시 이력테이블 혹은 통계테이블에 데이터가 저장 및 수정, 삭제가 되도록 만들어 관리할 수 있다.
- 이력테이블, 합계 잔액 등 통계테이블, 동기화 및 테이블 복제 가능
2. 프로시저
- execute 명령어로 실행
- 프로시저 내부에 commit, rollback 가능
- 비절차적 언어인 SQL을 보완하기 위해 제공하는 절차적 언어
- 연속적인 실행 혹은 조건에 따른 분기처리를 통해 특정 기능을 수행할 수 있도록 작성 가능
- 변수 및 상수 선언 가능, IF문 및 LOOP문 등 사용 가능
- 보안(데이터 엑세스에 대해 제한), 생산성 향상, 무결성 일관성 향상
3. 트리거 vs 프로시저
- 프로시저는 사용자, 애플리케이션, 트리거 등에 의해 명시적으로 실행
- 트리거는 이벤트 발생(DML문 수행)시 DBMS에 의해 암시적으로 실행
4. 크론탭
- cron table을 줄인 용어로, 특정 작업을 특정 시간에 실행시키기 위해 크론에 설정해놓은 리스트파일
- 크론탭에 설정해놓은 잡들이 설정해놓은 시간에 실행됨
- 분 시 일 월 요일 명령실행될파일 ( 0 18 25 * 1 /home/test.sh : 매주 월요일과 매월 25일 18시에 tesh.sh을 실행하라)
- 명령어
/e : 크론탭 신규 파일 생성 및 파일 수정
/l : 크론탭에 작성된 작업 리스트 확인
/r : 크론탭 삭제
5. 2>&1
- 표준에러를 출력하라(저장해라)
- 0 : 표준입력, 1 : 표준출력, 2:표준에러
6. chmod
- chmod ug=rwx file1, chmod o+x file1, chmod 755
- rwx : read, write, execute
- u : 파일소유자, g : 속한 그룹, o : 제3자 권한(모든유저), a : all
- drwxr-wr-w => 첫글자 d:디렉토리, c:입출력장치, b:저장장치, l:링크파일
7. 트랜잭션
- 데이터베이스의 논리적인 작업단위. 전부 적용하거나 전부 취소. All or Nothing
- 특성(ACID) : 원자성(atomicity), 일관성(consistency), 고립성(isolation), 지속성(durability)
- TCL : 트랜잭션 제어어(COMMIT, ROLLBACK, SAVEPOINT)
- 명시적 트랜잭션 가능 : begin tran, commit or rollback
- 데이터무결성 보장, 그룹핑하여 작업가능, 작업전 변경사항 확인가능
- DDL문 실행시 전 후 시점에 자동으로 COMMIT됨
- 데이터베이스 정상 종료시 자동 COMMIT / 이상 종료시 자동 ROLLBACK
8. 옵티마이저
- 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할 수행자
- RBO 규칙 우선순위 => 1:단일행 rowid, 4:단일행 PK,Unique , 8:복합인덱스, 15:full table scan
9. explan plan
- 쿼리를 실행할 때 옵티마이저가 실행할 연산의 계획을 보여주는 명령어
- 조인순서, 조인기법, 액세스기법, 최적화정보 등을 보여준다.
- 생성 : 실행하려는 쿼리 앞에 ‘explain plan for’를 붙여서 실행계획을 생성
- 실행 : select * from table(dbms_xplan.display)를 사용해서 실행계획을 나타냄
- 옵티마이저가 찾은 실행계획보다 최적화하기 위하여 실행계획을 수정하기도 함
- 힌트, 조인기법의 변경 등을 통해 실행계획을 최적화함
10. 조인수행시 조인기법
- NL Join : 중첩된 반복문, 랜덤 엑세스
- Hash Join : 해쉬값 비교, 인덱스 미존재 사용가능, 동등조인만 가능
- Sort Merge Join : 인덱스 미존재 사용가능, 동등조인 비동등조인 가능
11. 인덱스
- 논리모델에는 반영되어 있지 않으나, 데이터의 접근 속도를 높이기 위해 생성하는 데이터 저장소의 하나
- 인덱스를 저장하는 데 필요한 공간은 테이블을 저장하는 데 필요한 공간보다 작다.
12. delete, truncate, drop 비교
- delete : 데이터 삭제, commit 수행하지 않음
- truncate : 데이터 삭제, 자동 commit 수행, delete보다 빠름, DDL문, 정상적인 복구 불가능
- drop : 테이블 및 데이터 삭제
13. DB정규화
- 정규화 : 일관성을 유지하고 중복을 제거하기 위한 모델을 구축하는 방법
- 삽입이상, 수정이상, 삭제이상의 방지를 위함
- 1차 : 모든 속성은 1개의 값을 갖도록 변형(중복 제거)
- 2차 : 기본키가 아닌 컬럼이 기본키에 종속되도록 변형(종속되어야함)
- 3차 : 2차정규화 후 식별자를 제외한 나머지 속성들 간의 종속이 없도록 변형
14. 테이블 복사
- CTAS : 테이블 복사. NOT NULL만 복사, 나머지 제약조건은 없어짐
15. where 절과 having 절의 차이점
- 공통점 : 같은 실행 결과를 얻을 수 있음
- where : from절에 대한 조건. 대상 데이터의 개수가 변경되어 결과 값이 변경될 수 있음
- having : where절의 수행결과의 그룹집합에 대한 조건. 결과값 변경은 없고 출력되는 레코드의 개수만 변경
16. Join
- 원하는 결과를 얻기 위해, 테이블을 연결하는 작업
17. union과 union all
- 공통제약조건 : select절의 칼럼 수와 데이터타입이 호환 가능해야함
- union : 여러 SQL문의 합집합. 중복된 행은 제거하여 하나의 행만 표시된다.
- union all : 여러 SQL문의 합집합. 단순히 합쳤기에 중복된 행도 모두 표시된다.
18. 서브쿼리
- 서브쿼리 : SQL문 안에 포함되어 있는 또 다른 SQL문. 서브쿼리는 메인쿼리의 컬럼 사용 가능
- 스칼라 : select절의 서브쿼리
- 인라인뷰 : from절의 서브쿼리
19. 파일시스템
- 파일시스템 : DB에 비해 처리속도 빠름. 구현 간편. 비용 저렴 / 자료중복, 데이터 무결성 등이 보장되지 않음
20. 데이터베이스의 종류
- ACCESS : 개인용 소규모 관계형 DB 응용프로그램. 50Mb 이하 데이터관리에 적합. 복구, 백업, 접근제어, 권한부여 기능없음.
- ORACLE : 대용량 객체관계형 데이터베이스.
- MS-SQL : MS제품들과 호환성이 높다.
- MySQL : 무료, 심플, 가벼운 데이터베이스.
21. DB링크
- 원격지에 있는 데이터베이스를 연결하여 한 곳의 서버에서 다른서버에 있는 데이터를 하나의 SQL문에서 다룰 수 있게해줌. 다른 서버 및 다른 DB인스턴스에 존재하는 데이터를 손쉽게 호출하고할 때 사용.
22. 뷰
- 사용자 관점의 데이터를 보기 위해 생성한 객체. 실제 물리적인 저장 공간을 필요로 하지 않음
- 보안성, 편리성, 독립성
23. Synonym (동의어)
- 테이블에 대한 일종의 별명. Alias와 기능이 비슷함
- 다른 스키마에 있어 접근이 번거로울 때(DB인스턴스명을 테이블명에 붙여야한다던가 등) 사용하여 간편화함
24. 롤(Role)
- 객체에 대해 권한을 생성
- 그룹 및 사용자에 대해 권한을 생성하여 보안과 관리에 용이하게 함
- 롤 관리자는 DBA이다.
25. LOB (Large OBject type)
- BLOB : Binary. 이진대형객체. 이미지, 동영상 등
- CLOB : Character. 문자 대형 객체.
- 텍스트, 그래픽, 이미지, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용
- 테이블에 LOB형식의 컬럼을 생성하고 이곳에 데이터의 실제위치를 가리키는 Locator(위치자) 저장
- 하나의 테이블에 여러 개의 LOB 컬럼 가능
- 최고 4GB까지 저장 가능
- select으로 위치자 반환
- 오브젝트 유형 지원
- LOB 값 : 저장될 실제 데이터
- LOB 위치자 : 데이터베이스에 저장된 LOB값의 위치에 대한 포인터
26. LONG, LONG RAW
- LONG RAW : BLOB과 유사
- LONG : CLOB과 유사
- 하나의 테이블에 하나의 컬럼만 생성가능
- 최고 2GB까지 저장 가능
- select으로 데이터를 반환
- 오브젝트 유형 지원X
- 오라클에서는 LONG타입은 하위버전에서 지원하기 때문에 LOB타입을 권장함
혹시 이해가 잘 안가는 부분이 있으면, 댓글에 남겨주세요.
최대한 자세히 설명드리겠습니다.