코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (116)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (10)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • 밸리데이터
  • Hooks #React
  • 모니터링
  • Immer #ContextAPI
  • 솔라나
  • grafana

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

SQL과 NoSQL의 차이, 장단점
기타

SQL과 NoSQL의 차이, 장단점

2022. 6. 23. 13:58
728x90
DB 선택은 기본 설정, 비즈니스 요구사항, 볼륨, 데이터 유형에 따라 달라짐

SQL(Structured Query Language)

- RDBMS(관계형 데이터베이스 관리 시스템)에서 데이터를 저장, 수정, 삭제, 검색하는 데 사용되는 언어
- 정해진 데이터 스키마에 따라 데이터를 테이블에 분산하여 저장 - 다양한 엔티티와 변수 간의 관계가 있는 구조화된 데이터 관리 시 사용
- 다중 행 트랜잭션이 필요한 응용 프로그램에 유리
- ACID 속성을 준수
- 수직 확장 가능 - 단일 서버에서 하드웨어 용량(CPU, RAM, SSD 등)을 늘려 확장 가능
- 대표 예시: MySQL, Oracle, MS-SQL, SQLite

장점: 강력한 보안, DB 트랜잭션이 ACID 속성을 준수해 안정성 보장
역할 기반 보안, 사용자 수준 권한을 통한 액세스 제어, 암호화된 메시지, 행 및 열 액세스 제어 지원
코드 필요 X
DB 레코드를 쉽고 빠르게 검색할 수 있음

단점: 보안 라이센스 비용이 상당함
빅데이터 처리 시 확장을 위해 하드웨어를 늘려야 해서 비용 많이 듦
SQL은 객체라서 공간을 차지함
데이터 액세스 속도가 비교적 느림

 

쿼리문 분류

 

  1. DDL(데이터 정의어): 스키마 생성, 수정에 사용.
    ex) CREATE, ALTER, DROP

  2. DML(데이터 조작어): DB 선택, 삽입, 업데이트, 삭제에 사용.
    ex) SELECT, INSERT, UPDATE, DELETE

  3. DCL(데이터 제어어): 액세스 제어, DB 권한 제공에 사용.
    ex) GRANT, REVOKE

  4. TCL(트랙잭션 제어어): 데이터 무결성 유지를 위해 트랜잭션 제어, 관리에 사용.
    ex) BEGIN, COMMIT, ROLLBACK

 

사용 시 참고하면 좋은 글: https://ko.myservername.com/top-90-sql-interview-questions

 

NoSQL

- 테이블 형식으로 구성되지 않는 비관계형 형식의 데이터를 관리하는 방법을 제공하는 DB 언어. 구조화된 쿼리 언어 지원 X
- 스키마 정의를 고수할 필요 X, 구조화되지 않은 데이터에 대한 동적 스키마가 있음 - 데이터 유연하게 저장 가능
- 빅데이터, 실시간 애플리케이션 등 대용량 분산 데이터 세트, 계층적 데이터 저장에 적합
- BASE 속성 - ACID 속성을 엄격하게 준수하지 않고 최종 일관성만 보장
- 수평 확장 가능 - 대규모로드를 관리하고 힙을 줄이기 위해 인프라에 더 많은 서버를 추가해 확장 가능
- 대표 예시: Apache, MongoDB, Redis

장점: 방대한 양의 비정형 데이터를 빠르게 액세스하고 처리하기 좋음 - 빅데이터 처리 가능
스키마와 테이블이 없어 데이터 모델에 높은 수준의 유연성 제공
확장성과 가용성이 뛰어나 비용이 저렴함
DB 모델링 필요 X

단점: RDBMS만큼 보안이 강력하지 않아 데이터에 액세스하는 애플리케이션의 보안에 의존해야 함
비교적 적은 커뮤니티 지원
고정되고 잘 정의된 스키마가 없어서 권한을 분리할 수 없음 - 마이그레이션 중에 몇가지 문제 발생


