[WEB] SQL vs NoSQL
in WEB on Web
SQL (관계형 DB)
- SQL은 구조화 된 쿼리 원어(Structured Query Language) 의 약자.
- DB 자체를 나타내는 것이 아닌, 특정 유형의 DB와 상호 작용하는데 사용하는 쿼리 언어를 의미
- RDB의 데이터를 관리하기 위해 설계된 프로그래밍 언어
- MySQL, PostgreSQL
- 데이터는 엄격한 데이터 스키마에 따라 DB 테이블에 저장된다.
- 스키마를 준수하지 않은 레코드는 추가할 수 없다.
- 데이터는 관계를 통해서 연결된 여러개의 테이블에 분산된다.
- User, Product, Order 테이블을 별도로 만들고, 각각은 중복된 데이터가 없다.
- 장점 : 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에, 다른 테이블에 부정확한 데이터를 다룰 위험이 없다.
- DB 확장 방식 : 수직적 확장
- 단순한 DB 서버의 성능 향상 (CPU 업그레이드)
NoSQL (비관계형 DB)
- Not Only Structured Query Language
- mongoDB, redis
- 스키마 없음
- 관계 없음
- SQL 에서는 정해진 스키마를 따르지 않은 데이터를 추가할 수 없지만, NoSQL 은 다른 구조의 데이터를 같은 컬렉션 (SQL에서의 테이블)에 추가 가능
- SQL 의 테이블 === 컬렉션 (collection)
- SQL 의 레코드 === 문서 (document)
- User, Product, Order 에 관한 내용이 동일한 컬렉션에 저장됨 > 조인의 개념이 사라짐
- DB 확장 방식 : 수평적 확장
- 더 많은 서버가 추가되고, DB가 전체적으로 분산됨.
어떨 때 무엇을 선택해야 할까.
SQL 의 장점
- 명확하게 정의된 스키마 > 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한번만 저장
NoSQL 의 장점
- 스카마가 없음 > 유연함 > 언제든지 저장된 데이터를 조정하고, 새로운 필드 추가 가능
- 데이터는 JSON 과 비슷한 형태로 저장(key-value) > 데이터 읽어오는 속도 빨라짐 (hash)
- 수평 확장 가능
SQL 의 단점
- 상대적으로 덜 유연. 데이터 스키마는 사전에 계획되고 알려져야 함.
- 관계가 많아지면, 매우 복잡한 JOIN문 발생
- 수평적 확장 어려움 > 어떤 시점에는 성장 한계에 직면
NoSQL 의 단점
- 유연하니까. 데이터 구조 결정을 못하고 미룰 수 있음.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정해야 하는 경우 모든 컬렉션에서 수행해야 함.
언제 SQL을?
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션일 경우
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
언제 NoSQL을?
- 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
- 읽기 처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (한번의 변경으로 수십 개의 문서를 업데이트 할 필요가 없는 경우)
- DB를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)