본문 바로가기

DB

(20)
[CS] 데드락 데드락(교착 상태)두 개 이상의 프로세스 혹은 쓰레드가 서로가 가진 리소스를 기다리는 상태 데드락을 만드는 네 가지 조건상호 배제(Mutual exclusion): 리소스를 공유해서 사용할 수 없다.점유와 대기(hold and wait): 프로세스가 이미 하나 이상의 리소스를 취득한 상태(hold)에서 다른 프로세스가 사용하고 있는 리소스를 추가로 기다린다(wait).비선점(No preemption): 리소스 반환은 오직 그 리소스를 취득한 프로세스만 할 수 있다.원형 대기(Circular wait): 프로세스들이 순환하는 형태로 서로의 리소스를 기다리는 상태운영체제(OS)의 데드락 해결 방법데드락 방지데드락 회피데드락 감지와 복구데드락 무시데드락 방지(Deadlock prevention)네 가지 조건 ..
[DB] 병행 수행과 병행 제어 병행 수행과 병행 제어병행 수행데이터베이스 관리 시스템은 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러 개의 트랜잭션이 동시에 수행되는 병행 수행을 지원한다. 병행 수행은 실제로 여러 트랜잭션이 차례로 번갈아 수행되는 인터리빙 방식으로 진행된다. 그런데 병행 수행되는 트랜잭션들이 동시에 같은 데이터에 접근하여 변경 연산을 실행하려고 하면 예상치 못한 결과가 나타날 수 있다. 그러므로 병행 수행을 하더라도 각 트랜잭션이 다른 트랜잭션의 방해를 받지 않고 정확한 수행 결과를 얻을 수 있도록 제어해야 한다. 병행 제어여러 개의 트랜잭션이 병행 수행되면서 같은 데이터에 접근하여 연산을 실행하더라도, 문제가 발생하지 않고 정확한 수행 결과를 얻을 수 있도록 트랜잭션의 수행을 제어하는 것을 병행 제어 ..
[DB] 트랜잭션 회복 기법 트랜잭션작업 하나를 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것으로, 데이터베이스에서 논리적인 작업의 단위가 된다.데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다. 트랜잭션의 상태활동 상태: 트랜잭션이 수행되기 시작한 상태부분 완료 상태: 활동 상태의 트랜잭션이 마지막 연산을 처리한 상태완료 상태: 부분 완료 상태의 트랜잭션이 commit 연산을 실행한 상태실패 상태: 활동 상태나 부분 완료 상태에서 여러 원인으로 인해 더는 정상적인 수행이 불가능한 트랜잭션 상태철회 상태: 실패 상태의 트랜잭션은 롤백 연산의 실행으로 철회 상태가 된다.트랜잭션이 완료 상태이거나 철회 상태가 되면 트랜잭션이 종료된 것으로 판단 활동 상태트랜잭션이 수행되기 시작하여 현재 수행 중인 상태활동..
[DB] Soft Delete VS Hard Delete Soft Delete데이터를 실제로 삭제하지 않고, 삭제된 것처럼 표시만 하는 방식보통 is_deleted와 같은 플래그를 추가해 이를 관리합니다.특징:데이터는 여전히 저장소에 남아 있음."삭제됨" 상태를 나타내는 플래그를 이용.데이터를 복구하거나 기록을 추적할 수 있음.장점복구 가능: 실수로 삭제한 데이터를 복구할 수 있음.이력 관리: 데이터의 삭제 여부를 기준으로 과거 기록 확인 가능.참조 데이터 보호: 외래 키 제약 조건을 위반하지 않고 삭제 처리 가능.단점스토리지 증가: 삭제된 데이터를 계속 저장하기 때문에 데이터베이스 크기가 커질 수 있음.복잡한 쿼리: "삭제되지 않은 데이터"를 조회하려면 조건을 추가해야 함 (WHERE is_deleted = false).성능 저하: 많은 "삭제된" 데이터를 ..
[DB] 트랜잭션 ACID 트랜잭션단일한 논리적인 작업 단위논리적인 이유로 여러 SQL 문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것이 트랜잭션이다.트랜잭션의 SQL 문들 중에 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다.둘 다 정상 처리되어야만 성공하는 단일 작업 일반적인 트랜잭션 사용 패턴트랜잭션을 시작한다.데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직을 수행한다.일련의 과정들이 문제없이 동작했다면 트랜잭션을 커밋한다.중간에 문제가 발생했다면 트랜잭션을 롤백한다.트랜잭션이 가져야 할 속성 (ACID)AtomicityConsistencyIsolationDurabilityAtomicity(원자성)ALL or Nothing트랜잭션은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공..
[DB] 데이터베이스 설계 관계 데이터 모델을 기반으로 두고 데이터베이스를 설계할 때는 두 가지 방법을 주로 이용한다.(두 방법의 설계 결과물은 유사하기 떄문에 상황에 따라 선택하면 된다.)[ER 모델과 릴레이션 변환 규칙을 이용한 데이터베이스 설계][정규화를 이용한 데이터베이스 설계]ER 모델과 릴레이션 변환 규칙을 이용한 데이터베이스 설계 과정  1단계: 요구 사항 분석데이터베이스를 사용해 실제 업무를 처리하는 사용자에게서 필요한 데이터의 종류와 처리 방법 같은 다양한 요구 사항 수집수집한 요구 사항을 분석하여 요구 그 결과를 요구 사항 명세서 작성 2단계: 개념적 설계사용자의 요구 사항을 개념적 데이터 모델을 이용해 표현개념적 데이터 모델은 개발에 사용할 DBMS의 종류에 독립적이면서, 중요한 데이터 요소와 데이터 요소 간의..
[SQL] 트리거 목차트리거트리거 활용트리거가 사용하는 임시 테이블 트리거트리거트리거(trigger)는 자동으로 수행하여 사용자가 추가 작업을 잊어버리는 실수를 방지해줌트리거는 테이블에 INSERT 나 UPDATE 또는 DELETE 작업이 발생하면 실행되는 코드다.  트리거의 기본 작동트리거는 테이블에서 DML 문(INSERT, UPDATE, DELETE 등)의 이벤트가 발생할 때 작동한다.테이블에 미리 부착되는 프로그램 코드라고 생각하면 된다.스토어드 프로시저와 달리 트리거에는 IN, OUT 매개변수를 사용할 수 없다.AFTER 트리거 기준으로 설명한다. 테이블 생성CREATE TABLE IF NOT EXISTS trigger_table(id INT, txt VARCHAR(10));INSERT INTO trigger_t..
[SQL] 스토어드 프로시저, 스토어드 함수, 커서 목차스토어드 프로시저매개변수의 사용스토어드 함수커서 스토어드  프로시저스토어드 프로시저(저장 프로시저)란 MySQL에서 제공하는 프로그래밍 기능이다.스토어드 프로시저는 쿼리 문의 집합으로도 볼 수있으며, 어떠한 동작을 일괄 처리하기 위한 용도로도 사용한다.자주 사용하는 쿼리를 반복하기보다는 스토어드 프로시저로 묶어 놓고, 필요할 때마다 MySQL을 운영할 수있다. 가장 많이 사용하는 필수적인 형식DELIMITER $$CREATE PROCEDURE 스토어드_프로시저_이름 (IN 또는 OUT 매개변수)BEGIN -- 이 부분에 SQL 프로그래밍할 코드 작성 END $$DELIMITER ;$$ 는 $ 하나로 바꿔줘도 되지만 명확하게 표기하기 위해서 2개를 사용한다. (##, %%, // 등으로 교체..
[SQL] 인덱스 목차인덱스의 종류인덱스의 장단점클러스터형 인덱스보조 인덱스인덱스의 내부 작동인덱스의 구조인덱스의 활용인덱스를 효과적으로 사용하는 방법 인덱스인덱스는 데이터를 빠르게 찾을 수 있는 도구이다. 인덱스의 종류 클러스터형 인덱스기본 키를 생성하면 자동 생성테이블에 1개만 생성가능기본 키를 지정한 열을 기준으로 자동정렬보조 인덱스고유 키로 지정하면 자동 생성여러 개 만들수 있음자동 정렬 X 인덱스의 장단점장점SELECT 문으로 검색하는 속도가 매우 빨라진다.그 결과 컴퓨터의 부담이 줄어들어 결국 전체 시스템의 성능이 향상된다.단점인덱스도 공간을 차지해서 데이터베이스 안에 추가적인 공간이 필요하다.보통 테이블의 10% 정도 된다.처음 인덱스를 만드는 데 시간이 오래 걸릴 수 있다.SELECT 가 아닌 변경작업(IN..
[SQL] 뷰 뷰뷰는 데이터베이스의 개체 중 하나이다.뷰는 테이블처럼 데이터를 가지고 있지는 않다.뷰의 실체는 SELECT 문으로 만들어져 있다.뷰에 접근하는 순간 SELECT가 실행되어 화면에 출력하는 것이다.  뷰의 종류단순 뷰: 하나의 테이블과 연관된 뷰복잡 뷰: 2개 이상의 테이블과 연관된 뷰  뷰를 만드는 형식CREATE 뷰_이름AS SELECT 문; 뷰를 만든 후에 뷰를 접근하는 방식은 테이블과 동일하게 SELECT 문을 사용한다.SELECT 열_이름 FROM 뷰_이름 [WHERE 조건];  뷰 생성 예시CREATE VIEW v_memberAS SELECT mem_id, mem_name, addr FROM member;SELECT * FROM v_member; 필요한 열만 보거나 조건식을 넣..