데이터베이스
관련 질문
- Database와 DBMS의 차이에 대해서 설명해 보세요.
- 데이터베이스는 데이터가 실제 저장되는 저장소와 데이터를 합친 집합체
- 데이터베이스를 효율적으로 관리하기 위한 시스템
- 데이터 독립성에 대해서 설명해 보세요.
- 외부 스키마와 내부 스키마간 서로의 간섭을 최소화 해서 독립적으로 유지시키기 위한 방법
- DML과 DDL에 개념과 예를 들어 설명해 보세요.
- DML(Data Manifulation Language) 우리가 흔히 사용하는 SELECT, UPDATE, DELETE 같은 쿼리
- DDL(Data Definition Language) CREATE Table, DROP Table 이런 것들을 의미한다.
- 트랜잭션의 정의와 ACID에 대해서 설명해 보세요.
- 트랜잭션은 매우 중요한 단어임
- 일련의 데이터베이스의 작업 단위로서 읽기와 쓰기가 하나로 묶이는 작업 단위
- ACID는 트랜잭션의 특징을 설명하는 약자
- Atomicity(원자성), Consistency(일관성), Isolation(격리), Durability(영속성)
- ACID vs BASE의 차이를 비교 설명해 보세요.
- ACID는 RDBMS에서 얘기하는 트랜잭션의 특징을 얘기함
- BASE는 NoSQL에서 말하는 성질
- Basically Available, Soft state, Eventually Consistence의 약자
- DBMS에서 말하는 Join의 개념과 종류에 대해서 설명해 보세요.
- JOIN은 엔터티와 엔터티, 테이블과 테이블을 연결하는 방법
- 떨어져있는, 분리되어 있는 테이블 간의 JOIN을 통해서 데이터를 합칠 수 있는 방법
- 종류로는 nested loop join, hash join, bitmap join, merge join 등이 있음.
- DBMS의 동시성 제어 기법에 대해서 알고 있는 것을 설명해 보세요.
- 동시성 제어 기법이란 여러 트랜젝션이 동시에 접근을 했을 때, 그 트랜잭션을 관리해서 직렬화시키는 방법
- 동시성 제어를 하지 않는 경우는 더티리드, 팬텀리드 같은 현상이 나타날 수 있기 떄문에 동시성 제어를 통해서 그런 문제를 해결하는 것임.
- 데이터 무결성의 개념과 실현하기 위한 기법/방법에 대해서 설명해 보세요.
- 데이터 무결성이란?
- 데이터가 항상 consistency(일관성)을 갖고 정확성을 유지한다는 의미
- 실현하기 위한 방법
- primary key, foreign key, 속성 제약 등을 통해서 실현시킴.
- 정규화(Normalization)란? 무엇일까요? 3차 정규화에 대해서 설명해 보세요.
- 데이터 아노말리 현상을 제거하기 위한 기법으로써 무손실의 엔터티를 계속 분리해 가는 것
- 그럼으로써 데이터의 consistency와 정확성을 유지시켜감.
- 3차 정규화란?
- 이행 함수 종속성을 제거해서 정규화를 실현시키는 방법
- 반정규화는 왜 할까요? 몇 가지 기법에 대해서 설명해 보세요.
- 반정규화는 정규화로 인해서 데이터 정확성은 실현이 되었지만, 속도가 비교적 느려질 수 있기 때문에 다시 역정규화, 반정규화를 적용해서 중복을 허용함으로써 속도 성능향상을 실현시킴
- 대표적인 기법으로는 column 중복, table 분할, table 병합, 관계 중복 등이 있음.
데이터 독립성
- 하위 단계의 데이터의 논리적, 물리적 구조가 변경되어도 상위 단계에 영향을 미치지 않도록 구성하는 데이터베이스 특징
- 개념 스키마와 내부 스키마의 독립성을 유지하는 것을 물리적 데이터 독립성이라고 한다.
- 개념 스키마 하나만 만들어도 특정 시스템이 오라클에서 MySQL 로 변경할때 손쉽게 변경 가능
- 권한별 뷰가 다르게 설정되어 있는 것을 외부 스키마라고 함.
- 개념 스키마가 변경되더라도, 몇가지 특성이 추가 되더라도 외부 스키마를 수정할 필요 없음.
- 내부스키마는 오라클이나 mysql같은것.
- 해당 물리적인 내부 스키마가 변경되더라도, 개념 스키마는 변경할 필요 없이 자동으로 물리적 스키마를 만들어줄 수 있다.
DBMS와 RDBMS의 차이점
DBMS 정의
- 데이터베이스의 예를 들라고 했을 때?
- 오라클, 마리아디비 등등 말하면 잘못된 대답.
- DBMS의 벤더사인 오라클, 마리아디비라고 대답해야함.
- DBMS 벤더들이 주로 제공하고 있는 공통적인 기능이다.
- 일반 사용자들이 터미널을 통해 DBMS에 접속해서 쿼리 입력(질의어 처리기)
- 질의어 처리기를 통해 런타입 DB 처리기까지 이동하게 됨
- 혹은 응용 어플리케이션에서 JDBC 드라이버 등을 통해 xml로 저장된 쿼리들이 실행될 수 있음.
- 컴파일러들을 통해 문법적인 오류가 있는지 체크
- 스키마를 변경하는 DataDefiniteLanguage(DDL) 예를 들면 DROP 같은 명령어가 도착하면 컴파일러를 통해 런타임 DB 하위단으로 이동함.
- DML의 경우는 커밋이나 롤백이 가능함.
- 그래서 문제가 생겼을 때 트랜잭션 관리자를 통해 커밋이나, 롤백을 하는 단계가 있음.
- DDL의 경우는 롤백할 수 있는 방법이 없어서 트랜잭션 관리자가 통제하지 않는다.
DBMS 질의어(쿼리)
- TRUNCATE는 DDL이기 때문에 롤백이나 커밋이 존재하지 않는다.
- DELETE 쿼리를 실행시켜서 데이터를 삭제했을때는 롤백을 통해 모든 데이터를 복구할 수 있지만, TRUNCATE 명령어를 통해 삭제했을 경우는 복구할 방법이 없다!(백업이 없는 경우에)
- TRUNCATE는 속도가 매우 빠름.
- DELETE는 UNDO 영역에 데이터를 적재하면서 하나하나 삭제하기 때문에 시간이 매우 오래 걸리는데 비해, TRUNCATE는 롤백이 존재하지 않게 데이터를 영구히 삭제하기 때문에 0.5초 만에 데이터를 모두 삭제함.
트랜잭션 개념
동시성 제어
- 동시성 제어를 엄격히 할 수록 성능이 안좋아진다.
- 팬텀 리드를 막고 싶다면 아이솔레이션 레벨을 3으로 설정해서 셀렉트 쿼리에 테이블에 전체 락을 걸어야 함.
- 성능은 느림.
NoSQL
RDBMS와 NoSQL의 장단점