Database
Q1. 데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명
-
데이터베이스에서 인덱스를 사용하는 이유: 검색성능을 향상시키기 위함
-
하지만 검색성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 index를 사용하는지, 카디널리티, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야함
-
일반적인 경우의 장점: 빠른 검색 성능
-
일반적인 경우의 단점: 인덱스를 구성하는 비용 즉, 추가, 수정, 삭제 연산시에 인덱스를 형성하기 위한 추가적인 연산이 수행
따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야함
- 인덱스를 생성하면 추가적인 저장공간이 필요하고 인덱스 관리를 위한 오버헤드가 발생 할 수 있다.
- 인덱스가 존재하는 경우, 데이터 삽입,수정,삭제시에도 인덱스가 함께 업데이트 된다. 다라서 인덱스 수가 많이잘수록 쓰기 성능이 감소 할 수 있다.
- 쿼리에 사용되지 않는 인덱스가 존재하면, 해당 인덱스는 시스템 리소스 공간을 불필요하게 차지하기 때문에 시스템 전체 성능에 부정적인 영향이 있을 수 있다.
- 인덱스를 관리하는것도 비용이 드는 작업이기 때문에 인덱스가 많아지면 관리하기 어려울 수 있다.
등의 문제가 있기 때문에 인덱스를 생성전에 충분한 분석 및 검토가 필요하여 시스템을 균형있게 유지해야한다.
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 로그를 통해 복구가 가능해서 어느정도 영속성도 보장됨.
스프링에서는 세션을 관리하거나, 캐싱을 하는데에 자주 사용.