SQL
SQL(Structured Query Language)은 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 관리하기 위해 사용하는 표준 프로그래밍 언어
SQL을 사용하여 데이터베이스에 데이터를 추가, 수정, 삭제하거나 데이터를 검색하는 등의 작업을 수행할 수 있다.
SQL은 대부분의 관계형 데이터베이스 시스템에서 사용되며, 그 표준은 ANSI/ISO에 의해 정의되어 있다. 그러나 많은 RDBMS들은 자체적인 SQL 변형을 포함하고 있고, 많은 개발자들이 사용하는 Microsoft의 SQL Server, Oracle, MySQL, PostgreSQL 등은 모두 SQL을 기반과 더불어, 각각의 시스템별로 고유의 함수나 문법이 존재한다.
SQL을 통해 데이터를 안전하게 저장하고, 검색, 수정 및 관리할 수 있으므로, 많은 기업 및 애플리케이션에서 데이터 관리의 핵심 요소로 사용되고 있다.
특징
- DDL (Data Definition Language)
CREATE
: 테이블, 뷰, 인덱스 등의 데이터베이스 객체를 생성ALTER
: 기존의 데이터베이스 객체를 수정DROP
: 데이터베이스 객체를 삭제
- DML (Data Manipulation Language)
SELECT
: 데이터를 조회INSERT
: 데이터를 삽입UPDATE
: 데이터를 수정DELETE
: 데이터를 삭제
- DCL (Data Control Language)
GRANT
: 사용자에게 특정 작업 권한을 부여REVOKE
: 사용자의 작업 권한을 취소
- TCL (Transaction Control Language)
COMMIT
: 데이터베이스 트랜잭션을 확정ROLLBACK
: 마지막 COMMIT 이후의 모든 트랜잭션을 취소SAVEPOINT
: 트랜잭션 내에서 특정 지점을 설정
NoSQL
NoSQL은 "Not Only SQL"의 약자로, 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 방식을 의미한다. NoSQL 데이터베이스는 대량의 구조화되지 않은 또는 반구조화된 데이터를 저장하고 검색하기 위해 설겨되었다. 이러한 데이터베이스는 웹, 모바일, IoT와 같은 큰 규모 및 고성능의 애플리케이션에 적합하다.
NoSQL 데이터베이스는 규모 확장성, 유연성, 높은 성능과 같은 특징 덕분에 큰 규모의 데이터와 복잡한 데이터 관계를 처리하는 현대의 다양한 애플리케이션에 널리 사용되고 있다.
특징
- 스케일아웃 구조: 대부분의 NoSQL 데이터베이스는 수평적으로 확장 가능한 스케일아웃 구조를 지원하고, 이를 통해 데이터베이스 용량과 처리 능력을 쉽게 확장할 수 있다.
- 유연한 스키마: NoSQL 데이터베이스는 유연한 스키마를 허용하기 때문에 데이터 모델링이 더 간편해지며, 애플리케이션의 요구 사항이 변경되더라도 데이터베이스 구조를 쉽게 수정할 수 있다.
- 높은 성능: 대량의 데이터와 고성능의 요구 사항을 처리하기 위해 최적화되어 있다.
- 다양한 데이터 모델: NoSQL 데이터베이스는 다양한 데이터 모델을 지원하며, 사용 사례에 따라 적합한 모델을 선택할 수 있다.
주요 유형
- 문서 기반 (Document-oriented) 데이터베이스: 데이터를 JSON 또는 BSON과 같은 문서 형태로 저장
- 예: MongoDB
- 키-값 (Key-Value) 저장소: 각 항목이 키와 연결된 값으로 저장된다.
- 예: Redis.
- 컬럼 기반 (Column-oriented) 데이터베이스: 데이터를 컬럼에 따라 저장하여 컬럼 기반의 연산에 최적화 되어있다.
- 예: Cassandra, HBase.
- 그래프 (Graph) 데이터베이스: 그래프를 사용하여 데이터의 관계를 표현한다.
- 예: Neo4j, OrientDB.
SQL과 NoSQL의 차이점
- 데이터 모델
- SQL: 테이블 기반의 구조를 가지며, 각 테이블은 정해진 스키마에 따라 열과 데이터 타입을 갖는다.
- NoSQL: 문서 기반, 키-값 스토어, 컬럼 스토어, 그래프 기반 등 다양한 데이터 모델을 가질 수 있다.
- 스키마
- SQL: 고정된 스키마. 데이터는 테이블의 스키마에 따라 저장되어야 한다.
- NoSQL: 대부분 유연한 스키마를 가지며, 동일한 컬렉션 내의 문서는 서로 다른 필드와 구조를 가질 수 있다.
- 쿼리 언어
- SQL: 표준화된 쿼리 언어인 SQL(Structured Query Language)을 사용하여 데이터를 이용한다.
- NoSQL: 표준화된 쿼리 언어가 없으며, 각 데이터베이스가 고유의 방식으로 데이터를 이용한다.
- 트랜잭션
- SQL: ACID(원자성, 일관성, 격리성, 지속성) 속성을 강조한다.
- NoSQL: 일부 NoSQL 데이터베이스는 ACID를 제공하지만, 다른 일부는 확장성을 위해 일부 ACID 속성을 희생하기도 한다.
- 확장성
- SQL: 강력한 하드웨어를 추가 하는 등의 수직 확장 통해 확장한다.
- NoSQL: 여러 서버나 노드에 데이터를 분산 등의 수평 확장을 통해 확장되는 경향이 있다.
- 용도
- SQL: 복잡한 쿼리와 트랜잭션 처리가 필요한 시스템에 적합하다.
- NoSQL: 빅 데이터와 실시간 응용 프로그램과 같이 대량의 데이터나 유동적인 데이터 구조를 처리해야 하는 경우에 적합하다.
- 예시
- SQL: MySQL, PostgreSQL, Oracle, Microsoft SQL Server 등
- NoSQL: MongoDB (문서 기반), Redis (키-값 스토어), Cassandra (컬럼 스토어), Neo4j (그래프 기반) 등
효율성
SQL
SQL(관계형 데이터베이스 시스템, RDBMS)는 데이터를 테이블 형태로 저장하고, 이러한 테이블들은 서로 관계를 맺고 있다.
각 테이블은 명확하게 정의된 스키마를 가지며, 스키마는 데이터의 형식과 해당 테이블의 열에 어떤 데이터 타입이 올 수 있는지를 결정한다.
- 정규화된 데이터 구조
- 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위해 설계된 정규화된 데이터 구조가 필요한 경우 RDBMS가 적합
- 데이터 무결성
- 데이터의 정확성, 일관성, 신뢰성이 중요한 업무에서는 RDBMS의 강력한 데이터 무결성 기능이 유용하다.
- 복잡한 쿼리
- 조인, 서브쿼리, 집계 함수 등 복잡한 쿼리와 트랜잭션이 필요한 경우, SQL 데이터베이스는 이러한 요구 사항을 잘 처리할 수 있다.
- ACID 트랜잭션
- 금융, 은행, 예약 시스템 등과 같이 데이터의 원자성(Atomicity), 일관성(Consistency), 격리(Isolation), 지속성(Durability)이 필요한 경우에 RDBMS가 적합하다.
- 정의된 스키마
- 데이터의 구조가 미리 정의되어 있고, 변경이 잦지 않은 경우에 관계형 데이터베이스를 사용하는것이 좋다.
- 관계형 데이터
- 여러 테이블 간의 관계가 중요한 경우(예: 외래 키 제약 조건) RDBMS를 사용하면 이러한 관계를 쉽게 정의하고 유지할 수 있다.
NoSQL
- 문서 기반 (Document-oriented) 데이터베이스
- 사용 사례: 콘텐츠 관리 시스템, 카탈로그, 사용자 프로필과 같은 정보를 저장할 때.
- 효율성: 데이터를 문서 형태로 저장하는 경우, 스키마가 유연하기 때문에 다양한 속성과 구조의 데이터를 쉽게 저장하고 검색할 수 있으며, 그 예로 MongoDB에서는 JSON 형식의 문서로 데이터를 하고, 동적 스키마를 지원한다.
- 키-값 (Key-Value) 저장소
- 사용 사례: 캐싱, 세션 관리, 실시간 데이터 분석.
- 효율성: 빠른 읽기/쓰기 성능이 필요한 경우나 데이터의 스키마가 없거나 간단한 경우에 주로 사용된다. Redis는 메모리 내 저장소로서 빠른 응답 시간을 제공한다.
- 컬럼 기반 (Column-oriented) 데이터베이스
- 사용 사례: 빅 데이터 분석, 이벤트 로깅, 시계열 데이터.
- 효율성: 대량의 데이터를 수직적으로 확장하고, 특정 컬럼에 대한 조회가 많은 경우에 최적화되어 있으며, 예시로, Cassandra는 분산 환경에서 확장성과 고가용성을 제공한다.
- 그래프 (Graph) 데이터베이스
- 사용 사례: 소셜 네트워킹, 추천 시스템, 네트워크 토폴로지.
- 효율성: 복잡한 관계와 연결성을 탐색하거나 분석할 때 유용하다. Neo4j는 그래프 데이터베이스로서 관계를 중심으로 데이터를 이용한다.
'Develop Log > 개발 관련 잡학다식' 카테고리의 다른 글
이미지를 더 가볍게 더 깔끔하게! webp!! (0) | 2023.09.20 |
---|---|
yarn의 두번째 버전 Yarn Berry (0) | 2023.09.04 |
CORS 파헤치기 (0) | 2023.08.28 |
REST에 대해 알아보기 (0) | 2023.08.24 |
소프트웨어란? (0) | 2023.08.22 |