SQL
SQL은 관계형 데이터베이스(RDBMS)의 데이터를 저장, 검색 및 조작하는 하기 위해 설계된 프로그래밍 언어 입니다.
관계형 데이터베이스는 대부분 SQL 언어를 사용하기 때문에 데이터베이스를 SQL이라고 부르게 되었습니다.
특징
- 고정된 행과 열로 구성된 테이블에 데이터를 저장
- 각 열은 하나의 속성에 대한 정보를, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장됨
- 테이블의 구조와 데이터 타입등을 사전에 정의하여 사용하며, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입 가능
- 데이터의 중복을 피하기 위해 '관계'를 사용
장점
- 명확하게 정의된 스키마, 데이터 무결성 보장
- 관계는 각 데이터를 중복없도록 만들어줌
단점
- 데이터 스키마를 사전에 계획하고 사용
- 관계가 존재하기 때문에 조인문이 많은 복잡한 쿼리가 만들어짐
- 대체로 수직적 확장만 가능
NoSQL
NoSQL은 "Not only SQL"로 SQL만을 사용하지 않는 데이터 베이스 관리 시스템(DBMS)을 지칭하는 단어입니다.
관계형 데이터베이스를 사용하지 않는다는 의미가 아니라, 여러 유형의 데이터베이스를 사용합니다.
SQL과 달리 스키마가 없이 동작하며, 구조에 대한 정의를 변경할 필요 없이 데이터베이스 레코드에 자유롭게 필드를 추가할 수 있습니다.
장점
- 스키마가 없이 동작하기 때문에 자유롭게 필드 추가가 가능하며 유연함
- 데이터는 애플리케이션이 필요로하는 형식으로 저장되어 데이터를 읽어오는 속도가 빠름
- 수직 및 수평 확장이 가능해 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가능
단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있음
- 데이터 중복을 계속 업데이트 해야 함
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야함
SQL과 NoSQL 비교
데이터 저장 (Storage)
- SQL
- 데이터를 테이블에 저장하며, 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장
- NoSQL
- key-value, document, wide-column, graph 등의 방식으로 데이터를 저장
스키마 (Schema)
- SQL
- 고정된 형식의 스키마가 필요
- 스키마는 나중에 변경할 수 있지만, 이 경우 데이터베이스 전체를 수정하거나 오프라인(down-time)으로 전환할 필요가 있어 수정이 힘듬
- NoSQL
- 관계형 데이터베이스보다 동적으로 스키마의 형태를 관리할 수 있음
- 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 됨
쿼리 (Query)
- SQL
- 관계형 데이터베이스는 테이블의 형식과 테이블간의 관계에 맞춰 데이터를 요청해야 함. 때문에 정보를 요청할 때, SQL과 같이 구조화된 쿼리 언어를 사용
- NoSQL
- 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있음. 때문에 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능
확장성 (Scalability) : 데이터베이스 서버의 확장성은 '수직적' 확장과 '수평적' 확장으로 나누어집니다.
수직적 확장 : 단순히 데이터베이스 서버의 성능을 향상시키는 것 (ex. CPU 업그레이드)
수평적 확장 : 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미 (하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동)
- SQL
- 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 비용이 많이 듬
- 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만, 매우 복잡하고 시간이 많이 소모\
- 대체로 수직적으로 확장만 가능
- NoSQL
- NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하면, 많은 트래픽을 보다 편리하게 처리할 수 있음
- 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서, 수직적 확장보다 상대적으로 비용이 저렴
- 수직 및 수평 확장이 가능해 애플리케이션이 발생시키는 모든 읽기/쓰기 가능
정리
둘 중 무엇이 더 좋다고 단정 지을 수 없습니다. 둘 모두 훌량한 솔루션이고 저마다의 장점과 단점을 갖고 있기 때문에 어떠한 데이터를 다루고 무엇을 목적으로 하는지에 대해 잘 고민 후 데이터베이스를 선정하면 되겠습니다.
SQL 데이터베이스 사용이 좋은 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에 중요한 경우
NoSQL 데이터베이스 사용이 좋은 경우
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우
- 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야하는 경우)
Reference
'Computer Science > Database' 카테고리의 다른 글
SQL Injection (1) | 2023.09.18 |
---|---|
Redis (0) | 2023.09.17 |