8. 데이터 베이스

아래는 첨부하신 파일의 내용을 원본 그대로 보존하여, 요청하신 순서에 맞게 보기 좋게 정리한 문서입니다.


1. 키(Key) 정리

Key란?

검색, 정렬 시 Tuple을 구분할 수 있는 기준이 되는 Attribute


1. Candidate Key (후보키)

Tuple을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합.
조건:


2. Primary Key (기본키)

후보키 중 선택한 Main Key
특징:


3. Alternate Key (대체키)

후보키 중 기본키를 제외한 나머지 키 (보조키)


4. Super Key (슈퍼키)

유일성은 만족하지만, 최소성은 만족하지 못하는 키


5. Foreign Key (외래키)

다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합


2. SQL - JOIN

조인이란?

두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법으로, 적어도 하나의 칼럼을 서로 공유해야 한다.


JOIN 종류







3. SQL Injection

SQL Injection

해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법


공격 방법

1) 인증 우회


2) 데이터 노출


방어 방법

  1. 입력값 검증:

    • 특수문자 포함 여부 등을 검사하여, 미리 설정한 값이 들어왔을 때 요청 차단
  2. 에러 메시지 감추기:

    • SQL 서버 에러 발생 시 원본 DB 테이블에 대한 정보를 감추도록 설정
  3. preparestatement 사용:

    • preparestatement를 사용하면 특수문자 자동 escaping이 되어, SQL Injection 공격을 방어할 수 있음

4. SQL vs NoSQL

SQL과 NoSQL의 차이

웹 애플리케이션 개발 시 데이터베이스 선택의 중요한 기준이 됨.


SQL (관계형 DB)

Pasted image 20250313181633.png


NoSQL (비관계형 DB)


5. 정규화 (Normalization)

정규화(Normalization)

데이터의 중복을 줄이고, 무결성을 향상시킬 수 있는 정규화

목적


제 1정규화 (1NF)

Pasted image 20250313181809.png
원본 데이터

Pasted image 20250313181704.png
변환 후


제 2정규화 (2NF)

Pasted image 20250313181927.png
원본

Pasted image 20250313181847.png
변환 후


제 3정규화 (3NF)

Pasted image 20250313182010.png
원본

Pasted image 20250313181853.png
변환 후


6. 이상(Anomaly)

[DB] Anomaly

잘못된 테이블 설계로 인해 발생하는 이상 현상


예시:


1. 삽입 이상 (Insertion Anomaly)


2. 갱신 이상 (Update Anomaly)


3. 삭제 이상 (Deletion Anomaly)


7. 인덱스(INDEX)

Index(인덱스)


목적

추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조

파일 구성

테이블 생성 시 3가지 파일 생성:


단점


사용 시 고려사항


DML 발생 시 상황


인덱스 관리 방식


8. 트랜잭션(Transaction)

DB 트랜잭션(Transaction)


트랜잭션이란?

데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위
(예: SELECT, INSERT, DELETE, UPDATE)


트랜잭션 예시


트랜잭션의 특징 (ACID)


Commit과 Rollback


DBMS의 트랜잭션 관리 전략

  1. DBMS 구조:
    Pasted image 20250313182102.png

    • Query Processor와 Storage System으로 구성
    • 입출력 단위: 고정 길이의 page 단위
  2. Page Buffer Manager (Buffer Manager):

    • 메모리 내 page 관리, UNDO/REDO 복구에 영향을 줌
  3. UNDO:

    • 수정된 페이지가 디스크에 기록되기 전에, 비정상 종료 시 원상 복구
    • 정책:
      • Steal: 언제든지 디스크에 기록 (UNDO 필요)
      • Non-steal: EOT까지 버퍼에 유지 (UNDO 불필요)
  4. REDO:

    • Commit한 트랜잭션의 수정을 재반영
    • 정책:
      • FORCE: Commit 시 디스크에 바로 반영 (REDO 불필요)
      • Non-FORCE: Commit 시 반영하지 않음 (REDO 필요)

9. 트랜잭션 격리 수준 (Transaction Isolation Level)

트랜잭션 격리 수준(Transaction Isolation Level)


Isolation Level 개념


Isolation Level 종류

  1. Read Uncommitted (레벨 0)

    • 특징:
      • SELECT 문 수행 시 해당 데이터에 Shared Lock 미적용
      • Commit되지 않은 데이터도 읽을 수 있어 일관성 유지 어려움
    • 예시: 사용자1이 A를 B로 변경하는 중, 사용자2가 B 읽음
  2. Read Committed (레벨 1)

    • 특징:
      • SELECT 시 Shared Lock 적용, Commit된 데이터만 읽음
      • 다른 트랜잭션은 접근 대기
    • 대부분의 SQL 서버의 Default Isolation Level
  3. Repeatable Read (레벨 2)

    • 특징:
      • 트랜잭션 완료 시까지 조회한 데이터에 Shared Lock 유지
      • 결과의 일관성을 보장
    • MySQL의 Default Isolation Level
  4. Serializable (레벨 3)

    • 특징:
      • 트랜잭션 완료 시까지 SELECT한 모든 데이터에 Shared Lock 유지
      • 완벽한 읽기 일관성 제공, 다른 트랜잭션은 수정 및 입력 불가능

발생 가능한 현상


10. 저장 프로시저(Stored PROCEDURE)

저장 프로시저(Stored PROCEDURE)


일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합

Pasted image 20250313182141.png


개념 및 필요성


프로시저 생성 및 호출 예시

(IN) 매개변수 사용 예시

CREATE OR REPLACE PROCEDURE test( name IN VARCHAR2 ) 
IS
    msg VARCHAR2(5) := '내 이름은';
BEGIN 
    dbms_output.put_line(msg||' '||name); 
END;

EXEC test('규글');

출력:

내 이름은 규글

(OUT) 매개변수 사용 예시

CREATE OR REPLACE PROCEDURE test( name OUT VARCHAR2 ) 
IS
BEGIN 
    name := 'Gyoogle';
END;

DECLARE
    out_name VARCHAR2(100);
BEGIN
    test(out_name);
    dbms_output.put_line('내 이름은 '||out_name);
END;

출력:

내 이름은 Gyoogle

11. Redis


빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어

보통 데이터베이스는 하드 디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠른 장점이 존재함

캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용된다.`

RAM은 휘발성 아닌가요? 껐다키면 다 날아가는데..

이를 막기위한 백업 과정이 존재한다.

데이터 구조는 key/value 값으로 이루어져 있다. (따라서 Redis는 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템이다)

value 5가지
  1. String (text, binary data) - 512MB까지 저장이 가능함
  2. set (String 집합)
  3. sorted set (set을 정렬해둔 상태)
  4. Hash
  5. List (양방향 연결리스트도 가능)