1. 데이터베이스에서 JOIN의 개념과 사용 사례를 설명해주세요.
  2. 외래 키(Foreign Key)와 참조 무결성(Referential Integrity)에 대해 설명해주세요.
  3. 데이터베이스에서 발생할 수 있는 데드락(Deadlock)을 방지하는 방법을 설명해주세요.
  4. 데이터베이스 샤딩(Sharding)이란 무엇인가요?
  5. 데이터베이스에서 파티셔닝(Partitioning)을 적용하는 이유를 설명하고, 수평/수직 파티셔닝의 차이점을 설명해주세요.

1. JOIN

데이터베이스에서 JOIN의 개념과 사용 사례를 설명해주세요.

JOIN

  • SQL에서 두 개 이상의 테이블을 연결하여 연관된 데이터를 조회하는데 사용
  • 공통된 열을 기반으로 결합되어 결과 집합 생성
  • 테이블 간 관계를 활용하여 복잡한 데이터를 효율적으로 조회 가능

JOIN의 종류

  • INNER JOIN : 두 테이블 간 일치하는 행만 반환
  • LEFT JOIN : 왼쪽 테이블의 행과 오른쪽 테이블에서 일치하는 행 반환 (일치하지 않는 오른쪽 테이블 값은 NULL)
  • RIGHT JOIN : 오른쪽 테이블 행과 왼쪽 테이블에서 일치하는 행 반환 (일치하지 않는 왼쪽 테이블 값은 NULL)
  • FULL OUTER JOIN : 두 테이블에서 일치하는 행 모두 반환, 일치하지 않는 행도 포함하여 NULL
  • CROSS JOIN : 두 테이블 간 모든 행의 조합 반환
  • SELF JOIN : 동일한 테이블을 자신과 JOIN 하여 사용

INNER JOIN과 OUTER JOIN 차이점은 무엇인가요?

inner join은 두 테이블간에 일치하는 값만 반환하고 outer join은 일치하지 않는 행은 Null 로 반환

2. 외래 키(Foreign Key)와 참조 무결성

외래 키(Foreign Key)와 참조 무결성(Referential Integrity)에 대해 설명해주세요.

외래키

  • 데이터베이스에서 한 테이블의 열이 다른 테이블의 기본 키를 참조하도록 설정된 키
  • 외래 키 제약 조건은 테이블 간의 데이터 무결성을 보장하기 위해 사용

참조 무결성

  • 데이터베이스에서 외래 키 제약 조건을 사용하여 두 테이블간의 관계를 일관되게 유지하는 규칙
  • 참조되는 테이블의 행이 참조하는 테이블에 항상 존재하도록 보장
  • 데이터가 삭제되거나 업데이트 될 때 일관성 유지

참조되는 키가 삭제되거나 업데이트되면 참조하는 키도 자동으로 삭제/업데이트

외래 키(Foreign Key)와 기본 키(Primary Key)의 차이점은 무엇인가요?

기본 키는 테이블 내에서 각 행을 고유하게 식별하는 데 사용되며 NULL 값을 가질 수 없습니다. 외래키는 다른 테이블의 기본키를 참조하여 테이블간의 관계를 정의합니다. 외래키는 NULL 값을 가질 수 있고 고유할 필요는 없습니다.

외래 키가 성능에 미치는 영향을 설명하고, 이를 최적화할 수 있는 방법은 무엇인가요?

외래 키는 데이터 삽입, 삭제, 업데이트 시 참조 테이블의 무결성을 확인해야 하므로, 성능에 영향을 줄 수 있습니다. 이를 최적화하기 위해 적절한 인덱스를 설정하여 검색 속도를 향상시키고, 필요하지 않은 경우 외래 키를 비활성화하거나 비즈니스 로직에서 무결성을 관리할 수 있습니다. 파티셔닝을 통해 데이터베이스를 분할하여 관리하거나, 외래 키 제약을 제거하고 애플리케이션에서 무결성을 관리하는 방식을 사용할 수 있습니다

3. 데드락

데이터베이스에서 발생할 수 있는 데드락(Deadlock)을 방지하는 방법을 설명해주세요.

데드락

  • 두 개 이상의 트랜잭션이 같은 자원을 점유하여 서로 상대방의 자원이 해제되기를 기다리는 상태
  • 이로인해 아무런 작업도 진행되지 못하는 교착상태 발생

