데이터베이스 기초(2)

Ju Young Jun·2021년 9월 13일
1

👨‍💻 트랜잭션이란?

데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미

❖ 고속버스 좌석 검색 (read), 좌석 티켓 구매(read, write)
❖ 은행 계좌 잔고 검색, 은행 계좌 이체
❖ DB 측면에서 보면, 단위 연산(READ, WRITE)들의 연속인데 실상은 작업의
단위로 묶어서 수행됨

->책이나 일부 트랜잭션 설명에서는 단위 연산(read, write)들의 연속이라 나오기도함.

다른 의미의 트랜잭션

데이터베이스의 상태를 변화시키기 위해서 수행되는 작업의 단위를 뜻함

=> 데이터베이스의 상태를 변화시킨다는 것은 간단하게 말해서 질의어(SQL)를 이용하여 데이터베이스를 접근하는 것을 의미함.

  • SELECT
  • INSERT
  • DELETE
  • UPDATE

주의할 점은 작업의 단위는 한문장이 아니라는 것 !

작업단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미함.
게시판을 예로 들어보면,게시판 사용자는 게시글을 작성하고, 올리기 버튼을 누른다. 그 후에 다시 게시판에 돌아왔을때,

게시판은 자신의 글이 포함된 업데이트된 게시판을 보게 됨.

이러한 상황을 데이터베이스 작업으로 옮기면, 사용자가 올리기 버튼을 눌렀을 시,
Insert 문을 사용하여 사용자가 입력한 게시글의 데이터를 옮긴다. 그 후에, 게시판을 구성할 데이터를 다시 Select 하여 최신 정보로 유지한다. 여기서 작업의 단위는 insert문과 select문 둘다 를 합친 것.
이러한 작업단위를 하나의 트랜잭션이라 한다.

관리자나 개발자가 하나의 트랜잭션 설계를 잘하는 것이 데이터를 다루는 것에 많은 이점이 있다고 함.

👨‍💻 트랜잭션의 특징

트랜잭션의 특징은 크게 4가지로 구분됨.

트랜잭션의 4가지 중요한 성질(ACID)

Atomicity(원자성): 트랜잭션 내의 연산들이 모두 수행되거나 혹은 전혀 수행되지 않음(all or nothing, 1 or 0)

트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 함. 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 무리가 없다.만약 트랜잭션 단위로 데이터가 처리되지 않는다면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들 뿐만 아니라, 오작동 했을시 원인을 찾기가 매우 힘들어 짐.

Consistency(일관성): 트랜잭션의 시작전과 후에 DB는 항상 일관성을 유지해야 함.

트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 함.
트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라,
처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행 됨.
이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것.

Isolation(고립성 혹은 독립성): 여러 트랜잭션들이 동시에 수행될 지라도 사용자들은 자신의 트랜잭션만 수행되는 것으로 인식.

둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리 킴.
하나의 특정 트랜잭션이 완료될때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없음.

Durability(지속성): 일단 하나의 트랜잭션이 성공적으로 수행되면, 그 효과는 지속적이어야 함.

트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 함.

👨‍💻 동시수행 및 제어

  • 좋은 DBMS 성능을 위해서는 트랜잭션들을 동시(병행) 수행하는 것이 필수적
  • 디스크 접근은 빈번하며 비교적 저속이므로, 사용자 프로그램을 동시에 여러 개를 수행함으로써 CPU를 idle하지 않게 하는 것이 중요함(busy게)
  • 여러 프로그램의 단위작업을 교차 수행할 때 모순성 발생가능: 예, 잔금확인(read) 도중 수표 결제(write)
  • 동시성 제어: 잠금 프로토콜(lock)을 준수하여 DBMS는 이러한 문제가 없도록 보장

👨‍💻 미완료 트랜잭션과 시스템 붕괴

  • 트랜잭션이 완료되기전에 시스템이 붕괴 등으로 중단될 수 있음

  • 완료되지 않은 트랜잭션들에 의해 수행된 변경들이 취소되는 것을 보장해야 함
    ❖ 예시:
    계좌 A에서 계좌 B로 송금하는 이체 트랜잭션 연산들
    1) 계좌 A에서 X원을 인출
    2) 계좌 A에서 계좌 B로 송금
    3) 계좌 B로 X원 입금
    트랜잭션 실행 1 하면 ?
    1) 계좌 A에서 X원을 인출
    2) **계좌 A에서 계좌 B로 송금하는 도중에 시스템 붕괴**
    3) 시스템이 복구될 때, X원을 계좌 A로 반환하는 것이 필요

  • 이를 위해 DBMS는 모든 기록 액션에 로그(log)를 유지 관리함

  • 로그 우선 기록 (Write-Ahead Log, WAL)
    ❖ 각 기록 작업은 DB에 반영되기전에 (디스크상의) 로그에 기록되어야 함
    ❖ 이를 위해 DBMS는 메모리상의 로그 페이지를 디스크에 강제 출력할 수 있아야 함

  • 데이터 복구
    트랜잭션 실행 1에서
    1) 계좌 A에서 X원을 인출 : 이 액션을 로그에 기록하고 로그 파일에 강제 출력 & 인출
    2) 계좌 A에서 계좌 B로 송금하는 도중에 시스템 붕괴
    3) 시스템이 복구될 때, 로그 파일의 기록을 보고 계좌 A로 X원 반환함

