1. 키의 종류 5가지와 각각 특징을 설명하세요.
우선, 데이터베이스에서 키란 조건에 맞는 튜플을 찾거나, 순서대로 정렬할 때 다른 튜플과 구별할 수 있는 기준입니다.
또한 키의 특징에 들어가기 전 유일성과 최소성 개념에 대해 알아봅시다.
유일성 : 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질
최소성 : 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
슈퍼키 : 유일성 O, 최소성 X. 키 값이 같은 튜플에 존재할 수 없음, 나이+이름이면 성립X
후보키: 유일성 O, 최소성 O. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불린다. 예를 들면, 주민등록번호, 학번 등
기본키: 후보 키에서 선택된 키. NULL값이 들어갈 수 없으며, 기본키로 선택된 속성(Attribute)은 동일한 값이 들어갈 수가 없다.
대체키: 후보 키 중에 기본 키로 선택되지 않은 키.
외래키: 어떤 테이블(Relation) 간의 기본 키(Primary key)를 참조하는 속성이다. 테이블(Relation)들 간의 관계를 나타내기 위해서 사용된다.
2. 트랜잭션의 특징 4가지를 설명하세요.
우선, 트랙잭션이란 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 논리적 단위입니다.
특징은 ACID
원자성 : 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장합니다. -> DB에 모두 반영 or 모두 반영 X / save point
일관성 : 트랜잭션 수행 전과 후에 데이터 모델의 모든 제약 조건을 만족해야 합니다. / 트리거
격리성, 고립성 : 트랜잭션 수행 시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장해야 합니다. / Lock&UnLock
지속성, 영속성 : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 합니다.
3. 반정규화에 대해 설명하세요.
반정규화 : 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
단! 반정규화를 하게되면 조회 속도를 향상시키지만, 데이터 모델의 유연성은 낮아지고, 데이터 무결성을 깨뜨릴 수 도 있습니다.
데이터 모델 유연성 : 새로운 모델 생성, 기존 모델 변경 등의 변화를 최소화하면서 변경된 업무 요건이나 신규 업무를 빠르고 정확하게 반영할 수 있는 성질
데이터 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것
반정규화를 수행하는 경우
- 다량의 범위를 자주 처리해야하는 경우(데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되는 경우)
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
- 경로가 너무 멀어 조인으로 인한 성능저하가 예상되는 경우
- 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우
4. Join과 Union의 차이에 대해 설명해주세요.
데이터가 결합되는 방식이 다릅니다.
Join : 새로운 열로 결합(수평 결합)
[A 1] Join [A 가]
=> [A 1 가]
Join 특징
Join을 하기위해선 적어도 하나의 컬럼을 공유해야 함
기본형은 Inner Join
Union : 새로운 행으로 결합(수직 결합)
[A 1] Union [A 가]
=> [A 1]
[A 가]
Union 특징
중복되는 행은 하나만 표시(DISTINCT 안써도)
5. 커밋되지 않은 읽기(read uncommitted)와 커밋된 읽기(read committed)에서 발생할 수 있는 문제점에 대해 설명해주세요.
트랜잭션의 격리 수준 : 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것
커밋되지 않은 읽기(read uncommitted)는 커밋하지 않은 데이터 접근 가능(다른 트랜잭션의 작업이 커밋 또는 롤백되지 않아도 조회 가능)
그렇기 때문에 어떤 트랜잭션의 작업이 완료되지 않았는데도, 다른 트랜잭션에서 볼 수 있는 부정합 문제(Dirty Read(오손 읽기)) 발생
커밋된 읽기(read committed)는 커밋된 데이터만 조회 가능
그렇기 때문에 커밋이 되지않은 상태 확인이 불가능 => 데이터 부정합 문제(Non-Repeatable Read(반복 읽기 불가능)) 발생
6. 데이터베이스 샤딩에 대해 설명해주세요. -> 블록체인 회사면 물어볼 수 도 있을 듯
샤딩 : 일괄적 관리가 힘든 거대 데이터베이스나 네트워크를 작게 나눠서 분산 저장하는 데이터 처리 기법
효과(장점)
데이터를 분산 저장하면 노드의 무게를 줄여 데이터 처리 속도가 향상됨
노드가 많아지며 여러 저장소에 데이터가 나눠 저장되므로(탈중앙화) 해킹 취약점을 낮춤
단점
데이터가 분산되어 있어 다시 조합하는 데 복잡함
샤드(분산 데이터의 저장 공간) 간의 커뮤니케이션이 많으면 오히려 데이터 처리가 지연될 수 있음
7. 인덱스가 뭔가요? 사용해 본 적 있나요?
인덱스 : 테이블의 검색 속도를 향상시키기 위한 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장하는 자료구조
장점 : 빠른 데이터 조회 가능(규모가 크면 유리)
조회보다는 생성, 수정하는 서비스를 개발하여 직접 사용해본 적은 없습니다.
8. RDBMS vs NoSQL에 대해서 설명해 주세요.
RDBMS는 정해진 스키마가 존재하고, NoSQL는 정해진 스키마가 없다는 것이 가장 큰 차이입니다.
NoSQL은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하다는 장점이 있지만, 데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸린다는 단점이 있습니다.
RDBMS(DataBase Management System)
장점 : ACID를 지키며 테이블간의 관계가 맺어져있다.
단점 : 유연한 확장성 부족: 새로운 컬럼을 추가한다면 스키마 변경을 해야됨(데이터가 대량이라면 부담)
join을 많이 하면 cpu사용도 많이 하고 응답 시간이 길어짐, scale-out에 유연한 db는 아님
NoSQL(Not Only SQL)
flexible schema → application레벨에서 스키마 관리 필요
mongo db → json형식으로 데이터를 넣어줌
중복 허용(join 회피)
scale-out 최적화 → 서버 여러 대로 하나의 클러스터를 구성
ACID 일부 포기, high-throughput & low-latency 추구
NoSQL 등장 요인
인터넷 보급이 잘되면서 sns 활성화
high-throughput & low-latency 요구, 비정형 데이터의 증가
9. 정규화에 대해 아시는 만큼 설명해 주세요. (개념과 장단점 정도)
정규화 : 테이블에 저장되는 정보의 중복을 막는 기법
제1정규화 : 한 컬럼에 하나 이상의 정보가 들어가지않게 함
제2정규화 : 복합키 중 PK에 의해 결정되는 정보가 아니라 다른 키에 의해 결정되는 정보가 DB에 있지않게함
제3정규화 : 정보 중 PK에 의해 결정되는 정보가 아니라 다른 컬럼에 의해 결정되는 정보가 DB에 있지 않게함
장점 : 데이터 중복을 막아, 데이터 무결성을 유지가능하며 DB 저장 용량을 줄일 수 있음
10. 데이터 무결성에 대해 설명해주세요.
데이터 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것
무결성 제약조건
개체 무결성 : 기본키는 Null값을 가질 수 없다. 기본키는 테이블 내에 오직 하나다.
참조 무결성 : 외래키의 값은 Null이거나 참조 릴레이션(테이블)의 기본키와 동일해야 함. -> 대응이 안되는 외래키를 가질 수 없다.
도메인 무결성 : 필드의 타입, Null 값 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는 지 확인
11. SQL 인젝션에 대한 설명 또는 대응했던 경험을 말해주세요.
SQL 인젝션(SQL 주입 공격) : 공격자가 악성 코드를 입력하여 다른 방법으로는 제한되었을 수 있는 데이터베이스의 데이터에 액세스하는 사이버 공격에 사용되는 기술, 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위
SQL 인젝션을 경험해본적은 없지만 대응방안에는 입력 값에 대한 검증, 웹 방화벽 사용 등이 있습니다.
12. 데이터베이스 뷰에 대해 설명해주세요.
뷰 : 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된, 이름을 가지는 가상 테이블
그렇기에 물리적으로 존재하지 않음
특징
논리적 데이터 독립성을 제공
독립적인 인덱스를 가질 수 없음
뷰로 구성된 내용에 대한 삽입, 삭제, 갱신, 연산에 제약이 있음
ALTER문을 사용하여 변경할 수 없어, 필요한 경우는 삭제한 후 재생성해야 함
13. DDL, DML, DCL에 대해 설명해주세요.
DDL : 데이터베이스 구조 정의, 테이블이나 컬럼 등을 생성, 수정, 삭제
CREATE, ALTER(기존 테이블 구조 변경), DROP, TRUNCATE(테이블 초기화)
DML : 테이블의 데이터를 조회, 수정, 삭제, 실제 저장된 데이터들을 다룸
SELECT, INSERT, UPDATE(데이터 수정), DELETE
DCL : 데이터베이스 접근 권한 수정
GRANT(권한 부여), REVOKE(권한 회수)
TCL : 트랜잭션 제어어
COMMIT(데이터를 데이터베이스에 영구적으로 반영), ROLLBACK, SAVEPOINT
14. 지연로딩(Lazy)과 즉시로딩(Eager)에 대해 설명해주세요.
JPA에서 테이블 간 연관 관계를 객체의 참조로 사용합니다.
지연로딩은 관계에 상관없이 하나의 객체만을 불러옴
즉시로딩은 참조 객체들의 데이터를(연관 관계가 있는 것) 한번에 불러옴 -> 불필요한 쿼리 발생
MantToOne, OneToOne은 기본형이 Eager입니다.
15. 데이터베이스 클러스터링에 대해 설명해주세요.
하나의 데이터베이스를 여러 대의 서버가 관리하도록 하는 프로세스
만약 DB서버가 다운되었을 때, 해당 DB와 연결된 서비스 자체가 제역할을 할 수 없게 되는 사태에 대한 대비책으로 사용
하나의 서버에 몰리는 부하를 분산시킬 수 있음(로드밸런싱)
Active-Active -> 모든 서버 활성화된 상태, 병목 현상 발생 가능
Active-StandBy -> StandBy에서 Active로 전환되는 동안 서비스 사용 X
클러스터링과 같이 리플리케이션 방식이 있음
복제본 데이터베이스 운영 -> Master와 Slave 데이터베이스의 동기화 문제(일관성 안맞음) 발생 가능
3, 9, 10, 15
# Reference
1.
2.
5.
7.
11.
'CS' 카테고리의 다른 글
[CS] Spring에서 Bean 등록하는 방법 (0) | 2024.04.29 |
---|---|
[CS 스터디] Spring (0) | 2024.04.29 |
[CS 스터디] Java(자바) (0) | 2024.04.17 |
[CS 스터디] 알고리즘(Algorithm) (0) | 2024.04.08 |
[CS 스터디] 자료구조(Data Struture) (0) | 2024.03.26 |