1. SQL?
- [설명]
- RDBMS에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있습니다
- 테이블에 레코드로 저장되는데, 각 테이블마다 명확하게 정의된 구조로 되어있습니다
- 필드의 이름과 데이터 유형으로 정의 됩니다
- [특징]
- 데이터는 정해진 데이터 스키마에 따라 테이블에 저장됩니다
- 데이터는 관계를 통해 여러 테이블에 분산됩니다
- 스키마를 수정하지 않는 이상은 정해진 구조에 맞는 레코드만 추가가 가능한 것을 관계형 데이터 베이스라고 합니다
- 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없습니다
- [장점]
- 하나의 테이블에서 중복 없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다는 것 입니다
- 데이터의 중복을 피하기 위해 ‘관계’를 이용하기도 합니다
- 명확하게 정의된 스키마와 데이터 무결성을 보장합니다
- [단점]
- 덜 유연하며, 데이터 스키마를 사전에 계획하고 알려야 합니다(나중에 수정하기 힘들기 때문입니다)
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어 질 수 있습니다
- 대체로 수직적 확장만 가능합니다
- [SQL 사용이 좋을 때]
- 관계를 맺고 있는 데이터가 자주 변경이 되는 애플리케이션일 경우 입니다
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 입니다
2. NoSQL?
- [설명]
- 관계형의 반대의 DB라고 생각하시면 됩니다
- 스키마도 없고, 관계도 없습니다
- 레코드를 문서(documents)라고 불립니다
- 다른 구조의 데이터를 같은 컬렉션에 추가가 가능합니다
- [특징]
- 문서는 Json과 비슷한 형태로 가지고 있습니다
- 관계형 DB처럼 여러 테이블에 나눠 담지 않고, 관련 데이터를 동일한 ‘컬렉션’에 넣습니다
- 여러 테이블에 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성한다고 생각하시면 됩니다
- [장점]
- 스키마가 없어서 유연하며, 언제든지 저장된 데이터를 조정하고 새로운 필드 추가가 가능합니다
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장되며, 데이터 읽어오는 속도가 빠릅니다
- 수직 및 수평 확장이 가능해 애플리케이션이 발생시키는 모든 읽기/쓰기 요청처리가 가능합니다
- [단점]
- 유연선으로 인해 데이터 구조 결정을 미루게 될 수 도 있습니다
- 데이터 중복을 계속 업데이트 해줘야 합니다
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 합니다(SQL에서는 중복 데이터가 없으므로 한 번만 수행이 가능합니다)
- [NoSQL사용이 좋을 때]
- 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있을 경우입니다
- 읽기를 자주하지만, 데이터 변경은 자주 일어나지 않을 경우입니다
- 데이터베이스를 수평으로 확장해야 하는 경우입니다(막대한 양의 데이터를 다뤄야 하는 경우를 말합니다)
3. 확장개념[SQL, NoSQL]?
- [설명]
- Scaling 개념을 지닙니다
- 서버의 확장성은 ‘수직적’확장과 ‘수평적’ 확장으로 나뉩니다
- 수직적
- 단순히 데이터베이스 서버의 성능을 향상시키는 것을 말합니다(CPU 업그레이드)
- 수평적
- 더 많은 서버가 추가되고 데이터 베이스가 전체적으로 분산됨을 의미합니다(하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동합니다)
- 수직적 확장은 SQL 데이터베이스에서 데이터 저장방식을 추구합니다
- 수평적 확장은 NoSQL 데이터베이스에서 데이터 저장방식을 추구합니다