👨‍💻데이터베이스 생명주기 혹은 데이터베이스 설계 과정

데이터베이스 생명주기는 데이터베이스의 생성과 운영에 관련된 특징을 의미하고 아래의 5단계로 구성함.

  • 요구사항 수집 및 분석
  • 설계
  • 구현
  • 운영
  • 감시 및 개선

요구사항 수집 및 분석의 단계에서는 사용자들의 요구사항을 듣고 분석하여 데이터베이스 구축의 범위를 정함.
설계 단계에서는 분석된 요구사항을 기초로 주요 개념과 업무 프로세스 등을 식별하고(개념적 설계) 사용하는 DBMS의 종류에 맞게 변환(논리적 설계)한 후, 데이터베이스 스키마를 도출(물리적 설계)함. 즉, 설계의 단계에서 개념적 모델링을 하여 ER다이어그램을 도출하고 이를 이용하여 관계 스키마 모델을 도출하고 이를 물리적 모델링하여 관계 스키마를 도출해냄.
구현의 단계에서는 설계 단계에서 생성한 스키마를 실제 DBMS에 적용하여 테이블 및 관련 객체(뷰 or 인덱스)를 만듦
운영의 단계에서 구현된 데이터베이스를 기반으로 소프트웨어를 구축하여 서비스를 제공.
그리고 감시 및 개선의 단계에서는 데이터베이스 자체의 문제점을 파악하여 개선.

<👨‍💻다시 스키마에 대해서..>

스키마란?

컴퓨터 과학에서 데이터베이스 스키마(database schema)는 데이터베이스에서 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조. 데이터베이스 관리 시스템(DBMS)이 주어진 설정에 따라 데이터베이스 스키마를 생성하며, 데이터베이스 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터베이스 스키마를 참조하여 명령을 수행.

스키마는 3층 구조로 되어있음.

  • 외부 스키마(External Schema) : 프로그래머나 사용자의 입장에서 데이터베이스의 모습으로 조직의 일부분을 정의한 것.
  • 개념 스키마(Conceptual Schema) : 모든 응용 시스템과 사용자들이 필요로하는 데이터를 통합한 조직 전체의 데이터베이스 구조를 논리적으로 정의한 것.
  • 내부 스키마(Internal Schema) : 전체 데이터베이스의 물리적 저장 형태를 기술하는 것. - wikipedia 발췌 -

스키마는 3계층 스키마로 나누어져 구성되어있고, 이 각각의 스키마는 결국 데이터베이스의 구조와 제약조건에 대한 전반적인 명세를 기술한 것을 의미한다. 3계층으로 스키마를 나눈 이유는 관점에 따라서 분류한 것.

  • 외부스키마 : 개인의 입장, '서브스키마'라고도 한다, 사용자 뷰를 가리킨다. 하나의 외부스키마는 여럿이 공유 가능하며, 하나의 DB시스템에 여러 개의 외부스키마가 존재 가능

  • 내부스키마 : 시스템 프로그래머나 설계자의 관점에서 바라보는 스키마,데이터베이스의 물리적 구조를 가리킴(= 실제 저장방법을 기술하는 물리적인 저장장치와 관련됨)

  • 개념스키마 : 조직 전체의 입장, 전체적인 뷰를 가리킨다. 개체간의 관계와 제약조건을 나타내고, 데이터베이스의 접근권한/보안/무결성 규칙에 대한 명세를 정의함,

    일반적으로 '스키마'라는 내부스키마를 가리키는데,
    내부스키마는 DBA가 만듦, 데이터베이스의 전체적인 구조로써 하나만 존재해야 함
    데이터베이스 관리자(database administrator, DBA): 데이터베이스 시스템의 관리를 책임진 사람

