[cs 정리] 데이터베이스

jiwon·2022년 4월 25일
0

Computer Science

목록 보기
4/5
post-thumbnail
post-custom-banner

1. 정규화 과정에 대해 설명해주세요

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 합니다. 보통 제 3정규형 과정까지 완료되었으면 정규화 되었다고 말합니다. 제 1 정규형은 도메인이 원자값만을 포함하게 만듭니다. 제 2 정규형은 부분적 함수 종속을 제거합니다. 제 3 정규형은 기본키에 대해 이행적 종속을 제거합니다.

제 1 정규형(1NF; First Normal Form)


1NF를 만족하려면 도메인이 원자값이어야 한다. 위 테이블은 수강자 속성이 원자값이 아니어서 1NF가 아니다.

제 2 정규형(2NF; Second Normal Form)


2NF를 만족하려면 부분적 함수 종속을 제거해야 한다. 즉 완전 함수 종속이 되도록 해야 한다. 위 테이블은 2NF를 만족하지 않는다. 소속학과에는 어차피 학과장이 한 명씩 있다. 즉 학과장은 소속학과에 종속된다.


이렇게 릴레이션을 구성하는게 바람직하다. (2NF 만족)

제 3 정규형(3NF;Third Normal Form)


🔎이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계
위 학과장-소속학과 같은 종속 관계가 한다리 건너 있는걸 이행적 함수 종속이라고 한다. 위 릴레이션 같은 경우에는 홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립하므로 이행적 함수 종속이 존재한다.
이렇게 쪼개주자.

참고-IT위키

2. 트랜잭션(Transaction)이란 무엇인지 설명해주세요

데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위를 트랜잭션이라고 합니다.

3. 트랜잭션의 ACID란?

트랜잭션은 ACID라는 4가지 특징을 가집니다. A는 Atomicity(원자성), C는 Consistency(일관성), I는 Isolation(독립성, 격리성), D는 Durability(지속성)을 의미합니다.

Atomicity(원자성)

트랜잭션의 연산은 모두 반영되어야하며, 하나라도 실패하면 모두 취소되어야한다.

Consistency(일관성)

트랜잭션을 성공하면 언제나 일관성있는 데이터베이스 상태로 변화한다.

Isolation(독립성, 격리성)

둘 이상의 트랜잭션이 동시에 수행되는 경우 다른 트랜잭션의 연산에 끼어들수없다.

Durability(지속성)

완료된 트랜잭션은 영구적으로 반영되어야한다.

4. SQL Injection이 무엇인지 설명해주세요

SQL Injection이란 해커에 의해 조작된 쿼리문이 DB에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법입니다.

5. 데이터베이스에서 Index란 무엇인지 설명

인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다.

인덱스의 장점

  • 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다.
  • 전반적인 시스템의 부하를 줄일 수 있다.

인덱스의 단점

  • 인덱스를 관리하기 위해 DB의 약 10%에 해당하는 저장공간이 필요하다.
  • 인덱스를 관리하기 위해 추가 작업이 필요하다.
  • 인덱스를 잘못 사용할 경우 오히려 성능이 저하되는 역효과가 발생할 수 있다.

6. RDBMS와 NoSQL 의 차이를 설명하고, 어떤 상황에서 사용하면 좋을지 예시를 들어주세요.

RDBMS는 관계형 데이터베이스 관리 시스템을 의미합니다. 반면 NoSQL은 테이블 간 관계를 정의하지 않습니다. RDBMS는 데이터 구조가 명확하여 변경될 여지가 없고 명확한 스키마가 중요한 경우 많이 사용합니다. NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경, 확장될 수 있는 경우 많이 사용합니다.

🔎NoSQL은 key-value쌍으로 데이터를 저장한다. JSON 형식과 유사하다. 파이어베이스 또한 NoSQL의 일종이라 볼 수 있다.

7. Optimzer 란 무엇인가요?

옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진입니다. 개발자가 SQL을 작성하면, 옵티마이져는 여러 실행계획을 세운 뒤 가장 효율적인 실행계획으로 개발자의 SQL문을 재작성합니다.

8. 샤딩(Sharding)에 대해서 설명해주세요.

샤딩이란, 트래픽을 줄이기 위해 테이블을 수평으로 쪼개는 것을 의미합니다. 하지만 프로그래밍, 운영적인 복잡도는 더 높아지는 단점이 있어 주의해서 사용해야 합니다.

9. 객체 관계 매핑 (ORM) 이란 무엇인지 설명하고, 장단점에 대해 설명해주세요.

ORM이란, Object Relational Mapping, 즉 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말합니다. ORM의 장점은, 개발자가 객체 지향 프로그래밍 하는데만 집중할수 있도록 하며 재사용성 및 유지보수의 편리성이 증가한다는 것입니다. ORM의 단점은, 사용하기는 편하지만 설계는 매우 신중하게 해야 하며 프로젝트의 복잡성이 커질 경우 난이도 또한 올라갈 수 있다는 점입니다.

🔎객체와 관계형 데이터베이스의 연결?

  • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
  • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
  • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

10. 클러스터링과 리플리케이션 (Replication)을 비교해주세요.

클러스터링이란 여러 개의 DB를 수평적인 구조로 구축하는 방식입니다. 동기 방식으로 노드들 간의 데이터를 동기화합니다. 반면 리플리케이션은 여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식입니다. 비동기 방식으로 노드들 간의 데이터를 동기화합니다.

클러스터링(Clustering)이란?

여러 개의 DB를 수평적인 구조로 구축하는 방식이다.
동기화 방식(=데이터를 복제한 후 결과를 확인)이라 데이터 누락이 발생하지 않는다.

장점

  • 노드들 간의 데이터를 동기화하여 항상 일관성있는 데이터를 얻을 수 있다.
  • 1개의 노드가 죽어도 다른 노드가 살아 있어 시스템을 계속 장애없이 운영할 수 있다.
    단점
  • 여러 노드들 간의 데이터를 동기화하는 시간이 필요하므로 Replication에 비해 쓰기 성능이 떨어진다.
  • 장애가 전파된 경우 처리가 까다로우며, 데이터 동기화에 의해 스케일링에 한계가 있다.

리플리케이션(Replication)이란?

여러 개의 DB를 권한에 따라 수직적인 구조(Master-Slave)로 구축하는 방식이다.
비동기화 방식 (=Master에 수정사항을 반영하고 Slave에 데이터를 복사)라 누락이 발생할 수 있다.

장점

  • DB 요청의 60~80% 정도가 읽기 작업이기 때문에 Replication만으로도 충분히 성능을 높일 수 있다.
  • 비동기 방식으로 운영되어 지연 시간이 거의 없다.
    단점
  • 노드들 간의 데이터 동기화가 보장되지 않아 일관성있는 데이터를 얻지 못할 수 있다.
  • Master 노드가 다운되면 복구 및 대처가 까다롭다.
profile
개발 공부합니다. 파이팅!
post-custom-banner

0개의 댓글