[관계형 데이터베이스] 관계형 데이터베이스

김수민·2024년 1월 3일

데이터베이스

목록 보기
1/1

[데이터베이스]

1. Database

  • Query : 저장되어 있는 데이터를 필터하는 질의문
  • SQL은 데이터베이스용 프로그래밍 언어
  • 데이터베이스에 query를 보내 원하는 데이터를 뽑아올 수 있음

2. Database 필요성

  • In-memory는 서버/클라이언트 종료 시 소멸
  • File I/O은 원하는 데이터만 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링
  • Database는 필터링 혹은 File I/O로 구현이 힘든 관리를 위한 여러 기능을 활용 가능
  • 즉, 데이터를 저장하고, 필터링할 수 있는 데이터에 특화된 서버

3. Database 활용

  • 클라이언트가 서버에게 조건에 따른 데이터를 보여달라 요청
  • 서버는 요청 처리를 위해 데이터베이스에 쿼리를 보냄
  • 데이터베이스는 필터링 후, 필터링 된 데이터를 전달
  • 서버는 이미 필터링 된 데이터를 전달받기 때문에, 별도의 데이터 가공 작업이 불필요

[SQL]

1. SQL(Structured Query Language)

  • 구조화된 쿼리 언어
  • 데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용
  • 데이터베이스에 쿼리를 보내 원하는 데이터를 조회/삽입
  • 데이터 구조가 고정되어 있는 데이터베이스에서 사용 가능

2. 쿼리

  • "질의문" (ex. 검색 시 입력하는 검색어)
  • 저장되어 있는 데이터를 필터하기 위한 질의문이라 볼 수 있음

3. 데이터베이스 관련 명령어

  1. 데이터베이스 생성
   CREATE DATABASE 데이터베이스_이름;
  1. 데이터베이스 사용
  • 데이터베이스를 이용해 작업을 수행하기 전, 데이터베이스 사용 명령 필요
   USE 데이터베이스_이름;
  1. 테이블 생성
  • 테이블은 필드(열)와 함께 생성
   CREATE TABLE 테이블_이름 (
     열1 int PRIMARY KEY AUTO_INCREMENT,
     열2 필드_타입 속성
   );
  1. 테이블 정보 확인
   DESCRIBE 테이블_이름;
  1. SELECT
  • 데이터셋에 포함될 특성을 특정
   SELECT 'hello world'
  1. FROM
  • 테이블과 관련된 작업 시, 반드시 입력
  • FROM 뒤에 결과를 도출해 낼 데이터베이스 테이블을 명시
   SELECT 특성1
   FROM 테이블_이름
  1. WHERE
  • 필터 역할을 하는 쿼리문(선택적 사용 가능)
   SELECT 특성1, 특성2
   FROM 테이블_이름
   WHERE 특성1 = "특정 값"
  1. ORDER BY
  • 돌려받는 데이터 결과를 특정 기준으로 정렬하여 출력할지 결정(선택적 사용 가능)
   SELECT *
   FROM 테이블_이름
   ORDER BY 특성1  // DESC 명시 안할 시, 오름차순 정렬
  1. LIMIT
  • 결과를 출력할 데이터 개수 지정(선택적 사용 가능)
  • 쿼리문 가장 마지막에 추가
   SELECT *
   FROM 테이블_이름
   LIMIT 200 // 결과 200개만 출력
  1. DISTINCT
  • 유니크한 값을 받고 싶을 때 사용
   SELECT DISTINCT 특성1 // 특성1을 기준으로 유니크한 값 선택
   FROM 테이블_이름  // 특성이 여러 개일 경우, 해당 특성들의 유니크한 조합 값들을 선택
  1. INNER JOIN (= JOIN)
  • 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결
   SELECT *
   FROM 테이블1
   JOIN 테이블2 ON 테이블1.특성A = 테이블2.특성B
  1. OUTER JOIN
  • LEFT OUTER JOIN과 RIGHT OUTHER JOIN으로 구분
  • INCLUSIVE를 실행
SELECT *
FROM 테이블_1
LEFT(RIGHT) OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B

4. ACID

  • 데이터베이스 내에서 일어나는 트랜잭션의 안정성을 보장하기 위해 필요한 성질

    트랜잭션
    - 여러 개의 작업을 하나로 묶은 실행 유닛
    - 각 트랜잭션은 하나의 특정 작업을 시작으로, 묶여 있는 모든 작업을 모두 완료 시 정상적으로 종료
    - 하나의 트랜잭션에 속해있는 여러 작업 중 하나라도 실패할 경우, 트랜잭션에 속한 모든 작업을 실패한 것으로 판단

  1. Atomicity(원자성)
  • 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패하여 결과를 예측할 수 있어야 하는 성질(= 트랜잭션이 성공 혹은 실패하여야 하는 성질)
  • 즉, 트랜잭션 내 작업이 전부 성공하지 않을 경우, 모든 작업이 실패하게 만들어 기존 데이터 보호
  1. Consistency(일관성)
  • 데이터베이스의 상태가 일관되어야 하는 성질
  • 하나의 트랜잭션 이전/이후, 데이터베이스의 상태는 이전과 같이 유효하여야 함
  • 즉, 트랜잭션이 일어난 후의 데이터베이스는 데이터베이스 제약과 규칙을 만족해야 함
  1. Isolation(격리성, 고립성)
  • 모든 틀내잭션은 다른 트랜잭션으로부터 독립되어야 하는 성질
  • 동시에 여러 개의 트랜잭션이 수행될 때, 각 트랜잭션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타냄
  • 즉, 각 트랜잭션은 다른 트랜잭션에 서로 영향을 줄 수 없고, 서로 영향을 줄 경우 트랜잭션이 실패된 것으로 간주
  1. Durability(지속성)
  • 하나의 성공된 트랜잭션에 대한 로그가 기록되고 그 기록이 영구적으로 남는 성질
  • 서버 에러, 런타임 에러 등이 일어나더라도 해당 트랜잭션에 대한 기록은 데이터베이스에 남아있어야 함

