3️⃣데이터베이스(Database)
1. 데이터베이스 기초
🔗 데이터베이스란?
웹 사이트/앱을 개발 할 때, 회원 정보/게시글 정보 등을 저장하기 위한 저장 공간으로 데이터베이스를 사용한다.
🔗 DBMS란?
데이터베이스 관리 시스템(DBMS)는 다수의 사용자가 데이터베이스에 존재하는 데이터에 접근할 수 있도록 해주는 소프트웨어
Java 기반의 서버 프로그램에서는 JDBC를 이용해 MySQL에 접근 가능하다.
🔗 관계형 데이터베이스란?
관계형 데이터베이스에서는 전체 데이터를 행(row)과 열(column)이 존재하는 하나 이상의 테이블(관계, relation)로 정의한다.
여러 레코드(record)가 담긴 테이블을 관계(relation)로 정의
관계 = 테이블: 같은 속성을 지닌 튜플 모임
관계형 데이터베이스 관리 시스템(BDBMS) 예시: Oracle, MySQL, MSSQL
관계형 데이터베이스에서는 테이블에 따라서 데이터가 분리되어, 중복이 적다.
관계형 데이터베이스에서는 두 테이블에 대해 특정 키(key)를 기준으로 데이터를 조회할 수 있다.
테이블을 분리하지 않고, 하나의 테이블만 이용한다면 데이터 중복이 발생할 수 있다.
주문 정보와 고객 정보를 하나의 테이블에 넣은 경우
2. 키(Key)
🔗 테이블
테이블 내 각 데이터는 행(row)과 열(column)이 만나는 지점에 데이터가 들어간다.
행 = 레코드 = 튜플
열 = 필드 = 속성
🔗 테이블 및 컬럼 컨벤션
테이블의 이름은 단수형
이름을 붙일 때는 snake case 사용 ex. retired_employee
테이블의 key는 {테이블 이름의 단수형}_id 형태를 쓴다.
student 테이블
속성 1: student_id
속성 2: name
속성 3: age
속성 4: grade
테이블 제약 조건 - 기본
NOT NULL
: NULL 값 비허용, 중복 허용UNIQUE
: NULL 값 허용, 중복 비허용PRIMARY KEY
: NULL 값 비허용, 중복 비허용, 테이블당 한 개DEFAULT
: 해당 컬럼의 기본 값을 설정
테이블 제약 조건 - 외래키
외래키(foreign key)는 하나의 테이블이 다른 테이블을 참조할 때 사용
3. SQL
🔗 SQL이란?
Structured Query Language
DBMS에 존재하는 데이터를 관리하기 위한 프로그래밍 언어
DBMS에서 각각의 자료(data)를 조회, 생성, 수정, 삭제할 수 있도록 한다.
🔗 MySQL이란?
세계적인 오픈 소스 관계형 데이터베이스 관리 시스템(DBMS)
4. 데이터베이스 정규화(Normalization)
데이터베이스의 중복을 최소화하고 데이터의 일관성을 최대화
데이터를 분해하는 과정
이상현상(Anomaly)을 방지
🔗 이상현상(Anomaly)이란?
삽입 이상: 데이터를 삽입할 때 의도와는 상관없는 데이터도 함께 삽입되는 문제
삭제 이상: 데이터를 삭제할 때 의도와는 상관없는 데이터도 함께 삭제되는 문제
수정 이상: 데이터를 수정할 때 의도와는 상관없는 데이터도 함께 수정되는 문제
제 1정규화, 제2정규화, 제3정규화
5. 트랜잭션(Transation)
트랜잭션은 DBMS에서 하나의 작업 단위를 의미
하나의 계좌에대해 서로 다른 두 곳에서 동시에 돈을 인출한다면?
두 트랜잭션을 모두 거부하거나, 더 빠르게 호출된 요청을 처리하는 것이 합당하다.
🔗 트랜잭션의 4가지 특성 (ACID 특성)
원자성: 트랜잭션에 포함된 연산들을 모두 처리하거나, 모두 처리하지 않아야 한다.
일관성: 트랜잭션이 수행된 이후에도 DB 내의 데이터는 일관된 상태를 유지한다.
격리성: 하나의 트랜잭션이 끝날 때까지 다른 트랜잭션이 간섭할 수 없다. 독립성
지속성: 트랜잭션이 성공적으로 완료된 이후에 데이터들이 영구적으로 보존된다.
🔗 Commit과 Rollback
Commit: 하나의 트랜잭션이 성공적으로 수행되었음을 명시하기 위해 사용
하나의 트랜잭션이 성공적으로 끝났다면, 데이터베이스가 일관성 있는 상태를 유지하게 된다.
Rollback: 트랜잭션이 비정상적으로 종료되어, DB의 일관성을 유지하기 어려울 때 사용
원자성을 유지하기 위하여 해당 트랜잭션에 포함된 모든 연산을 취소
해당 트랜잭션의 일부가 정상적으로 처리되었더라도 모든 연산을 이전으로 되돌린다.
🔗 트랜잭션의 상태 전이
활동
active
: 트랜잭션이 실행중이며, 동작 중인 상태부분 완료
partially committed
: 트랜잭션이 마지막 명령을 실행한 직후의 상태commit
요청이 들어오면, 부분 완료 상태가 된다. 문제가 없는 경우 완료 상태로 전환
완료
committed
: 트랜잭션이 정상적으로 완료되어 종료된 상태실패
failed
: 트랜잭션이 더 이상 정상적으로 진행될 수 없어, 실패한 상태취소
aborted
: 트랜잭션이 취소되어 트랜잭션 실행 이전 데이터로 돌아간 상태Rollback
🔗 트랜잭션 사용의 유의사항
작은 단위의 코드 위주로 트랜잭션을 사용하는 것을 권장한다.
DBMS 입장에서 사용자의 연결 수가 많으면 서버 부담이 커진다.
트랜잭션을 처리하기 위한 커넥션 유지 기간이 길어지면, 전반적으로 프로그램의 대기 시간이 과도하게 길어진다.
Last updated