1. ACID란?
  2. 트랜잭션 격리수준이란?
  3. 정규화란?
  4. 데이터베이스 정규형
  5. JOIN 이란?

1. ACID란?

Question

ACID에대해 설명해주세요

ACID란 트랜잭션을 정의하는 4가지 속성으로 원자성, 일관성, 격리성, 영속성을 의미합니다.

원자성은 트랜잭션 내 작업은 모두 성공하거나 실패해야함을 의미합니다. 일관성은 트랜잭션 완료 후 데이터베이스가 일관된 상태를 유지해야 하는 것을 의미합니다. 격리성은 각 트랜잭션은 서로 영향을 주지 않아야 함을 의미합니다. 영속성은 트랜잭션이 성공적으로 완료되면 결과가 영구적으로 저장되어야 함을 의미합니다.

Question

ACID 트랜잭션이 있으면 좋은 이유는 무엇인가요?

데이터의 안정성과 무결성을 보장해줍니다.

Question

각 속성을 실제로 어떻게 구현할 수 있을까요?

commit과 rollback을 사용해 원자성을 보장하고, 무결성 제약을 통해 일관성을 보장할 수 있으며, 외래키나 고유키 등을 설정해 데이터의 무결성을 유지할 수 있습니다.

2. 트랜잭션 격리수준이란?

Question

트랜잭션 격리수준에대해 설명해주세요

트랜잭션 격리수준이란 트랜잭션끼리 얼마나 고립되어 있는지를 나타내는 수준입니다. 트랜잭션간의 상호작용 방식을 설정하여 동시성 문제를 방지하고 일관성을 보장하는 역할을 합니다.

Question

트랜잭션 격리 레벨에는 어떤 것이 있나요?

트랜잭션 격리 레벨에는 4가지가 있습니다. Read Uncommitted는 가장 낮은 수준으로 다른 트랜잭션의 미확정 데이터를 읽을 수 있습니다. Read Committed는 확정된 데이터만 읽을 수 있지만 반복 읽기에서 데이터가 변할 수 있습니다. Repeatable Read는 같은 데이터를 반복하여 읽을 때 동일한 결과를 보장하며, Serializable은 가장 높은 격리수준으로 동시성 처리가 가장 제한적이만 가장 안전합니다.

3. 정규화란?

Question

정규화란 무엇인가요?

데이터베이스 정규화는 데이터를 여러 테이블로 분리하고 관계를 설정하여 데이터의 중복을 줄이고, 데이터 무결성을 유지하는 방법입니다. 이를 통해 데이터베이스의 저장 공간을 절약하고, 삽입/수정/삭제시 발생할 수 있는 이상 현상을 줄일 수 있습니다.

Question

정규화의 장점과 단점은 무엇인가요?

정규화를 통해 데이터 일관성을 높이고 중복을 최소화할 수 있지만, 지나치게 세분화된 테이블 구조는 쿼리 성능을 저하시킬 수 있습니다.

Question

비정규화가 필요한 상황은 언제인가요?

비정규화는 데이터베이스 성능이 중요한 경우에 고려됩니다. 예를 들어, 조회 성능이 중요한 실시간 트랜잭션 시스템에서는 조인을 줄이기 위해 일부 데이터를 중복시켜 비정규화를 사용할 수 있습니다.

4. 데이터베이스 정규형

Question

데이버테이스의 각 정규형 레벨에 대해 설명해주세요

제 1 정규형은 모든 컬럼이 단일값을 가져야 하며 중첩되거나 중복되는 열이 없어야 합니다. 예를 들어 전화번호 컬럼에 여러개의 전화번호가 들어가있다면 제 1 정규형을 만족하지 않습니다. 제 2 정규형은 기본키의 부분 함수 종속성이 없어야 합니다. 즉 기본키가 아닌 컬림이 기본키 전체에 의존해야 합니다. 제 3 정규형은 이행적 종속성이 없어야 합니다. 기본키가 아닌 커럶이 다른 기본키가 아닌 컬럼에 종속되면 안됩니다. BCNF는 테이블의 모든 결정자가 후보키가 되어야 합니다. 제 4 정규형은 다치 종속성이 없어야 합니다. 제 5 정규형은 조인 종속성이 없어야 합니다.

정규형의 목적은 데이터의 중복을 줄이고 이상현상을 방지하여 데이터의 일관성과 무결성을 높이는 것입니다.

5. JOIN 이란?

Question

JOIN이란 무엇인가요?

JOIN은 테이블 간의 관계를 통해 데이터를 합쳐서 조회할 수 있는 SQL 연산입니다. 각 테이블의 공통된 컬럼을 기준으로 두 테이블을 결합하여 원하는 데이터를 가져올 수 있습니다.

Question

JOIN의 종류와 각각의 차이점에 대해 설명해주세요

JOIN에는 inner, left, right, full, cross, self join이 있습니다. inner join은 양쪽 테이블의 일치하는 행만 반환하고, left join은 왼쪽 테이블의 모든 행을 포함하는 반면, right join은 오른쪽 테이블의 모든 행을 포함합니다. full join은 양쪽 테이블의 모든 데이터를 가져옵니다. cross join은 두 테이블의 모든 행 조합을 반환하며 self join은 하나의 테이블을 스스로 조인하는 방식입니다.

inner join은 두 테이블 간 일치하는 행만 반환하며 outer join은 일치하지 않는 데이터도 포함하여 Null 값을 채워 반환합니다.

Question

JOIN을 사용할 때 발생할 수 있는 성능 문제는 무엇인가요?

JOIN을 사용할 때 대용량 데이터나 복잡한 조건으로 인해 조인 연산이 많아지면 성능이 저하될 수 있습니다. 이를 해결하기 위해 인덱스를 생성하거나 조인 테이블의 크기를 줄이거나 필요한 데이터만 조회하도록 where 절을 추가하는 방식으로 최적화할 수 있습니다.