Q1. SQL이 무엇인가요?
Sql은 RDMBS에서 자료를 처리하기 위해 설계된 언어로 크게 3종류로 나뉩니다
DDL: 데이터 정의 언어로 CREATE,ALTER,DROP문 등이 여기에 해당합니다
DML: 데이터 관리를 위한 언어로 SELECT, INSERT, UPDATE문 등이 여기에 해당합니다
DCL: 사용자 관리 및 사용자 별로 데이터 관리, 접근 권한을 위한 언어로 GRANT, REVOKE문 등이 해당됩니다
Q2. 트랜잭션이 무엇인지 설명해주세요
정의
- 트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
- 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
- 하나의 트랜잭션은 Commit되거나 Rollback된다.
Q2-1. 트랜잭션의 4가지 특성에 대해 알려주세요
트랜잭션의 ACID
Atomicity(원자성)
- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.
Consistency(일관성)
- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
Isolation(독립성)
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
Durablility(영속성)
- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장 나더라도 영구적으로 반영되어야 한다
Q2-2. isolation level에 대해 아는대로 이야기 해주세요
Isolation level은 총 4종류가 있습니다
Read uncommitted: 데이터를 읽어올 때 commit이 되지 않는 데이터를 읽어 올 수 있습니다. 따라서 dirty read가 발생할 수 있습니다. 따라서 rollback될 수 있는 데이터를 읽을 수도 있다는 점을 유의해야합니다
Read committed: commit이 된 데이터만 읽어오는 것을 보장하는 level입니다. 따라서 dirty read가 발생되지 않습니다. 이 level에서의 문제는 하나의 트랜잭션 안에서 여러번 데이터를 읽을때 데이터가 동일하다는 보장을 해주지 않습니다. 대부분의 RDBMS에서의 기본 값입니다.
Repeatable read: 이 level에서는 한 트랜잭션 안에서 여러번 데이터를 읽어도 데이터가 변함이 없음을 보장해줍니다. 이 level에서는 데이터를 읽는 시간을 기록하여 그뒤에 commit한 데이터는 보이지 않게합니다
Serializable: 모든 작업을 각각의 트랜잭션에서 처리하는 level로 가장 높은 고립수준을 제공합니다.
Q3. RDBMS와 NoSQL의 차이점에 대해 알려주세요
-가장 큰 차이는 비관계형 데이터베이스와 관계형 데이터 베이스이다
관계형 데이터베이스
- 관계형 데이터 베이스는 정해진 데이터 스키마에 따라 테이블에 저장된다.
- 그리고 관계를 통해 연결된 여러 개의 테이블에 데이터가 분산되어 저장된다
- 스케일업이 쉽다
비관계형 데이터베이스
- 비관계형 데이터베이스는 스키마와 관계가 없다.
- 스케일 아웃이 쉽다
Q4. 인덱스가 무엇인지 설명해주세요
인덱스는 특정 칼럼값을 가지고 있는 열 혹은 값을 빠르게 찾기 위해서 사용된다
Q4-1. 언제 인덱스를 만들면 좋을까요?/언제 인덱스를 만들면 안될까요?
- 모든 열에 인덱스를 걸게되면 생성속도는 느려진다.
- 인덱스는 모든 열에 거는 게 좋은 게 아니라 조건에 들어가는 부분을 걸면 효과가 좋다
Q5. 정규화에 대해 설명해주세요
정규화는 테이블 간의 중복 데이터를 허용하지 않음으로 무결성을 개선하기 위해 정규화 단계에 따라 데이터베이스를 구조화 하는 프로세스입니다
Q5-1. 정규화의 종류에 대해 아는대로 설명해주세요
제 1정규화: 테이블의 각 컬럼에 하나의 값만 있또록 분해를 합니다. 중복을 허용하지 않습니다
제 2정규화: 제 1정규화를 진행한 테이블에서 완전 함수종속을 만족하도록 테이블을 분해합니다(완전함수종속이란 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우를 뜻합니다)
제 3정규화: 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해합니다(이행적 종속이란 A->B , B->C일 때 A->C가 성립되는 경우를 뜻합니다)
BCNF 정규화: 쉽게 말해 모든 결정자가 KEY인 경우 BCNF이다
Q6. 반정규화에 대해 설명해주세요
반정규화는 성능을 항상시키기 위하여 정규화된 데이터 모델에서 중복, 통합, 분리등을 적용하는 프로세스입니다. 데이터 무결성이 깨질 위험을 가지고도 데이터를 중복하여 반정규화를 하는 이유는 보통 데이터를 조회할 때 조인으로 인한 성능저하가 예상 될 때 반정규화 프로세스를 진행합니다
Q9. 이상 현상의 종류에 대해 설명해주세요
정규화 되지않는 상태에서 관계를 수정 하려고 하면 이상현상이 발생합니다
갱신 이상: 어떤 값을 업데이트 했을 때 기존 속성에 관련된 속성값들과 불일치가 발생하는 경우입니다
삽입 이상: 원하는 테이블에만 삽입을 하고 싶지만 원치 않는 필드의 값도 삽입해야하는 경우입니다
삭제 이상: 원하는 값만 지우고 싶지만 다른 속성값들까지 같이 지워야 하는 경우입니다
Q7. JOIN에 대해 설명해주세요
RDBMS는 데이터 중복을 피하기 위해 테이블을 쪼개 나눠서 저장합니다. 이렇게 분리되어 있는 데이터에서 원하는 결과를 조합해서 가져오기 위해선 테이블을 조합할 필요가 있습니다. 그런 조합을 join 연산자를 통해서 수행할 수 있습니다.
Q8. 샤딩에 대해 설명해주세요
같은 테이블에 있는 데이터들을 다수의 데이터베이스에 분산하여 저장하는 방법을 의미합니다. Shard key를 정의하는 것에 따라 데이터를 효율적으로 분산시키는 것이 결정되고
데이터 재분배와 샤딩 조인, 샤딩 알고리즘 등 신경 써야하는 고려사항이 있습니다.
3단계 요약노트 목적과 활용법은 아래 글을 읽어보시면 좋습니다
도움이 필요하시면 사연을 메일로 보내주세요
jek300300@gmail.com
도움이 되셨다면 공감과 구독 부탁드립니다
읽어주셔서 감사합니다
당신의 취업이 성공할 때까지 같이 하겠습니다! by 취업길잡이 Coy