1. SQL(관계형 데이터베이스)
- SQL(Structured Query Language)
- 테이블 기반 데이터베이스의 데이터를 업데이트, 검색, 계산하도록 설계된 언어
- 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 미리 정의한다.(스키마)
- 테이블의 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
- 테이블의 구조와 테이블간의 관계에 맞춰 데이터를 요청해야 한다.
→ 따라서 SQL과 같이 구조화된 쿼리 언어를 사용하여 요청한다.
1. 장점
- 스키마가 명확히 정의되어 있다.
- 데이터 무결성 보장
- 무결성 : 데이터가 항상 정확한 값을 유지하는 성질
- 각 데이터를 중복 없이 한 번만 저장
2. 단점
- 스키마를 사전에 계획해야 한다.(유연성이 떨어짐)
- 관계를 맺고 있어서 JOIN문이 많은 복잡한 쿼리가 생성될 수 있다.
2. NoSQL(비관계형 데이터베이스)
- 관계형 데이터베이스 이외의 형식으로 데이터를 저장하는 데이터베이스
- 테이블 형식이 아니다.
- key-value, document, wide-column, graph 등의 방식으로 데이터를 저장한다.
- 관계형 데이터베이스에 비해 유연하게 스키마의 형태를 관리할 수 있다.
1. 장점
- 스키마가 없기 때문에 유연하고, 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터는 애플리케이션이 필요로 하는 형식으로 저장되기 때문에, 데이터를 읽어오는 속도가 빠르다.
2. 단점
- 데이터 중복을 계속 업데이트해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에, 수정이 필요한 경우 모든 컬렉션에서 수행해야 한다.
3. 예시
- book 데이터베이스 - 스키마 구축 예시
SQL
Books 테이블의 컬럼
Column isbn book_title edition_number Authors 테이블의 컬럼
Column author_id author_name Authors-ISBN 테이블의 컬럼
Column author_id isbn
NoSQL
보통 JSON 문서로 저장된다.
{ "id" = 1 "isbn" = "111-1111111111" "book_title" = "title" "edition_number" = 1 "author_name" = "author" "author_id" = "123" }
4. 확장성
SQL의 경우 시스템이 커져가면서 Scale-Up(수직적) 형태로 DB를 증설한다.
→ 기존 사용하던 DB 시스템보다 고성능의 DB 시스템이 필요할 수 있고, 관리가 어려워질 수 있다.
NoSQL의 경우 Scale-Out(수평적) 형태로 DB를 증설한다.
→ 고성능의 DB를 갖추는 게 아니라 여러 DB 시스템을 추가할 수 있다.
5. 면접 예상 질문
- SQL과 NoSQL을 비교해서 설명해주세요.
- SQL과 NoSQL을 예시를 들어 설명해주세요.
참고 URL
https://developer.mozilla.org/en-US/docs/Glossary/SQL
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/
https://aws.amazon.com/nosql/?nc1=h_ls
https://brunch.co.kr/@kooslab/181
https://www.whatap.io/ko/blog/173/