티스토리 뷰

AI/SQL

[SQL] SQL과 NoSQL

brave_sol 2025. 4. 17. 18:20

1. SQL

- 정해진 스키마와 테이블 구조를 기반으로하며, 트랜잭션 안정성이 중요할 때 적합

- 테이블 간의 관계를 외래키로 연결(JOIN으로 연결해 한번에 조회 가능)

* 외래키란?

 

2. NoSQL

- 유연한 데이터 구조와 수평 확장성에 강점이 있어, 빠르게 변하는 데이터나 대규모 트래픽 환경에 적합

- 한 문서에 중첩 저장(내장관계)하거나, python 등의 코드를 사용해 결과를 합쳐서 사용(데이터를 문서 단위로 설계, 관계는 코드에서 처리, $loopup으로 join이 가능하지만, 성능이나 구조적인 제약 때문에 코드 기반 병합을 더 많이 사용)

# 1단계: user_id가 101인 주문 조회
orders = db.orders.find({"user_id": 101})

# 2단계: orders에서 user_id 뽑아서 사용자 정보 조회
user = db.users.find_one({"user_id": 101})

# 3단계: 결과를 코드로 합쳐서 보여줌
for order in orders:
    print(f"{user['name']}님이 {order['amount']}원을 결제했습니다.")

- 성능과 유연성을 우선시해 초창기에는 트랜잭션이 제한적이었지만, 최근 MongoDB 등은 다중 문서 트랜잭션도 지원

구분 SQL(관계형 DB) NoSQL (비관계형 DB)
언제쓸까? 정형데이터+안정성이 중요할때 유연한 구조+대용량처리+빠른속도가 중요할때
스키마 고정 (설계 후 변경 어려움) 유연함 (자유로운 구조 가능)
데이터 구조 테이블기반(행/열) 문서(mongoDB-json형식),
키-값(Redis), 그래프, 컬럼 등 다양
확장 수직확장(성능 좋은 서버로 업그레이드) 수평확장(서버 여러 개로 분산)
트랜잭션 *ACID 보장(정합성, 안정성 강함) 보장 약함, 대신 속도와 확장성 우위
쿼리언어 SQL사용 각 DB마다 다름
(MongoDB는 JSON 스타일)
대표제품 MySQL, PostgreSQL, Oracle, SQL Server MongoDB, Redis, Cassandra, DynamoDB
활용분야 금융, ERP, 회계 등 정형 데이터 소셜미디어, IoT, 로그, 추천 등 비정형 데이터

*ACID 트랜잭션

- Atomicity(원자성): 트랜잭션은 모두 수행되거나, 전혀 수행되지 않아야 한다.

- Consistency(일관성): 트랜잭션 전후로 데이터의 규칙(제약조건)이 항상 유지되어야 한다.

- Isolation(격리성): 동시에 실행되는 트랜잭션끼리는 서로 영향을 주지 말아야 한다.

- Durability(지속성): 트랜잭션이 완료되면 그 결과는 영구히 보존되어야 한다.

 

3. Redis

- 아주 빠른 속도를 자랑하는 인메모리 데이터 저장소

- 빠르고 일시적인 데이터를 다룰 때 사용 (만료 시간(TTL)설정이 쉽다)

 

1) 언제쓸까?

- 느린 DB나 API 결과를 빠르게 보여줘야 할 때

- 세션관리(로그인 세션, 인증토큰 저장 등)

- 비동기 작업 큐(작업을 나중에 처리하거나 백그라운드로 실행할 때)

- 실시간 랭킹, 카운터(실시간 증가, 인기순위, 좋아요 수 등에 적합)

- Pub/Sub (발행/구독 시스템): 실시간 알림, 채팅방, 게임 등

반응형

'AI > SQL' 카테고리의 다른 글

[SQL] 윈도우 함수, 그룹 함수  (0) 2025.04.18
[SQL] 관계형대수, 계층형 질의, 재귀  (0) 2025.04.17
[SQL] 인덱스와 뷰, JOIN  (0) 2025.04.17
[SQL] CAST, IN, ANY, ALL, 서브쿼리  (0) 2025.04.13
[SQL] 이상 현상과 정규화  (0) 2025.04.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함