데이터베이스

SQL vs NoSQL

yu_gyeong 2023. 12. 24. 17:53

1. SQL(관계형 데이터베이스)

  • SQL(Structured Query Language)
  • 테이블 기반 데이터베이스의 데이터를 업데이트, 검색, 계산하도록 설계된 언어
  • 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 미리 정의한다.(스키마)
    • 테이블의 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
  • 테이블의 구조와 테이블간의 관계에 맞춰 데이터를 요청해야 한다.
    → 따라서 SQL과 같이 구조화된 쿼리 언어를 사용하여 요청한다.

1. 장점

  • 스키마가 명확히 정의되어 있다.
  • 데이터 무결성 보장
    • 무결성 : 데이터가 항상 정확한 값을 유지하는 성질
  • 각 데이터를 중복 없이 한 번만 저장

2. 단점

  • 스키마를 사전에 계획해야 한다.(유연성이 떨어짐)
  • 관계를 맺고 있어서 JOIN문이 많은 복잡한 쿼리가 생성될 수 있다.

2. NoSQL(비관계형 데이터베이스)

  • 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스
  • 테이블 형식이 아니다.
  • key-value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
  • 관계형 데이터베이스에 비해 유연하게 스키마의 형태를 관리할 수 있다.

1. 장점

  • 스키마가 없기 때문에 유연하고, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에, 데이터를 읽어오는 속도가 빠르다.

2. 단점

  • 데이터 중복을 계속 업데이트해야 한다.
  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.

3. 예시

  • book 데이터베이스 - 스키마 구축 예시
  1. SQL

    • Books 테이블의 컬럼

      Column
      isbn
      book_title
      edition_number
    • Authors 테이블의 컬럼

      Column
      author_id
      author_name
    • Authors-ISBN 테이블의 컬럼

      Column
      author_id
      isbn
  2. NoSQL

    • 보통 JSON 문서로 저장된다.

      {
        "id" = 1
        "isbn" = "111-1111111111"
        "book_title" = "title"
        "edition_number" = 1
        "author_name" = "author"
        "author_id" = "123"
      }

4. 확장성

확장성

  • SQL의 경우 시스템이 커져가면서 Scale-Up(수직적) 형태로 DB를 증설한다.

    → 기존 사용하던 DB 시스템보다 고성능의 DB 시스템이 필요할 수 있고, 관리가 어려워질 수 있다.

  • NoSQL의 경우 Scale-Out(수평적) 형태로 DB를 증설한다.

    → 고성능의 DB를 갖추는 게 아니라 여러 DB 시스템을 추가할 수 있다.

5. 면접 예상 질문

  1. SQL과 NoSQL을 비교해서 설명해주세요.
  2. SQL과 NoSQL을 예시를 들어 설명해주세요.

참고 URL

https://developer.mozilla.org/en-US/docs/Glossary/SQL
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/
https://aws.amazon.com/nosql/?nc1=h_ls
https://brunch.co.kr/@kooslab/181
https://www.whatap.io/ko/blog/173/

'데이터베이스' 카테고리의 다른 글

정규화  (0) 2024.01.07
JOIN  (0) 2023.12.16
키(Key)  (1) 2023.11.19
데이터베이스 기초  (0) 2023.11.18