Database

HK·2022년 6월 22일
0

Database란?

  • 컴퓨터 파일 시스템에서 관련 있는 데이터들끼리 모아놓은 것
  • 통상적으로 DBMS(Database Management System)를 Database라고 일컫는다.
    • DBMS: 데이터를 더 효과적으로 관리할 수 있는 시스템(DB관리 엔진)
    • 많이 쓰이는 DBMS: Oracle, MySQL, DynamoDB, PostgreSQL, mongoDB
  • 특징
    • 데이터를 저장하고 읽어오는 데 최적화됨.
    • 복잡한 데이터를 다룰 수 있음.
    • 안전하게 동시다발적으로 접근할 수 있음.
    • 보안이 뛰어나다.
    • 파일 시스템에 비해 복잡하다.
  • DBMS의 두가지 종류
    • SQL(Structured Query Language)
      • 관계형(Relational) DBMS임.
      • 관련 있는 데이터들을 table로 만들어 두고 이들의 관계를 정의할 수 있다.
    • NoSQL
      • SQL이 아닌 모든 것을 가리킴.
      • 관계가 없는 데이터베이스를 말함.
      • Key-Value, Document, Wide-column, Graph 등 여러가지 데이터베이스 타입이 존재함.
    • SQL과 NoSQL의 장단점 및 차이점을 알아서 어떤 것을 사용하면 좋을지 잘 판단해야함.

SQL Database

  • Excel에서 흔히 데이터를 저장하는 방식과 비슷함.
  • 행과 열로 이뤄진 table사용, 여러가지 종류의 table존재
  • 행마다 특정 data type을 지정해야 한다.
  • 모든 요소가 다 정의된 한 줄의 데이터를 record라고 한다.
  • Schema를 정의함으로서 data integrity를 지킬 수 있다.
  • primary key: table에서 정말 중요한 식별자가 id 정보를 담음.
    • primary key를 바탕으로 검색의 최적화가 이루어짐.
  • foreign key: 두 개의 서로 다른 key의 관계를 정의해줌.

SQL Query의 기본 구조

  • 세 가지 주요 명령어: SELECT, FROM, WHERE
  • SELECT: table에서 어떤 행을 선택할 건지 결정
    • ex) SELECT *: 유저가 가진 모든 행에 대한 데이터를 가져옴.
  • FROM: 어떤 table에서 데이터를 가져올 건지 결정
    • ex) SELECT Name FROM User: User테이블의 Name에 대한 데이터를 가져옴.
  • WHERE: 조건을 걸 때 사용
  • 예시
SELECT *FROM Users WHERE name LIKE '%Bob%';

[Users]

idnameemailage
1Yoonyoon@song.com18
2Bobbob@example.com45
3Ashleyashley@air.io23

Users라는 table의 모든 행을 선택하되 이름이 Bob인 행을 찾아달라는 의미이다.

  • 유명한 SQL Database: Oracle, SQLite(핸드폰이나 임베디드 시스템에서 자주 사용), SQLServer, MySQL(보편적), PostgreSQL(최근 but 약간 복잡)

NoSQL

  • Why NoSQL?
    • 빅데이터가 뜨기 시작하면서..
  • 특징
    • Schema가 없다.
    • 관계형이 아니다. 데이터들이 서로 관계가 없으므로 고립된 형태로 분산해서 여러 서버에 나눠 관리할 수 있다.
    • 특수 문제 해결을 위해 사용됨.
    • Key-Value, Document, Wide-Column, Graph 등의 type이 존재.
  • Web상에서 가장 많이 사용되는 mongoDB
    • document database(document로 데이터 관리->json형태로)
    • collection을 사용해 데이터가 정리됨. collection들은 개별적으로 관리(서로 다른 서버에 보관)하는 것이 가능하다.
    • 데이터 간의 관계를 설정하지 x. 차라리 중복해서 사용함.
    • 데이터베이스에서는 어떤 정보가 정확한 지 알 수 없으므로 개발자가 스스로 컬렉션을 잘 관리해야 함.
  • 유명한 NoSQL Database: cassandra(Wide Column), Cloud Bigtable(Wide Column), neo4j(Graph), Redis(Key-Value), mongoDB(Document), DynamoDB(Key-Value)

ORM과 ODM

  • ORM(Object Relational Mapping)
    • 원래는 코드 내의 Object들을 어떻게 데이터베이스의 Table로 변환할 건지, 어떻게 Schema를 만들건지 등을 직접 고민해야함.
    • ORM이란, 위 작업들을 자동으로 해주는 엔진 라이브러리. (DB추상화 도구)
    • 사용방법
        1. 코드 상으로 schema정의 후 프로그램 실행
        1. 자동으로 table생성해줌.
        1. 자동으로 data를 table에 기록해줌.
    • 장점
      • DB query에 신경쓰지 않고 어플리케이션의 business logic에 집중할 수 있다.
      • boilerplate code를 줄일 수 있다.
      • 추상화 level이 추가됨.
      • Schema가 변경된다면 자동으로 처리해주는 migration 지원.
    • 단점
      • ORM API만으로는 복잡한 query를 할 수 없음.
      • 느림. 메모리 최적화 x.
    • 자주 사용되는 ORM: TYPEORM, Sequelize, Prisma
  • ODM(Object Document Mapper)
    • mongoose, mongoDB 등이 존재
    • 추상화 단계 추가됨.

SQL vs. NoSQL

SQLNoSQL
시작 barrier보통쉬움
데이터 구조고정됨(정적)유연함(동적)
데이터 찾기쉬움쉬움
연관된 데이터 연결쉬움어려움
확장성어려움쉬움
클라우드 운영 비용비쌈저렴
  • 확장성
    • 수직 확장: SQL은 서로 다른 table이 연관되었기 때문에 하나의 table을 다른 table에서 불러다 써야 하는 경우가 다수 존재함. 따라서 이 table들을 다른 server에 저장해 두는 것이 없음. 따라서 server를 수직적(CPU, RAM, DISC추가 등)으로 확장해야함.
    • 수평 확장: NoSQL은 table간의 관계성이 없으므로 여러 server에 데이터를 나눠서 저장할 수 있음. 따라서 여러 대의 server를 사용해 수평적으로 확장할 수 있음.
  • SQL vs. NoSQL 무엇을 사용할지에 대한 판단 기준
      1. 어떤 data type을 저장할 것인가?
      1. 얼마나 많은 사용자를 예상하는가?(데이터양)
    • **3. 데이터들이 서로 관계가 있는가?
    • 그치만 많은 기업들이 hybrid 형식을 사용(상황에 따라 SQL과 NoSQL 혼합 사용)

MySQL 실습

  • table 만들기

  • foreign key 만들기

0개의 댓글