-
출처: https://blog.desafiolatam.com/sql-nosql-lenguaje-se-usa-mas/ SQL
- 관계형 데이터베이스(RDBMS)에서 사용하는 언어
- 정형화된 데이터 구조 (테이블, 행, 열) 기반
장점
- 데이터 무결성과 일관성 보장
- ACID를 지원하여 데이터의 안정성과 신뢰성을 보장
- 중요한 비즈니스 데이터(금융, ERP) 처리에 적합
- 표준화된 쿼리 언어 (SQL)
- SQL이라는 표준화된 언어로 데이터를 조회, 삽입, 업데이트, 삭제할 수 있음
- SQL은 대부분의 관계형 DBMS(MySQL, PostgreSQL 등)에서 공통적으로 사용 가능
- 복잡한 관계 데이터 처리
- 테이블 간 JOIN 연산을 통해 복잡한 관계를 효율적으로 다룰 수 있음
- 정규화를 통해 데이터 중복을 최소화
단점
- 확장성의 제약
- 대부분의 SQL 데이터베이스는 수직적 확장(서버 성능 업그레이드)에 의존
- 수평적 확장(서버 추가를 통한 분산 처리)이 어려움
- 스키마 제약
- 고정된 스키마를 사용해야 하므로 데이터 구조 변경 시 많은 작업이 필요
- 비정형 데이터나 동적으로 변경되는 데이터에는 부적합
- 대규모 데이터 처리 한계
- 초당 수많은 읽기/쓰기 작업 처리에 상대적으로 비효율적
- 데이터 크기가 급증하면 성능 저하 발생
NoSQL
- 비관계형 데이터베이스
- 비정형 데이터나 대규모 데이터를 처리하기 위한 유연한 구조
장점
- 유연한 데이터 모델
- 스키마가 없거나 유연한 스키마를 사용하여 데이터를 자유롭게 저장 가능
- 비정형 데이터나 동적으로 변하는 데이터를 처리하기에 적합
- 수평적 확장 용이
- 서버를 추가하여 데이터를 분산 저장하고 처리할 수 있음
- 대규모 데이터와 높은 트래픽을 처리하기 위한 분산 시스템에 최적화
- 높은 성능
- 단순한 키-값 조회, 문서 검색 등에서 높은 읽기/쓰기 속도를 제공
- 캐싱 시스템으로 활용 시 매우 빠른 응답 시간 보장
- 다양한 데이터 구조 지원
- 키-값(Key-Value), 문서(Document), 컬럼(Column), 그래프(Graph) 등 다양한 유형의 데이터베이스를 제공
- 특정 요구사항에 맞는 데이터 모델을 선택할 수 있음
단점
- 일관성 문제
- BASE (Basically Available, Soft state, Eventual consistency) 접근 방식
- 데이터 일관성이 즉시 보장되지 않을 수 있음
- 실시간 데이터 처리나 트랜잭션 요구가 높은 경우 부적합
- 복잡한 관계 처리 한계
- JOIN 같은 관계 데이터 연산이 지원되지 않거나 제한적
- 데이터 관계를 유지하려면 애플리케이션 레벨에서 관리해야 함
- 데이터 중복 가능성
- 관계형 데이터베이스와 달리 데이터 중복이 빈번하게 발생할 수 있음
- 데이터 중복은 저장 공간을 더 많이 사용
SQL NoSQL 데이터 구조 테이블 기반 문서
키-값
그래프확장성 수직적 확장
더 강력한 서버로 업그레이드수평적 확장
서버 추가로 용량 확장트랜잭션 ACID 지원 BASE 지원 (유연한 일관성) 용도 복잡한 관계 데이터 처리 대규모 데이터
실시간 분석플랫폼 MySQL
PostgreSQL
Oracle DBMongoDB (문서 기반)
Redis (키-값(Key-Value) 기반)트랜잭션
핵심 개념은 "모두 실행되거나, 전혀 실행되지 않거나"
데이터베이스에서 하나의 작업 단위를 의미하며, 여러 개의 쿼리를 하나로 묶어 모두 성공하거나 모두 실패하도록 처리하는 작업
트랜잭션의 목적은 데이터의 일관성과 무결성을 유지ACID
ACID는 데이터베이스 트랜잭션이 안전하고 일관되게 처리되도록 보장하는 네 가지 핵심 속성을 의미한다.
Atomicity, Consistency, Isolation, Durability로 구성한다.
데이터 무결성과 신뢰성을 유지하는 데 중요한 역할을 한다.(1) Atomicity (원자성)
- 데이터의 일관된 상태 유지
- 트랜잭션의 작업이 모두 성공하거나 전혀 실행되지 않아야 함을 보장
- 트랜잭션 중 일부 작업만 성공하고 나머지는 실패하는 경우가 없도록 함
- 실패 시 데이터베이스는 트랜잭션 이전 상태로 돌아감
- 예시
- 은행 송금 시, 돈을 보내는 계좌에서 금액을 차감하고 받는 계좌에 추가하는 두 작업이 모두 성공하거나 모두 실패해야 함
(2) Consistency (일관성)
- 트랜잭션이 데이터베이스 규칙(무결성 제약 조건 등)을 위반하지 않도록 보장
- 트랜잭션 실행 전후에 데이터베이스는 일관된 상태를 유지
- 데이터 무결성 제약 조건(예: PRIMARY KEY, FOREIGN KEY, NOT NULL 등)이 항상 충족
- 예시
- 상품 재고가 음수로 설정되면 안 되는 경우, 트랜잭션 실행 후에도 재고 값이 항상 0 이상이어야 함
(3) Isolation (고립성)
- 트랜잭션 간 간섭 없이 독립적으로 실행
- 병렬 처리 시 데이터의 일관성을 유지
- 트랜잭션이 독립적으로 실행되어야 하며, 다른 트랜잭션의 중간 상태를 볼 수 없도록 보장
- 여러 트랜잭션이 동시에 실행될 때 충돌을 방지
- 예시
- 두 사용자가 동시에 은행 계좌를 수정하면, 격리 수준에 따라 데이터 충돌을 방지함
(4) Durability (지속성)
- 트랜잭션 완료 후 변경 사항은 시스템 장애에도 영구적으로 유지
- 시스템 장애나 전원 끊김에도 데이터를 안전하게 보존
- 데이터를 디스크에 기록하거나 로그를 남겨 시스템 복구 시 데이터 보존 가능
- 예시
- 트랜잭션 완료 후 데이터가 디스크에 저장되어 시스템 장애 발생 시에도 복구 가능
➕ SQL 문법
SQL은 목적에 따라 4가지로 분류된다.
① DDL
데이터베이스의 구조를 정의하거나 수정할 때 사용
명령어 설명 CREATE 데이터베이스, 테이블, 뷰 생성 ALTER 기존 테이블 컬럼 수정 DROP 테이블, 데이터베이스, 뷰 삭제 TRUNCATE 테이블의 모든 데이터를 초기화 -- 테이블 생성 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ); -- 테이블 수정 (컬럼 추가) ALTER TABLE users ADD age INT; -- 테이블 삭제 DROP TABLE users;
② DML
테이블에 저장된 데이터를 조작할 때 사용
명령어 설명 INSERT 테이블에 데이터 삽입 UPDATE 테이블의 데이터를 수정 DELETE 테이블에서 데이터를 삭제 -- 데이터 삽입 INSERT INTO users (id, name, email, age) VALUES (1, 'HyunJi Cheon', 'hyunji1109@google.com', 26); -- 데이터 수정 UPDATE users SET age = 27 WHERE id = 1; -- 데이터 삭제 DELETE FROM users WHERE id = 1;
③ DQL
테이블의 데이터를 조회할 때 사용
명령어 설명 SELECT 테이블에서 데이터를 조회 -- 전체 데이터 조회 SELECT * FROM users; -- 특정 컬럼 조회 SELECT name, email FROM users; -- 조건부 조회 SELECT * FROM users WHERE age > 27; -- 정렬된 조회 SELECT * FROM users ORDER BY age DESC; -- 집계 함수 사용 SELECT AVG(age) AS average_age FROM users;
④ DCL
데이터베이스의 권한을 관리할 때 사용
명령어 설명 GRANT 사용자에게 권한 부여 REVOKE 사용자 권한 제거 -- 권한 부여 GRANT SELECT, INSERT ON users TO 'user1'; -- 권한 제거 REVOKE INSERT ON users FROM 'user1';
'CS > SQL' 카테고리의 다른 글
[SQLD] 관계(Relationship) (0) 2025.02.10 [SQLD] 속성(Attribute) (0) 2025.02.08 [SQLD] 엔티티(Entity) (0) 2025.02.07 [SQLD] 데이터 모델의 이해 (0) 2025.02.05 SQL JOIN (0) 2025.01.25 댓글