SQL이란?

귀찮Lee·2022년 6월 9일
0

DataBase / MySQL

목록 보기
11/16
post-custom-banner

◎ DB의 필요성

  • In-memory : Client나 Server에서 변수로 저장

    • 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라짐
    • 데이터를 보호 취약, 받아오는 시간도 서버가 켜져있는 시간에만 가능
  • File I/O : 파일(엑셀 시트, CSV)을 읽는 방식으로 작동하는 형태

    • 데이터가 필요할 때마다 전체 파일을 매번 읽어야 함
    • 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 힘들어짐 (파일 손상, 파일 갯수 증가)
  • DB : 필터링 외에고 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버 (데이터 관리에 매우 유용)

    • 일반적인 구조는 excel 파일과 유사
    • 테이블 - 시트, Row(정보 1줄), filter기능 - Query

◎ SQL(Structured Query Language)

  • SQL(Structured Query Language)

    • 데이터베이스 용 프로그래밍 언어, 주로 관계형 데이터베이스에서 사용
    • 데이터베이스에 query를 보내 원하는 데이터만을 뽑아오거나 저장할 수 있다.
    • 데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스에서 활용가능
  • 쿼리 (Query)

    • 저장되어있는 정보를 필터하기 위한 질문
  • NoSQL vs SQL

    • NoSQL : 데이터의 구조가 고정되어 있지 않은 데이터베이스
    • SQL : 데이터의 구조가 고정된 데이터베이스

◎ 트랜젝션(transaction)

  • 트랜젝션(transaction)

    • 여러 개의 작업을 하나로 묶은 실행 유닛
    • 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 다 완료해야 정상적으로 종료.
    • 단 하나의 작업만 실패하더라도, 트랜젝션 전체가 실패했다고 간주
  • 트랜잭션의 특징 : ACID

    • ACID : 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질
    • Atomicity, Consistency, Isolation, Durability

◎ 트랜젝션의 특징

  • Atomicity(원자성)

    • 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해야함
    • 결과가 예측 가능함 : 전부 성공하여 다 되거나 하나도 안됨
  • Consistency(일관성)

    • 데이터베이스의 상태가 일관적 : 하나의 트랜젝션 이후 데이터베이스의 상태는 이전과 같이 유효
    • 트랜젝션 이후에도, 데이터베이스가 가지고 있는 기본적인 제약은 지켜져야함
    • ex) non-nullable 한 데이터를 null로 만들 수 없다.
  • Isolation(격리성, 고립성)

    • 모든 트랜잭션은 다른 트랜잭션으로부터 독립적
    • 한 트랜젝션이 다른 트렌젝션에 영향을 줄 수 없다.
    • 만약 서로 영향을 주게 된다면 실패로 간주하게 됨
  • Durability(지속성)

    • 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다.
    • 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 함
  • 은행과 같이 변경이 되면 크게 문제가 일어나는 곳에서는 ACID 성질이 필수적으로 사용됨

◎ SQL vs. NoSQL

  • SQL(구조화 쿼리 언어)

    • 관계형 데이터베이스는 SQL을 기반으로 함
    • 테이블의 구조와 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
    • 특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 데이터를 사용할 때에는 매우 수월함
    • 관계형 데이터베이스에서는 SQL을 활용해 원하는 정보를 쿼리할 수 있다. 스키마(DB 구조)가 뚜렷히 보임
    • 예시 : MySQL, Oracle, SQLite, PostgresSQL, MariaDB
  • SQL 사용 케이스

    • 데이터베이스의 ACID 성질을 준수해야 하는 경우
      • 모든 금융 서비스를 위한 소프트웨어 개발
    • 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
      • 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우
  • NoSQL(비구조화 쿼리 언어)

    • 주로 데이터가 고정되어 있지 않은 데이터베이스
    • 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옴('schema on read', 읽어올 때만 스키마가 사용됨)
      • 입력하는 방식에 따라 데이터를 읽어올 때 영향을 미침
    • 비관계형 데이터베이스는 NoSQL을 기반으로 함
    • 예시 : 몽고DB, Casandra
  • NoSQL 사용 케이스

    • 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
    • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
      • 클라우드 기반 : 비용이 저렴, 확장성이 좋음
    • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우
      • SQL로 사용시, 매번 스키마를 수정해주어야함
  • SQL 기반 DB vs NoSQL 기반 DB 차이점

    • 데이터 저장(Storage)
      • SQL : 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장
      • NoSQL : key-value, document, wide-column, graph 등의 방식으로 데이터를 저장
    • 스키마(Schema)
      • SQL : 고정된 형식의 스키마가 필요, 데이터 속성별로 column에 대한 정보를 미리 정해야 함
      • NoSQL : 동적으로 스키마의 형태를 관리 가능 (즉시 새로운 열을 추가, 모든 데이터가 핍력될 필요 없음)
    • 쿼리(Querying)
      • SQL : 테이블의 형식과 테이블간의 관계에 맞춰 데이터를 요청
      • NoSQL : 데이터 그룹 자체를 조회하는 것에 초점
    • 확장성(Scalability)
      • SQL : 수직적으로 확장 (높은 메모리, CPU를 사용하는 확장), 여러 서버에 걸쳐서 데이터베이스의 관계를 정의하기 어려움
      • NoSQL : 수평적으로 확장 (값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장), 서버를 추가적으로 구축시 트래픽을 보다 편리하게 이용할 수 있다.
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글