부트캠프

관계형 데이터베이스 part1

hunm719 2023. 1. 30. 23:25

-DB(Database)가 필요한 이유
 1)In-memory는 프로그램 종료될 때 사용하던 데이터가 없어짐(=변수 등에 저장한 데이터가 프로그램의 실행에 의존)
 2)File I/O는 원하는 데이터만 가져올 수 없고 항상 모든 데이터를 가져온 뒤 서버에서 필터링하기에 비효율적
 
 *Database는 필터링 외에도 여러 기능을 가지고 있는 데이터에 특화된 서버


1.SQL(Structured Query Language) : 구조화된 쿼리 언어
 -주로 관계형 데이터베이스(DB)에서 사용하는 데이터베이스 언어
 -DB에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있음

 +쿼리(Query)란 "질의문"이란 뜻으로, 저장되어있는 데이터를 필터하기 위한 질의문

 -SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 함.
 -데이터의 구조가 고정되어 있지 않은 DB를 NoSQL이라고 하고 관계형DB와 달리 데이터를 테이블이 아닌 다른 형태로 저장함.


1-1.DB관련 명령어
 (1)CREATE DATABASE DB_이름; = DB 생성
 (2)USE DB_이름; = DB 사용
 (3)CREATE TABLE 테이블_이름 () = 테이블 생성
 (4)DESCRIBE 테이블_이름; = 테이블 정보 확인

1-2.SQL 기초 명령어
 (1)SELECT : 데이터셋에 포함될 특성을 특정(문자열, 숫자, 연산 등)
 (2)FROM : 결과를 도출해낼 DB 테이블을 명시(테이블 관련 작업시 반드시 입력)
 (3)WHERE : 필터 역할을 하는 쿼리문
 (4)ORDER BY : 돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정(기본 오름차순, DESC입력시 내림차순)
 (5)LIMIT : 결과로 출력할 데이터의 갯수를 지정(쿼리문에서 사용할 때에는 가장 마지막에 추가)
 (6)DELETE : 테이블 안에 존재하는 행을 제거
 (7)MAX, MIN : 열(column) 이름을 받아 해당 열의 가장 큰 값, 가장 작은 값을 반환
 (8)COUNT, AVG, SUM : 열 이름을 받아 해당 열의 갯수, 평균 값, 합계를 반환
 (9)LIKE : 열에서 지정된 패턴을 검색(%기호는 0, 1, 또는 여러 문자를 나타내고 _기호는 하나의 단일 문자를 나타냄)
 (10)BETWEEN : 주어진 범위 내에서 숫자, 텍스, 날짜 등의 값을 선택
 (11)DISTINCT : 유니크한 값(중복이 제거된 값)을 받고 싶을 때 SELECT DISTINCT를 사용
 (12)INNER JOIN : 둘 이상 테이블의 서로 공통된 부분을 기준으로 연결(JOIN으로도 실행 가능)

그 외 여러가지 JOIN들



1-3.SQL vs NoSQL
 -먼저 DB는 만들어진 방식, 저장 정보 종류, 저장 방법 등에 따라 크게 관계형 DB와 비관계형 DB로 구분하고 관계형 DB는 SQL을, 비관계형 DB는 NoSQL을 기반으로 데이터를 다룸

 (1)SQL 기반 관계형 DB
  -관계형 DB에서는 행(row,records), 열(column)로 구성된 테이블에 데이터를 저장한다는 형식을 지킴
  -형식을 지키기 때문에 데이터를 정확히 입력했다면 데이터를 사용하기 매우 수월함
  -SQL을 활용해 원하는 정보를 쿼리하고, 스키마(Schema)가 뚜렷하게 보이며, 테이블 간의 관계를 직관적으로 파악 가능
  -대표적인 관계형 DB는 MySQL, Oracle, SQLite, PostgresSQL, MariaDB 등

 (2)NoSQL 기반 비관계형 DB(문서 저장 방법에 따라 다음과 같이 분류)
  -Key-Value 타입 : Key(속성 이름)-Value(속성에 연결된 데이터 값)의 쌍으로 나타내는 데이터를 배열의 형태로 저장 (Redis, Dynamo등이 대표적)
  -문서형 DB : 데이터를 문서화하여 저장하며 각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리 (MongoDB가 대표적)
  -Wide-Column DB : 데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리 (Cassandra, HBase가 대표적)
  -Graph DB : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성 (Neo4J, InfiniteGraph가 대표적)

 (3)두 DB의 차이점
  -데이터 저장(Storage) 방식
  -스키마(Schema) : SQL을 사용하려면 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해두어야 함(고정된 형식의 스키마가 필요), NoSQL은 보다 동적으로 스키마의 형태를 관리할 수 있음
  -쿼리(Querying) : 관계형 DB는 정보를 요청할 때 구조화된 쿼리 언어를 사용, 비관계형 DB의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점
  -확장성(Scalability)
   *일반적으로 SQL기반은 수직적으로 확장함. 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 듦.
   **NoSQL기반은 수평적으로 확장함. 보다 값싼 서버 증설, 많은 트래픽 처리 등 수직적 확장보다 상대적으로 비용이 저렴함.

  +여러 사용 사례를 살펴보고 적절한 데이터베이스를 선택하는 것이 중요하며, 많은 개발자들은 유저의 요구를 충족하기 위해 관계형, 비관계형 데이터베이스를 모두 사용하여 서비스에 맞고 설계하고 있음



2.트랜잭션(Transaction) : 데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위해 행해지는 하나 이상의 쿼리(query)를 모아 놓은 하나의 작업 단위

2-1.트랜잭션의 특성, ACID
 (1)Atomicity(원자성) : 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 함
 (2)Consistency(일관성) : 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 함
 (3)Isolation(격리성, 고립성) : 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함
 (4)Durability(지속성) : 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 하고 해당 기록은 영구적이어야 함

 

 

 

 

-내용 출처 : code states

-이미지 출처 : w3school