발생조건

  • 4가지 모두 성립해야 데드락 발생
  1. 상호 배제 : 자원은 한번에 한 프로세스만 사용
  2. 점유 대기 : 최소 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
  3. 비선점 : 강제로 빼앗을 수 없음
  4. 순환대기 : 순환 형태로 대기

데드락 발생조건 4가지를 말씀해주세요

  1. 상호 배제 : 자원은 한번에 한 프로세스만 사용
  2. 점유 대기 : 최소 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 함
  3. 비선점 : 강제로 빼앗을 수 없음
  4. 순환대기 : 순환 형태로 대기

데드락을 방지하는 방법을 설명하고, 각각의 장단점을 말해주세요.

  • 자원 접근 순서 지정: 순서를 강제하여 데드락을 방지합니다. 단점은 모든 트랜잭션에 일괄적으로 적용하기 어려울 수 있습니다.
  • 타임아웃 설정: 특정 시간이 지나면 트랜잭션을 취소합니다. 단점은 트랜잭션이 자주 취소되면 성능 저하가 발생할 수 있습니다.
  • 데드락 회피 알고리즘: 데드락이 발생할 가능성을 미리 계산하고 자원 할당을 제한합니다. 단점은 계산에 추가적인 비용이 들 수 있습니다.

데드락 예방(Prevention)과 회피(Avoidance)의 차이점을 설명해주세요.

  • 데드락 예방은 데드락 조건 중 하나를 사전에 제거하여 데드락 발생을 방지합니다.
  • 데드락 회피는 트랜잭션이 자원을 요청할 때 데드락 상태로 가지 않도록 사전 검사(예: 은행가 알고리즘)를 통해 자원 할당을 결정합니다.

데드락 회복 : 선점이나 프로세스 강제 종료

4. 샤딩

데이터베이스 샤딩(Sharding)이란 무엇인가요?

샤딩

  • 대규모 데이터베이스를 더 작은 단위로 나누어 분산처리하는 기법
  • 각 부분을 샤드라고 부르며 각 샤드는 독립적인 데이터베이스처럼 작동
  • 데이터베이스의 확장성을 향상시키고 성능 최적화를 위해 사용

주요 특징

  • 수평 분할 : 데이터를 특정 기준에 따라 수평으로 나누어 각 샤드에 저장
  • 독립성 : 각 샤드는 독립적으로 디비 작업 수행
  • 확장성 : 데이터 증가 시 새로운 샤드를 추가하여 쉽게 확장
  • 성능 향상 : 각 샤드에서 처리해야 할 데이터의 양이 줄어들어 쿼리 성능 향상

장단점

  • 확장성, 성능 향상, 부하 분산
  • 복잡성 증가, 데이터 일관성 유지 어려움, 조인 어려움

샤딩과 파티셔닝의 차이점은 무엇인가요?

파티셔닝은 데이터를 수직 또는 수평으로 나누는 기법이며, 보통 하나의 데이터베이스 내에서 적용됩니다. 반면, 샤딩은 데이터를 여러 개의 독립적인 데이터베이스 인스턴스에 분산하는 방식입니다. 샤딩은 수평적 확장성을 제공하며, 여러 서버에서 데이터를 분산하여 처리합니다.

샤딩을 사용할 때 발생할 수 있는 문제점과 이를 해결하는 방법은 무엇인가요?

  • 데이터 일관성 문제: 각 샤드가 독립적으로 운영되므로 데이터 일관성을 유지하는 것이 어려울 수 있습니다. 이를 해결하기 위해 분산 트랜잭션 또는 eventual consistency 전략을 사용할 수 있습니다.
  • 조인 및 집계 처리의 복잡성: 데이터가 여러 샤드에 분산되어 있어 조인 및 집계 연산이 어려워질 수 있습니다. 이를 해결하기 위해 애플리케이션 레벨에서 조인하거나 데이터를 중복 저장하여 조인의 필요성을 줄일 수 있습니다.

샤딩을 통한 확장성과 레플리케이션(Replication)을 통한 고가용성은 어떻게 다르며, 둘을 함께 사용할 수 있나요?

