ORM?
객체와 관계형 데이터베이스를 매핑하는 도구를 의미.
{}객체 <-> ORM <-> 관계형 데이터베이스
SQL문을 사용하지 않고 객체 지향적 코드를 작성할 수 있어서 코드의 가독성을 높이고 개발자 편의성을 증대할 수 있다.
대표적인 ORM 프레임워크 :
java- 하이퍼네이트. Hibernate
python- 장고. Django
ruby- 레코드. AvtiveRecord
트랜잭션?
테이터베이스의 상태를 바꾸기 위해 수행하는 작업, 일련의 연산.
트랜잭션의 특징 : ACID
- 원자성(Atomicity) : 트랜잭션이 데이터베이스에 완전히 반영되거나 아예 실행되지 않아야함.
- 일관성(Consistency) : 트랜잭션 수행이 완료된 데이터베이스는 일관성있게 유지되어야 한다.
- 독립성(Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없다.
- 영속성(Durability) : 완료된 트랜잭션의 결과는 데이터베이스에 영구적으로 반영되어야 한다.
트랜잭션 제어문 TCL?
- COMMIT : 트랜잭션 정상 종료 되어 데이터베이스에 변경 사항 반영
- ROLLBACK : 트랜잭션이 비정상적으로 종료되어 트랜잭션이 수행한 변경 사항을 취소하고 이전상태로 되돌림
- SAVEPOINT : 트랜잭션에서 특정 지점을 지정. ROLLBACK과 함께 사용하면 해당 지점까지 되돌릴 수 있다.
트랜잭션 격리?
여러 트랜잭션이 서로 영향을 미치지 않고 실행될 수 있는 단계.
- Read Uncommited : COMMIT 여부와 상관없이 다른트랜잭션이 데이터를 조회할 수 있다. 동시성은 높지만 일관성을 유지하기 어렵다.
- Read Commited : COMMIT된 데이터만 다른 트랜잭션이 조회할 수 있다.
- Repeatable Read : 트랜잭션이 읽은 데이터를 다른 트랜잭션이 갱신하거나 삭제할 수 없다.
- Serializable : 트랜잭션이 읽은 데이터를 다른 트랜잭션이 갱신, 삭제, 삽입할 수 없다.
1번으로 갈수록 동시성이 높아지고 4번으로 갈수록 일관성이 높아진다.
락?
트랜잭션이 처리되는 순서를 보장하기 위한 방법이다.
- 공유 락(Shared lock) : 데이터를 읽는 락으로 읽기 락이라고도 한다. 데이터를 읽는 연산이므로 일관성에 영향을 주지 않아 여러 공유 락이 동시에 접근할 수 있다.
- 베타 락(Exclusive lock) : 데이터를 수정하는 락으로 쓰기 락이라고도 한다. 데이터의 일관성을 유지하기 위해 하나의 베타 락이 접근 중이면 다른 베타락이 접근할 수 없다.
DB교착상태?
DB도 프로세스처럼 교착상태에 빠질 수 있다. 한 트랜잭션이 처리중인 데이터에 대해 락을 걸고 다른 트랜잭션들이 처리중인 해당 데이터에 접근하려 할때 무한 대기 상태에 빠지는 경우가 있다.
DB교착상태 해결 기법?
- 예방 기법 : 트랜잭션 처리가 시작되기 전에 필요한 데이터에 대해 미리 락을 얻는 방식.
- 회피 기법 : 트랜잭션이 들어온 순서에 따라 교착 상태를 회피하는 방식.
- wait-die : 데이터의 락을 요청하는 트랜잭션이 해당 데이터에 대해 이미 락을 갖고 있는 트랜잭션보다 오래되었다면 락을 얻을때 까지 대기. 락을 갖고 있는 트랜잭션보다 최신이라면 락 획득 포기.
- wound-wait : 데이터의 락을 요청하려는 트랜잭션이 더 오래 되었다면 락을 빼앗음. 더 최신이라면 락 획득을 기다림.
이상?
트랜잭션 처리 중 속성 간 종속이나 데이터 중복으로 발생하는 문제.
- 삽입 이상 : 데이터 삽입 시 의도치 않은 데이터도 삽입.
- 갱신 이상 : 일부만 갱신되는 이상.
- 삭제 이상 : 의도치 않은 데이터도 삭제.
정규화?
데이터베이스의 이상 현상을 해결하기 위해 테이블을 분해하는 것.
중복데이터를 허용하지 않음.
- 제 1정규형 : 테이블의 모든 속성 값이 더 이상 분해될 수 없는 값. 원자 값으로 구성.
- 제 2정규형 : 부분적 함수 종속을 제거해 완전 함수 종속을 만족. A 속성이 B속성을 결정하면 B가 A에 함수 종속. A는 결정자, B는 종속자. 즉, 기본 키의 진부분집합이 결정자가 될 수 없도록 테이블을 분해해야 완전 함수 종속을 만족함.
- 제 3정규형 : 이행적 종속이 없어야 한다. 이행적 종속? -> A가 B를 결정, B가 C를 결정할 때 A가 C를 결정하는 것. 즉, A가 B를 결정하는 테이블1과 B가 C를 결정하는 테이블2로 분해해야한다.
- BCNF(보이스-코드) 정규형 : 모든 결정자가 후보 키가 되도록 테이블을 분해.
- 제 4정규형 : 제 3정규형에 속하며 다치 종속을 제거해야한다. 다치 종속? -> 테이블에서 한 속성이 여러 속성의 값을 결정하는 것.
- 제 5정규형 : 제 4정규형에 속하며 조인 종속이 없어야 한다. 조인 종속x? -> 테이블을 분해했다가 조인할 때 테이블이 복원된다는 것.
역정규화?
낮은 정규화 단계의 테이블로 되돌리는것. 읽기 성능을 향상 시킬때 주로 이용된다.
정규화 수행시 테이블이 분해되므로 필요한 결과를 얻을때 join이 필요한 경우가 많아진다.
데이터베이스의 부하를 줄이기 위해 중복을 허용하는 역정규화를 수행하는 경우도 있다.
'CS > 데이터베이스' 카테고리의 다른 글
데이터 베이스 - 스키마, 키, 인덱스 (0) | 2024.06.20 |
---|