freemjstudio / geultto_9th_cs_study

글또 9기에서 시작한 cs 스터디 repository 입니다
0 stars 1 forks source link

5주차 질문 목록 #5

Open blcklamb opened 9 months ago

blcklamb commented 9 months ago
blcklamb commented 9 months ago

ERD에 대해 설명해 주세요.

ERD(Entity Relationship Diagram)는 요구 분석 사항에서 얻은 엔티티와 속성들의 관계를 그림으로 나타낸 개체-관계 모델입니다. 엔티티는 정의 가능한 사물 또는 개념을 의미하고 이는 곧 데이터베이스의 테이블이 됩니다. 엔티티 속성은 개체가 가지고 있는 속성을 포함합니다. 이는 곧 테이블의 각 필드가 됩니다.

NoSQL이 나오게 된 이유와 종류에 대해 설명해 주세요.

웹의 성장에 따라 멀티미디어 데이터와 같은 비정형 데이터가 빠른 속도로 대량 생산되고 있습니다. 이런 환경에서 RDB를 적용하면, 데이터의 스키마가 이미 정해져 있어 속성을 자주 추가하고 조정하기에 적합하지 않습니다. 또한 관계를 맺고 있기 때문에 JOIN이 많은 복잡한 쿼리가 만들어질 수 있습니다. 즉 대량의 비정형 데이터의 저장과 유연한 처리를 위해 새로운 대안으로 제시된 것이 NoSQL입니다.

NoSQL 종류에는 대표적으로 MongoDB, Redis 등이 있습니다. MongoDB는 JSON을 통해 데이터에 접근할 수 있고, Document 기반의 DB입니다. 스키마를 정해 놓지 않고 데이터를 삽입할 수 있기 때문에 확장성이 뛰어납니다. Document를 생성할 때마다 고유한 ObjectID가 생성됩니다. Redis는 인메모리 DB이자 key-value 데이터 모델 기반의 DB입니다. 문자열, set, sorted set, hash, list 데이터를 지원하고, 높은 성능을 제공하며 데이터의 영속성을 옵션으로 지원합니다.

Redis을 적용하면 적합한 경우에 대해 설명해 주세요.

일반적인 DB가 하드 디스크나 SSD에 저장하는 것과는 달리 Redis는 RAM에 데이터를 저장합니다. 이는 디스크 스캐닝이 필요없어 매우 빠르다는 장점을 가집니다. 데이터 구조가 간단하고 key-value 저장이 적합한 경우 Redis를 적용하기에 적합하다고 볼 수 있습니다. 복잡한 쿼리나 RDB의 JOIN이 필요 없는 간단한 구조에서 효과적으로 사용됩니다. 이전에 검색하거나 계산한 것을 재사용하는 캐싱에 적용하면 빠르게 액세스할 수 있습니다. 이를 통해 반복적인 요청에 대한 응답 시간을 크게 단축할 수 있습니다. 실시간 데이터 처리가 필요한 경우에도 적합합니다. 온라인 광고 노출, 게임 순위표와 같은 상황에서 Redis는 매우 빠른 응답 시간을 제공하여 실시간으로 데이터를 업데이트하고 조회하는 데에 적합합니다. 인 메모리 데이터베이스란 무엇인가요? - AWS

트랜잭션 연산에 대해 설명해 주세요.

트랜잭션 연산에는 Commit과 Rollback이 있으며 두 연산에 의해 원자성을 보장받습니다. Commit은 하나의 트랜잭션이 성공적으로 끝나고, DB가 일관성 있는 상태에 있거나 하나의 트랜잭션이 끝났을 때 사용하는 연산입니다. Rollback은 하나의 트랜잭션이 비정상적으로 종료되어 트랜잭션 원자성이 깨질 경우 처음부터 다시 시작하거나 부분적으로 연산을 취소하는 연산입니다.

freemjstudio commented 9 months ago
  1. 트랜잭션의 ACID 에 대해 설명해주세요

    • Atomicy 원자성 : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.
    • Consistency 일관성 : 실행 완료 후에 일관된 상태를 유지해야 한다.
    • Isolation 독립성 : 둘 이상의 트랜잭션이 동시에 실행될 경우에 서로의 연산에 끼어들 수 없다.
    • Durability 영속성 : 완료된 결과는 영구적으로 반영되어야 한다.
  2. 다음의 쿼리가 실행되는 순서에 대해 설명해주세요.