DB 유형 분류

 

  1. (와이드) 열
    데이터 테이블을 열로 저장, 정렬
    기존 DB보다 매우 빠르게 대량의 데이터 쿼리 가능. 추천 엔진, 카탈로그, 사기 탐지 등에 사용 가능
    ex) Cassandra, HBase, Google BigTable, Scylla, Vertica

  2. 문서
    문서 형식의 설명과 함께 반구조화 된 데이터를 저장, 유지
    각 문서에 주소를 지정하는 고유키가 있어, 콘텐츠 관리나 모바일 애플리케이션 데이터 처리에 유용
    JSON, JavaScript와 함께 널리 사용
    콘텐츠 기반으로 문서를 가져올 수 있는 API, 쿼리 언어 제공
    ex) Apache, MongoDB, MarkLogic, CouchDB, BaseX, IBM Domino

  3. 키-값
    데이터가 키-값 쌍의 모음을 나타내는 연관 배열(지도나 사전)을 기반으로 하는 데이터 모델을 가짐
    웹 애플리케이션의 세션 관리, 캐싱에 매우 적합
    ex) Aerospike, Berkeley DB, Apache ignites, Dynamo, Redis, Riak, ZooKeeper

  4. 그래프
    데이터가 노드와 간선으로 구성
    노드(node)는 레코드, 에지(edge)는 관계형 DB의 레코드 간 관계로 생각할 수 있음
    데이터 관계의 풍부한 표현을 지원
    고객 관계 관리 시스템, 로드맵, 예약 시스템 등에 유용
    ex) AllegroGraph, InfiniteGraph, MarkLogic, Neo4j, IBM graph, Titan

 

참고 블로그:

https://ko.myservername.com/top-90-sql-interview-questions

https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html

 


DB 트랜잭션의 ACID 성질

 

A(Atomicity, 원자성), C(Consistency, 일관성), I(Isolation, 고립성), D(Durability, 지속성)

 

 

- SQL은 ACID 속성을 준수하고, NoSQL은 ACID 속성을 엄격하게 준수하지는 않음
   하지만 NoSQL의 이점은 ACID를 준수하지 않는 점에서 옴

- ACID는 DB 내에서 일어나는 각 트랜잭션의 안전성을 보장하기 위한 성질
  주식거래, 금융업에서 중점적으로 사용 => 주식거래, 금융업에서는 관계형 DB 이용

- 관계형 DB 사용 시 상호작용 방식을 정확하게 규정할 수 있기 때문에
   데이터 처리 시 발생가능한 예외 상황을 줄이고 데이터 무결성 보호 가능

  1. 원자성
    시스템에서 한 트랜잭션의 연산이 모두 성공하거나, 아니면 전부 실패하는 성질
    작업이 모두 반영되거나 모두 반영되지 않음으로써 결과 예측 가능

  2. 일관성
    한 트랜잭션 이전과 이후, DB의 상태가 이전과 같이 유효해야 함
    트랜잭션이 일어난 이후의 DB는 DB의 제약이나 규칙을 만족해야 함

  3. 고립성
    모든 트랜잭션은 다른 트랜잭션과 독립되어 있어야 함
    동시에 여러 트랜잭션 수행 시, 각 트랜잭션은 고립되어 있어 연속 실행된 것과 동일

  4. 지속성
    트랜잭션이 성공적으로 수행됐을 시, 해당 트랜잭션에 대한 로그가 남아야 함
    런타임 or 시스템 오류가 발생해도 기록은 영구적이어야 함

 

참고 블로그: 

 

[데이터베이스] 트랜잭션의 ACID 성질 - 하나몬

트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 데이터베이스 트랜잭션은 ACID라는 특성을 가지고 있다. ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안

hanamon.kr

 

저작자표시 비영리 변경금지 (새창열림)

'기타' 카테고리의 다른 글

[웹 개발] 프론트와 백에서의 CORS 문제 해결하기  (0) 2022.08.12
[Javascript] 비동기 처리, Promise, async/await  (0) 2022.07.13
websocket과 socket.io 의 차이  (0) 2022.06.22
[Sourcetree] Bitbucket 협업 시 충돌 병합(Conflict Merge) 해결 방법  (0) 2022.06.07
Cognito 참고 자료  (0) 2022.04.26
    '기타' 카테고리의 다른 글
    • [웹 개발] 프론트와 백에서의 CORS 문제 해결하기
    • [Javascript] 비동기 처리, Promise, async/await
    • websocket과 socket.io 의 차이
    • [Sourcetree] Bitbucket 협업 시 충돌 병합(Conflict Merge) 해결 방법
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바