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 특성)

  1. 원자성: 트랜잭션에 포함된 연산들을 모두 처리하거나, 모두 처리하지 않아야 한다.

  2. 일관성: 트랜잭션이 수행된 이후에도 DB 내의 데이터는 일관된 상태를 유지한다.

  3. 격리성: 하나의 트랜잭션이 끝날 때까지 다른 트랜잭션이 간섭할 수 없다. 독립성

  4. 지속성: 트랜잭션이 성공적으로 완료된 이후에 데이터들이 영구적으로 보존된다.

🔗 Commit과 Rollback

  • Commit: 하나의 트랜잭션이 성공적으로 수행되었음을 명시하기 위해 사용

    • 하나의 트랜잭션이 성공적으로 끝났다면, 데이터베이스가 일관성 있는 상태를 유지하게 된다.

  • Rollback: 트랜잭션이 비정상적으로 종료되어, DB의 일관성을 유지하기 어려울 때 사용

    • 원자성을 유지하기 위하여 해당 트랜잭션에 포함된 모든 연산을 취소

    • 해당 트랜잭션의 일부가 정상적으로 처리되었더라도 모든 연산을 이전으로 되돌린다.

🔗 트랜잭션의 상태 전이

  • 활동 active: 트랜잭션이 실행중이며, 동작 중인 상태

  • 부분 완료 partially committed: 트랜잭션이 마지막 명령을 실행한 직후의 상태

    • commit 요청이 들어오면, 부분 완료 상태가 된다. 문제가 없는 경우 완료 상태로 전환

  • 완료 committed: 트랜잭션이 정상적으로 완료되어 종료된 상태

  • 실패 failed: 트랜잭션이 더 이상 정상적으로 진행될 수 없어, 실패한 상태

  • 취소 aborted: 트랜잭션이 취소되어 트랜잭션 실행 이전 데이터로 돌아간 상태 Rollback

🔗 트랜잭션 사용의 유의사항

  • 작은 단위의 코드 위주로 트랜잭션을 사용하는 것을 권장한다.

  • DBMS 입장에서 사용자의 연결 수가 많으면 서버 부담이 커진다.

  • 트랜잭션을 처리하기 위한 커넥션 유지 기간이 길어지면, 전반적으로 프로그램의 대기 시간이 과도하게 길어진다.

Last updated