[CS]Database관련 질문 및 답변1

Michelle Kim·2025년 2월 13일

CS-지식

목록 보기
2/15

Database

Q1. 데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명

  • 데이터베이스에서 인덱스를 사용하는 이유: 검색성능을 향상시키기 위함

  • 하지만 검색성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 index를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야함

  • 일반적인 경우의 장점: 빠른 검색 성능

  • 일반적인 경우의 단점: 인덱스를 구성하는 비용 즉, 추가, 수정, 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행

따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야함

  1. 인덱스를 생성하면 추가적인 저장공간이 필요하고 인덱스 관리를 위한 오버헤드가 발생 할 수 있다.
  2. 인덱스가 존재하는 경우, 데이터 삽입,수정,삭제시에도 인덱스가 함께 업데이트 된다. 다라서 인덱스 수가 많이잘수록 쓰기 성능이 감소 할 수 있다.
  3. 쿼리에 사용되지 않는 인덱스가 존재하면, 해당 인덱스는 시스템 리소스 공간을 불필요하게 차지하기 때문에 시스템 전체 성능에 부정적인 영향이 있을 수 있다.
  4. 인덱스를 관리하는것도 비용이 드는 작업이기 때문에 인덱스가 많아지면 관리하기 어려울 수 있다.

등의 문제가 있기 때문에 인덱스를 생성전에 충분한 분석 및 검토가 필요하여 시스템을 균형있게 유지해야한다.

Q2. 트랜잭션에 대해서 설명

  • 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위
  • 트랜잭션에는 여러개의 연산이 수행될 수 있다.
  • 트랜잭션은 수행중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.

Q3. ACID에 대해서 설명

  • ACID는 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질
    - Atomicity(원자성): 트랜잭션의 연산은 모든 연산이 완벽히 수행되어야 하며, 한 연산이라도 실패하면 트랜잭션 내의 모든 연산은 실패해야 합니다.
    - Consistency(일관성): 트랜잭션은 유효한 상태로만 변경될 수 있습니다.
    - Isolation(고립성): 트랜잭션은 동시에 실행될 경우 다른 트랜잭션에 의해 영향을 받지 않고 독립적으로 실행되어야 합니다.
    - Durability(내구성): 트랜잭션이 커밋된 이후에는 시스템 오류가 발생하더라도 커밋된 상태로 유지되는 것을 보장해야 합니다. (일반적으로 비휘발성 메모리에 데이터가 저장되는 것을 의미)

Q4. 트랜잭션 격리 수준(Transaction Isolation Levels)에 대해서 설명

  • 트랜잭션 격리수준은 고립도와 성능의 트레이드 오프를 조절
    - READ UNCOMMITTED: 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다.
    - READ COMMITTED: 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다.
    - REPEATABLE READ: 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다.
    - SERIALIZABLE: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다.(성능 매우 떨어짐)

Q5. 정규화에 대해서 설명

  • 정규화는 데이터의 중복방지, 무결성을 충족시키기 위해 데이터베이스를 설계하는 것을 의미

Q6. RDBMS vs NOSQL에 대해서 설명

  • RDBMS는 데이터베이스를 이루는 객체들의 릴레이션을 통해서 데이터를 저장하는 데이터베이스.
  • SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요
    - 장점 :명확한 데이터 구조를 보장하고, 중복을 피할 수 있다.
  • NOSQL은 RDBMS에 비해 자유로운 형태로 데이터를 저장합니다.
  • 또한 수평확장을 할 수 있고 분산처리를 지원합니다.
  • 다양한 형태의 NOSQL 데이터베이스가 있고, 대표적으로 key-value store, bigtable, dynamo, document db, graph db 등이 있다.

둘은 대체될 수 있는 것이 아니고, 각각 필요한 시점에 적절히 선택해서 사용해야 합니다. 둘 다 같이쓰는 상호보완적인 존재가 될 수도 있다.

Q7. Redis에 대해서 간단히 설명

  • Redis는 key-value store NOSQL DB
  • 싱글스레드로 동작하며 다양한 자료구조를 지원
  • 그리고 다양한 용도로 사용될 수 있도록 다양한 기능을 지원합니다.
  • 데이터의 스냅샷 혹은 AOF 로그를 통해 복구가 가능해서 어느정도 영속성도 보장됨.

스프링에서는 세션을 관리하거나, 캐싱을 하는데에 자주 사용.

profile
🇬🇧영국대학교)Computer Science학과 졸업 📚Data, AI, Backend 분야에 관심이 많습니다. 👉Email: kimbg9876@gmail.com

0개의 댓글