5. SQL(구조화 쿼리 언어) vs NoSQL(비구조화 쿼리 언어)

  • 데이터베이스는 관계형 데이터베이스와 비관계형 데이터베이스로 구분
  • 관계형 데이터베이스는 SQL 기반
  • 비관계형 데이터베이스는 NoSQL 기반
  • SQL과 NoSQL은 만들어진 방식/저장하는 정보의 종류/저장 방식에 차이가 있음

    관계형 데이터베이스
    - 테이블 구조/데이터 타입을 사전에 정의(알맞은 형태의 데이터만 삽입 가능)
    - 행과 열로 구성된 테이블에 데이터를 저장
    - 열 : 하나의 속성에 대한 정보를 저장
    - 행 : 각 열의 데이터 형식에 맞는 데이터를 저장
    - 특정 형식을 가지고 있기 때문에, 데이터 사용이 수월(스키마가 뚜렷)
    - 테이블간의 관계를 직관적으로 파악 가능

비관계형 데이터베이스
- 주로 데이터가 고정되어 있지 않은 데이터베이스를 지칭
- 데이터를 읽어올 때 스키마에 따라 데이터를 읽어오는 방식 사용(schema on read)

6. NoSQL 기반의 비관계형 데이터베이스 구성

  1. Key-Value 타입
  • 속성을 Key-Value 쌍으로 나타내는 데이터를 배열 형태로 저장
  • Key : 속성 이름 / Value : 속성에 연결된 데이터 값
  • ex. Redis, Dynamo
  1. 문서형 데이터베이스
  • 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스
  • JSON과 유사한 형식의 데이터를 문서화하여 저장
  • 각 문서는 하나의 속성에 대한 데이터를 가지며, 컬렉션이라는 그룹으로 묶여 관리
  • ex. MongoDB
  1. Wide-Column 데이터베이스
  • 데이터베이스의 열에 대한 데이터를 집중적으로 관리하는 데이터베이스
  • 각 열에는 Key-Value 형식으로 데이터 저장
  • '열 패밀리'라고 하는 열의 집합체 단위로 데이터를 처리 가능
  • 하나의 행에 많은 열을 포함할 수 있어 유연성 ↑
  • 주로 규모가 큰 데이터 분석에 사용
  • ex. Cassandra, HBase
  1. 그래프 데이터베이스
  • 자료구조의 그래프와 비슷한 형식으로 데이터간의 관계를 구성하는 데이터베이스
  • 노드에 속성별로 데이터를 저장
  • 각 노드 간 관계를 선으로 표현
  • ex. Neo4J, Infinite Graph

7. SQL 기반 DB와 NoSQL 기반 DB의 차이점

  1. 데이터 저장
  • 관계형 DB : SQL을 이용해 데이터를 테이블에 저장(스키마 기반으로 지정된 형식에 맞게)
  • 비관계형 DB : key-value/document/wide-column/graph 등의 방식으로 데이터 저장
  1. 스키마
  • 관계형 DB : 고정된 형식의 스키마 필요(= 열에 대한 정보 미리 지정)
  • 비관계형 DB : 동적으로 스키마 형태 관리 가능
  1. 쿼리
  • 관계형 DB : 테이블 형식과 테이블 간 관계에 맞춰 데이터를 요청할 수 있는 구조화된 쿼리 언어 사용
  • 비관계형 DB : 데이터 그룹 자체를 조회하는 것에 초첨을 두기 때문에, 구조화되지 않은 쿼리 언어로도 데이터 요청 가능
  1. 확장성
  • 관계형 DB : 수직적 확장(높은 메모리/CPU 사용)으로, 비용과 시간 ↑
  • 비관계형 DB : 수평적 확장(클라우드 서비스 이용/값싼 서버 증설)으로, 상대적으로 비용 ↓

8. SQL 기반의 관계형 데이터베이스 사용 케이스

  • 데이터베이스의 ACID 성질을 준수해야 하는 경우
  • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

9. NoSQL 기반의 관계형 데이터베이스 사용 케이스

  • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터르 저장하는 경우
  • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
  • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우

0개의 댓글