Lined Notebook

기술면접 답변 정리 (데이터베이스)

by yjym33

** 데이터베이스

 

1. JOIN에 대해서 설명해 주세요.

 

JOIN은 데이터베이스에서 여러 테이블을 결합하여 하나의 결과 집합을 생성하는 작업입니다. 주로 관련 데이터를 연결하고 쿼리에서 필요한 정보를 검색하기 위해 사용됩니다. 일반적으로 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등 다양한 JOIN 유형이 있으며, 각각 다른 방식으로 테이블을 결합합니다.

 

2. 내부 조인과 외부 조인의 차이는 무엇인가요?

  • 내부 조인(Inner Join): 두 테이블 간에 매칭되는 행만을 반환합니다. 즉, 두 테이블에서 공통된 값이 있는 경우에만 결과에 포함됩니다.
  • 외부 조인(Outer Join): 외부 조인은 두 테이블 간에 매칭되는 행뿐만 아니라 하나의 테이블에만 존재하는 행도 결과에 포함합니다. LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 등이 외부 조인의 예시입니다.

3. 정규화에 대해서 설명해 주세요.

 

정규화는 데이터베이스 설계 프로세스 중 하나로, 중복 데이터를 최소화하고 데이터 일관성을 유지하기 위해 데이터를 구조화하는 과정입니다. 주로 테이블을 여러 개의 작은 테이블로 분할하고 관계를 설정하여 데이터 중복을 줄이는 목적으로 사용됩니다. 주요 정규형에는 1NF, 2NF, 3NF, BCNF, 4NF, 5NF 등이 있으며, 각 정규형은 데이터 중복을 어떻게 제거할지에 대한 규칙을 제시합니다.

 

 

4. 파티셔닝과 샤딩에 대해서 설명해 주세요.

  • 파티셔닝(Partitioning): 파티셔닝은 하나의 큰 테이블을 작은 논리적 파티션으로 나누는 기술입니다. 이렇게 나눈 파티션은 개별적으로 관리 및 처리될 수 있으며, 성능을 향상시키고 관리를 용이하게 합니다. 주로 데이터베이스 성능 향상 및 확장성을 위해 사용됩니다.
  • 샤딩(Sharding): 샤딩은 데이터를 여러 물리적 서버 또는 데이터베이스로 분산하는 기술입니다. 각 서버 또는 데이터베이스는 다른 데이터베이스와 독립적으로 운영되며, 대용량 데이터를 처리하고 확장성을 확보하는 데 사용됩니다.

 

5. ORM이란 무엇인가요?

 

ORM(객체 관계 매핑)은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 변환을 자동화하기 위한 기술입니다. ORM은 데이터베이스 테이블과 객체 간의 매핑을 정의하고, 객체 지향 코드에서 SQL 쿼리를 사용하지 않고 데이터베이스를 조작할 수 있게 해줍니다. 대표적인 ORM 프레임워크에는 Hibernate, Entity Framework, Django ORM 등이 있습니다.

 

6. NoSQL이란 무엇인가요?

 

NoSQL은 "Not Only SQL"의 약자로, 관계형 데이터베이스가 아닌 다른 데이터베이스 모델을 사용하는 데이터베이스 시스템을 나타냅니다. NoSQL 데이터베이스는 스키마가 유연하며, 대용량 및 분산 데이터 처리에 적합한 특징을 갖추고 있습니다. NoSQL 데이터베이스 유형으로는 문서형, 키-값, 열 지향, 그래프 데이터베이스 등이 있습니다.

 

7. 스키마란 무엇인가요?

 

스키마는 데이터베이스에서 데이터의 구조와 정의를 나타내는 것으로, 어떤 데이터가 어떤 형식으로 저장되어야 하는지를 정의합니다. 관계형 데이터베이스에서는 테이블의 열(속성)과 데이터 유형, 제약 조건 등을 정의하는데 사용됩니다. 스키마는 데이터의 일관성과 무결성을 유지하기 위해 중요합니다.

 

인덱스

 

8. 인덱스란 무엇인가요? 어떻게 동작 하나요?

 

