프로젝트로 웹,앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다.
지금 진행중인 프로젝트도 NoSQL인 MongoDB를 사용할 것인지 SQL인 MySQL을 사용할 것인지 팀원들과 한참을 고민했었던 것 같다....
하지만 그냥 단순히 프레임워크에 따라 결정하는 것이 아니다. 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 택해야 한다. SQL과 NoSQL의차이점을 알아보자
✏️ SQL
📝 SQL이란?
Structured Query Language의 줄임말로 구조적 질의 언어이다.
📝 SQL특징?
- 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
- 데이터는 관계를 통해 여러 테이블에 분산된다.
- 각 테이블마다 명확하게 정의된 구조가 있다. 해당 구조는 필드의 이름과 데이터 유형으로 정의된다.
따라서 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없다!!
즉, 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것이 관계형 데이터베이스의 특징 중 하나다.
- 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없어지는 장점이 있다.
- SQL은 기본적으로 대소문자를 구분하지 않지만, 서버 환경이나 DBMS 종류에 따라 데이터베이스 또는 필드명에 대해 대소문자를 구분되기도 한다.
SQL 장점
- 명확하게 정의된 스키마, 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한번만 저장
SQL 단점
- 덜 유연함. 데이터 스키마를 사전에 계획하고 알려야 한다. 이는 나중에 수정하기 힘들다.
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
- 대체로 수직적 확장만 가능함
✏️ NoSQL
📝 NoSQL이란?
단어에 나와있는대로 not only SQL이라불리며 비관계형 데이터베이스 유형을 가리킨다. 데이터베이스는 관계형 테이블과는 다른 형식으로 데이터를 저장합니다.
NoSQL 데이터베이스는 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의가 가능하다.
📝 NoSQL특징?
- NoSQL에서는 레코드를 문서(documents)라고 부른다.
- SQL과 달리 스키마도 관계도 없기 때문에 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다.
- 문서(documents)는 Json과 비슷한 형태로 가지고 있다. 관계형 데이터베이스처럼 여러 테이블에 나누어담지 않고, 관련 데이터를 동일한 '컬렉션'에 넣는다.
따라서 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성하는 것이 NoSQL이다. NoSQL에는 조인이라는 개념이 존재하지 않는다는 것!!
NoSQL 장점
- 스키마가 없어서 유연하다. 따라서, 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능하다
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다. 그러므로 데이터 읽어오는 속도 빨라진다.
- 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능하다
NoSQL 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트 해야한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.
✏️ 데이터베이스 서버의 확장성
📝 수직 스케일링업
수직 스케일링업은 쉽게말해 데이터 베이스의 서버 성능을 업그레이드하는 것이다.
장점
- 공간, 전력등 비용 감소
- 가성비 좋은 소프트웨어로 관리자가 쉽게 관리,유지가 가능하다.
단점
- 고급 서버로인해 하드웨어 비용이 많이든다.
- 업그레이드 할 수 있는 양에 제한이 있다.
📝 수평적 확장
수평적 확장은 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미한다.
장점
- 업그레이드가 쉽다
- 구현이 간단하고 비용이 적게든다.
- 수평으로 확장되 데이터 베이스틑 쉽게 업그레이드 가능하다.
단점
- 필요한 공간,냉각 및 전력 증가로 인해 데이터 센터 비용이 증가한다.
- 라이센스 부여된 노드의 수가 늘어나므로 라이센스 비용이 증가한다.
- 코드의 모든 버그는 디버그하고 이해하기 어려워진다.
출처