본문 바로가기
Tech Interview/Database

[데이터베이스] 정규화와 트랜잭션

by ggyongi 2021. 11. 15.
반응형

Q) 이상현상이란 무엇이며 어떤 종류가 있나요?
A) 이상현상이란 데이터의 중복 저장으로 인해 발생하는 일종의 부작용입니다. 종류는 삽입 이상, 갱신 이상, 삭제 이상입니다. 삽입 이상은 데이터 삽입 시 불필요한 데이터까지 함께 삽입해야 되거나 삽입하는데 자료가 부족해 삽입이 되지 않는 문제를 말합니다. 갱신 이상은 데이터 갱신 시 일부만 변경하여 데이터가 불일치하게 되는 모순 현상을 말합니다. 삭제 이상은 데이터 삭제 시 필요한 데이터까지 삭제되는 데이터 손실을 말합니다.


Q) 정규화는 무엇인가요?
A) 정규화는 관계데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업입니다. 이상 현상이 발생하지 않도록 릴레이션을 분해합니다. 이때 함수적 종속성을 판단하게 됩니다. 함수적 종속성이란 속성들 간의 종속 관계를 의미합니다. 릴레이션은 분해될 때 무손실 분해되어야 합니다. 분해 시 데이터의 손실이 일어나선 안되며, 자연 조인으로 분해 전의 릴레이션으로 복구가 가능해야 합니다.
+) 완전함수종속이란 속성집합 Y가 속성집합 X에 종속되어 있지만 속성집합 X의 일부분에는 종속되지 않는 것을 말하며, 부분함수종속이란 속성집합 X의 일부분에도 종속되어 있는 것을 말합니다.


Q) 정규형의 종류에 대해 설명해주세요.
A) 제 1 정규형에서는 릴레이션의 모든 속성이 더는 분해되지 않는 원자값을 가져야 합니다. 제1 정규형을 만족하더라도 여전히 이상현상(삽입, 갱신, 삭제)이 발생할 수 있습니다.
제 2 정규형에서는 제 1 정규형을 만족하면서 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 합니다. 이를 만족시키지 않을 시 분해를 통해 제 2 정규형을 만족하도록 만들 수 있습니다. 여전히 이상현상(삽입, 갱신, 삭제)이 발생할 수 있습니다.
제 3 정규형은 제 2 정규형을 만족하면서 기본키가 아닌 모든 속성이 기본키에 이행적 종속 관계를 가지지 않는 것을 말합니다. 즉 기본키가 아닌 속성들은 기본키에만 의존해야 합니다. 여전히 이상현상(삽입, 갱신, 삭제)이 발생할 수 있습니다.
+) 보이스콜드 정규형은 릴레이션의 모든 함수 종속 관계에서 결정자가 모두 후보키인 것을 말합니다. 즉 후보키가 아닌 속성이 결정자가 되면 안됩니다.
+) 조회를 하는 SQL문장에서 조인이 많이 발생하여 성능 저하가 발생하는 경우 반정규화를 사용하는 전략을 사용해야 합니다. 반정규화는 시스템의 성능 향상과 개발 및 운영의 단순화를 위해 데이터를 통합하여 관리하는 기법입니다. 데이터의 무결성이 깨질 수 있기 때문에 사용 시 주의해야 합니다.


Q) 트랜잭션이란 무엇인가요? 어떤 특성을 갖고 있나요?
A) 트랜잭션은 하나의 작업을 수행하는 데 필요한 DB의 연산들을 모아놓은 것으로, DB에서 논리적 작업의 단위를 의미합니다. 트랜잭션의 특성은 ACID라고 일컫는 네 가지 특성을 가지고 있습니다.
원자성(Atomicity)은 트랜잭션을 구성하는 연산들이 모두 수행되거나 모두 수행되지 않아야 한다는 특성입니다.
일관성(consistency)은 트랜잭션 수행 후에도 데이터베이스가 일관된 상태를 유지해야 함을 말합니다.
격리성(isolation)은 수행중인 트랜잭션이 완료될 때까지 다른 트랜잭션이 중간 연산 결과에 접근할 수 없음을 말합니다.
지속성(durability)는 트랜잭션이 성공적으로 완료된 후의 수행 결과는 손실되지 않아야 한다는 의미입니다.


Q) 트랜잭션의 상태에 대해 간략히 설명해주세요.
A) 활동(Active) 상태는 트랜잭션이 실행중임을 의미합니다. 부분 완료(Partially committed)는 트랜잭션의 마지막 연산까지 처리하고 최종 결과를 데이터베이스에 반영하기 전 상태임을 의미합니다. 즉 commit 명령만 남은 상태입니다.
완료(committed) 상태는 트랜잭션이 정상적으로 완료된 상태입니다. 실패(failed) 상태는 오류 등 이유로 트랜잭션 시행이 중단된 상태입니다. 철회(Aborted) 상태는 트랜잭션이 최소된 상태입니다.



Q) 데이터베이스의 회복은 어떤 방식으로 이루어지나요?
A) 회복 연산은 두 가지가 있습니다. redo 연산은 가장 최근의 데이터베이스 복사본을 가져온 후 로그를 이용하여 복사본이 만들어진 이후의 변경연산들을 재실행하여 장애 전의 데이터베이스로 복구하는 것을 말합니다. undo 연산은 로그를 이용하여 지금까지 실행된 모든 변경 연산을 취소하여 데이터베이스를 원래대로 복구하는 것을 말합니다. redo 연산이나 undo연산에는 로그가 중요하게 사용됩니다.
로그를 이용한 회복 기법은 데이터 변경 연산 결과를 데이터베이스에 반영하는 시점에 따라 두 가지로 나뉩니다.
즉시 갱신 회복 기법은 트랜잭션 수행 중에 데이터를 변경한 연산 결과를 데이터베이스에 즉시 반영합니다. 상황에 따라 redo 연산과 undo 연산을 적절히 수행해야 합니다.
지연 갱신 회복 기법은 트랙잭션 수행 중에는 연산 결과를 로그 파일에만 기록해두었다가 트랜잭션이 부분 완료된 후에 로그 내용을 데이터베이스에 한번에 반영하는 기법입니다. 트랜잭션 수행 중 장애 발생시 로그를 버리기만 하면 되기때문에 undo 연산은 필요없고 redo 연산만 적절히 수행해주면 됩니다.


Q) 병행 제어 기법은 무엇인가요?
A) 병행 제어 기법은 트랜잭션을 병행 수행하면서도 정확한 결과를 얻을 수 있도록 직렬 가능성을 보장하는 것입니다. 로킹 기법에서는 lock 연산과 unlock 연산을 통해 트랜잭션들이 동일한 데이터에 접근하지 못하도록 제어합니다.
lock연산은 데이터에 대해 독점권을 요청하는 연산이고, unlock은 독점권을 반납하는 연산입니다.

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글