인덱스는 데이터베이스의 테이블에서 데이터 검색 속도를 향상시키기 위한 데이터 구조입니다. 인덱스는 특정 열(또는 열의 조합)의 값을 저장하고, 이 값들을 사용하여 데이터를 빠르게 찾을 수 있게 합니다. 보통 B-트리, 해시 테이블 등의 알고리즘을 사용하여 인덱스를 생성하며, 인덱스를 사용하면 테이블을 효율적으로 검색할 수 있습니다.

 

9. 인덱스의 알고리즘에는 어떤 것들이 있나요?

 

인덱스의 주요 알고리즘에는 B-트리, B+트리, 해시 인덱스, 비트맵 인덱스 등이 있습니다. 각 알고리즘은 다양한 데이터베이스 사용 사례와 요구 사항에 적합한 성능 및 구조를 제공합니다.

 

10. Table Full Scan과 Index Range Scan을 설명해주세요.

  • Table Full Scan: 테이블의 모든 행을 순차적으로 읽는 작업입니다. 데이터베이스에서 인덱스를 사용하지 않을 때 주로 발생하며, 대용량 테이블에서는 성능 저하를 초래할 수 있습니다.
  • Index Range Scan: 인덱스를 사용하여 특정 범위 내의 행만 읽는 작업입니다. 쿼리에서 WHERE 조건과 함께 사용되어 특정 조건을 만족하는 행만 읽고 검색 속도를 향상시킵니다.

 

트랜잭션

 

11. 트랜잭션이란 무엇인가요? 4가지 원칙을 포함해서 설명해 주세요.

 

트랜잭션은 데이터베이스 작업의 논리적 단위로, ACID 원칙을 따릅니다.

  • 원자성(Atomicity): 트랜잭션은 원자적이어야 하며, 모든 작업은 성공 또는 실패로 전체적으로 처리됩니다.
  • 일관성(Consistency): 트랜잭션 이전과 이후에 데이터베이스는 일관된 상태여야 합니다.
  • 고립성(Isolation): 동시에 실행 중인 여러 트랜잭션은 서로 영향을 주지 않고 실행되어야 합니다.
  • 지속성(Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 합니다.

 

12. 트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요.

 

트랜잭션 격리 수준에는 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE 등이 있으며, 격리 수준이 높아질수록 트랜잭션 간의 충돌 가능성이 줄어듭니다. 그러나 높은 격리 수준은 성능 저하를 초래할 수 있습니다. 예를 들어, SERIALIZABLE 격리 수준에서 데드락이 발생할 수 있습니다.

 

13. 공유 락과 배타 락의 차이는 무엇인가요?

  • 공유 락(Shared Lock): 여러 트랜잭션이 동시에 읽기 작업을 수행할 수 있도록 하는 락입니다. 공유 락은 여러 트랜잭션 간에 공유될 수 있으며, 데이터의 일관성을 깨지 않습니다.
  • 배타 락(Exclusive Lock): 특정 트랜잭션이 쓰기 작업을 수행하는 동안 다른 트랜잭션은 해당 데이터에 대한 접근을 금지하는 락입니다. 배타 락은 데이터의 일관성을 유지하기 위해 사용됩니다.

 

14. 데드락이란 무엇이며, 어떻게 발생할까요?

 

데드락은 두 개 이상의 트랜잭션이 서로의 작업을 대기하며 무한히 진행하지 못하는 상태를 가리킵니다. 이러한 상태에서는 트랜잭션들이 먼저 락을 획득하고자 대기하다가 다음 단계로 진행하지 못하므로 시스템이 멈출 수 있습니다. 데드락은 보통 다음과 같은 상황에서 발생합니다:

  • 트랜잭션 A가 리소스 X를 가지고 대기하고, 트랜잭션 B가 리소스 Y를 가지고 대기할 때.
  • 트랜잭션 A가 리소스 Y를 가지고 대기하고, 트랜잭션 B가 리소스 X를 가지고 대기할 때.

데드락을 방지하거나 해결하기 위해선 타임아웃, 우선순위, 해제 재시도 등의 기술을 사용할 있습니다.

블로그의 정보

생각보다 실천을

yjym33

활동하기