👨‍💻 3가지 모델링

  • 개념적 모델링: 개체와 개체들 간의 관계에서 ER다이어그램을 만드는 과정
  • 논리적 모델링: ER다이어그램을 사용하여 관계 스키마 모델을 만드는 과정
  • 물리적 모델링: 관계 스키마 모델의 물리적 구조를 정의하고 구현하는 과정
    정보 모델링(Information Modeling)이라고도 불리는 개념적 모델링(Conceptual Modeling)이란 요구사항을 수집하고 분석한 결과를 토대로 업무의 핵심적인 개념을 구분하고 전체적인 뼈대를 만드는 과정.
    즉, 개념적 모델링이란 개체(Entity)를 추출하고 개체들 간의 관계를 정의하여 ER다이어그램을 만드는 과정까지를 말함. 논리적 모델링이란 개념적 모델링에서 만든 ER 다이어그램을 사용하려는 DBMS에 맞게 사상(Mapping)하여 실제 데이터베이스로 구현하기 위한 관계 스키마 모델을 만드는 과정. 논리적 모델링을 하는 과정에는 상세속성 추출, 정규화 수행, 데이터 표준화 수행이 있슴. 마지막 물리적 모델링은 작성된 논리적 모델을 실제 컴퓨터의 저장 장치에 저장하기 위한 물리적 구조를 정의하고 구현하는 과정.


👨‍💻Entity-Relationship (ER) 모델

ER 모델
❖ 개체-관계 모델로 현실 세계에 존재하는 데이터와 그들 간의 관계를 사람이
이해할 수 있는 형태로 명확하게 표현하기 위해서 널리 사용되고 있는 모델
❖ 개념적 모델링의 대표적인 도구
❖ 요구사항으로부터 얻어낸 정보들을 개체(Entity), 애트리뷰트(Attribute),
관계(Relation)로 기술하는 데이터 모델
❖ 1976년 P. Chen이 제안하였음
ERD (ER Diagram)
❖ 개체와 관계에 대한 정보로는 무엇을 DB에 저장해야 할까?
❖ ER 모델의 기본적인 아이디어를 시각적으로 가장 잘 나타내는 것
❖ 표기법은 다수가 존재
❖ 개체 집합 타입은 사각형, 관계 집합타입은 다이아몬드, 개체의 속성은 원
속성은 타원으로 표기

요구사항 -> 개체들, 관계들 파악, 제약 조건들 파악 -> ERD 작성

👨‍💻개체, 속성, 개체집합

Entity, Attribute, Entity Set

  • 개체(Entity)
    ❖ 다른 객체들로부터 구별될 수 있는 객체
    ❖ 실세계에서 독립적으로 존재
    ❖ 예: Employee 사원, Student 학생, Course 과목
  • 개체집합(Entity Set)
    ❖ 같은 종류의 개체들의 모임
    ❖ 예: Employee들의 모임 Employees
    ❖ 예: 학생들의 모임 Students, 과목들의 모임 Courses
  • 속성(Attribute):개체를 서술하는 요소
    ❖ 예: Employee를 서술하는 ssn(주민번호), name, lot(주차번호)
    ❖ 예: Student를 서술하는 sid, name, age
  • 도메인: 각 속성이 가질 수 있는 값들의 집합
    ❖ 예: Employees(ssn String, name String, lot integer)
    ❖ ssn의 String, name의 String, lot의 integer

👨‍💻 키, 후보키, 기본키, 수퍼키

키: 개체 집합/관계 집합에서 개체/관계를 유일하게 식별하는 값을

갖는 최소개의 속성들의 집합(유일 & 최소개)
유일성 : 하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질
최소성 : 키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질
❖ Students (sid: string, name: string, login: string, age: integer, gpa: real)
➢ 키: {sid}, 키X: {sid, name}
❖ Courses (cid: string, cname: string, credits: integer)
➢ 키: {cid}, 키X: {cid, cname}
❖ Enrolled (sid: string, cid: string, grade: string)
➢ 키X: {cid}, {sid}, 키: {sid,cid}, 키X: {sid,cid,grade}

  • (후보)키: 개체의 속성들 중 키가 2 개 이상 있을 때의
    각각의 키
    ❖ Employees(ssn, name, lot, drn) (주민번호, 이름, 주차번호, 운전면허 번호)
    ➢ (후보)키: {ssn}, (후보)키: {drn}
    최소성 O, 유일성 O
  • 기본키: 후보키들 중의 하나를 기본키로 선택
    ❖ 예: 기본키: {ssn}
    ❖ {ssn, name}: 유일하게 식별하나, 최소개가 아니므로 키는 아님
  • 수퍼키: 식별기능, {ssn, name}, {ssn}
    어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있으면 된다.
    최소성 X, 유일성 O
profile
안녕하세요 :)

0개의 댓글