Open
Description
CPU 선점 스케줄링과 비선점 스케줄링에 대해 설명해 주세요.
- CPU 선점 스케줄링: 한 프로세스가 cpu를 할당받아서 실행하고 있을 때 다른 프로세스가 cpu를 사용하고 있는 프로세스를 중지시키고 cpu를 차지할 수 있는 스케줄링 기법
- 비선점 스케줄링: 이미 사용되는 cpu를 빼앗지는 못하고 사용이 끝날 때 까지 기다리는 스케줄링 기법
CPU 스케줄링이란 무엇인가?
- 현재 실행 중인 프로세스에서 다른 프로세스로 CPU를 넘겨야할 때 준비 큐에 있는 프로세스 중에서 어떤 프로세스를 선택할 지에 대한 정책
- CPU를 사용하려고 하는 프로세스 사이의 우선순위를 관리하는 작업
트랜잭션의 성질을 말씀해보세요.
- Atomicity는 트랜잭션의 연산이 DB에 모두 반영되던지 전혀 반영이되지 않던지 둘중에 하나만 수행해야한다.(원자성)
- Consistency는 트랜잭션이 성공적으로 완료된 후에는 언제나 일관성 있는 DB상태로 변환되어야한다.(일관성)
- Isolation은 수행중인 트랜잭션이 완전히 완료되기 전에는 다른 트랙잭션에서 수행 결과를 참조할 수 없다.(독립성)
- Durablility는 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.(영속성)
테이블에 대해서 설명해 주세요.
- 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
- 구성 요소
- 레코드(튜플): 테이블에 쌓이는 행 단위의 데이터
- 속성: 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
트랜잭션의 격리 수준을 설명해주세요.
- READ UNCOMMITTED: 다른 트랜잭션에서 커밋되지 않은 내용도 참조할 수 있다.
- READ COMMITTED: 다른 트랜잭션에서 커밋된 내용만 참조할 수 있다.
- REPEATABLE READ: 트랜잭션에 진입하기 이전에 커밋된 내용만 참조할 수 있다.
- SERIALIZABLE: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다. (성능 매우 떨어짐)
데이터베이스 무결성 중에서 하나를 설명해주세요.
- 참조 무결성 : 서로 참조관계에 있는 두 테이블의 데이터는 항상 일관된 값을 유지해야합니다.
제2정규화
- 릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태를 말함
- 부분 함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것을 말함
제3정규화
- 제2정규화이고 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태
- 이행적 함수 종속: A→B, B→C가 존재하면 논리적으로 A→C 성립. C가 A에 이행적으로 함수 종속
기본키와 슈퍼키의 차이는?
- 기본키는 유일성과 최소성을 만족하지만 슈퍼키는 유일성만 만족한다.
- 슈퍼키 중에서 후보키가 선택되고 후보키 중에서 기본키가 선택된다.
반정규화
- 반정규화 de-normalization: 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
- 즉, 성능 향상을 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다. 반정규화를 적용하면 데이터 무결성이 깨질 수 있는 위험이 있다.
트랜잭션을 병행할 때 발생할 수 있는 문제점을 설명해 주세요.
- 팬텀 리드: 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우 (행 값이 달라지거나 다른 행이 선택될 수 있음)
- 반복 가능하지 않은 조회: 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데 그 값이 다른 경우 (행 값이 달라질 수 있음)
- 더티 리드: 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행의 데이터를 읽을 수 있을 때 발생
트랜잭션에 대해서 설명해 주세요.
- 트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러 개의 연산이 수행될 수 있습니다.
- 트랜잭션은 수행 중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.
- commit: 여러 쿼리가 성공적으로 처리되었다고 확정하는 명령어로 트랜잭션 단위로 수행되며 변경된 내용이 모두 영구적으로 저장됨
- rollback: 트랜잭션으로 처리한 하나의 묶음 과정을 일어나기 전으로 돌리는 일
트랜잭션 전파
- 여러 트랜잭션 관련 메서드의 호출을 하나의 트랜잭션에 묶이도록 하는 것
- Spring Framework에서 @transactional 애노테이션을 통해 여러 관련 코드들을 하나의 트랜잭션으로 처리