샤딩은 수평 확장성을 제공합니다. 즉, 데이터의 양이 많아지면 새로운 샤드를 추가하여 시스템을 확장할 수 있습니다. 반면, 레플리케이션은 고가용성을 제공합니다. 데이터를 여러 서버에 복제하여 장애가 발생했을 때 서비스 중단 없이 계속 운영할 수 있습니다. 두 기술은 함께 사용할 수 있으며, 각 샤드에 대해 레플리케이션을 구성하여 확장성과 가용성을 모두 확보할 수 있습니다.

5. 파티셔닝

데이터베이스에서 파티셔닝(Partitioning)을 적용하는 이유를 설명하고, 수평/수직 파티셔닝의 차이점을 설명해주세요.

파티셔닝

  • 대규모 데이터베이스에서 성능과 효율성을 높이기 위해 여러개의 작은 단위로 나누는 기술
  • 성능 향상 : 쿼리 성능 개선 - 데이터가 너무 많으면 쿼리가 느려질 수 있음, 병렬처리
  • 관리 용이성 - 여러 서버나 디스크에 분산되어 관리 및 확장 용이

수평 파티셔닝

  • 데이터의 행을 기준으로 나누는 방식
  • 하나의 테이블을 여러 파티션으로 나누어 각 파티션에 일부 행만 저장
  • 성능이 중요한 경우에 유용
  • 데이터가 많아도 처리 성능을 높일 수 있고 특정 범위의 데이터만 조회할 수 있음

수직 파티셔닝

  • 테이블의 열을 기준으로 나누는 방식
  • 각 파티션은 동일한 행을 가지며 열이 나누어짐
  • 자주 조회되는 열을 하나의 파티션에 저장
  • 자주 조회되는 고객 ID, 이름, 이메일 등의 열은 하나의 파티션에 두고, 덜 조회되는 전화번호, 주소 등의 열은 별도의 파티션에 두는 방식

파티셔닝(Partitioning)의 기본 개념에 대해 설명해주세요.

파티셔닝은 큰 데이터베이스 테이블을 여러 개의 작은 파티션으로 나누는 과정입니다. 이를 통해 데이터의 관리와 쿼리 성능을 최적화할 수 있습니다. 각 파티션은 동일한 구조를 갖추고 있지만, 데이터의 일부만 저장되며, 이를 통해 데이터 접근 시간을 줄이고 관리 효율성을 높입니다.

수평 파티셔닝과 수직 파티셔닝의 차이점에 대해 설명해주세요.

수평 파티셔닝은 데이터를 행(Row) 기준으로 나누는 방법으로, 테이블의 각 파티션이 동일한 컬럼을 가집니다. 예를 들어, 날짜나 지역 등을 기준으로 데이터를 나누는 방식입니다. 수직 파티셔닝은 데이터를 열(Column) 기준으로 나누는 방법으로, 자주 사용되는 열과 덜 사용되는 열을 분리하여 관리합니다. 예를 들어, 자주 조회되는 열은 하나의 파티션에 두고, 덜 자주 조회되는 열은 다른 파티션에 둘 수 있습니다.

어떤 상황에서 수평 파티셔닝을 사용하고, 어떤 상황에서 수직 파티셔닝을 사용해야 할까요?

수평 파티셔닝은 데이터가 매우 많고 특정 범위의 데이터를 자주 조회해야 할 때 유용합니다. 예를 들어, 주문 데이터를 날짜별로 분리하거나, 고객 데이터를 지역별로 나누는 경우입니다. 수직 파티셔닝은 특정 열에 대한 쿼리가 자주 발생하고, 데이터 중 일부 열만 자주 조회되는 경우에 유용합니다. 예를 들어, 고객 테이블에서 이름, 이메일만 자주 조회하고, 주소나 전화번호는 덜 조회되는 경우입니다.

파티셔닝을 적용할 때의 주요 단점이나 고려 사항은 무엇인가요?

파티셔닝은 데이터 분산을 도와주지만, 데이터 복잡성관리가 증가할 수 있습니다. 파티셔닝 키를 잘못 선택하면 데이터 접근이 비효율적일 수 있습니다. 또한, 파티셔닝된 테이블 간의 JOIN이 복잡해지고 성능 저하를 일으킬 수 있습니다. 파티션을 변경하거나 관리하는 작업이 복잡해질 수도 있습니다.