SELECT DISTINCT e.name FROM employees e JOIN departments d ON e.department_id = d.id WHERE d.name = 'Engineering' ORDER BY e.salary DESC LIMIT 10;

FROM 절로 테이블을 선택한다. → ON 조건 확인 → JOIN 실행하여 데이터가 집합으로 모아진다 → WHERE 절 실행하여 조건이 개별 행에 실행된다. → DISTINCT로 중복된 행을 결과에서 삭제한다. 주어진 데이터를 ORDER BY 로 내림차순으로 정렬한다. → LIMIT 에 벗어나는 행들은 제외되어 출력한다.

  1. 인덱스를 이루는 자료구조 중 Hash Table, B+Tree 는 각각 어떤 쿼리 수행에 적합한가요 ?
  1. 데이터 베이스에서 ERD 모델에서 다양한 유형의 관계에 대해서 설명해주세요. (ex. 1:1, 1:N, N:M)
    • 1:1 : 한 유저당 하나의 이메일 갖는 경우. 한 개체가 다른 한 개체와 연관되는 경우이다.
    • 1:N : 한 유저당 여러개의 상품을 장바구니에 넣는 경우. 한 개체가 다른 많은 개체를 포함하는 경우이다.
    • N:M : 두 테이블의 각 레코드가 다른 테이블의 여러 레코드와 관련될 수 있는 경우이다. → N:M 관계는 어떻게 구현하나요 ? 테이블 두개를 직접적으로 연결하지 않고 1:N, 1:M 이라는 관계를 갖는 테이블 두개로 나눈 후 별개의 테이블에서 매핑합니다.
maintain0404 commented 9 months ago
  1. SQL 인젝션이 무엇인지 설명하고, 막기 위한 방법을 설명해주세요.
    • 요청에 SQL 구문을 삽입하여 의도하지 않은 SQL을 발생시켜 공격하는 방법입니다. 예를 들면, 'WHERE 1 = 1` 강제로 데이터를 읽어올 수 있습니다. ORM을 사용 실행 전 입력 값 검사를 통해 막을 수 있습니다.
  2. Phantom Read에 대해 설명해주세요.
    • 한 트랜잭션 안에서 같은 범위를 읽을 때 두 번째에서 첫 번째에 없던 데이터를 읽는 것을 말합니다. 트랜잭션 격리 수준을 Serializable로 설정하면 막을 수 있습니다.
  3. 프로시저 사용이 권장되지 않는 이유를 설명해주세요.
    • 소스코드에 비해 관리가 어렵고, 데이터베이스에서 로직을 작성하는 것은 애플리케이션과 역할 혼돈이 있을 수 있는 문제로 권장되지 않습니다.
  4. 인덱스 추가하는 것을 통해 얻는 것과 잃는 것을 설명해주세요.
    • 인덱스 관리비용이 늘어나고 쓰기 연산 속도가 느려지지만, 읽기 연산 속도를 얻을 수 있습니다.
Kim-Ju-won commented 9 months ago

1. 정규화의 장단점에 대해서 설명해주세요

2. 정규화 과정이 없으면 이상현상(anomalies)이 발생하는데 이 이상현상에 대해서 설명해주세요.

3. 트랜잭션 격리성은 무엇이고 보장하는 방법에 대해서 설명해주세요.

트랜잭션의 격리 수준(Isolation Level)은 다수의 트랜잭션이 동시에 데이터베이스에 접근할 때 발생할 수 있는 여러 문제(예: 더티 리드, 비반복 가능 읽기, 팬텀 리드)를 제어하는 데 사용됩니다. 격리 수준을 조정함으로써, 트랜잭션 간의 동시성과 데이터 일관성 사이의 균형을 맞출 수 있습니다. SQL 표준에서는 네 가지 격리 수준을 정의하고 있으며, 각각의 수준은 다른 수준의 동시성과 데이터 정확성을 제공합니다.

1. READ UNCOMMITTED (읽기 미확정)

2. READ COMMITTED (읽기 확정)

3. REPEATABLE READ (반복 가능 읽기)

4. SERIALIZABLE (직렬화 가능)

해결 방안

이러한 문제점들을 해결하기 위해 데이터베이스 시스템들은 다양한 동시성 제어 기술을 사용합니다. 예를 들어,